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) {
|