All pastes #674502 Raw Edit

Unbenannt

public text v1 · immutable
#674502 ·published 2007-08-29 09:35 UTC
rendered paste body
diff --git a/workarounds.c b/workarounds.c
index be4fd8e..90db209 100644
--- a/workarounds.c
+++ b/workarounds.c
@@ -137,6 +137,43 @@ workaroundsUpdateSticky (CompWindow *w)
 }
 
 static void
+workaroundsFixupFullscreen (CompWindow *w)
+{
+    Bool   isFullSize;
+    int    output;
+    BoxPtr box;
+
+    if (w->type & CompWindowTypeDesktopMask)
+	return;
+
+    /* get output region for window */
+    output = outputDeviceForWindow (w);
+    box = &w->screen->outputDev[output].region.extents;
+
+    /* does the size match the output rectangle? */
+    isFullSize = (w->serverX == box->x1) && (w->serverY == box->y1) &&
+	         (w->serverWidth == (box->x2 - box->x1)) &&
+		 (w->serverHeight == (box->y2 - box->y1));
+
+    if ((isFullSize && !(w->state & CompWindowStateFullscreenMask)) ||
+	(!isFullSize && (w->state & CompWindowStateFullscreenMask)))
+    {
+	unsigned int state = w->state & ~CompWindowStateFullscreenMask;
+
+	if (isFullSize)
+	    state |= CompWindowStateFullscreenMask;
+
+	if (state != w->state)
+	{
+	    changeWindowState (w, state);
+	    recalcWindowType (w);
+	    recalcWindowActions (w);
+	    updateWindowAttributes (w, CompStackingUpdateModeNormal);
+	}
+    }
+}
+
+static void
 workaroundsDoFixes (CompWindow *w)
 {
     Bool appliedFix = FALSE;
@@ -221,12 +258,7 @@ workaroundsDoFixes (CompWindow *w)
     recalcWindowType (w);
 
     if (workaroundsGetLegacyFullscreen (w->screen->display))
-    {
-        /* Some code to make Wine and legacy applications work. */
-        if (w->width == w->screen->width && w->height == w->screen->height &&
-            !(w->type & CompWindowTypeDesktopMask))
-                w->type = CompWindowTypeFullscreenMask;
-    }
+	workaroundsFixupFullscreen (w);
 }
 
 static void
@@ -273,9 +305,7 @@ workaroundsWindowResizeNotify (CompWindow *w, int dx, int dy,
     WORKAROUNDS_SCREEN (w->screen);
 
     if (workaroundsGetLegacyFullscreen (w->screen->display))
-    {
-        workaroundsDoFixes (w);
-    }
+	workaroundsFixupFullscreen (w);
 
     UNWRAP (ws, w->screen, windowResizeNotify);
     (*w->screen->windowResizeNotify) (w, dx, dy, dwidth, dheight);