]> Dogcows Code - chaz/openbox/commitdiff
add a client destructor to frame.c so it doesn't try to keep flashing a free'd frame
authorMikael Magnusson <mikachu@comhem.se>
Thu, 17 Aug 2006 16:16:37 +0000 (16:16 +0000)
committerMikael Magnusson <mikachu@comhem.se>
Thu, 17 Aug 2006 16:16:37 +0000 (16:16 +0000)
openbox/event.c
openbox/frame.c
openbox/frame.h
openbox/openbox.c

index a38a331fce77b3a16001d92284acf81268eb8516..7717e25f08db10866a013f89229b7140b6b792de 100644 (file)
@@ -175,6 +175,7 @@ void event_shutdown(gboolean reconfig)
 #endif
 
     client_remove_destructor(focus_delay_client_dest);
+    client_remove_destructor(event_client_dest);
     XFreeModifiermap(modmap);
 }
 
index c55ff290717ab0bd9554d9d1a22437d2c56edc8d..2c495b27e76e4071c081e2428547f5c755f364d4 100644 (file)
@@ -43,6 +43,7 @@
 static void layout_title(ObFrame *self);
 static void flash_done(gpointer data);
 static gboolean flash_timeout(gpointer data);
+static void flash_client_dest(ObClient *client, gpointer data);
 
 static void set_theme_statics(ObFrame *self);
 static void free_theme_statics(ObFrame *self);
@@ -56,6 +57,18 @@ static Window createWindow(Window parent, gulong mask,
                        
 }
 
+void frame_startup(gboolean reconfig)
+{
+    if (reconfig) return;
+    client_add_destructor(flash_client_dest, NULL);
+}
+
+void frame_shutdown(gboolean reconfig)
+{
+    if (reconfig) return;
+    client_remove_destructor(flash_client_dest);
+}
+
 ObFrame *frame_new()
 {
     XSetWindowAttributes attrib;
@@ -908,6 +921,11 @@ static gboolean flash_timeout(gpointer data)
     return TRUE; /* go again */
 }
 
+static void flash_client_dest(ObClient *client, gpointer data)
+{
+    ob_main_loop_timeout_remove_data(ob_main_loop, flash_timeout, client);
+}
+
 void frame_flash_start(ObFrame *self)
 {
     self->flash_on = self->focused;
index d50a2b72f8f1bbe92f5952965e0acbd1b31d3f65..8c6c256faaa05aaeabfbbe0a6e1a1a3cfaab0d3c 100644 (file)
@@ -141,6 +141,8 @@ struct _ObFrame
     GTimeVal  flash_end;
 };
 
+void frame_startup(gboolean reconfig);
+void frame_shutdown(gboolean reconfig);
 ObFrame *frame_new();
 void frame_show(ObFrame *self);
 void frame_hide(ObFrame *self);
index 6ada770adaafbc3e8c83623e495d6f18323e1cf9..46ab370c489b2089eceb38dfae8fc492709de809 100644 (file)
@@ -248,6 +248,7 @@ gint main(gint argc, gchar **argv)
             grab_startup(reconfigure);
             group_startup(reconfigure);
             client_startup(reconfigure);
+            frame_startup(reconfigure);
             dock_startup(reconfigure);
             moveresize_startup(reconfigure);
             keyboard_startup(reconfigure);
@@ -284,6 +285,7 @@ gint main(gint argc, gchar **argv)
             keyboard_shutdown(reconfigure);
             moveresize_shutdown(reconfigure);
             dock_shutdown(reconfigure);
+            frame_shutdown(reconfigure);
             client_shutdown(reconfigure);
             group_shutdown(reconfigure);
             grab_shutdown(reconfigure);
This page took 0.031665 seconds and 4 git commands to generate.