aboutsummaryrefslogtreecommitdiffstats
path: root/src/empathy-preferences.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/empathy-preferences.c')
-rw-r--r--src/empathy-preferences.c90
1 files changed, 88 insertions, 2 deletions
diff --git a/src/empathy-preferences.c b/src/empathy-preferences.c
index 9c737b991..9dc7f58bf 100644
--- a/src/empathy-preferences.c
+++ b/src/empathy-preferences.c
@@ -52,6 +52,17 @@ G_DEFINE_TYPE (EmpathyPreferences, empathy_preferences, GTK_TYPE_DIALOG);
#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;
@@ -72,6 +83,10 @@ struct _EmpathyPreferencesPriv {
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;
@@ -90,6 +105,7 @@ struct _EmpathyPreferencesPriv {
GSettings *gsettings;
GSettings *gsettings_chat;
+ GSettings *gsettings_call;
GSettings *gsettings_loc;
GSettings *gsettings_notify;
GSettings *gsettings_sound;
@@ -256,6 +272,18 @@ preferences_setup_widgets (EmpathyPreferences *preferences)
"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,
@@ -1071,6 +1099,13 @@ preferences_themes_setup (EmpathyPreferences *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)
@@ -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_call);
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;
+ GtkWidget *call_volume_scale_box;
+ GtkWidget *call_volume_bar_box;
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,
+ "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);
@@ -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_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);
@@ -1182,6 +1226,15 @@ empathy_preferences_init (EmpathyPreferences *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);
@@ -1194,11 +1247,11 @@ empathy_preferences_init (EmpathyPreferences *preferences)
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);
}
- 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
@@ -1206,6 +1259,29 @@ empathy_preferences_init (EmpathyPreferences *preferences)
#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)
{
@@ -1222,3 +1298,13 @@ empathy_preferences_new (GtkWindow *parent)
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));
+}