window/wayland: Calculate position also for acked fullscreen configs

An acked fullscreen window also need to have its position updated in
response to a configure ack, so that it's moved to the right position
(e.g. correct monitor).

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2338>
This commit is contained in:
Jonas Ådahl 2022-03-04 10:06:19 +01:00 committed by Marge Bot
parent 2a62e690a2
commit 47c8063b30
4 changed files with 16 additions and 8 deletions

View File

@ -370,9 +370,10 @@ setup_constraint_info (ConstraintInfo *info,
info->action_type = ACTION_RESIZE; info->action_type = ACTION_RESIZE;
else if (flags & META_MOVE_RESIZE_MOVE_ACTION) else if (flags & META_MOVE_RESIZE_MOVE_ACTION)
info->action_type = ACTION_MOVE; info->action_type = ACTION_MOVE;
else if (flags & META_MOVE_RESIZE_WAYLAND_FINISH_MOVE_RESIZE)
info->action_type = ACTION_MOVE;
else else
g_error ("BAD, BAD developer! No treat for you! (Fix your calls to " g_assert_not_reached ();
"meta_window_move_resize_internal()).");
info->is_user_action = (flags & META_MOVE_RESIZE_USER_ACTION); info->is_user_action = (flags & META_MOVE_RESIZE_USER_ACTION);

View File

@ -47,6 +47,8 @@ meta_wayland_window_configuration_new (MetaWindow *window,
.scale = scale, .scale = scale,
.gravity = gravity, .gravity = gravity,
.flags = flags, .flags = flags,
.is_fullscreen = meta_window_is_fullscreen (window),
}; };
if (flags & META_MOVE_RESIZE_MOVE_ACTION || if (flags & META_MOVE_RESIZE_MOVE_ACTION ||

View File

@ -50,6 +50,8 @@ struct _MetaWaylandWindowConfiguration
int bounds_width; int bounds_width;
int bounds_height; int bounds_height;
gboolean is_fullscreen;
}; };
MetaWaylandWindowConfiguration * meta_wayland_window_configuration_new (MetaWindow *window, MetaWaylandWindowConfiguration * meta_wayland_window_configuration_new (MetaWindow *window,

View File

@ -939,9 +939,9 @@ meta_window_wayland_get_geometry_scale (MetaWindow *window)
} }
static void static void
calculate_offset (MetaWaylandWindowConfiguration *configuration, calculate_position (MetaWaylandWindowConfiguration *configuration,
MetaRectangle *geometry, MetaRectangle *geometry,
MetaRectangle *rect) MetaRectangle *rect)
{ {
int offset_x; int offset_x;
int offset_y; int offset_y;
@ -1043,16 +1043,19 @@ meta_window_wayland_finish_move_resize (MetaWindow *window,
rect.x = parent->rect.x + acked_configuration->rel_x; rect.x = parent->rect.x + acked_configuration->rel_x;
rect.y = parent->rect.y + acked_configuration->rel_y; rect.y = parent->rect.y + acked_configuration->rel_y;
} }
else if (acked_configuration->has_position) else
{ {
calculate_offset (acked_configuration, &new_geom, &rect); if (acked_configuration->is_fullscreen)
flags |= META_MOVE_RESIZE_CONSTRAIN;
if (acked_configuration->has_position)
calculate_position (acked_configuration, &new_geom, &rect);
} }
} }
} }
else else
{ {
if (acked_configuration && acked_configuration->has_position) if (acked_configuration && acked_configuration->has_position)
calculate_offset (acked_configuration, &new_geom, &rect); calculate_position (acked_configuration, &new_geom, &rect);
} }
rect.x += dx; rect.x += dx;