diff options
author | Alberto Mardegan <alberto.mardegan@canonical.com> | 2012-08-30 19:00:10 +0000 |
---|---|---|
committer | Tarmac <Unknown> | 2012-08-30 19:00:10 +0000 |
commit | 697c5fa7233269b39bb89dd3a0b2e6adcd2b694a (patch) | |
tree | 05baf2dc22ccc250a3e215ad538e6f95148d5054 /src/session-menu-mgr.c | |
parent | a1ad57994ebf3e7b4acbbe6b7df3d41377b49e6f (diff) | |
parent | 0a7f9ed274047c0228a5a5f9e053308e755bf89d (diff) | |
download | ayatana-indicator-session-697c5fa7233269b39bb89dd3a0b2e6adcd2b694a.tar.gz ayatana-indicator-session-697c5fa7233269b39bb89dd3a0b2e6adcd2b694a.tar.bz2 ayatana-indicator-session-697c5fa7233269b39bb89dd3a0b2e6adcd2b694a.zip |
Add the "Online Accounts" item to the session menu.
This item, beside opening the Online Accounts applet of the GNOME Control Center, also acts as an indicator, by turning red when some accounts need to be re-authenticated.. Approved by Charles Kerr, Matthew Paul Thomas, jenkins.
Diffstat (limited to 'src/session-menu-mgr.c')
-rw-r--r-- | src/session-menu-mgr.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/session-menu-mgr.c b/src/session-menu-mgr.c index 96fc2a0..643abd1 100644 --- a/src/session-menu-mgr.c +++ b/src/session-menu-mgr.c @@ -33,6 +33,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #include "session-menu-mgr.h" #include "shared-names.h" #include "users-service-dbus.h" +#include "online-accounts-mgr.h" #define DEBUG_SHOW_ALL FALSE @@ -88,6 +89,7 @@ struct _SessionMenuMgr DbusmenuMenuitem * lock_mi; DbusmenuMenuitem * lock_switch_mi; DbusmenuMenuitem * guest_mi; + DbusmenuMenuitem * online_accounts_mi; DbusmenuMenuitem * logout_mi; DbusmenuMenuitem * suspend_mi; DbusmenuMenuitem * hibernate_mi; @@ -113,6 +115,7 @@ struct _SessionMenuMgr DBusUPower * upower_proxy; SessionDbus * session_dbus; UsersServiceDbus * users_dbus_facade; + OnlineAccountsMgr * online_accounts_mgr; }; static SwitcherMode get_switcher_mode (SessionMenuMgr *); @@ -192,6 +195,9 @@ session_menu_mgr_init (SessionMenuMgr *mgr) G_CALLBACK(on_guest_logged_in_changed), mgr); init_upower_proxy (mgr); + + /* Online accounts menu item */ + mgr->online_accounts_mgr = online_accounts_mgr_new (); } static void @@ -212,6 +218,7 @@ session_menu_mgr_dispose (GObject *object) g_clear_object (&mgr->users_dbus_facade); g_clear_object (&mgr->top_mi); g_clear_object (&mgr->session_dbus); + g_clear_object (&mgr->online_accounts_mgr); g_slist_free (mgr->user_menuitems); mgr->user_menuitems = NULL; @@ -362,6 +369,29 @@ mi_new (const char * label) return mi; } +static void +check_online_accounts_status (SessionMenuMgr * mgr, DbusmenuMenuitem * mi) +{ + const gchar *disposition; + gboolean on_alert; + + disposition = + dbusmenu_menuitem_property_get (mi, DBUSMENU_MENUITEM_PROP_DISPOSITION); + on_alert = g_strcmp0 (disposition, DBUSMENU_MENUITEM_DISPOSITION_ALERT) == 0; + + mi_set_visible (mi, on_alert); +} + +static void +on_online_accounts_changed (SessionMenuMgr * mgr, const gchar * property, + GVariant *value, DbusmenuMenuitem *mi) +{ + if (g_strcmp0 (property, DBUSMENU_MENUITEM_PROP_DISPOSITION) == 0) + { + check_online_accounts_status(mgr, mi); + } +} + /*** **** Admin Menuitems **** <https://wiki.ubuntu.com/SystemMenu#Admin_items> @@ -396,6 +426,14 @@ build_admin_menuitems (SessionMenuMgr * mgr) G_CALLBACK(action_func_spawn_async), CMD_SYSTEM_SETTINGS); + mi = mgr->online_accounts_mi = + online_accounts_mgr_get_menu_item (mgr->online_accounts_mgr); + dbusmenu_menuitem_child_append (mgr->top_mi, mi); + g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, + G_CALLBACK(on_online_accounts_changed), + mgr); + check_online_accounts_status (mgr, mi); + mi = mi_new_separator (); dbusmenu_menuitem_child_append (mgr->top_mi, mi); } |