add a client destructor to frame.c so it doesn't try to keep flashing a free'd frame
Mikael Magnusson mikachu@comhem.se
4 files changed,
23 insertions(+),
0 deletions(-)
M
openbox/event.c
→
openbox/event.c
@@ -175,6 +175,7 @@ IceRemoveConnectionWatch(ice_watch, NULL);
#endif client_remove_destructor(focus_delay_client_dest); + client_remove_destructor(event_client_dest); XFreeModifiermap(modmap); }
M
openbox/frame.c
→
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);@@ -54,6 +55,18 @@ return XCreateWindow(ob_display, parent, 0, 0, 1, 1, 0,
RrDepth(ob_rr_inst), InputOutput, RrVisual(ob_rr_inst), mask, attrib); +} + +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()@@ -906,6 +919,11 @@ self->focused = FALSE;
} 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)
M
openbox/frame.h
→
openbox/frame.h
@@ -141,6 +141,8 @@ gboolean flash_on;
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);
M
openbox/openbox.c
→
openbox/openbox.c
@@ -248,6 +248,7 @@ screen_startup(reconfigure);
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 @@ mouse_shutdown(reconfigure);
keyboard_shutdown(reconfigure); moveresize_shutdown(reconfigure); dock_shutdown(reconfigure); + frame_shutdown(reconfigure); client_shutdown(reconfigure); group_shutdown(reconfigure); grab_shutdown(reconfigure);