Merge lp:~charlesk/gnome-control-center/bug-829648-add-visibility-toggle into lp:gnome-control-center

Proposed by Charles Kerr
Status: Needs review
Proposed branch: lp:~charlesk/gnome-control-center/bug-829648-add-visibility-toggle
Merge into: lp:gnome-control-center
Diff against target: 102 lines (+57/-0)
1 file modified
panels/sound/gvc-mixer-dialog.c (+57/-0)
To merge this branch: bzr merge lp:~charlesk/gnome-control-center/bug-829648-add-visibility-toggle
Reviewer Review Type Date Requested Status
VCS imports Pending
Review via email: mp+90043@code.launchpad.net

Description of the change

This adds a visibility toggle to the sound panel for LP bug #829648

To post a comment you must log in.

Unmerged revisions

11117. By Charles Kerr

add indicator-sound visibility toggle for lp bug #829648

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'panels/sound/gvc-mixer-dialog.c'
--- panels/sound/gvc-mixer-dialog.c 2011-10-24 13:41:44 +0000
+++ panels/sound/gvc-mixer-dialog.c 2012-01-25 05:30:31 +0000
@@ -48,6 +48,8 @@
4848
49#define GVC_MIXER_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_DIALOG, GvcMixerDialogPrivate))49#define GVC_MIXER_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_DIALOG, GvcMixerDialogPrivate))
5050
51#define INDICATOR_SOUND_SCHEMA "com.canonical.indicator.sound"
52
51struct GvcMixerDialogPrivate53struct GvcMixerDialogPrivate
52{54{
53 GvcMixerControl *mixer_control;55 GvcMixerControl *mixer_control;
@@ -80,6 +82,8 @@
80 GtkWidget *click_feedback_button;82 GtkWidget *click_feedback_button;
81 GtkWidget *audible_bell_button;83 GtkWidget *audible_bell_button;
82 GtkSizeGroup *size_group;84 GtkSizeGroup *size_group;
85 GSettings *indicator_settings;
86 GtkWidget *indicator_check;
8387
84 gdouble last_input_peak;88 gdouble last_input_peak;
85 guint num_apps;89 guint num_apps;
@@ -1712,13 +1716,40 @@
1712 return treeview;1716 return treeview;
1713}1717}
17141718
1719#define VISIBLE_KEY "visible"
1720
1721static void
1722on_indicator_visible_toggled (GtkToggleButton *toggle, GvcMixerDialog *dialog)
1723{
1724 const gboolean value = gtk_toggle_button_get_active (toggle);
1725 GSettings * settings = dialog->priv->indicator_settings;
1726
1727 if ((settings == NULL) || !g_settings_set_boolean (settings, VISIBLE_KEY, value))
1728 g_warning ("Unable to set %s.%s", INDICATOR_SOUND_SCHEMA, VISIBLE_KEY);
1729}
1730
1731static void
1732on_settings_changed (GSettings *settings, gchar *key, GvcMixerDialog *dialog)
1733{
1734 g_return_if_fail (!g_strcmp0 (key,VISIBLE_KEY));
1735
1736 GtkToggleButton * toggle = GTK_TOGGLE_BUTTON(dialog->priv->indicator_check);
1737 const gboolean oldval = gtk_toggle_button_get_active (toggle);
1738 const gboolean newval = g_settings_get_boolean (settings, key);
1739 if (oldval != newval)
1740 gtk_toggle_button_set_active (toggle, newval);
1741}
1742
1715static GObject *1743static GObject *
1716gvc_mixer_dialog_constructor (GType type,1744gvc_mixer_dialog_constructor (GType type,
1717 guint n_construct_properties,1745 guint n_construct_properties,
1718 GObjectConstructParam *construct_params)1746 GObjectConstructParam *construct_params)
1719{1747{
1748 gboolean visible;
1749 GSettings *settings;
1720 GObject *object;1750 GObject *object;
1721 GvcMixerDialog *self;1751 GvcMixerDialog *self;
1752 GtkWidget *w;
1722 GtkWidget *main_vbox;1753 GtkWidget *main_vbox;
1723 GtkWidget *label;1754 GtkWidget *label;
1724 GtkWidget *alignment;1755 GtkWidget *alignment;
@@ -1980,6 +2011,27 @@
1980 G_CALLBACK (on_control_card_removed),2011 G_CALLBACK (on_control_card_removed),
1981 self);2012 self);
19822013
2014 w = gtk_check_button_new_with_mnemonic(_( "_Show sound volume in the menu bar"));
2015 alignment = gtk_alignment_new (0, 0, 1, 1);
2016 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 12, 0, 5, 5);
2017 gtk_container_add (GTK_CONTAINER (alignment), w);
2018 gtk_box_pack_start (GTK_BOX (main_vbox), alignment, FALSE, FALSE, 0);
2019 settings = g_settings_new (INDICATOR_SOUND_SCHEMA);
2020 if (settings == NULL) {
2021 visible = TRUE;
2022 } else {
2023 g_signal_connect (settings, "changed::" VISIBLE_KEY, G_CALLBACK (on_settings_changed), self);
2024 visible = g_settings_get_boolean (settings, VISIBLE_KEY);
2025 }
2026 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), visible);
2027 if (settings == NULL) {
2028 gtk_widget_set_sensitive (w, FALSE);
2029 } else {
2030 g_signal_connect (w, "toggled", G_CALLBACK(on_indicator_visible_toggled), self);
2031 }
2032 self->priv->indicator_check = w;
2033 self->priv->indicator_settings = settings;
2034
1983 gtk_widget_show_all (main_vbox);2035 gtk_widget_show_all (main_vbox);
19842036
1985 streams = gvc_mixer_control_get_streams (self->priv->mixer_control);2037 streams = gvc_mixer_control_get_streams (self->priv->mixer_control);
@@ -2004,6 +2056,11 @@
2004{2056{
2005 GvcMixerDialog *dialog = GVC_MIXER_DIALOG (object);2057 GvcMixerDialog *dialog = GVC_MIXER_DIALOG (object);
20062058
2059 if (dialog->priv->indicator_settings != NULL) {
2060 g_object_unref (dialog->priv->indicator_settings);
2061 dialog->priv->indicator_settings = NULL;
2062 }
2063
2007 if (dialog->priv->mixer_control != NULL) {2064 if (dialog->priv->mixer_control != NULL) {
2008 g_signal_handlers_disconnect_by_func (dialog->priv->mixer_control,2065 g_signal_handlers_disconnect_by_func (dialog->priv->mixer_control,
2009 on_control_stream_added,2066 on_control_stream_added,

Subscribers

People subscribed via source and target branches

to all changes: