]> Dogcows Code - chaz/openbox/blobdiff - openbox/screen.c
count the EnterNotify events and tell openbox to ignore them when ungrabbing the...
[chaz/openbox] / openbox / screen.c
index b1b1a561c1da8678044757f4fe9529dc883f1a49..9ce25dde546da3669067dc0996ad73ce88582bff 100644 (file)
@@ -1,3 +1,21 @@
+/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
+
+   screen.c for the Openbox window manager
+   Copyright (c) 2003        Ben Jansens
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   See the COPYING file for a copy of the GNU General Public License.
+*/
+
 #include "debug.h"
 #include "openbox.h"
 #include "dock.h"
@@ -350,6 +368,8 @@ void screen_set_num_desktops(guint num)
 
     g_assert(num > 0);
 
+    if (screen_num_desktops == num) return;
+
     old = screen_num_desktops;
     screen_num_desktops = num;
     PROP_SET32(RootWindow(ob_display, ob_screen),
@@ -396,7 +416,6 @@ void screen_set_desktop(guint num)
 {
     GList *it;
     guint old;
-    XEvent e;
      
     g_assert(num < screen_num_desktops);
 
@@ -434,17 +453,8 @@ void screen_set_desktop(guint num)
         }
     }
 
-    XSync(ob_display, FALSE);
-    /* focus the last focused window on the desktop, and ignore enter events
-       from the switch so it doesnt mess with the focus */
-    while (XCheckTypedEvent(ob_display, EnterNotify, &e));
-#ifdef DEBUG_FOCUS
-    ob_debug("switch fallback\n");
-#endif
-    focus_fallback(OB_FOCUS_FALLBACK_DESKTOP);
-#ifdef DEBUG_FOCUS
-    ob_debug("/switch fallback\n");
-#endif
+    if (!focus_client)
+        focus_fallback(OB_FOCUS_FALLBACK_NOFOCUS);
 }
 
 static void get_row_col(guint d, guint *r, guint *c)
@@ -736,7 +746,7 @@ void screen_update_layout()
                     if (rows * cols >= screen_num_desktops + cols)
                         rows--;
                 } else if (rows == 0) {
-                    rows = screen_num_desktops / rows;
+                    rows = screen_num_desktops / cols;
                     if (cols * rows < screen_num_desktops)
                         rows++;
                     if (cols * rows >= screen_num_desktops + rows)
This page took 0.023516 seconds and 4 git commands to generate.