From 031e3c13b4333ae8def24f4ccb2f777779d4a3a5 Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Mon, 3 Nov 2014 11:58:06 +0100 Subject: [PATCH] Make sure to reset all the GSource timer ids Avoids warnings like 'Source ID 8382 was not found when attempting to remove it'. In particular some removals were missing in menuframe.c resulting in a warning being printed every time a submenu was opened. --- openbox/dock.c | 16 ++++++++-------- openbox/event.c | 2 ++ openbox/frame.c | 12 +++++++----- openbox/frame.h | 2 +- openbox/menuframe.c | 27 ++++++++++++++++----------- 5 files changed, 34 insertions(+), 25 deletions(-) diff --git a/openbox/dock.c b/openbox/dock.c index f18683d6..ea9b7f49 100644 --- a/openbox/dock.c +++ b/openbox/dock.c @@ -632,8 +632,6 @@ static gboolean hide_timeout(gpointer data) dock->hidden = TRUE; dock_configure(); - hide_timeout_id = 0; - return FALSE; /* don't repeat */ } @@ -643,30 +641,32 @@ static gboolean show_timeout(gpointer data) dock->hidden = FALSE; dock_configure(); - show_timeout_id = 0; - return FALSE; /* don't repeat */ } +static void destroy_timeout(gpointer data) +{ + gint *id = data; + *id = 0; +} + void dock_hide(gboolean hide) { if (!hide) { if (dock->hidden && config_dock_hide) { show_timeout_id = g_timeout_add_full(G_PRIORITY_DEFAULT, config_dock_show_delay, - show_timeout, NULL, NULL); + show_timeout, &show_timeout_id, destroy_timeout); } else if (!dock->hidden && config_dock_hide && hide_timeout_id) { if (hide_timeout_id) g_source_remove(hide_timeout_id); - hide_timeout_id = 0; } } else { if (!dock->hidden && config_dock_hide) { hide_timeout_id = g_timeout_add_full(G_PRIORITY_DEFAULT, config_dock_hide_delay, - hide_timeout, NULL, NULL); + hide_timeout, &hide_timeout_id, destroy_timeout); } else if (dock->hidden && config_dock_hide && show_timeout_id) { if (show_timeout_id) g_source_remove(show_timeout_id); - show_timeout_id = 0; } } } diff --git a/openbox/event.c b/openbox/event.c index 350c1483..be42ddbf 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -2122,6 +2122,7 @@ static gboolean focus_delay_func(gpointer data) if (client_focus(d->client) && config_focus_raise) stacking_raise(CLIENT_AS_WINDOW(d->client)); event_curtime = old; + return FALSE; /* no repeat */ } @@ -2134,6 +2135,7 @@ static gboolean unfocus_delay_func(gpointer data) event_curserial = d->serial; focus_nothing(); event_curtime = old; + return FALSE; /* no repeat */ } diff --git a/openbox/frame.c b/openbox/frame.c index 3dbcf126..68332dff 100644 --- a/openbox/frame.c +++ b/openbox/frame.c @@ -1666,6 +1666,8 @@ static void flash_done(gpointer data) if (self->focused != self->flash_on) frame_adjust_focus(self, self->focused); + + self->flash_timer = 0; } static gboolean flash_timeout(gpointer data) @@ -1787,14 +1789,12 @@ static gboolean frame_animate_iconify(gpointer p) XMoveResizeWindow(obt_display, self->window, x, y, w, h); XFlush(obt_display); - if (time == 0) - frame_end_iconify_animation(self); - return time > 0; /* repeat until we're out of time */ } -void frame_end_iconify_animation(ObFrame *self) +void frame_end_iconify_animation(gpointer data) { + ObFrame *self = data; /* see if there is an animation going */ if (self->iconify_animation_going == 0) return; @@ -1811,6 +1811,7 @@ void frame_end_iconify_animation(ObFrame *self) /* we're not animating any more ! */ self->iconify_animation_going = 0; + self->iconify_animation_timer = 0; XMoveResizeWindow(obt_display, self->window, self->area.x, self->area.y, @@ -1861,7 +1862,8 @@ void frame_begin_iconify_animation(ObFrame *self, gboolean iconifying) self->iconify_animation_timer = g_timeout_add_full(G_PRIORITY_DEFAULT, FRAME_ANIMATE_ICONIFY_STEP_TIME, - frame_animate_iconify, self, NULL); + frame_animate_iconify, self, + frame_end_iconify_animation); /* do the first step */ diff --git a/openbox/frame.h b/openbox/frame.h index 915c08db..ae29c3b1 100644 --- a/openbox/frame.h +++ b/openbox/frame.h @@ -265,7 +265,7 @@ void frame_flash_stop(ObFrame *self); will be called when the animation finishes. But if another animation is started in the meantime, the callback will never get called. */ void frame_begin_iconify_animation(ObFrame *self, gboolean iconifying); -void frame_end_iconify_animation(ObFrame *self); +void frame_end_iconify_animation(gpointer data); #define frame_iconify_animating(f) (f->iconify_animation_going != 0) diff --git a/openbox/menuframe.c b/openbox/menuframe.c index 7868df39..c37fdcc5 100644 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@ -1036,7 +1036,6 @@ gboolean menu_frame_show_topmenu(ObMenuFrame *self, const GravityPoint *pos, static void remove_submenu_hide_timeout(ObMenuFrame *child) { if (submenu_hide_timer) g_source_remove(submenu_hide_timer); - submenu_hide_timer = 0; } gboolean menu_frame_show_submenu(ObMenuFrame *self, ObMenuFrame *parent, @@ -1134,11 +1133,9 @@ void menu_frame_hide_all(void) { GList *it; - if (config_submenu_show_delay) { + if (config_submenu_show_delay && submenu_show_timer) /* remove any submenu open requests */ - if (submenu_show_timer) g_source_remove(submenu_show_timer); - submenu_show_timer = 0; - } + g_source_remove(submenu_show_timer); if ((it = g_list_last(menu_frame_visible))) menu_frame_hide(it->data); } @@ -1188,6 +1185,11 @@ static gboolean submenu_show_timeout(gpointer data) return FALSE; } +static void submenu_show_dest(gpointer data) +{ + submenu_show_timer = 0; +} + static gboolean submenu_hide_timeout(gpointer data) { g_assert(menu_frame_visible); @@ -1195,6 +1197,11 @@ static gboolean submenu_hide_timeout(gpointer data) return FALSE; } +static void submenu_hide_dest(gpointer data) +{ + submenu_hide_timer = 0; +} + void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry, gboolean immediate) { @@ -1216,11 +1223,9 @@ void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry, if (!entry && oldchild_entry) entry = oldchild_entry; - if (config_submenu_show_delay) { + if (config_submenu_show_delay && submenu_show_timer) /* remove any submenu open requests */ - if (submenu_show_timer) g_source_remove(submenu_show_timer); - submenu_show_timer = 0; - } + g_source_remove(submenu_show_timer); self->selected = entry; @@ -1244,7 +1249,7 @@ void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry, submenu_hide_timer = g_timeout_add_full(G_PRIORITY_DEFAULT, config_submenu_hide_delay, - submenu_hide_timeout, oldchild, NULL); + submenu_hide_timeout, oldchild, submenu_hide_dest); } } } @@ -1264,7 +1269,7 @@ void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry, g_timeout_add_full(G_PRIORITY_DEFAULT, config_submenu_show_delay, submenu_show_timeout, - self->selected, NULL); + self->selected, submenu_show_dest); } } /* hide the grandchildren of this menu. and move the cursor to