[mutter] window: Make sure to update client_rect for OR windows too
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] window: Make sure to update client_rect for OR windows too
- Date: Tue, 3 Jun 2014 15:36:52 +0000 (UTC)
commit da311f266d61bd0222a78be8a0eadf6857623926
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Tue Jun 3 11:21:22 2014 -0400
window: Make sure to update client_rect for OR windows too
Before we unmanage, we send a ConfigureNotify to clients to let them
know if their frame is destroyed. We do this for OR windows too, even if
we really probably shouldn't.
This is based off of the client_rect. Since we listen to ConfigureNotify
on OR windows, we'll receive the event. If we don't ever update the
client_rect when moving or resizing OR windows, then we'll send
ourselves a ConfigureNotify for a 0x0 size and then think that the
client chose a new size for itself. Since our get_paint_volume is based
on that rectangle, but the TFP code inside Cogl uses XGetGeometry
itself, we get weird flickering artifacts.
src/x11/window-x11.c | 25 +++++++++++++++++++++----
1 files changed, 21 insertions(+), 4 deletions(-)
---
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
index 4bf2537..be57546 100644
--- a/src/x11/window-x11.c
+++ b/src/x11/window-x11.c
@@ -534,11 +534,22 @@ meta_window_x11_manage (MetaWindow *window)
}
}
- /* Put our state back where it should be,
- * passing TRUE for is_configure_request, ICCCM says
- * initial map is handled same as configure request
+ /* For override-redirect windows, save the client rect
+ * directly. window->rect was assigned from the XWindowAttributes
+ * in the main meta_window_shared_new.
+ *
+ * For normal windows, do a full ConfigureRequest based on the
+ * window hints, as that's what the ICCCM says to do.
*/
- if (!window->override_redirect)
+
+ if (window->override_redirect)
+ {
+ MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
+ MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11);
+
+ priv->client_rect = window->rect;
+ }
+ else
{
MetaRectangle rect;
MetaMoveResizeFlags flags;
@@ -3212,6 +3223,9 @@ void
meta_window_x11_configure_notify (MetaWindow *window,
XConfigureEvent *event)
{
+ MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
+ MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11);
+
g_assert (window->override_redirect);
g_assert (window->frame == NULL);
@@ -3219,6 +3233,9 @@ meta_window_x11_configure_notify (MetaWindow *window,
window->rect.y = event->y;
window->rect.width = event->width;
window->rect.height = event->height;
+
+ priv->client_rect = window->rect;
+
meta_window_update_monitor (window);
/* Whether an override-redirect window is considered fullscreen depends
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]