This is an automated email from the git hooks/post-receive script.

olivier pushed a commit to branch master
in repository xfce/xfwm4.

commit 1aca8bac5c92a0b5e5c7d7dee6a6bb0a83783dfa
Author: Olivier Fourdan <four...@xfce.org>
Date:   Tue Jan 20 21:25:29 2015 +0100

    Hide Xlib wireframe before resizing
    
    To avoid flickering of what's beneath the non-composited wireframe.
    
    Signed-off-by: Olivier Fourdan <four...@xfce.org>
---
 src/wireframe.c |   57 ++++++++++++++++++++++++++++++++++++-------------------
 src/wireframe.h |    3 +++
 2 files changed, 40 insertions(+), 20 deletions(-)

diff --git a/src/wireframe.c b/src/wireframe.c
index 0f103e6..a64ba5d 100644
--- a/src/wireframe.c
+++ b/src/wireframe.c
@@ -48,11 +48,23 @@
 #endif
 
 static void
-wireframeDrawXlib (WireFrame *wireframe)
+wireframeDrawXlib (WireFrame *wireframe, int width, int height)
 {
     ScreenInfo *screen_info = wireframe->screen_info;
 
+    wireframe->mapped = FALSE;
     XUnmapWindow (myScreenGetXDisplay (screen_info), wireframe->xwindow);
+    XMoveResizeWindow (myScreenGetXDisplay (screen_info), wireframe->xwindow,
+                       wireframe->x, wireframe->y, width, height);
+
+    if ((width == wireframe->width) && (height == wireframe->height))
+    {
+        /* Moving only */
+        return;
+    }
+    wireframe->width = width;
+    wireframe->height = height;
+
     if ((wireframe->width > OUTLINE_WIDTH * 2) && (wireframe->height > 
OUTLINE_WIDTH * 2))
     {
         XRectangle xrect;
@@ -83,6 +95,7 @@ wireframeDrawXlib (WireFrame *wireframe)
         XDestroyRegion (outer_xregion);
         XDestroyRegion (inner_xregion);
         XMapWindow (myScreenGetXDisplay (screen_info), wireframe->xwindow);
+        wireframe->mapped = TRUE;
 
         XDrawRectangle (myScreenGetXDisplay (screen_info), wireframe->xwindow,
                         gdk_x11_gc_get_xgc (screen_info->white_gc),
@@ -100,6 +113,7 @@ wireframeDrawXlib (WireFrame *wireframe)
         XShapeCombineMask (myScreenGetXDisplay (screen_info), 
wireframe->xwindow,
                            ShapeBounding, 0, 0, None, ShapeSet);
         XMapWindow (myScreenGetXDisplay (screen_info), wireframe->xwindow);
+        wireframe->mapped = TRUE;
 
         XDrawRectangle (myScreenGetXDisplay (screen_info), wireframe->xwindow,
                         gdk_x11_gc_get_xgc (screen_info->white_gc),
@@ -109,10 +123,25 @@ wireframeDrawXlib (WireFrame *wireframe)
 }
 
 static void
-wireframeDrawCairo (WireFrame *wireframe)
+wireframeDrawCairo (WireFrame *wireframe, int width, int height)
 {
     ScreenInfo *screen_info = wireframe->screen_info;
 
+    XMoveResizeWindow (myScreenGetXDisplay (screen_info), wireframe->xwindow,
+                       wireframe->x, wireframe->y, width, height);
+    if (!wireframe->mapped)
+    {
+        XMapWindow (myScreenGetXDisplay (screen_info), wireframe->xwindow);
+        wireframe->mapped = TRUE;
+    }
+    if ((width == wireframe->width) && (height == wireframe->height))
+    {
+        /* Moving only */
+        return;
+    }
+    wireframe->width = width;
+    wireframe->height = height;
+
     cairo_xlib_surface_set_size(wireframe->surface, wireframe->width, 
wireframe->height);
     XClearWindow (myScreenGetXDisplay (screen_info), wireframe->xwindow);
     cairo_set_source_rgba (wireframe->cr, wireframe->red, wireframe->green, 
wireframe->blue, wireframe->alpha);
@@ -130,34 +159,22 @@ void
 wireframeUpdate (Client *c, WireFrame *wireframe)
 {
     ScreenInfo *screen_info;
-    int width, height;
 
     g_return_if_fail (c != NULL);
     g_return_if_fail (wireframe != NULL);
     TRACE ("entering wireframeUpdate");
 
-    screen_info = wireframe->screen_info;
-    width = frameExtentWidth (c);
-    height = frameExtentHeight (c);
-
-    XMoveResizeWindow (myScreenGetXDisplay (screen_info), wireframe->xwindow,
-                       frameExtentX (c), frameExtentY (c), width, height);
-
-    if ((width == wireframe->width) && (height == wireframe->height))
-    {
-        /* Moving only */
-        return;
-    }
-    wireframe->width = width;
-    wireframe->height = height;
+    wireframe->x = frameExtentX (c);
+    wireframe->y = frameExtentY (c);
 
+    screen_info = wireframe->screen_info;
     if (screen_info->compositor_active)
     {
-         wireframeDrawCairo (wireframe);
+         wireframeDrawCairo (wireframe, frameExtentWidth (c), 
frameExtentHeight (c));
     }
     else
     {
-         wireframeDrawXlib (wireframe);
+         wireframeDrawXlib (wireframe, frameExtentWidth (c), frameExtentHeight 
(c));
     }
 }
 
@@ -203,6 +220,7 @@ wireframeCreate (Client *c)
     screen_info = c->screen_info;
     wireframe = g_new0 (WireFrame, 1);
     wireframe->screen_info = screen_info;
+    wireframe->mapped = FALSE;
     wireframe->width = 0;
     wireframe->height = 0;
     wireframe->cr = NULL;
@@ -250,7 +268,6 @@ wireframeCreate (Client *c)
         cairo_set_line_join (wireframe->cr, CAIRO_LINE_JOIN_MITER);
     }
 
-    XMapWindow (myScreenGetXDisplay (screen_info), wireframe->xwindow);
     wireframeUpdate (c, wireframe);
 
     return (wireframe);
diff --git a/src/wireframe.h b/src/wireframe.h
index ccc8e75..7d7684c 100644
--- a/src/wireframe.h
+++ b/src/wireframe.h
@@ -39,6 +39,9 @@ struct _WireFrame
 {
     ScreenInfo *screen_info;
     Window xwindow;
+    gboolean mapped;
+    int x;
+    int y;
     int width;
     int height;
     Colormap xcolormap;

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.
_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
https://mail.xfce.org/mailman/listinfo/xfce4-commits

Reply via email to