diff options
Diffstat (limited to 'src/idomenuitemfactory.c')
-rw-r--r-- | src/idomenuitemfactory.c | 99 |
1 files changed, 1 insertions, 98 deletions
diff --git a/src/idomenuitemfactory.c b/src/idomenuitemfactory.c index c8e61f4..59f3630 100644 --- a/src/idomenuitemfactory.c +++ b/src/idomenuitemfactory.c @@ -20,7 +20,6 @@ #include <gtk/gtk.h> #include <gtk/ubuntu-private.h> -#include "idoactionhelper.h" #include "idousermenuitem.h" #define IDO_TYPE_MENU_ITEM_FACTORY (ido_menu_item_factory_get_type ()) @@ -38,102 +37,6 @@ G_DEFINE_TYPE_WITH_CODE (IdoMenuItemFactory, ido_menu_item_factory, G_TYPE_OBJEC g_io_extension_point_implement (UBUNTU_MENU_ITEM_FACTORY_EXTENSION_POINT_NAME, g_define_type_id, "ido", 0);) -/** - * user_menu_item_state_changed: - * - * Updates an IdoUserMenuItem from @state. The state contains a - * dictionary with keys 'active-user' (for the user that the current - * session belongs too) and 'logged-in-users' (a list of all currently - * logged in users). - */ -static void -user_menu_item_state_changed (IdoActionHelper *helper, - GVariant *state, - gpointer user_data) -{ - IdoUserMenuItem *item; - GVariant *target; - GVariant *v; - - item = IDO_USER_MENU_ITEM (ido_action_helper_get_widget (helper)); - - ido_user_menu_item_set_current_user (item, FALSE); - ido_user_menu_item_set_logged_in (item, FALSE); - - target = ido_action_helper_get_action_target (helper); - g_return_if_fail (g_variant_is_of_type (target, G_VARIANT_TYPE_STRING)); - - if ((v = g_variant_lookup_value (state, "active-user", G_VARIANT_TYPE_STRING))) - { - if (g_variant_equal (v, target)) - ido_user_menu_item_set_current_user (item, TRUE); - - g_variant_unref (v); - } - - if ((v = g_variant_lookup_value (state, "logged-in-users", G_VARIANT_TYPE_STRING_ARRAY))) - { - GVariantIter it; - GVariant *user; - - g_variant_iter_init (&it, v); - while ((user = g_variant_iter_next_value (&it))) - { - if (g_variant_equal (user, target)) - ido_user_menu_item_set_logged_in (item, TRUE); - g_variant_unref (user); - } - - g_variant_unref (v); - } -} - -/** - * create_user_menu_item: - * - * Creates an IdoUserMenuItem. If @menuitem contains an action, the - * widget is bound to that action in @actions. - */ -static GtkMenuItem * -create_user_menu_item (GMenuItem *menuitem, - GActionGroup *actions) -{ - IdoUserMenuItem *item; - gchar *label; - gchar *action; - - item = IDO_USER_MENU_ITEM (ido_user_menu_item_new ()); - - if (g_menu_item_get_attribute (menuitem, "label", "s", &label)) - { - ido_user_menu_item_set_label (item, label); - g_free (label); - } - - if (g_menu_item_get_attribute (menuitem, "action", "s", &action)) - { - IdoActionHelper *helper; - GVariant *target; - - target = g_menu_item_get_attribute_value (menuitem, "target", G_VARIANT_TYPE_ANY); - - helper = ido_action_helper_new (GTK_WIDGET (item), actions, action, target); - g_signal_connect (helper, "action-state-changed", - G_CALLBACK (user_menu_item_state_changed), NULL); - - g_signal_connect_object (item, "activate", - G_CALLBACK (ido_action_helper_activate), - helper, G_CONNECT_SWAPPED); - g_signal_connect_swapped (item, "destroy", G_CALLBACK (g_object_unref), helper); - - if (target) - g_variant_unref (target); - g_free (action); - } - - return GTK_MENU_ITEM (item); -} - static GtkMenuItem * ido_menu_item_factory_create_menu_item (UbuntuMenuItemFactory *factory, const gchar *type, @@ -143,7 +46,7 @@ ido_menu_item_factory_create_menu_item (UbuntuMenuItemFactory *factory, GtkMenuItem *item = NULL; if (g_str_equal (type, "indicator.user-menu-item")) - item = create_user_menu_item (menuitem, actions); + item = ido_user_menu_item_new_from_model (menuitem, actions); return item; } |