diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/service.c | 59 |
1 files changed, 49 insertions, 10 deletions
diff --git a/src/service.c b/src/service.c index e998d16..68fbc50 100644 --- a/src/service.c +++ b/src/service.c @@ -152,6 +152,14 @@ rebuild_settings_section_soon (IndicatorSessionService * self) **** ***/ +static gboolean +show_user_list (IndicatorSessionService * self) +{ + return g_settings_get_boolean (self->priv->indicator_settings, + "user-show-menu"); +} + + static GVariant * action_state_for_header (IndicatorSessionService * self) { @@ -240,6 +248,32 @@ on_user_changed (IndicatorSessionUsers * backend_users G_GNUC_UNUSED, } static void +maybe_add_users (IndicatorSessionService * self) +{ + if (!show_user_list (self)) + return; + + GList * uids, * l; + + uids = indicator_session_users_get_uids (self->priv->backend_users); + for (l=uids; l!=NULL; l=l->next) + add_user (self, GPOINTER_TO_UINT(l->data)); + g_list_free (uids); +} + + +static void +user_show_menu_changed (IndicatorSessionService * self) +{ + if (show_user_list (self)) + maybe_add_users (self); + else + g_hash_table_remove_all (self->priv->users); + + rebuild_switch_section_soon (self); +} + +static void on_user_removed (IndicatorSessionUsers * backend_users G_GNUC_UNUSED, guint uid, gpointer gself) @@ -457,9 +491,9 @@ serialize_icon_file (const gchar * filename) static GMenuModel * create_switch_section (IndicatorSessionService * self, int profile) { - gchar * str; GMenu * menu; GMenuItem * item; + gboolean want_accel; guint i; gpointer guser; GHashTableIter iter; @@ -474,6 +508,7 @@ create_switch_section (IndicatorSessionService * self, int profile) { const char * action = "indicator.switch-to-screensaver"; item = g_menu_item_new (_("Start Screen Saver"), action); + want_accel = TRUE; } else if (profile == PROFILE_LOCKSCREEN || indicator_session_guest_is_active (p->backend_guest)) @@ -481,6 +516,7 @@ create_switch_section (IndicatorSessionService * self, int profile) const char * action = "indicator.switch-to-greeter"; item = g_menu_item_new (ellipsis ? _("Switch Account…") : _("Switch Account"), action); + want_accel = FALSE; } else { @@ -491,11 +527,13 @@ create_switch_section (IndicatorSessionService * self, int profile) else item = g_menu_item_new (ellipsis ? _("Lock/Switch Account…") : _("Lock/Switch Account"), action); + + want_accel = TRUE; } - if (profile != PROFILE_LOCKSCREEN) + if (want_accel) { - str = g_settings_get_string (p->keybinding_settings, "screensaver"); + gchar * str = g_settings_get_string (p->keybinding_settings, "screensaver"); g_menu_item_set_attribute (item, "accel", "s", str); g_free (str); } @@ -514,7 +552,11 @@ create_switch_section (IndicatorSessionService * self, int profile) g_object_unref (item); } - /* build an array of all the users we know of */ + /* if we need to show the user list, build an array of all the users we know + * of, otherwise get out now */ + if (!show_user_list (self)) + return G_MENU_MODEL (menu); + users = g_ptr_array_new (); g_hash_table_iter_init (&iter, p->users); while (g_hash_table_iter_next (&iter, NULL, &guser)) @@ -1026,8 +1068,6 @@ static void /* cppcheck-suppress unusedFunction */ indicator_session_service_init (IndicatorSessionService * self) { - GList * l; - GList * uids; priv_t * p; gpointer gp; GIcon * icon; @@ -1055,10 +1095,7 @@ indicator_session_service_init (IndicatorSessionService * self) g_direct_equal, NULL, (GDestroyNotify)indicator_session_user_free); - uids = indicator_session_users_get_uids (p->backend_users); - for (l=uids; l!=NULL; l=l->next) - add_user (self, GPOINTER_TO_UINT(l->data)); - g_list_free (uids); + maybe_add_users (self); init_gactions (self); @@ -1105,6 +1142,8 @@ indicator_session_service_init (IndicatorSessionService * self) G_CALLBACK(rebuild_session_section_soon), self); g_signal_connect_swapped (gp, "changed::show-real-name-on-panel", G_CALLBACK(rebuild_header_soon), self); + g_signal_connect_swapped (gp, "changed::user-show-menu", + G_CALLBACK(user_show_menu_changed), self); /* watch for changes to the lock keybinding */ gp = p->keybinding_settings; |