]> Dogcows Code - chaz/openbox/commitdiff
make focusDelay check the destroying window properly before killing the timer
authorDana Jansens <danakj@orodu.net>
Wed, 3 Sep 2003 15:39:27 +0000 (15:39 +0000)
committerDana Jansens <danakj@orodu.net>
Wed, 3 Sep 2003 15:39:27 +0000 (15:39 +0000)
openbox/event.c

index 00036b48c83ed8b228bd5c2bbfe03c453b208776..88294cc7b3550cfa5178b94a3d4a69c910a8a31f 100644 (file)
@@ -72,6 +72,8 @@ static const int mask_table[] = {
 };
 static int mask_table_size;
 
+static ObClient *focus_delay_client;
+
 #ifdef USE_SM
 static void ice_handler(int fd, gpointer conn)
 {
@@ -657,8 +659,10 @@ static void event_handle_client(ObClient *client, XEvent *e)
         case OB_FRAME_CONTEXT_FRAME:
             /* XXX if doing a 'reconfigure' make sure you kill this timer,
                maybe all timers.. */
-            if (config_focus_delay)
+            if (config_focus_delay) {
+                focus_delay_client = NULL;
                 ob_main_loop_timeout_remove(ob_main_loop, focus_delay_func);
+            }
         default:
             break;
         }
@@ -705,8 +709,8 @@ static void event_handle_client(ObClient *client, XEvent *e)
                         ob_main_loop_timeout_add(ob_main_loop,
                                                  config_focus_delay,
                                                  focus_delay_func,
-                                                 client,
-                                                 NULL);
+                                                 NULL, NULL);
+                        focus_delay_client = client;
                     } else
                         client_focus(client);
                 }
@@ -1178,12 +1182,15 @@ static void event_handle_menu(XEvent *ev)
 
 static gboolean focus_delay_func(gpointer data)
 {
-    ObClient *c = data;
-    client_focus(c);
+    client_focus(focus_delay_client);
     return FALSE; /* no repeat */
 }
 
 static void focus_delay_client_dest(gpointer data)
 {
-    ob_main_loop_timeout_remove(ob_main_loop, focus_delay_func);
+    ObClient *c = data;
+    if (c == focus_delay_client) {
+        focus_delay_client = NULL;
+        ob_main_loop_timeout_remove(ob_main_loop, focus_delay_func);
+    }
 }
This page took 0.026186 seconds and 4 git commands to generate.