summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2009-08-28 07:16:17 +0200
committerLennart Poettering <lennart@poettering.net>2009-08-28 07:16:17 +0200
commit4839f99248ab8a48d9dfe54b5418d8d042820888 (patch)
tree0fa9c3440a9d290858594b8de8ebdeefb2675736
parent5d7d423cc329209ee7a4c6e071ef094d4902e150 (diff)
gtk-module: make sure to process queued events before quitting
-rw-r--r--src/canberra-gtk-module.c17
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);