diff --git a/src/core/constraints.c b/src/core/constraints.c index 562384069..1e4c341ee 100644 --- a/src/core/constraints.c +++ b/src/core/constraints.c @@ -1720,6 +1720,7 @@ constrain_titlebar_visible (MetaWindow *window, gboolean check_only) { gboolean unconstrained_user_action; + gboolean user_nonnorthern_resize; gboolean retval; int bottom_amount; int horiz_amount_offscreen, vert_amount_offscreen; @@ -1734,6 +1735,18 @@ constrain_titlebar_visible (MetaWindow *window, unconstrained_user_action = info->is_user_action && !window->display->grab_frame_action; + /* If the user is resizing anything other than the top, then don't check if + * the titlebar is beyond the top of the screen. This resize might be + * immediately following an unconstrained move or unconstrained resize that + * placed the titlebar above the top of the screen, in which case we don't + * want the titlebar immediately popping back below the screen or other + * glitching (https://gitlab.gnome.org/GNOME/mutter/-/issues/1206). + */ + user_nonnorthern_resize = + info->is_user_action && + meta_grab_op_is_resizing (window->display->grab_op) && + info->orig.y == info->current.y; + /* Exit early if we know the constraint won't apply--note that this constraint * is only meant for normal windows (e.g. we don't want docks to be shoved * "onscreen" by their own strut). @@ -1743,6 +1756,7 @@ constrain_titlebar_visible (MetaWindow *window, window->fullscreen || !window->require_titlebar_visible || unconstrained_user_action || + user_nonnorthern_resize || meta_window_get_placement_rule (window)) return TRUE;