window-wayland: Only fizzle out configures when we do pending moves
This is a terrible hack. We need to figure out a better way to do interactive resizes. This fixes weird resizing from the left bugs when using GTK+, which is really slow at acking configures.
This commit is contained in:
parent
6954d23444
commit
65a8f9100c
@ -348,6 +348,29 @@ meta_window_wayland_new (MetaDisplay *display,
|
|||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
should_do_pending_move (MetaWindowWayland *wl_window,
|
||||||
|
MetaWaylandSerial *acked_configure_serial)
|
||||||
|
{
|
||||||
|
if (!wl_window->has_pending_move)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (wl_window->pending_configure_serial.set)
|
||||||
|
{
|
||||||
|
/* If we're waiting for a configure and this isn't an ACK for
|
||||||
|
* any configure, then fizzle it out. */
|
||||||
|
if (!acked_configure_serial->set)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* If we're waiting for a configure and this isn't an ACK for
|
||||||
|
* the configure we're waiting for, then fizzle it out. */
|
||||||
|
if (acked_configure_serial->value != wl_window->pending_configure_serial.value)
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* meta_window_move_resize_wayland:
|
* meta_window_move_resize_wayland:
|
||||||
*
|
*
|
||||||
@ -365,22 +388,6 @@ meta_window_wayland_move_resize (MetaWindow *window,
|
|||||||
MetaRectangle rect;
|
MetaRectangle rect;
|
||||||
MetaMoveResizeFlags flags;
|
MetaMoveResizeFlags flags;
|
||||||
|
|
||||||
if (wl_window->pending_configure_serial.set)
|
|
||||||
{
|
|
||||||
/* If we're waiting for a configure and this isn't an ACK for
|
|
||||||
* any configure, then fizzle it out. */
|
|
||||||
if (!acked_configure_serial->set)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* If we're waiting for a configure and this isn't an ACK for
|
|
||||||
* the configure we're waiting for, then fizzle it out. */
|
|
||||||
if (acked_configure_serial->value != wl_window->pending_configure_serial.value)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* OK, this request is going to ACK the pending configure. */
|
|
||||||
wl_window->pending_configure_serial.set = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* XXX: Find a better place to store the window geometry offsets. */
|
/* XXX: Find a better place to store the window geometry offsets. */
|
||||||
window->custom_frame_extents.left = new_geom.x;
|
window->custom_frame_extents.left = new_geom.x;
|
||||||
window->custom_frame_extents.top = new_geom.y;
|
window->custom_frame_extents.top = new_geom.y;
|
||||||
@ -390,7 +397,7 @@ meta_window_wayland_move_resize (MetaWindow *window,
|
|||||||
/* x/y are ignored when we're doing interactive resizing */
|
/* x/y are ignored when we're doing interactive resizing */
|
||||||
if (!meta_grab_op_is_resizing (window->display->grab_op))
|
if (!meta_grab_op_is_resizing (window->display->grab_op))
|
||||||
{
|
{
|
||||||
if (wl_window->has_pending_move)
|
if (wl_window->has_pending_move && should_do_pending_move (wl_window, acked_configure_serial))
|
||||||
{
|
{
|
||||||
rect.x = wl_window->pending_move_x;
|
rect.x = wl_window->pending_move_x;
|
||||||
rect.y = wl_window->pending_move_y;
|
rect.y = wl_window->pending_move_y;
|
||||||
@ -411,6 +418,8 @@ meta_window_wayland_move_resize (MetaWindow *window,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wl_window->pending_configure_serial.set = FALSE;
|
||||||
|
|
||||||
rect.width = new_geom.width;
|
rect.width = new_geom.width;
|
||||||
rect.height = new_geom.height;
|
rect.height = new_geom.height;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user