aboutsummaryrefslogtreecommitdiff
path: root/src/mute-menu-item.c
diff options
context:
space:
mode:
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2011-01-27 16:42:03 +0100
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2011-01-27 16:42:03 +0100
commit74888f5ce08b9f89ac0d62c8664a26628f098765 (patch)
treecd39c3c2752166e210666ec88e7cc85668d4e000 /src/mute-menu-item.c
parentb0babf1fab9b3e74f32de4635dd9eed78cccfc62 (diff)
parent1529af0e1224f04616054095742b698d8814cec4 (diff)
downloadayatana-indicator-sound-74888f5ce08b9f89ac0d62c8664a26628f098765.tar.gz
ayatana-indicator-sound-74888f5ce08b9f89ac0d62c8664a26628f098765.tar.bz2
ayatana-indicator-sound-74888f5ce08b9f89ac0d62c8664a26628f098765.zip
Merge against new HEAD
Diffstat (limited to 'src/mute-menu-item.c')
-rw-r--r--src/mute-menu-item.c130
1 files changed, 130 insertions, 0 deletions
diff --git a/src/mute-menu-item.c b/src/mute-menu-item.c
new file mode 100644
index 0000000..2f40177
--- /dev/null
+++ b/src/mute-menu-item.c
@@ -0,0 +1,130 @@
+/*
+Copyright 2011 Canonical Ltd.
+
+Authors:
+ Conor Curran <conor.curran@canonical.com>
+
+This program is free software: you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 3, as published
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranties of
+MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
+PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib/gi18n.h>
+
+#include "common-defs.h"
+#include "mute-menu-item.h"
+#include "pulse-manager.h"
+
+typedef struct _MuteMenuItemPrivate MuteMenuItemPrivate;
+
+struct _MuteMenuItemPrivate {
+ DbusmenuMenuitem* button;
+};
+
+#define MUTE_MENU_ITEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MUTE_MENU_ITEM_TYPE, MuteMenuItemPrivate))
+
+/* Prototypes */
+static void mute_menu_item_class_init (MuteMenuItemClass *klass);
+static void mute_menu_item_init (MuteMenuItem *self);
+static void mute_menu_item_dispose (GObject *object);
+static void mute_menu_item_finalize (GObject *object);
+static void mute_menu_item_set_global_mute_from_ui (gpointer user_data);
+
+G_DEFINE_TYPE (MuteMenuItem, mute_menu_item, G_TYPE_OBJECT);
+
+static void mute_menu_item_class_init (MuteMenuItemClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (MuteMenuItemPrivate));
+
+ object_class->dispose = mute_menu_item_dispose;
+ object_class->finalize = mute_menu_item_finalize;
+
+ return;
+}
+
+static void mute_menu_item_init (MuteMenuItem *self)
+{
+ g_debug("Building new Mute Menu Item");
+ MuteMenuItemPrivate* priv = MUTE_MENU_ITEM_GET_PRIVATE(self);
+ priv->button = dbusmenu_menuitem_new();
+
+ g_signal_connect (G_OBJECT (priv->button),
+ DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
+ G_CALLBACK (mute_menu_item_set_global_mute_from_ui),
+ self);
+ return;
+}
+
+static void mute_menu_item_dispose (GObject *object)
+{
+ G_OBJECT_CLASS (mute_menu_item_parent_class)->dispose (object);
+ return;
+}
+
+static void
+mute_menu_item_finalize (GObject *object)
+{
+ G_OBJECT_CLASS (mute_menu_item_parent_class)->finalize (object);
+}
+
+static void
+mute_menu_item_set_global_mute_from_ui (gpointer user_data)
+{
+ g_return_if_fail (DBUSMENU_IS_MENUITEM (user_data));
+ DbusmenuMenuitem* button = DBUSMENU_MENUITEM (user_data);
+ gboolean current_value = dbusmenu_menuitem_property_get_bool (button,
+ DBUSMENU_MUTE_MENUITEM_VALUE);
+
+ gboolean new_value = !current_value;
+ // pa manager api - to be refactored
+ toggle_global_mute (new_value);
+}
+
+
+void mute_menu_item_update(MuteMenuItem* item, gboolean value_update)
+{
+ MuteMenuItemPrivate* priv = MUTE_MENU_ITEM_GET_PRIVATE (item);
+
+ dbusmenu_menuitem_property_set_bool (priv->button,
+ DBUSMENU_MUTE_MENUITEM_VALUE,
+ value_update);
+ dbusmenu_menuitem_property_set (priv->button,
+ DBUSMENU_MENUITEM_PROP_LABEL,
+ value_update == FALSE ? _("Mute") : _("Unmute"));
+}
+
+void mute_menu_item_enable(MuteMenuItem* item, gboolean active)
+{
+ MuteMenuItemPrivate* priv = MUTE_MENU_ITEM_GET_PRIVATE (item);
+
+ dbusmenu_menuitem_property_set_bool (priv->button,
+ DBUSMENU_MENUITEM_PROP_ENABLED,
+ active);
+}
+
+DbusmenuMenuitem* mute_menu_item_get_button (MuteMenuItem* item)
+{
+ MuteMenuItemPrivate* priv = MUTE_MENU_ITEM_GET_PRIVATE (item);
+ return priv->button;
+}
+
+MuteMenuItem* mute_menu_item_new (gboolean initial_update, gboolean enabled)
+{
+ MuteMenuItem *self = g_object_new (MUTE_MENU_ITEM_TYPE, NULL);
+ mute_menu_item_update (self, initial_update);
+ mute_menu_item_enable (self, enabled);
+ return self;
+}