]> Dogcows Code - chaz/openbox/blobdiff - openbox/screen.c
Add a primaryMonitor config option, where the focus-cycle and keychain popups will...
[chaz/openbox] / openbox / screen.c
index 3e27903fba2c95c70bf994e90cfa5c53a2994e7e..bc8c72d86144278e99addc5e00440726d4dc1d83 100644 (file)
@@ -727,6 +727,15 @@ void screen_set_desktop(guint num, gboolean dofocus)
         if (WINDOW_IS_CLIENT(it->data)) {
             ObClient *c = it->data;
             client_hide(c);
+            if (c == focus_client) {
+                /* c was focused and we didn't do fallback clearly so make sure
+                   openbox doesnt still consider the window focused.
+                   this happens when using NextWindow with allDesktops, since
+                   it doesnt want to move focus on desktop change, but the
+                   focus is not going to stay with the current window, which
+                   has now disappeared */
+                focus_set_client(NULL);
+            }
         }
     }
 
@@ -1714,24 +1723,38 @@ gboolean screen_physical_area_monitor_contains(guint head, Rect *search)
     return RECT_INTERSECTS_RECT(monitor_area[head], *search);
 }
 
-Rect* screen_physical_area_active(void)
+guint screen_monitor_active(void)
 {
-    Rect *a;
-    gint x, y;
-
     if (moveresize_client)
-        a = screen_physical_area_monitor(client_monitor(focus_client));
+        return client_monitor(moveresize_client);
     else if (focus_client)
-        a = screen_physical_area_monitor(client_monitor(focus_client));
-    else {
-        Rect mon;
-        if (screen_pointer_pos(&x, &y))
-            RECT_SET(mon, x, y, 1, 1);
+        return client_monitor(focus_client);
+    else
+        return screen_monitor_pointer();
+}
+
+Rect* screen_physical_area_active(void)
+{
+    return screen_physical_area_monitor(screen_monitor_active());
+}
+
+guint screen_monitor_primary(void)
+{
+    if (config_primary_monitor_index > 0) {
+        if (config_primary_monitor_index-1 < screen_num_monitors)
+            return config_primary_monitor_index - 1;
         else
-            RECT_SET(mon, 0, 0, 1, 1);
-        a = screen_physical_area_monitor(screen_find_monitor(&mon));
+            return 0;
     }
-    return a;
+    else if (config_primary_monitor == OB_PLACE_MONITOR_ACTIVE)
+        return screen_monitor_active();
+    else /* config_primary_monitor == OB_PLACE_MONITOR_MOUSE */
+        return screen_monitor_pointer();
+}
+
+Rect *screen_physical_area_primary(void)
+{
+    return screen_physical_area_monitor(screen_monitor_primary());
 }
 
 void screen_set_root_cursor(void)
@@ -1744,6 +1767,17 @@ void screen_set_root_cursor(void)
                       ob_cursor(OB_CURSOR_POINTER));
 }
 
+guint screen_monitor_pointer()
+{
+    Rect mon;
+    gint x, y;
+    if (screen_pointer_pos(&x, &y))
+        RECT_SET(mon, x, y, 1, 1);
+    else
+        RECT_SET(mon, 0, 0, 1, 1);
+    return screen_find_monitor(&mon);
+}
+
 gboolean screen_pointer_pos(gint *x, gint *y)
 {
     Window w;
This page took 0.023821 seconds and 4 git commands to generate.