From a2f2fefeffc74e93504588f9545507814857723e Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Thu, 17 Aug 2006 16:16:37 +0000 Subject: [PATCH] add a client destructor to frame.c so it doesn't try to keep flashing a free'd frame --- openbox/event.c | 1 + openbox/frame.c | 18 ++++++++++++++++++ openbox/frame.h | 2 ++ openbox/openbox.c | 2 ++ 4 files changed, 23 insertions(+) diff --git a/openbox/event.c b/openbox/event.c index a38a331f..7717e25f 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -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); } diff --git a/openbox/frame.c b/openbox/frame.c index c55ff290..2c495b27 100644 --- a/openbox/frame.c +++ b/openbox/frame.c @@ -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; diff --git a/openbox/frame.h b/openbox/frame.h index d50a2b72..8c6c256f 100644 --- a/openbox/frame.h +++ b/openbox/frame.h @@ -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); diff --git a/openbox/openbox.c b/openbox/openbox.c index 6ada770a..46ab370c 100644 --- a/openbox/openbox.c +++ b/openbox/openbox.c @@ -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); -- 2.44.0