]> Dogcows Code - chaz/openbox/commitdiff
warp the pointer on a workspace change to the focused window
authorDana Jansens <danakj@orodu.net>
Tue, 18 Mar 2003 09:21:07 +0000 (09:21 +0000)
committerDana Jansens <danakj@orodu.net>
Tue, 18 Mar 2003 09:21:07 +0000 (09:21 +0000)
plugins/focus.c

index a95f8d69a1603702dc15e2b5b9941ee098ff455a..52e6f99ec0bf4d745e498ea668abcd143293c73c 100644 (file)
@@ -3,14 +3,29 @@
 #include "../kernel/client.h"
 #include "../kernel/focus.h"
 #include "../kernel/stacking.h"
+#include "../kernel/openbox.h"
 
 static GSList **focus_order = NULL;
 
+static void focus_fallback(guint desk, gboolean warp)
+{
+    GSList *it;
+
+    for (it = focus_order[desk]; it != NULL; it = it->next)
+        if (client_focus(it->data)) {
+            if (warp) { /* XXX make this configurable */
+                Client *c = it->data;
+                XWarpPointer(ob_display, None, c->window, 0, 0, 0, 0,
+                             c->area.width / 2, c->area.height / 2);
+            }
+            break;
+        }
+}
+
 static void events(ObEvent *e, void *foo)
 {
     guint i;
     guint new, old;
-    GSList *it;
 
     switch (e->type) {
     case Event_Client_Mapped:
@@ -50,19 +65,14 @@ static void events(ObEvent *e, void *foo)
 
     case Event_Ob_Desktop:
         /* focus the next available target */
-        new = e->data.o.num[0];
-        for (it = focus_order[new]; it != NULL; it = it->next)
-            if (client_focus(it->data))
-                break;
+        focus_fallback(e->data.o.num[0], TRUE);
         break;
 
     case Event_Client_Unfocus:
-        if (focus_client == NULL) { /* nothing is left with focus! */
+        /* nothing is left with focus! */
+        if (focus_client == NULL) 
             /* focus the next available target */
-            for (it = focus_order[screen_desktop]; it != NULL; it = it->next)
-                if (client_focus(it->data))
-                    break;
-        }
+            focus_fallback(screen_desktop, FALSE);
         break;
 
     case Event_Client_Focus:
This page took 0.024861 seconds and 4 git commands to generate.