]> Dogcows Code - chaz/openbox/commitdiff
don't activate and change desktops if the client's not on the current desktop and...
authorDana Jansens <danakj@orodu.net>
Tue, 24 Apr 2007 19:53:50 +0000 (19:53 +0000)
committerDana Jansens <danakj@orodu.net>
Tue, 24 Apr 2007 19:53:50 +0000 (19:53 +0000)
openbox/client.c
openbox/screen.c
openbox/screen.h

index 8098b3dc25e60a85566fcb6773eff775531c25e1..2ca9b5182fdd6fa8a6716f93fcb2425812ab1b60 100644 (file)
@@ -385,10 +385,18 @@ void client_manage(Window window)
         ob_debug("Want to focus new window 0x%x with time %u (last time %u)\n",
                  self->window, self->user_time, last_time);
 
+        /* if it's on another desktop */
+        if (!(self->desktop == screen_desktop || self->desktop == DESKTOP_ALL)
+            && /* the timestamp is from before you changed desktops */
+            self->user_time && screen_desktop_user_time &&
+            !event_time_after(self->user_time, screen_desktop_user_time))
+        {
+            activate = FALSE;
+        }
         /* If nothing is focused, or a parent was focused, then focus this
            always
         */
-        if (!focus_client || client_search_focus_parent(self) != NULL)
+        else if (!focus_client || client_search_focus_parent(self) != NULL)
             activate = TRUE;
         else
         {
index 71748d65277701dc383711c89733aeb683b66f42..97cab3e6492a7b6b8ffebb0b7a2ed143f8e753dc 100644 (file)
@@ -58,6 +58,7 @@ gboolean screen_showing_desktop;
 DesktopLayout screen_desktop_layout;
 gchar  **screen_desktop_names;
 Window   screen_support_win;
+Time     screen_desktop_user_time = CurrentTime;
 
 static Rect  **area; /* array of desktop holding array of xinerama areas */
 static Rect  *monitor_area;
@@ -475,6 +476,9 @@ void screen_set_desktop(guint num)
     }
 
     event_ignore_queued_enters();
+
+    if (event_curtime != CurrentTime)
+        screen_desktop_user_time = event_curtime;
 }
 
 static void get_row_col(guint d, guint *r, guint *c)
index 970cde34ee2684639b134eff851b6ecfd32431c7..bedc2e6dd8e87a4dbc6a96d73fc38c64d0798e67 100644 (file)
@@ -38,6 +38,8 @@ extern guint screen_last_desktop;
 extern gboolean screen_showing_desktop;
 /*! The support window also used for focus and stacking */
 extern Window screen_support_win;
+/*! The last time at which the user changed desktops */
+extern Time screen_desktop_user_time;
 
 typedef struct DesktopLayout {
     ObOrientation orientation;
This page took 0.0285 seconds and 4 git commands to generate.