diff options
Diffstat (limited to 'src/canberra-gtk-module.c')
| -rw-r--r-- | src/canberra-gtk-module.c | 29 | 
1 files changed, 22 insertions, 7 deletions
| 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) { | 
