diff options
Diffstat (limited to 'src/im-menu.c')
-rw-r--r-- | src/im-menu.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/im-menu.c b/src/im-menu.c index 55d4685..0c39b97 100644 --- a/src/im-menu.c +++ b/src/im-menu.c @@ -18,12 +18,15 @@ */ #include "im-menu.h" +#include "im-accounts-service.h" struct _ImMenuPrivate { GMenu *toplevel_menu; GMenu *menu; ImApplicationList *applist; + gboolean on_greeter; + ImAccountsService *as; }; G_DEFINE_TYPE_WITH_PRIVATE (ImMenu, im_menu, G_TYPE_OBJECT) @@ -32,6 +35,7 @@ enum { PROP_0, PROP_APPLICATION_LIST, + PROP_ON_GREETER, NUM_PROPERTIES }; @@ -43,6 +47,7 @@ im_menu_finalize (GObject *object) g_object_unref (priv->toplevel_menu); g_object_unref (priv->menu); g_object_unref (priv->applist); + g_object_unref (priv->as); G_OBJECT_CLASS (im_menu_parent_class)->finalize (object); } @@ -60,6 +65,9 @@ im_menu_get_property (GObject *object, case PROP_APPLICATION_LIST: g_value_set_object (value, priv->applist); break; + case PROP_ON_GREETER: + g_value_set_boolean (value, priv->on_greeter); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -79,6 +87,9 @@ im_menu_set_property (GObject *object, case PROP_APPLICATION_LIST: /* construct only */ priv->applist = g_value_dup_object (value); break; + case PROP_ON_GREETER: + priv->on_greeter = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -100,6 +111,12 @@ im_menu_class_init (ImMenuClass *class) G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_ON_GREETER, + g_param_spec_boolean ("on-greeter", "", "", + FALSE, + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); } static void @@ -110,6 +127,8 @@ im_menu_init (ImMenu *menu) priv->toplevel_menu = g_menu_new (); priv->menu = g_menu_new (); + priv->on_greeter = FALSE; + priv->as = im_accounts_service_ref_default(); root = g_menu_item_new (NULL, "indicator.messages"); g_menu_item_set_attribute (root, "x-canonical-type", "s", "com.canonical.indicator.root"); @@ -225,3 +244,17 @@ im_menu_insert_item_sorted (ImMenu *menu, g_menu_insert_item (priv->menu, position, item); } + +/* Whether the menu should show extra data on it. Depends on the greeter + status and user settings */ +gboolean +im_menu_show_data (ImMenu *menu) +{ + g_return_val_if_fail (IM_IS_MENU (menu), FALSE); + ImMenuPrivate *priv = im_menu_get_instance_private (IM_MENU (menu)); + + if (!priv->on_greeter) + return TRUE; + + return im_accounts_service_get_show_on_greeter(priv->as); +} |