mirror of
https://github.com/brl/mutter.git
synced 2025-04-09 19:59:38 +00:00
window-wayland: Fix resizing from the top/left once more
Restoring the position in our move_resize_internal implementation is too late. We need to do it at ack-time, before we hand off the new position to the constraints code.
This commit is contained in:
parent
8461b2c910
commit
b773898a60
@ -125,7 +125,6 @@ meta_window_wayland_move_resize_internal (MetaWindow *window,
|
|||||||
{
|
{
|
||||||
MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window);
|
MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window);
|
||||||
gboolean should_move = FALSE;
|
gboolean should_move = FALSE;
|
||||||
gboolean use_saved_pos = FALSE;
|
|
||||||
|
|
||||||
g_assert (window->frame == NULL);
|
g_assert (window->frame == NULL);
|
||||||
|
|
||||||
@ -152,7 +151,6 @@ meta_window_wayland_move_resize_internal (MetaWindow *window,
|
|||||||
/* This is a commit of an attach. We should move the window to match the
|
/* This is a commit of an attach. We should move the window to match the
|
||||||
* new position the client wants. */
|
* new position the client wants. */
|
||||||
should_move = TRUE;
|
should_move = TRUE;
|
||||||
use_saved_pos = TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (constrained_rect.width != window->rect.width ||
|
if (constrained_rect.width != window->rect.width ||
|
||||||
@ -175,26 +173,8 @@ meta_window_wayland_move_resize_internal (MetaWindow *window,
|
|||||||
|
|
||||||
if (should_move)
|
if (should_move)
|
||||||
{
|
{
|
||||||
int new_x, new_y;
|
int new_x = constrained_rect.x;
|
||||||
|
int new_y = constrained_rect.y;
|
||||||
if (use_saved_pos && wl_window->has_saved_pos)
|
|
||||||
{
|
|
||||||
int dx, dy;
|
|
||||||
|
|
||||||
/* The dx/dy that the client asked for. */
|
|
||||||
dx = requested_rect.x - window->rect.x;
|
|
||||||
dy = requested_rect.y - window->rect.y;
|
|
||||||
|
|
||||||
new_x = wl_window->saved_x + dx;
|
|
||||||
new_y = wl_window->saved_y + dy;
|
|
||||||
|
|
||||||
wl_window->has_saved_pos = FALSE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
new_x = constrained_rect.x;
|
|
||||||
new_y = constrained_rect.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (new_x != window->rect.x || new_y != window->rect.y)
|
if (new_x != window->rect.x || new_y != window->rect.y)
|
||||||
{
|
{
|
||||||
@ -236,12 +216,23 @@ meta_window_wayland_move_resize (MetaWindow *window,
|
|||||||
int dx,
|
int dx,
|
||||||
int dy)
|
int dy)
|
||||||
{
|
{
|
||||||
|
MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window);
|
||||||
int x, y;
|
int x, y;
|
||||||
MetaMoveResizeFlags flags;
|
MetaMoveResizeFlags flags;
|
||||||
|
|
||||||
flags = META_IS_WAYLAND_RESIZE;
|
flags = META_IS_WAYLAND_RESIZE;
|
||||||
|
|
||||||
meta_window_get_position (window, &x, &y);
|
if (wl_window->has_saved_pos)
|
||||||
|
{
|
||||||
|
x = wl_window->saved_x;
|
||||||
|
y = wl_window->saved_y;
|
||||||
|
wl_window->has_saved_pos = FALSE;
|
||||||
|
flags |= META_IS_MOVE_ACTION;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
meta_window_get_position (window, &x, &y);
|
||||||
|
}
|
||||||
|
|
||||||
/* dx/dy are ignored during resizing */
|
/* dx/dy are ignored during resizing */
|
||||||
if (!meta_grab_op_is_resizing (window->display->grab_op))
|
if (!meta_grab_op_is_resizing (window->display->grab_op))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user