aboutsummaryrefslogtreecommitdiff
path: root/src/mute-menu-item.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mute-menu-item.c')
-rw-r--r--src/mute-menu-item.c72
1 files changed, 39 insertions, 33 deletions
diff --git a/src/mute-menu-item.c b/src/mute-menu-item.c
index 2c5af6d..344c17e 100644
--- a/src/mute-menu-item.c
+++ b/src/mute-menu-item.c
@@ -20,14 +20,16 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config.h"
#endif
-#include "common-defs.h"
#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))
@@ -39,8 +41,10 @@ static void mute_menu_item_dispose (GObject *object);
static void mute_menu_item_finalize (GObject *object);
static void handle_event (DbusmenuMenuitem * mi, const gchar * name,
GVariant * value, guint timestamp);
+static void
+mute_menu_item_set_global_mute_from_ui (gpointer user_data);
-G_DEFINE_TYPE (MuteMenuItem, mute_menu_item, DBUSMENU_TYPE_MENUITEM);
+G_DEFINE_TYPE (MuteMenuItem, mute_menu_item, G_TYPE_OBJECT);
static void mute_menu_item_class_init (MuteMenuItemClass *klass)
{
@@ -51,14 +55,19 @@ static void mute_menu_item_class_init (MuteMenuItemClass *klass)
object_class->dispose = mute_menu_item_dispose;
object_class->finalize = mute_menu_item_finalize;
- DbusmenuMenuitemClass * mclass = DBUSMENU_MENUITEM_CLASS(klass);
- mclass->handle_event = handle_event;
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;
}
@@ -74,53 +83,50 @@ mute_menu_item_finalize (GObject *object)
G_OBJECT_CLASS (mute_menu_item_parent_class)->finalize (object);
}
-static void
-handle_event (DbusmenuMenuitem * mi,
- const gchar * name,
- GVariant * value,
- guint timestamp)
+static void
+mute_menu_item_set_global_mute_from_ui (gpointer user_data)
{
- /*g_debug ( "handle-event in the mute at the backend, input is of type %s",
- g_variant_get_type_string(value));*/
-
- GVariant* input = NULL;
- input = value;
- g_variant_ref (input);
-
- // Please note: Subject to change in future DBusmenu revisions
- if (g_variant_is_of_type(value, G_VARIANT_TYPE_VARIANT) == TRUE) {
- input = g_variant_get_variant(value);
- }
-
- gboolean mute_input = g_variant_get_boolean(input);
- toggle_global_mute (mute_input);
- g_variant_unref (input);
+ 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)
{
- dbusmenu_menuitem_property_set_bool (DBUSMENU_MENUITEM(item),
+ 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 (DBUSMENU_MENUITEM(item),
+ dbusmenu_menuitem_property_set (priv->button,
DBUSMENU_MENUITEM_PROP_LABEL,
value_update == FALSE ? _("Mute") : _("Unmute"));
}
void mute_menu_item_enable(MuteMenuItem* item, gboolean active)
{
- dbusmenu_menuitem_property_set_bool(DBUSMENU_MENUITEM(item),
- DBUSMENU_MENUITEM_PROP_ENABLED,
- 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);
- dbusmenu_menuitem_property_set (DBUSMENU_MENUITEM(self),
- DBUSMENU_MENUITEM_PROP_TYPE,
- DBUSMENU_MUTE_MENUITEM_TYPE);
+ 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;