[ekiga/ds-gsettings] GSettings: Ported the sound events part of the preferences window.



commit 4e5aa5d3c8855ea80ace7b88681edec84ca355bc
Author: Damien Sandras <dsandras beip be>
Date:   Sat Apr 13 18:55:27 2013 +0200

    GSettings: Ported the sound events part of the preferences window.

 lib/ekiga-settings.h                               |   2 +
 lib/engine/gui/gtk-frontend/preferences-window.cpp | 290 +++++------
 lib/gmconf/gmconf-gsettings.c                      | 534 ---------------------
 3 files changed, 121 insertions(+), 705 deletions(-)
---
diff --git a/lib/ekiga-settings.h b/lib/ekiga-settings.h
index c465d6e..eebc8bd 100644
--- a/lib/ekiga-settings.h
+++ b/lib/ekiga-settings.h
@@ -41,4 +41,6 @@
 
 #define USER_INTERFACE "org.gnome." PACKAGE_NAME ".general.user-interface"
 
+#define SOUND_EVENTS_SCHEMA "org.gnome." PACKAGE_NAME ".general.sound-events"
+
 #endif /* EKIGA_SETTINGS_H */
diff --git a/lib/engine/gui/gtk-frontend/preferences-window.cpp 
b/lib/engine/gui/gtk-frontend/preferences-window.cpp
index e21c32d..3dd7fa6 100644
--- a/lib/engine/gui/gtk-frontend/preferences-window.cpp
+++ b/lib/engine/gui/gtk-frontend/preferences-window.cpp
@@ -39,6 +39,8 @@
 
 #include "config.h"
 
+#include "ekiga-settings.h"
+
 #include <gmpreferences.h>
 #include <gmconf.h>
 
@@ -71,23 +73,21 @@ typedef struct _GmPreferencesWindow
   GtkWidget *video_device;
   GtkWidget *iface;
   GtkWidget *fsbutton;
+  GSettings *sound_events_settings;
   Ekiga::ServiceCore& core;
   Ekiga::scoped_connections connections;
-  std::list<gpointer> notifiers;
 } GmPreferencesWindow;
 
 #define GM_PREFERENCES_WINDOW(x) (GmPreferencesWindow *) (x)
 
 _GmPreferencesWindow::_GmPreferencesWindow(Ekiga::ServiceCore &_core): core(_core)
 {
+  sound_events_settings = g_settings_new (SOUND_EVENTS_SCHEMA);
 }
 
 _GmPreferencesWindow::~_GmPreferencesWindow()
 {
-  for (std::list<gpointer>::iterator iter = notifiers.begin ();
-       iter != notifiers.end ();
-       ++iter)
-    gm_conf_notifier_remove (*iter);
+  g_clear_object (&sound_events_settings);
 }
 
 /* Declarations */
@@ -236,8 +236,8 @@ static void refresh_devices_list_cb (GtkWidget *widget,
  *                 selected sound event.
  * PRE          :  /
  */
-static void sound_event_clicked_cb (GtkTreeSelection *selection,
-                                   gpointer data);
+static void sound_event_selected_cb (GtkTreeSelection *selection,
+                                     gpointer data);
 
 
 /* DESCRIPTION  :  This callback is called when the user clicks
@@ -258,7 +258,7 @@ static void sound_event_play_cb (GtkWidget *widget,
  * PRE          :  /
  */
 static void sound_event_toggled_cb (GtkCellRendererToggle *cell,
-                                   gchar *path_str, 
+                                   gchar *path_str,
                                    gpointer data);
 
 
@@ -277,28 +277,20 @@ static void image_filename_browse_cb (GtkWidget *widget,
  * BEHAVIOR     :  Update of the config database.
  * PRE          :  /
  */
-static void audioev_filename_browse_cb (GtkWidget *widget,
-                                       gpointer data);
+static void sound_event_changed_cb (GtkWidget *widget,
+                                    gpointer data);
 
 
 /* DESCRIPTION  :  This callback is called when something changes in the sound
- *                 events list.
+ *                 event related settings.
  * BEHAVIOR     :  It updates the events list widget.
  * PRE          :  A pointer to the prefs window GMObject.
  */
-static void sound_events_list_changed_nt (gpointer id,
-                                         GmConfEntry *entry,
-                                         gpointer data);
+static void sound_event_setting_changed (GSettings *,
+                                         gchar *,
+                                         gpointer data);
 
 
-/* DESCRIPTION  :  This callback is called by the preview-play button of the
- *                selected audio file in the audio file selector.
- * BEHAVIOR     :  GMSoundEv's the audio file.
- * PRE          :  /
- */
-static void audioev_filename_browse_play_cb (GtkWidget *playbutton,
-                                             gpointer data);
-
 static void
 gm_prefs_window_get_audiooutput_devices_list (Ekiga::ServiceCore& core,
                                         std::vector<std::string> & device_list);
@@ -337,80 +329,66 @@ gm_prefs_window_sound_events_list_build (GtkWidget *prefs_window)
 {
   GmPreferencesWindow *pw = NULL;
 
-  GtkTreeSelection *selection = NULL;
-  GtkTreePath *path = NULL;
   GtkTreeModel *model = NULL;
-  GtkTreeIter iter, selected_iter;
+  GtkTreeIter iter;
 
   bool enabled = FALSE;
 
   pw = gm_pw_get_pw (prefs_window);
 
-  selection =
-    gtk_tree_view_get_selection (GTK_TREE_VIEW (pw->sound_events_list));
-
-  if (gtk_tree_selection_get_selected (selection, &model, &selected_iter))
-    path = gtk_tree_model_get_path (model, &selected_iter);
-
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (pw->sound_events_list));
   gtk_list_store_clear (GTK_LIST_STORE (model));
 
   /* Sound on incoming calls */
-  enabled = gm_conf_get_bool (SOUND_EVENTS_KEY "enable_incoming_call_sound");
+  enabled = g_settings_get_boolean (pw->sound_events_settings, "enable-incoming-call-sound");
   gtk_list_store_append (GTK_LIST_STORE (model), &iter);
   gtk_list_store_set (GTK_LIST_STORE (model), &iter,
                      0, enabled,
                      1, _("Play sound on incoming calls"),
-                     2, SOUND_EVENTS_KEY "incoming_call_sound",
-                     3, SOUND_EVENTS_KEY "enable_incoming_call_sound",
-                      4, "incoming_call_sound",
+                     2, "incoming-call-sound",
+                     3, "enable-incoming-call-sound",
+                      4, "incoming-call-sound",
                      -1);
 
-  enabled = gm_conf_get_bool (SOUND_EVENTS_KEY "enable_ring_tone_sound");
+  enabled = g_settings_get_boolean (pw->sound_events_settings, "enable-ring-tone-sound");
   gtk_list_store_append (GTK_LIST_STORE (model), &iter);
   gtk_list_store_set (GTK_LIST_STORE (model), &iter,
                      0, enabled,
                      1, _("Play ring tone"),
-                     2, SOUND_EVENTS_KEY "ring_tone_sound",
-                     3, SOUND_EVENTS_KEY "enable_ring_tone_sound",
-                      4, "ring_tone_sound",
+                     2, "ring-tone-sound",
+                     3, "enable-ring-tone-sound",
+                      4, "ring-tone-sound",
                      -1);
 
-  enabled = gm_conf_get_bool (SOUND_EVENTS_KEY "enable_busy_tone_sound");
+  enabled = g_settings_get_boolean (pw->sound_events_settings, "enable-busy-tone-sound");
   gtk_list_store_append (GTK_LIST_STORE (model), &iter);
   gtk_list_store_set (GTK_LIST_STORE (model), &iter,
                      0, enabled,
                      1, _("Play busy tone"),
-                     2, SOUND_EVENTS_KEY "busy_tone_sound",
-                     3, SOUND_EVENTS_KEY "enable_busy_tone_sound",
-                     4, "busy_tone_sound",
+                     2, "busy-tone-sound",
+                     3, "enable-busy-tone-sound",
+                     4, "busy-tone-sound",
                      -1);
 
-  enabled = gm_conf_get_bool (SOUND_EVENTS_KEY "enable_new_voicemail_sound");
+  enabled = g_settings_get_boolean (pw->sound_events_settings, "enable-new-voicemail-sound");
   gtk_list_store_append (GTK_LIST_STORE (model), &iter);
   gtk_list_store_set (GTK_LIST_STORE (model), &iter,
                      0, enabled,
                      1, _("Play sound for new voice mails"),
-                     2, SOUND_EVENTS_KEY "new_voicemail_sound",
-                     3, SOUND_EVENTS_KEY "enable_new_voicemail_sound",
-                     4, "new_voicemail_sound",
+                     2, "new-voicemail-sound",
+                     3, "enable-new-voicemail-sound",
+                     4, "new-voicemail-sound",
                      -1);
 
-  enabled = gm_conf_get_bool (SOUND_EVENTS_KEY "enable_new_message_sound");
+  enabled = g_settings_get_boolean (pw->sound_events_settings, "enable-new-message-sound");
   gtk_list_store_append (GTK_LIST_STORE (model), &iter);
   gtk_list_store_set (GTK_LIST_STORE (model), &iter,
                      0, enabled,
                      1, _("Play sound for new instant messages"),
-                     2, SOUND_EVENTS_KEY "new_message_sound",
-                     3, SOUND_EVENTS_KEY "enable_new_message_sound",
-                     4, "new_message_sound",
+                     2, "new-message-sound",
+                     3, "enable-new-message-sound",
+                     4, "new-message-sound",
                      -1);
-
-  if (!path)
-    path = gtk_tree_path_new_from_string ("0");
-
-  gtk_tree_view_set_cursor (GTK_TREE_VIEW (pw->sound_events_list),
-                           path, NULL, false);
-  gtk_tree_path_free (path);
 }
 
 
@@ -572,14 +550,13 @@ gm_pw_init_sound_events_page (GtkWidget *prefs_window,
   renderer = gtk_cell_renderer_toggle_new ();
   column = gtk_tree_view_column_new_with_attributes (_("A"),
                                                      renderer,
-                                                     "active", 
+                                                     "active",
                                                      0,
                                                      NULL);
   gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 25);
   gtk_tree_view_append_column (GTK_TREE_VIEW (pw->sound_events_list), column);
   g_signal_connect (renderer, "toggled",
-                    G_CALLBACK (sound_event_toggled_cb), 
-                    GTK_TREE_MODEL (list_store));
+                    G_CALLBACK (sound_event_toggled_cb), (gpointer) prefs_window);
 
   renderer = gtk_cell_renderer_text_new ();
   column = gtk_tree_view_column_new_with_attributes (_("Event"),
@@ -615,17 +592,13 @@ gm_pw_init_sound_events_page (GtkWidget *prefs_window,
   gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (pw->fsbutton),
                                      selector_hbox);
 
-  g_signal_connect (selector_playbutton, "clicked",
-                    G_CALLBACK (audioev_filename_browse_play_cb),
-                    (gpointer) prefs_window);
-
   g_signal_connect (pw->fsbutton, "selection-changed",
-                    G_CALLBACK (audioev_filename_browse_cb),
+                    G_CALLBACK (sound_event_changed_cb),
                     (gpointer) prefs_window);
 
   g_signal_connect (selection, "changed",
-                    G_CALLBACK (sound_event_clicked_cb),
-                    (gpointer) pw->fsbutton);
+                    G_CALLBACK (sound_event_selected_cb),
+                    (gpointer) prefs_window);
 
   button = gtk_button_new_with_label (_("Play"));
   gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 2);
@@ -986,8 +959,8 @@ refresh_devices_list_cb (G_GNUC_UNUSED GtkWidget *widget,
 
 
 static void
-audioev_filename_browse_cb (GtkWidget *b,
-                            gpointer data)
+sound_event_changed_cb (GtkWidget *b,
+                        gpointer data)
 {
 
   GmPreferencesWindow *pw = NULL;
@@ -997,7 +970,7 @@ audioev_filename_browse_cb (GtkWidget *b,
   GtkTreeIter iter;
 
   gchar *filename = NULL;
-  gchar *conf_key = NULL;
+  gchar *key = NULL;
   gchar *sound_event = NULL;
 
   g_return_if_fail (data != NULL);
@@ -1009,20 +982,20 @@ audioev_filename_browse_cb (GtkWidget *b,
   if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
 
     gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,
-      2, &conf_key, -1);
+                        2, &key, -1);
 
-    if (conf_key) {
+    if (key) {
       filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (b));
       if (filename) {
-        sound_event = gm_conf_get_string (conf_key);
+        sound_event = g_settings_get_string (pw->sound_events_settings, key);
 
         if (!sound_event || g_strcmp0 (filename, sound_event))
-          gm_conf_set_string (conf_key, (gchar *) filename);
+          g_settings_set_string (pw->sound_events_settings, key, (gchar *) filename);
 
         g_free (filename);
       }
 
-      g_free (conf_key);
+      g_free (key);
       g_free (sound_event);
     }
   }
@@ -1030,40 +1003,62 @@ audioev_filename_browse_cb (GtkWidget *b,
 
 
 static void
-sound_events_list_changed_nt (G_GNUC_UNUSED gpointer id,
-                             GmConfEntry *entry,
-                             gpointer data)
+sound_event_setting_changed (G_GNUC_UNUSED GSettings *settings,
+                             gchar *key,
+                             gpointer data)
 {
-  GtkWidget *prefs_window = (GtkWidget*)data;
+  bool valid = true;
+
+  GtkTreeIter iter;
 
-  if (gm_conf_entry_get_type (entry) == GM_CONF_STRING
-      || gm_conf_entry_get_type (entry) == GM_CONF_BOOL) {
+  g_return_if_fail (data != NULL);
+
+  GmPreferencesWindow *pw = gm_pw_get_pw (GTK_WIDGET (data));
+
+  GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (pw->sound_events_list));
+
+  /* Get the first iter in the list, check it is valid and walk
+   *  * through the list, reading each row. */
+  for (valid = gtk_tree_model_get_iter_first (model, &iter);
+       valid;
+       valid = gtk_tree_model_iter_next (model, &iter)) {
+
+    gchar *str = NULL;
+    gtk_tree_model_get (model, &iter, 3, &str, -1);
+
+    if (key && str && !g_strcmp0 (key, str)) {
+      gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+                          0, g_settings_get_boolean (pw->sound_events_settings, key));
+      break;
+    }
 
-    if (prefs_window)
-      gm_prefs_window_sound_events_list_build (prefs_window);
+    g_free (str);
   }
 }
 
 
 static void
-sound_event_clicked_cb (GtkTreeSelection *selection,
-                       gpointer data)
+sound_event_selected_cb (GtkTreeSelection *selection,
+                         gpointer data)
 {
   GtkTreeModel *model = NULL;
   GtkTreeIter iter;
 
-  gchar *conf_key = NULL;
+  GmPreferencesWindow *pw = NULL;
+  gchar *key = NULL;
   gchar *filename = NULL;
   gchar *sound_event = NULL;
 
+  g_return_if_fail (data != NULL);
+  pw = gm_pw_get_pw (GTK_WIDGET (data));
+
   if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
 
-    gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,
-                       2, &conf_key, -1);
+    gtk_tree_model_get (GTK_TREE_MODEL (model), &iter, 2, &key, -1);
 
-    if (conf_key) {
+    if (key) {
 
-      sound_event = gm_conf_get_string (conf_key);
+      sound_event = g_settings_get_string (pw->sound_events_settings, key);
 
       if (sound_event) {
 
@@ -1073,12 +1068,12 @@ sound_event_clicked_cb (GtkTreeSelection *selection,
         else
           filename = g_strdup (sound_event);
 
-        gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (data), filename);
+        gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (pw->fsbutton), filename);
         g_free (filename);
         g_free (sound_event);
       }
 
-      g_free (conf_key);
+      g_free (key);
     }
   }
 }
@@ -1092,10 +1087,11 @@ sound_event_play_cb (G_GNUC_UNUSED GtkWidget *widget,
   GtkTreeModel *model = NULL;
   GtkTreeIter selected_iter;
 
+  gchar *key = NULL;
   gchar *sound_event = NULL;
 
   GmPreferencesWindow *pw = NULL;
-  
+
   g_return_if_fail (data != NULL);
   pw = gm_pw_get_pw (GTK_WIDGET (data));
 
@@ -1105,14 +1101,18 @@ sound_event_play_cb (G_GNUC_UNUSED GtkWidget *widget,
 
   if (gtk_tree_selection_get_selected (selection, &model, &selected_iter)) {
 
-    gtk_tree_model_get (GTK_TREE_MODEL (model), &selected_iter, 4, &sound_event, -1);
+    gtk_tree_model_get (GTK_TREE_MODEL (model), &selected_iter, 2, &key, -1);
 
-    boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = pw->core.get<Ekiga::AudioOutputCore> 
("audiooutput-core");
+    sound_event = g_settings_get_string (pw->sound_events_settings, key);
+    boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core =
+      pw->core.get<Ekiga::AudioOutputCore> ("audiooutput-core");
 
     if (sound_event) {
       audiooutput_core->play_event(sound_event);
       g_free (sound_event);
     }
+
+    g_free (key);
   }
 }
 
@@ -1126,45 +1126,29 @@ sound_event_toggled_cb (G_GNUC_UNUSED GtkCellRendererToggle *cell,
   GtkTreePath *path = NULL;
   GtkTreeIter iter;
 
-  gchar *conf_key = NULL;
+  GmPreferencesWindow *pw = NULL;
+  gchar *key = NULL;
 
   bool fixed = FALSE;
 
+  g_return_if_fail (data != NULL);
+  pw = gm_pw_get_pw (GTK_WIDGET (data));
 
-  model = (GtkTreeModel *) data;
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (pw->sound_events_list));
   path = gtk_tree_path_new_from_string (path_str);
 
   gtk_tree_model_get_iter (model, &iter, path);
-  gtk_tree_model_get (model, &iter, 0, &fixed, 3, &conf_key, -1);
+  gtk_tree_model_get (model, &iter, 0, &fixed, 3, &key, -1);
 
   fixed ^= 1;
 
-  gm_conf_set_bool (conf_key, fixed);
+  g_settings_set_boolean (pw->sound_events_settings, key, fixed);
 
-  g_free (conf_key);
+  g_free (key);
   gtk_tree_path_free (path);
 }
 
 
-static void
-audioev_filename_browse_play_cb (GtkWidget* /* playbutton */,
-                                gpointer data)
-{
-  GmPreferencesWindow* pw = NULL;
-
-  g_return_if_fail (data != NULL);
-
-  pw = gm_pw_get_pw (GTK_WIDGET (data));
-
-  boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = pw->core.get<Ekiga::AudioOutputCore> 
("audiooutput-core");
-
-  gchar* file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (pw->fsbutton));
-  std::string file_name_string = file_name;
-  audiooutput_core->play_file(file_name_string);
-
-  g_free (file_name);
-}
-
 void on_videoinput_device_added_cb (const Ekiga::VideoInputDevice & device, bool isDesired, GtkWidget 
*prefs_window)
 {
   GmPreferencesWindow *pw = NULL;
@@ -1273,8 +1257,6 @@ preferences_window_new (Ekiga::ServiceCore& core)
   gchar     *filename = NULL;
   std::vector <std::string> device_list;
 
-  gpointer notifier;
-
   filename = g_build_filename (DATA_DIR, "pixmaps", PACKAGE_NAME, PACKAGE_NAME "-logo.png", NULL);
   window = gnome_prefs_window_new (filename);
   g_free (filename);
@@ -1376,55 +1358,21 @@ preferences_window_new (Ekiga::ServiceCore& core)
   pw->connections.add (conn);
 
 
-  /* Connect notifiers for SOUND_EVENTS_KEY keys */
-  notifier =
-    gm_conf_notifier_add (SOUND_EVENTS_KEY "enable_incoming_call_sound", 
-                         sound_events_list_changed_nt, window);
-  
-  notifier =
-    gm_conf_notifier_add (SOUND_EVENTS_KEY "incoming_call_sound",
-                         sound_events_list_changed_nt, window);
-  pw->notifiers.push_front (notifier);
-
-  notifier =
-    gm_conf_notifier_add (SOUND_EVENTS_KEY "enable_ring_tone_sound", 
-                         sound_events_list_changed_nt, window);
-  pw->notifiers.push_front (notifier);
-  
-  notifier =
-    gm_conf_notifier_add (SOUND_EVENTS_KEY "ring_tone_sound", 
-                         sound_events_list_changed_nt, window);
-  pw->notifiers.push_front (notifier);
-  
-  notifier =
-    gm_conf_notifier_add (SOUND_EVENTS_KEY "enable_busy_tone_sound", 
-                         sound_events_list_changed_nt, window);
-  pw->notifiers.push_front (notifier);
-  
-  notifier =
-    gm_conf_notifier_add (SOUND_EVENTS_KEY "busy_tone_sound",
-                         sound_events_list_changed_nt, window);
-  pw->notifiers.push_front (notifier);
-  
-  notifier =
-    gm_conf_notifier_add (SOUND_EVENTS_KEY "enable_new_voicemail_sound", 
-                         sound_events_list_changed_nt, window);
-  pw->notifiers.push_front (notifier);
-  
-  notifier =
-    gm_conf_notifier_add (SOUND_EVENTS_KEY "new_voicemail_sound",
-                         sound_events_list_changed_nt, window);
-  pw->notifiers.push_front (notifier);
-
-  notifier =
-    gm_conf_notifier_add (SOUND_EVENTS_KEY "enable_new_message_sound",
-                         sound_events_list_changed_nt, window);
-  pw->notifiers.push_front (notifier);
-
-  notifier =
-    gm_conf_notifier_add (SOUND_EVENTS_KEY "new_message_sound",
-                         sound_events_list_changed_nt, window);
-  pw->notifiers.push_front (notifier);
+  /* Connect notifiers for SOUND_EVENTS_SCHEMA settings */
+  g_signal_connect (pw->sound_events_settings, "changed::enable-incoming-call-sound",
+                    G_CALLBACK (sound_event_setting_changed), window);
+
+  g_signal_connect (pw->sound_events_settings, "changed::enable-ring-tone-sound",
+                    G_CALLBACK (sound_event_setting_changed), window);
+
+  g_signal_connect (pw->sound_events_settings, "changed::enable-busy-tone-sound",
+                    G_CALLBACK (sound_event_setting_changed), window);
+
+  g_signal_connect (pw->sound_events_settings, "changed::enable-new-voicemail-sound",
+                    G_CALLBACK (sound_event_setting_changed), window);
+
+  g_signal_connect (pw->sound_events_settings, "changed::enable-new-message-sound",
+                    G_CALLBACK (sound_event_setting_changed), window);
 
   return window;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]