aboutsummaryrefslogtreecommitdiff
path: root/src/session-menu-mgr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/session-menu-mgr.c')
-rw-r--r--src/session-menu-mgr.c54
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 */
{