diff options
Diffstat (limited to 'src/mute-menu-item.c')
-rw-r--r-- | src/mute-menu-item.c | 72 |
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; |