summaryrefslogtreecommitdiff
blob: 856a9181f63fce28091f74839d076831592028f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
From: Lennart Poettering <lennart@poettering.net>
Date: Mon, 23 Mar 2009 20:55:36 +0000 (+0100)
Subject: don't crash if there is no default display on initialization. Fixes #20693
X-Git-Url: http://git.0pointer.de/?p=libcanberra.git;a=commitdiff_plain;h=ac5ac9e486aa33f7be0cd9ddd315c03780676795

don't crash if there is no default display on initialization. Fixes #20693
---

diff --git a/src/canberra-gtk-module.c b/src/canberra-gtk-module.c
index b9d8ae0..302eeb4 100644
--- a/src/canberra-gtk-module.c
+++ b/src/canberra-gtk-module.c
@@ -647,11 +647,15 @@ static gboolean idle_cb(void *userdata) {
     return FALSE;
 }
 
+static void connect_settings(void);
+
 static gboolean emission_hook_cb(GSignalInvocationHint *hint, guint n_param_values, const GValue *param_values, gpointer data) {
     static SoundEventData *d = NULL;
     GdkEvent *e;
     GObject *object;
 
+    connect_settings();
+
     if (disabled)
         return TRUE;
 
@@ -719,15 +723,15 @@ static void enable_input_feedback_sounds_changed(GtkSettings *s, GParamSpec *arg
     read_enable_input_feedback_sounds(s);
 }
 
-G_MODULE_EXPORT void gtk_module_init(gint *argc, gchar ***argv[]) {
+static void connect_settings(void) {
     GtkSettings *s;
+    static gboolean connected = FALSE;
 
-    /* This is the same quark libgnomeui uses! */
-    disable_sound_quark = g_quark_from_string("gnome_disable_sound_events");
-    was_hidden_quark = g_quark_from_string("canberra_was_hidden");
+    if (connected)
+        return;
 
-    /* Hook up the gtk setting */
-    s = gtk_settings_get_default();
+    if (!(s = gtk_settings_get_default()))
+        return;
 
     if (g_object_class_find_property(G_OBJECT_GET_CLASS(s), "gtk-enable-input-feedback-sounds")) {
         g_signal_connect(G_OBJECT(s), "notify::gtk-enable-input-feedback-sounds", G_CALLBACK(enable_input_feedback_sounds_changed), NULL);
@@ -735,6 +739,18 @@ G_MODULE_EXPORT void gtk_module_init(gint *argc, gchar ***argv[]) {
     } else
         g_debug("This Gtk+ version doesn't have the GtkSettings::gtk-enable-input-feedback-sounds property.");
 
+    connected = TRUE;
+}
+
+G_MODULE_EXPORT void gtk_module_init(gint *argc, gchar ***argv[]) {
+
+    /* This is the same quark libgnomeui uses! */
+    disable_sound_quark = g_quark_from_string("gnome_disable_sound_events");
+    was_hidden_quark = g_quark_from_string("canberra_was_hidden");
+
+    /* Hook up the gtk setting */
+    connect_settings();
+
     install_hook(GTK_TYPE_WINDOW, "show", &signal_id_widget_show);
     install_hook(GTK_TYPE_WINDOW, "hide", &signal_id_widget_hide);
     install_hook(GTK_TYPE_DIALOG, "response", &signal_id_dialog_response);
@@ -749,7 +765,6 @@ G_MODULE_EXPORT void gtk_module_init(gint *argc, gchar ***argv[]) {
     install_hook(GTK_TYPE_ICON_VIEW, "selection-changed", &signal_id_icon_view_selection_changed);
 }
 
-
 G_MODULE_EXPORT gchar* g_module_check_init(GModule *module);
 
 G_MODULE_EXPORT gchar* g_module_check_init(GModule *module) {