diff options
author | Lennart Poettering <lennart@poettering.net> | 2009-08-28 07:16:17 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2009-08-28 07:16:17 +0200 |
commit | 4839f99248ab8a48d9dfe54b5418d8d042820888 (patch) | |
tree | 0fa9c3440a9d290858594b8de8ebdeefb2675736 /src | |
parent | 5d7d423cc329209ee7a4c6e071ef094d4902e150 (diff) |
gtk-module: make sure to process queued events before quitting
Diffstat (limited to 'src')
-rw-r--r-- | src/canberra-gtk-module.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/canberra-gtk-module.c b/src/canberra-gtk-module.c index 6cb16f1..1027dfb 100644 --- a/src/canberra-gtk-module.c +++ b/src/canberra-gtk-module.c @@ -628,11 +628,9 @@ static void dispatch_sound_event(SoundEventData *d) { /* g_warning("Failed to play event sound: %s", ca_strerror(ret)); */ } -static gboolean idle_cb(void *userdata) { +static void dispatch_queue(void) { SoundEventData *d; - idle_id = 0; - while ((d = g_queue_pop_head(&sound_event_queue))) { if (!(d = filter_sound_event(d))) @@ -643,6 +641,12 @@ static gboolean idle_cb(void *userdata) { dispatch_sound_event(d); free_sound_event(d); } +} + +static gboolean idle_cb(void *userdata) { + idle_id = 0; + + dispatch_queue(); return FALSE; } @@ -742,6 +746,11 @@ static void connect_settings(void) { connected = TRUE; } +static gboolean quit_handler(gpointer data) { + dispatch_queue(); + return FALSE; +} + G_MODULE_EXPORT void gtk_module_init(gint *argc, gchar ***argv[]) { /* This is the same quark libgnomeui uses! */ @@ -763,6 +772,8 @@ G_MODULE_EXPORT void gtk_module_init(gint *argc, gchar ***argv[]) { install_hook(GTK_TYPE_NOTEBOOK, "switch-page", &signal_id_notebook_switch_page); install_hook(GTK_TYPE_TREE_VIEW, "cursor-changed", &signal_id_tree_view_cursor_changed); install_hook(GTK_TYPE_ICON_VIEW, "selection-changed", &signal_id_icon_view_selection_changed); + + gtk_quit_add(1, quit_handler, NULL); } G_MODULE_EXPORT gchar* g_module_check_init(GModule *module); |