diff options
Diffstat (limited to 'src/empathy-preferences.c')
-rw-r--r-- | src/empathy-preferences.c | 90 |
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)); +} |