GdkSurface: prevent popups from appearing offscreen in edge cases

This commit adds a single additional condition to the maybe_flip_position
function in gdksurface.c. If a popup's unflipped position is below the
bounds of its containing area, the popup uses its flipped position
instead. This prevents tooltips from appearing below the bounds of the
screen when a small widget is positioned very close to the bottom edge of
the screen, such as in Budgie and XFCE panel applets.
This commit is contained in:
Campbell Jones 2022-12-10 18:39:13 -05:00
parent 7d34e7e0f7
commit 5c00dc7ef4
No known key found for this signature in database
GPG Key ID: 08AD7343E6BD4B56

View File

@ -256,7 +256,7 @@ maybe_flip_position (int bounds_pos,
*flipped = TRUE; *flipped = TRUE;
secondary = rect_pos + (1 - rect_sign) * rect_size / 2 - offset - (1 - surface_sign) * surface_size / 2; secondary = rect_pos + (1 - rect_sign) * rect_size / 2 - offset - (1 - surface_sign) * surface_size / 2;
if (secondary >= bounds_pos && secondary + surface_size <= bounds_pos + bounds_size) if ((secondary >= bounds_pos && secondary + surface_size <= bounds_pos + bounds_size) || primary > bounds_pos + bounds_size)
return secondary; return secondary;
*flipped = FALSE; *flipped = FALSE;