diff options
Diffstat (limited to 'src/session-menu-mgr.c')
-rw-r--r-- | src/session-menu-mgr.c | 54 |
1 files changed, 34 insertions, 20 deletions
diff --git a/src/session-menu-mgr.c b/src/session-menu-mgr.c index f5b5bcf..427f274 100644 --- a/src/session-menu-mgr.c +++ b/src/session-menu-mgr.c @@ -65,7 +65,8 @@ typedef enum SWITCHER_MODE_SCREENSAVER, SWITCHER_MODE_LOCK, SWITCHER_MODE_SWITCH, - SWITCHER_MODE_SWITCH_OR_LOCK + SWITCHER_MODE_SWITCH_OR_LOCK, + SWITCHER_MODE_NONE } SwitcherMode; @@ -247,23 +248,27 @@ session_menu_mgr_class_init (SessionMenuMgrClass * klass) static void on_upower_properties_changed (SessionMenuMgr * mgr) { - gboolean b; gboolean need_refresh = FALSE; - /* suspend */ - b = dbus_upower_get_can_suspend (mgr->upower_proxy); - if (mgr->can_suspend != b) + if (mgr->upower_proxy != NULL) { - mgr->can_suspend = b; - need_refresh = TRUE; - } + gboolean b; - /* hibernate */ - b = dbus_upower_get_can_hibernate (mgr->upower_proxy); - if (mgr->can_hibernate != b) - { - mgr->can_hibernate = b; - need_refresh = TRUE; + /* suspend */ + b = dbus_upower_get_can_suspend (mgr->upower_proxy); + if (mgr->can_suspend != b) + { + mgr->can_suspend = b; + need_refresh = TRUE; + } + + /* hibernate */ + b = dbus_upower_get_can_hibernate (mgr->upower_proxy); + if (mgr->can_hibernate != b) + { + mgr->can_hibernate = b; + need_refresh = TRUE; + } } if (need_refresh) @@ -770,6 +775,7 @@ user_menuitem_new (AccountsUser * user, SessionMenuMgr * mgr) /* set the is-current-user property */ const gboolean is_current_user = !g_strcmp0 (g_get_user_name(), accounts_user_get_user_name(user)); + dbusmenu_menuitem_property_set_bool (mi, USER_ITEM_PROP_IS_CURRENT_USER, is_current_user); @@ -952,9 +958,12 @@ build_user_menuitems (SessionMenuMgr * mgr) g_list_free (users); /* separator */ - mi = mi_new_separator (); - dbusmenu_menuitem_child_add_position (mgr->top_mi, mi, pos++); - items = g_slist_prepend (items, mi); + if (mode != SWITCHER_MODE_SCREENSAVER && !is_guest && guest_allowed) + { + mi = mi_new_separator (); + dbusmenu_menuitem_child_add_position (mgr->top_mi, mi, pos++); + items = g_slist_prepend (items, mi); + } if (current_real_name != NULL) { @@ -1069,9 +1078,14 @@ static void action_func_switch_to_user (AccountsUser * user) { SessionMenuMgr * mgr = user_get_mgr (user); + g_return_if_fail (mgr != NULL); - action_func_lock (mgr); - users_service_dbus_activate_user_session (mgr->users_dbus_facade, user); + + if (g_strcmp0 (g_get_user_name(), accounts_user_get_user_name(user)) != 0) + { + action_func_lock (mgr); + users_service_dbus_activate_user_session (mgr->users_dbus_facade, user); + } } static void @@ -1143,7 +1157,7 @@ get_switcher_mode (SessionMenuMgr * mgr) if (!can_lock && !can_switch) /* hmm, quite an extreme lockdown */ { - mode = SWITCHER_MODE_SCREENSAVER; + mode = SWITCHER_MODE_NONE; } else if (is_this_live_session()) /* live sessions can't lock or switch */ { |