]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
add a reconfigure action, also reconfigure on SIGUSR2.
[chaz/openbox] / openbox / event.c
index 00036b48c83ed8b228bd5c2bbfe03c453b208776..0510dab29e9f7d2ad912c3294966071bec2caaf3 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)
 {
@@ -104,8 +106,10 @@ static void sn_handler(const XEvent *e, gpointer display)
 #endif
 
 
-void event_startup()
+void event_startup(gboolean reconfig)
 {
+    if (reconfig) return;
+
     mask_table_size = sizeof(mask_table) / sizeof(mask_table[0]);
      
     /* get lock masks that are defined by the display (not constant) */
@@ -144,8 +148,10 @@ void event_startup()
     client_add_destructor(focus_delay_client_dest);
 }
 
-void event_shutdown()
+void event_shutdown(gboolean reconfig)
 {
+    if (reconfig) return;
+
     client_remove_destructor(focus_delay_client_dest);
     XFreeModifiermap(modmap);
 }
@@ -657,8 +663,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 +713,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 +1186,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.02192 seconds and 4 git commands to generate.