]> git.0d.be Git - empathy.git/blobdiff - src/empathy-preferences.c
Merge branch 'log-window-webview'
[empathy.git] / src / empathy-preferences.c
index 9c737b991362f0e80026278cf915d0c5222b7d81..9dc7f58bf39f4ae48e3baecd5e89053719e60a17 100644 (file)
@@ -52,6 +52,17 @@ G_DEFINE_TYPE (EmpathyPreferences, empathy_preferences, GTK_TYPE_DIALOG);
 
 #define GET_PRIV(self) ((EmpathyPreferencesPriv *)((EmpathyPreferences *) self)->priv)
 
 
 #define GET_PRIV(self) ((EmpathyPreferencesPriv *)((EmpathyPreferences *) self)->priv)
 
+static const gchar * empathy_preferences_tabs[] =
+{
+  "general",
+  "notifications",
+  "sounds",
+  "calls",
+  "location",
+  "spell",
+  "themes",
+};
+
 struct _EmpathyPreferencesPriv {
        GtkWidget *notebook;
 
 struct _EmpathyPreferencesPriv {
        GtkWidget *notebook;
 
@@ -72,6 +83,10 @@ struct _EmpathyPreferencesPriv {
        GtkWidget *checkbutton_notifications_contact_signin;
        GtkWidget *checkbutton_notifications_contact_signout;
 
        GtkWidget *checkbutton_notifications_contact_signin;
        GtkWidget *checkbutton_notifications_contact_signout;
 
+       GtkWidget *scale_call_volume;
+       GtkWidget *adj_call_volume;
+       GtkWidget *echo_cancellation;
+
        GtkWidget *treeview_spell_checker;
 
        GtkWidget *checkbutton_location_publish;
        GtkWidget *treeview_spell_checker;
 
        GtkWidget *checkbutton_location_publish;
@@ -90,6 +105,7 @@ struct _EmpathyPreferencesPriv {
 
        GSettings *gsettings;
        GSettings *gsettings_chat;
 
        GSettings *gsettings;
        GSettings *gsettings_chat;
+       GSettings *gsettings_call;
        GSettings *gsettings_loc;
        GSettings *gsettings_notify;
        GSettings *gsettings_sound;
        GSettings *gsettings_loc;
        GSettings *gsettings_notify;
        GSettings *gsettings_sound;
@@ -256,6 +272,18 @@ preferences_setup_widgets (EmpathyPreferences *preferences)
                         "active",
                         G_SETTINGS_BIND_DEFAULT);
 
                         "active",
                         G_SETTINGS_BIND_DEFAULT);
 
+       g_settings_bind (priv->gsettings_call,
+                        EMPATHY_PREFS_CALL_SOUND_VOLUME,
+                        priv->adj_call_volume,
+                        "value",
+                        G_SETTINGS_BIND_DEFAULT);
+
+       g_settings_bind (priv->gsettings_call,
+                        EMPATHY_PREFS_CALL_ECHO_CANCELLATION,
+                        priv->echo_cancellation,
+                        "active",
+                        G_SETTINGS_BIND_DEFAULT);
+
        g_settings_bind (priv->gsettings,
                         EMPATHY_PREFS_AUTOCONNECT,
                         priv->checkbutton_autoconnect,
        g_settings_bind (priv->gsettings,
                         EMPATHY_PREFS_AUTOCONNECT,
                         priv->checkbutton_autoconnect,
@@ -1071,6 +1099,13 @@ preferences_themes_setup (EmpathyPreferences *preferences)
                          preferences);
 }
 
                          preferences);
 }
 
+static gchar *
+preferences_call_format_volume_cb (GtkScale *scale,
+                                  gdouble value)
+{
+       return g_strdup_printf ("%g%%", value);
+}
+
 static void
 empathy_preferences_response (GtkDialog *widget,
                              gint response)
 static void
 empathy_preferences_response (GtkDialog *widget,
                              gint response)
@@ -1087,6 +1122,7 @@ empathy_preferences_finalize (GObject *self)
 
        g_object_unref (priv->gsettings);
        g_object_unref (priv->gsettings_chat);
 
        g_object_unref (priv->gsettings);
        g_object_unref (priv->gsettings_chat);
+       g_object_unref (priv->gsettings_call);
        g_object_unref (priv->gsettings_loc);
        g_object_unref (priv->gsettings_notify);
        g_object_unref (priv->gsettings_sound);
        g_object_unref (priv->gsettings_loc);
        g_object_unref (priv->gsettings_notify);
        g_object_unref (priv->gsettings_sound);
@@ -1117,6 +1153,8 @@ empathy_preferences_init (EmpathyPreferences *preferences)
        GtkBuilder                *gui;
        gchar                     *filename;
        GtkWidget                 *page;
        GtkBuilder                *gui;
        gchar                     *filename;
        GtkWidget                 *page;
+       GtkWidget                 *call_volume_scale_box;
+       GtkWidget                 *call_volume_bar_box;
 
        priv = preferences->priv = G_TYPE_INSTANCE_GET_PRIVATE (preferences,
                        EMPATHY_TYPE_PREFERENCES, EmpathyPreferencesPriv);
 
        priv = preferences->priv = G_TYPE_INSTANCE_GET_PRIVATE (preferences,
                        EMPATHY_TYPE_PREFERENCES, EmpathyPreferencesPriv);
@@ -1159,6 +1197,11 @@ empathy_preferences_init (EmpathyPreferences *preferences)
                "checkbutton_location_resource_network", &priv->checkbutton_location_resource_network,
                "checkbutton_location_resource_cell", &priv->checkbutton_location_resource_cell,
                "checkbutton_location_resource_gps", &priv->checkbutton_location_resource_gps,
                "checkbutton_location_resource_network", &priv->checkbutton_location_resource_network,
                "checkbutton_location_resource_cell", &priv->checkbutton_location_resource_cell,
                "checkbutton_location_resource_gps", &priv->checkbutton_location_resource_gps,
+               "call_volume_scale_box", &call_volume_scale_box,
+               "call_volume_bar_box", &call_volume_bar_box,
+               "call_volume_scale", &priv->scale_call_volume,
+               "call_volume_adjustment", &priv->adj_call_volume,
+               "call_echo_cancellation", &priv->echo_cancellation,
                NULL);
        g_free (filename);
 
                NULL);
        g_free (filename);
 
@@ -1169,6 +1212,7 @@ empathy_preferences_init (EmpathyPreferences *preferences)
 
        priv->gsettings = g_settings_new (EMPATHY_PREFS_SCHEMA);
        priv->gsettings_chat = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
 
        priv->gsettings = g_settings_new (EMPATHY_PREFS_SCHEMA);
        priv->gsettings_chat = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
+       priv->gsettings_call = g_settings_new (EMPATHY_PREFS_CALL_SCHEMA);
        priv->gsettings_loc = g_settings_new (EMPATHY_PREFS_LOCATION_SCHEMA);
        priv->gsettings_notify = g_settings_new (EMPATHY_PREFS_NOTIFICATIONS_SCHEMA);
        priv->gsettings_sound = g_settings_new (EMPATHY_PREFS_SOUNDS_SCHEMA);
        priv->gsettings_loc = g_settings_new (EMPATHY_PREFS_LOCATION_SCHEMA);
        priv->gsettings_notify = g_settings_new (EMPATHY_PREFS_NOTIFICATIONS_SCHEMA);
        priv->gsettings_sound = g_settings_new (EMPATHY_PREFS_SOUNDS_SCHEMA);
@@ -1182,6 +1226,15 @@ empathy_preferences_init (EmpathyPreferences *preferences)
                          preferences, 0);
        preferences_preview_theme_changed_cb (priv->theme_manager, preferences);
 
                          preferences, 0);
        preferences_preview_theme_changed_cb (priv->theme_manager, preferences);
 
+       g_signal_connect (priv->scale_call_volume, "format-value",
+                         G_CALLBACK (preferences_call_format_volume_cb),
+                         preferences);
+
+#ifndef HAVE_CALL
+       gtk_widget_hide (call_volume_scale_box);
+       gtk_widget_hide (call_volume_bar_box);
+#endif
+
        preferences_themes_setup (preferences);
 
        preferences_setup_widgets (preferences);
        preferences_themes_setup (preferences);
 
        preferences_setup_widgets (preferences);
@@ -1194,11 +1247,11 @@ empathy_preferences_init (EmpathyPreferences *preferences)
        preferences_sound_load (preferences);
 
        if (empathy_spell_supported ()) {
        preferences_sound_load (preferences);
 
        if (empathy_spell_supported ()) {
-               page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook), 2);
+               page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook), EMPATHY_PREFERENCES_TAB_SPELL);
                gtk_widget_show (page);
        }
 
                gtk_widget_show (page);
        }
 
-       page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook), 3);
+       page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook), EMPATHY_PREFERENCES_TAB_LOCATION);
 #ifdef HAVE_GEOCLUE
        gtk_widget_show (page);
 #else
 #ifdef HAVE_GEOCLUE
        gtk_widget_show (page);
 #else
@@ -1206,6 +1259,29 @@ empathy_preferences_init (EmpathyPreferences *preferences)
 #endif
 }
 
 #endif
 }
 
+static EmpathyPreferencesTab
+empathy_preferences_tab_from_string (const gchar *str)
+{
+  guint i;
+
+  for (i = 0; i < G_N_ELEMENTS (empathy_preferences_tabs); i++)
+    {
+      if (!tp_strdiff (str, empathy_preferences_tabs[i]))
+        return i;
+    }
+
+  g_warn_if_reached ();
+  return -1;
+}
+
+const gchar *
+empathy_preferences_tab_to_string (EmpathyPreferencesTab tab)
+{
+  g_return_val_if_fail (tab < G_N_ELEMENTS (empathy_preferences_tabs), NULL);
+
+  return empathy_preferences_tabs[tab];
+}
+
 GtkWidget *
 empathy_preferences_new (GtkWindow *parent)
 {
 GtkWidget *
 empathy_preferences_new (GtkWindow *parent)
 {
@@ -1222,3 +1298,13 @@ empathy_preferences_new (GtkWindow *parent)
 
        return self;
 }
 
        return self;
 }
+
+void
+empathy_preferences_show_tab (EmpathyPreferences *self,
+                             const gchar *page)
+{
+       EmpathyPreferencesPriv *priv = GET_PRIV (self);
+
+       gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook),
+                                      empathy_preferences_tab_from_string (page));
+}