Sophie

Sophie

distrib > Mandriva > 2009.0 > i586 > by-pkgid > d18d88a137ccea2f0522e89790d33970 > files > 15

compiz-0.7.8-2mdv2009.0.src.rpm

From 5e38c5a7b11752abd48da97c9761808c3831ff08 Mon Sep 17 00:00:00 2001
From: Danny Baumann <dannybaumann@web.de>
Date: Thu, 2 Oct 2008 15:34:45 +0200
Subject: [PATCH] Handle desktops a bit better.

---
 src/event.c  |   22 ++++++++++++----------
 src/screen.c |    3 +--
 src/window.c |    5 ++++-
 3 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/src/event.c b/src/event.c
index 1039ec7..545fce0 100644
--- a/src/event.c
+++ b/src/event.c
@@ -1995,23 +1995,26 @@ handleEvent (CompDisplay *d,
 		}
 	    }
 
-	    w->managed = TRUE;
-
 	    if (w->state & CompWindowStateHiddenMask)
 		if (!w->minimized && !w->inShowDesktopMode)
 		    doMapProcessing = FALSE;
 
 	    if (doMapProcessing)
 	    {
-		Bool                   allowFocus;
-		CompStackingUpdateMode stackingMode;
-
 		w->initialViewportX = w->screen->x;
 		w->initialViewportY = w->screen->y;
 
 		w->initialTimestampSet = FALSE;
 
 		applyStartupProperties (w->screen, w);
+	    }
+
+	    w->managed = TRUE;
+
+	    if (doMapProcessing)
+	    {
+		Bool                   allowFocus;
+		CompStackingUpdateMode stackingMode;
 
 		if (!w->placed)
 		{
@@ -2065,12 +2068,11 @@ handleEvent (CompDisplay *d,
 
 		(*w->screen->leaveShowDesktopMode) (w->screen, w);
 
+		if (allowFocus && !onCurrentDesktop (w))
+		    setCurrentDesktop (w->screen, w->desktop);
+
 		if (!(w->state & CompWindowStateHiddenMask))
-		{
-		    w->pendingMaps++;
-		    XMapWindow (d->display, w->id);
-		    setWindowState (d, w->id, w->state);
-		}
+		    showWindow (w);
 
 		if (allowFocus)
 		    moveInputFocusToWindow (w);
diff --git a/src/screen.c b/src/screen.c
index 80e83f1..081ad51 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -3734,8 +3734,7 @@ applyStartupProperties (CompScreen *screen,
 	window->initialViewportY = s->viewportY;
 
 	workspace = sn_startup_sequence_get_workspace (s->sequence);
-	if (workspace >= 0)
-	    window->desktop = workspace;
+	setDesktopForWindow (window, workspace);
 
 	window->initialTimestamp    =
 	    sn_startup_sequence_get_timestamp (s->sequence);
diff --git a/src/window.c b/src/window.c
index 8b24eac..4eb938a 100644
--- a/src/window.c
+++ b/src/window.c
@@ -4826,7 +4826,10 @@ isWindowFocusAllowed (CompWindow   *w,
     if (level == FOCUS_PREVENTION_LEVEL_HIGH)
 	return FALSE;
 
-    /* not in current viewport */
+    /* not in current viewport or desktop */
+    if (!onCurrentDesktop (w))
+	return FALSE;
+
     defaultViewportForWindow (w, &vx, &vy);
     if (vx != viewportX || vy != viewportY)
 	return FALSE;
-- 
1.6.0.2