[Xfce4-commits] r26463 - xfwm4/trunk/src

Olivier Fourdan olivier at xfce.org
Wed Dec 12 23:33:56 CET 2007


Author: olivier
Date: 2007-12-12 22:33:56 +0000 (Wed, 12 Dec 2007)
New Revision: 26463

Modified:
   xfwm4/trunk/src/compositor.c
   xfwm4/trunk/src/screen.h
Log:
Rework the windows unredirection to take advantage of the new overlay support

Modified: xfwm4/trunk/src/compositor.c
===================================================================
--- xfwm4/trunk/src/compositor.c	2007-12-12 12:00:59 UTC (rev 26462)
+++ xfwm4/trunk/src/compositor.c	2007-12-12 22:33:56 UTC (rev 26463)
@@ -1089,7 +1089,7 @@
         XCompositeUnredirectWindow (display_info->dpy, cw->id, display_info->composite_mode);
         XSync (display_info->dpy, FALSE);
 
-        TRACE ("Window 0x%lx unredirected, overlays is %i", cw->id, screen_info->overlays);
+        TRACE ("Window 0x%lx unredirected, wins_unredirected is %i", cw->id, screen_info->wins_unredirected);
     }
 }
 
@@ -1772,24 +1772,28 @@
 
     if (!WIN_IS_REDIRECTED(cw))
     {
-        screen_info->overlays++;
+        /* To be safe, we count only the fullscreen overlays */
+        if (WIN_IS_FULLSCREEN(cw))
+        {
+            screen_info->wins_unredirected++;
+        }
 #if HAVE_OVERLAYS
-        if ((screen_info->overlays == 1) && (display_info->have_overlays))
+        if ((screen_info->wins_unredirected == 1) && (display_info->have_overlays))
         {
             XUnmapWindow (myScreenGetXDisplay (screen_info), screen_info->overlay);
         }
 #endif /* HAVE_OVERLAYS */
-        TRACE ("Mapping unredirected window 0x%lx, overlays increased to %i", cw->id, screen_info->overlays);
+        TRACE ("Mapping unredirected window 0x%lx, wins_unredirected increased to %i", cw->id, screen_info->wins_unredirected);
         return;
     }
     if (!screen_info->params->unredirect_overlays)
     {
-        TRACE ("Not unredirecting overlays");
+        TRACE ("Not unredirecting wins_unredirected");
         return;
     }
 
     /* Check for new windows to un-redirect. */
-    if (WIN_IS_FULLSCREEN(cw) && WIN_HAS_DAMAGE(cw) && WIN_IS_OVERRIDE(cw) &&
+    if ((WIN_IS_FULLSCREEN(cw) || (screen_info->wins_unredirected > 0)) && WIN_HAS_DAMAGE(cw) && WIN_IS_OVERRIDE(cw) &&
         WIN_IS_NATIVE_OPAQUE(cw) && WIN_IS_REDIRECTED(cw) && !WIN_IS_SHAPED(cw))
     {
         CWindow *top;
@@ -1818,32 +1822,28 @@
     screen_info = cw->screen_info;
     display_info = screen_info->display_info;
 
-    if (!WIN_IS_REDIRECTED(cw) && (screen_info->overlays > 0))
+    if (!WIN_IS_REDIRECTED(cw) && WIN_IS_FULLSCREEN(cw) && (screen_info->wins_unredirected > 0))
     {
-        screen_info->overlays--;
-        TRACE ("Unmapped window 0x%lx, overlays decreased to %i", cw->id, screen_info->overlays);
+        screen_info->wins_unredirected--;
+        TRACE ("Unmapped window 0x%lx, wins_unredirected decreased to %i", cw->id, screen_info->wins_unredirected);
+        if (!screen_info->wins_unredirected)
+        {
+            /* Restore the overlay if that was the last unredirected window */
 #if HAVE_OVERLAYS
-        if ((screen_info->overlays == 0) && (display_info->have_overlays))
-        {
-            XMapWindow (myScreenGetXDisplay (screen_info), screen_info->overlay);
-        }
+            if (display_info->have_overlays)
+            {
+                XMapWindow (myScreenGetXDisplay (screen_info), screen_info->overlay);
+            }
 #endif /* HAVE_OVERLAYS */
+            damage_screen (screen_info);
+            repair_screen (screen_info);
+       }
     }
-
-    if (!screen_info->overlays)
+    else if (WIN_IS_VISIBLE(cw))
     {
-        /* Repaint immediately if that was the last unredirected window */
+        damage_win (cw);
+    }
 
-        if (!WIN_IS_REDIRECTED(cw))
-        {
-            damage_screen (screen_info);
-            repair_screen (screen_info);
-        }
-        else if (WIN_IS_VISIBLE(cw))
-        {
-            damage_win (cw);
-        }
-    }
     cw->viewable = FALSE;
     cw->damaged = FALSE;
     free_win_data (cw, FALSE);
@@ -2879,7 +2879,7 @@
     screen_info->allDamage = None;
     screen_info->cwindows = NULL;
     screen_info->compositor_active = TRUE;
-    screen_info->overlays = 0;
+    screen_info->wins_unredirected = 0;
 
     XClearArea (display_info->dpy, screen_info->output, 0, 0, 0, 0, TRUE);
     compositorSetCMSelection (screen_info, screen_info->xfwm4_win);
@@ -2967,7 +2967,7 @@
     }
 
     screen_info->gaussianSize = -1;
-    screen_info->overlays = 0;
+    screen_info->wins_unredirected = 0;
 
     XCompositeUnredirectSubwindows (display_info->dpy, screen_info->xroot,
                                     display_info->composite_mode);

Modified: xfwm4/trunk/src/screen.h
===================================================================
--- xfwm4/trunk/src/screen.h	2007-12-12 12:00:59 UTC (rev 26462)
+++ xfwm4/trunk/src/screen.h	2007-12-12 22:33:56 UTC (rev 26463)
@@ -152,7 +152,7 @@
     Picture rootTile;
     XserverRegion allDamage;
 
-    guint overlays;
+    guint wins_unredirected;
     gboolean compositor_active;
     gboolean clipChanged;
 #endif /* HAVE_COMPOSITOR */



More information about the Xfce4-commits mailing list