From 6ce3738b7e6c27f22cb949e2668e9ee47b4ced3f Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 30 Aug 2011 16:32:43 +0100 Subject: fixed the guest session panel string --- src/user-menu-mgr.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'src/user-menu-mgr.c') diff --git a/src/user-menu-mgr.c b/src/user-menu-mgr.c index 1b404d3..1747a8a 100644 --- a/src/user-menu-mgr.c +++ b/src/user-menu-mgr.c @@ -168,6 +168,10 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode) users_service_dbus_set_guest_item (self->users_dbus_interface, guest_mi); } + else{ + session_dbus_set_users_real_name (self->session_dbus_interface, + _("Guest")); + } GList * users = NULL; users = users_service_dbus_get_user_list (self->users_dbus_interface); @@ -175,8 +179,9 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode) gboolean user_menu_is_visible = FALSE; + // question for Ted, how to detect guest session is enabled. if (!greeter_mode){ - user_menu_is_visible = self->user_count > 1 || check_guest_session(); + user_menu_is_visible = TRUE;//self->user_count > 1 || check_guest_session(); } session_dbus_set_user_menu_visibility (self->session_dbus_interface, @@ -192,20 +197,13 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode) user->service = self->users_dbus_interface; gboolean current_user = g_strcmp0 (user->user_name, g_get_user_name()) == 0; if (current_user == TRUE){ - if (check_guest_session()){ - g_debug ("about to set the users real name to %s for user %s", - user->real_name, user->user_name); - session_dbus_set_users_real_name (self->session_dbus_interface, user->real_name); - } - else{ - g_debug ("about to set the users real name to GUEST"); - session_dbus_set_users_real_name (self->session_dbus_interface, - _("Guest")); - } + g_debug ("about to set the users real name to %s for user %s", + user->real_name, user->user_name); + session_dbus_set_users_real_name (self->session_dbus_interface, user->real_name); } - if (g_strcmp0(user->user_name, "guest") == 0) { + if (g_str_has_prefix(user->user_name, "guest-") == TRUE) { /* Check to see if the guest has sessions and so therefore should get a check mark. */ dbusmenu_menuitem_property_set_bool (guest_mi, -- cgit v1.2.3 From 267bef38a08ff9d7d401cf5027d1dc2876430ca4 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 30 Aug 2011 16:46:28 +0100 Subject: remove broken logic concerned with displaying the user menu --- src/user-menu-mgr.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/user-menu-mgr.c') diff --git a/src/user-menu-mgr.c b/src/user-menu-mgr.c index 1747a8a..c11e0b9 100644 --- a/src/user-menu-mgr.c +++ b/src/user-menu-mgr.c @@ -179,9 +179,8 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode) gboolean user_menu_is_visible = FALSE; - // question for Ted, how to detect guest session is enabled. if (!greeter_mode){ - user_menu_is_visible = TRUE;//self->user_count > 1 || check_guest_session(); + user_menu_is_visible = TRUE; } session_dbus_set_user_menu_visibility (self->session_dbus_interface, -- cgit v1.2.3 From a26d2f019ecbb67dacae83a07f7526759bb050f9 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 30 Aug 2011 17:17:19 +0100 Subject: remove guest checking in generic user list, the guest user is never included in the user list returned therefore the check is pointless --- src/user-menu-mgr.c | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) (limited to 'src/user-menu-mgr.c') diff --git a/src/user-menu-mgr.c b/src/user-menu-mgr.c index c11e0b9..a4308dd 100644 --- a/src/user-menu-mgr.c +++ b/src/user-menu-mgr.c @@ -192,7 +192,7 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode) for (u = users; u != NULL; u = g_list_next (u)) { user = u->data; - //g_debug ("%p: %s", user, user->real_name); + g_debug ("%s: %s", user->user_name, user->real_name); user->service = self->users_dbus_interface; gboolean current_user = g_strcmp0 (user->user_name, g_get_user_name()) == 0; if (current_user == TRUE){ @@ -201,21 +201,6 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode) session_dbus_set_users_real_name (self->session_dbus_interface, user->real_name); } - - if (g_str_has_prefix(user->user_name, "guest-") == TRUE) { - /* Check to see if the guest has sessions and so therefore should - get a check mark. */ - dbusmenu_menuitem_property_set_bool (guest_mi, - USER_ITEM_PROP_LOGGED_IN, - user->sessions != NULL); - /* If we're showing user accounts, keep going through the list */ - if (self->user_count > MINIMUM_USERS && self->user_count < MAXIMUM_USERS) { - continue; - } - /* If not, we can stop here */ - break; - } - if (self->user_count > MINIMUM_USERS && self->user_count < MAXIMUM_USERS) { mi = dbusmenu_menuitem_new (); dbusmenu_menuitem_property_set (mi, -- cgit v1.2.3 From 12f76de565f5af5d9d946d4ebc43b195c34bbea2 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 6 Sep 2011 16:01:58 +0100 Subject: added new field to gsettings to allow to hide the user menu --- src/user-menu-mgr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/user-menu-mgr.c') diff --git a/src/user-menu-mgr.c b/src/user-menu-mgr.c index a4308dd..98f6c8a 100644 --- a/src/user-menu-mgr.c +++ b/src/user-menu-mgr.c @@ -64,7 +64,7 @@ static void user_change (UsersServiceDbus *service, gpointer user_data); static void ensure_settings_client (); -static gboolean check_guest_session (void); +static gboolean is_this_guest_session (void); static void activate_guest_session (DbusmenuMenuitem * mi, guint timestamp, gpointer user_data); @@ -148,7 +148,7 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode) self->users_dbus_interface); } - if (check_guest_session ()) + if (is_this_guest_session ()) { guest_mi = dbusmenu_menuitem_new (); dbusmenu_menuitem_property_set (guest_mi, @@ -415,7 +415,7 @@ user_mgr_get_root_item (UserMenuMgr* self) /* Checks to see if we should show the guest suession item */ static gboolean -check_guest_session (void) +is_this_guest_session (void) { if (geteuid() < 500) { /* System users shouldn't have guest account shown. Mostly -- cgit v1.2.3 From cf5f3639b23ba4e2bd12fd4b987e67f7a3b3b1d4 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 6 Sep 2011 16:52:08 +0100 Subject: live cd user should now be turned off via new gsettings entry by casper --- src/settings-helper.c | 6 ++++++ src/settings-helper.h | 3 +++ src/user-menu-mgr.c | 20 ++++++++++---------- 3 files changed, 19 insertions(+), 10 deletions(-) (limited to 'src/user-menu-mgr.c') diff --git a/src/settings-helper.c b/src/settings-helper.c index 5a69d17..d70df95 100644 --- a/src/settings-helper.c +++ b/src/settings-helper.c @@ -52,6 +52,12 @@ supress_confirmations (void) { return g_settings_get_boolean (settings, SUPPRESS_KEY) ; } +gboolean +should_show_user_menu (void) { + build_settings(); + return g_settings_get_boolean (settings, SHOW_USER_MENU) ; +} + gboolean show_logout (void) { build_settings(); diff --git a/src/settings-helper.h b/src/settings-helper.h index 7b377ca..f17f8ea 100644 --- a/src/settings-helper.h +++ b/src/settings-helper.h @@ -36,6 +36,7 @@ with this program. If not, see . #define LOGOUT_KEY "suppress-logout-menuitem" #define RESTART_KEY "suppress-restart-menuitem" #define SHUTDOWN_KEY "suppress-shutdown-menuitem" +#define SHOW_USER_MENU "show-user-menu" #define LOCKDOWN_SCHEMA "org.gnome.desktop.lockdown" #define LOCKDOWN_KEY_USER "disable-user-switching" @@ -56,5 +57,7 @@ gboolean supress_confirmations (void); gboolean show_logout (void); gboolean show_restart (void); gboolean show_shutdown (void); +gboolean should_show_user_menu (void); + #endif /* __GCONF_HELPER__ */ diff --git a/src/user-menu-mgr.c b/src/user-menu-mgr.c index 98f6c8a..16c6e3b 100644 --- a/src/user-menu-mgr.c +++ b/src/user-menu-mgr.c @@ -18,7 +18,6 @@ with this program. If not, see . */ #include - #include "user-menu-mgr.h" #include "settings-helper.h" #include "dbus-shared-names.h" @@ -54,22 +53,19 @@ static void activate_online_accounts (DbusmenuMenuitem *mi, gpointer user_data); static void activate_user_accounts (DbusmenuMenuitem *mi, guint timestamp, - gpointer user_data); - + gpointer user_data); static void user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode); static gboolean check_new_session (); static void user_change (UsersServiceDbus *service, const gchar *user_id, gpointer user_data); - static void ensure_settings_client (); static gboolean is_this_guest_session (void); static void activate_guest_session (DbusmenuMenuitem * mi, guint timestamp, gpointer user_data); - G_DEFINE_TYPE (UserMenuMgr, user_menu_mgr, G_TYPE_OBJECT); @@ -177,14 +173,18 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode) users = users_service_dbus_get_user_list (self->users_dbus_interface); self->user_count = g_list_length(users); - gboolean user_menu_is_visible = FALSE; + gboolean user_menu_is_visible = should_show_user_menu(); - if (!greeter_mode){ - user_menu_is_visible = TRUE; + if (user_menu_is_visible == FALSE || greeter_mode == TRUE){ + session_dbus_set_user_menu_visibility (self->session_dbus_interface, + FALSE); + } + else{ + // This needs to be updated once the ability to query guest session support is available + session_dbus_set_user_menu_visibility (self->session_dbus_interface, + user_menu_is_visible); } - session_dbus_set_user_menu_visibility (self->session_dbus_interface, - user_menu_is_visible); if (self->user_count > MINIMUM_USERS && self->user_count < MAXIMUM_USERS) { users = g_list_sort (users, (GCompareFunc)compare_users_by_username); -- cgit v1.2.3 From 0bef37124f305aef894fa19f01911bc3553df3c5 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Wed, 7 Sep 2011 21:02:44 +0100 Subject: display manager HasGuestAccount now supported --- src/user-menu-mgr.c | 41 +++++++++++++++++++++----------------- src/users-service-dbus.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++-- src/users-service-dbus.h | 2 ++ 3 files changed, 74 insertions(+), 20 deletions(-) (limited to 'src/user-menu-mgr.c') diff --git a/src/user-menu-mgr.c b/src/user-menu-mgr.c index 16c6e3b..efb3f7d 100644 --- a/src/user-menu-mgr.c +++ b/src/user-menu-mgr.c @@ -65,6 +65,7 @@ static gboolean is_this_guest_session (void); static void activate_guest_session (DbusmenuMenuitem * mi, guint timestamp, gpointer user_data); + G_DEFINE_TYPE (UserMenuMgr, user_menu_mgr, G_TYPE_OBJECT); @@ -129,6 +130,25 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode) if (can_activate == TRUE) { + gboolean guest_enabled = users_service_dbus_guest_session_enabled (self->users_dbus_interface); + GList * users = NULL; + users = users_service_dbus_get_user_list (self->users_dbus_interface); + self->user_count = g_list_length(users); + + gboolean gsettings_user_menu_is_visible = should_show_user_menu(); + + if (gsettings_user_menu_is_visible == FALSE || greeter_mode == TRUE){ + session_dbus_set_user_menu_visibility (self->session_dbus_interface, + FALSE); + } + else{ + // This needs to be updated once the ability to query guest session support is available + session_dbus_set_user_menu_visibility (self->session_dbus_interface, + guest_enabled || self->user_count > 1); + } + + // TODO we should really return here if the menu is not going to be shown. + if (check_new_session ()){ switch_menuitem = dbusmenu_menuitem_new (); dbusmenu_menuitem_property_set (switch_menuitem, @@ -144,7 +164,7 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode) self->users_dbus_interface); } - if (is_this_guest_session ()) + if ( !is_this_guest_session () && guest_enabled) { guest_mi = dbusmenu_menuitem_new (); dbusmenu_menuitem_property_set (guest_mi, @@ -169,21 +189,6 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode) _("Guest")); } - GList * users = NULL; - users = users_service_dbus_get_user_list (self->users_dbus_interface); - self->user_count = g_list_length(users); - - gboolean user_menu_is_visible = should_show_user_menu(); - - if (user_menu_is_visible == FALSE || greeter_mode == TRUE){ - session_dbus_set_user_menu_visibility (self->session_dbus_interface, - FALSE); - } - else{ - // This needs to be updated once the ability to query guest session support is available - session_dbus_set_user_menu_visibility (self->session_dbus_interface, - user_menu_is_visible); - } if (self->user_count > MINIMUM_USERS && self->user_count < MAXIMUM_USERS) { @@ -420,10 +425,10 @@ is_this_guest_session (void) if (geteuid() < 500) { /* System users shouldn't have guest account shown. Mostly this would be the case of the guest user itself. */ - return FALSE; + return TRUE; } - return TRUE; + return FALSE; } /* Called when someone clicks on the guest session item. */ diff --git a/src/users-service-dbus.c b/src/users-service-dbus.c index 4b41f4b..7054a22 100644 --- a/src/users-service-dbus.c +++ b/src/users-service-dbus.c @@ -86,6 +86,7 @@ struct _UsersServiceDbusPrivate DBusGProxy *accounts_service_proxy; DBusGProxy *display_manager_proxy; + DBusGProxy *display_manager_props_proxy; DBusGProxy *ck_proxy; DBusGProxy *seat_proxy; DBusGProxy *session_proxy; @@ -95,6 +96,7 @@ struct _UsersServiceDbusPrivate DbusmenuMenuitem * guest_item; gchar * guest_session_id; + gboolean guest_session_enabled; }; #define USERS_SERVICE_DBUS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), USERS_SERVICE_DBUS_TYPE, UsersServiceDbusPrivate)) @@ -148,6 +150,8 @@ users_service_dbus_init (UsersServiceDbus *self) priv->count = 0; priv->guest_item = NULL; priv->guest_session_id = NULL; + + priv->guest_session_enabled = FALSE; /* Get the system bus */ priv->system_bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); @@ -194,6 +198,7 @@ users_service_dbus_finalize (GObject *object) G_OBJECT_CLASS (users_service_dbus_parent_class)->finalize (object); } + static void create_display_manager_proxy (UsersServiceDbus *self) { @@ -202,7 +207,7 @@ create_display_manager_proxy (UsersServiceDbus *self) GError *error = NULL; const gchar *cookie = NULL; gchar *seat = NULL; - + cookie = g_getenv ("XDG_SESSION_COOKIE"); if (cookie == NULL || cookie[0] == 0) { @@ -232,11 +237,18 @@ create_display_manager_proxy (UsersServiceDbus *self) return; } g_object_unref (dm_proxy); - + g_debug ("CREATING DM PROXIES WITH %s", seat); priv->display_manager_proxy = dbus_g_proxy_new_for_name (priv->system_bus, "org.freedesktop.DisplayManager", seat, "org.freedesktop.DisplayManager.Seat"); + + priv->display_manager_props_proxy = dbus_g_proxy_new_for_name (priv->system_bus, + "org.freedesktop.DisplayManager", + seat, + "org.freedesktop.DBus.Properties"); + + g_free (seat); if (!priv->display_manager_proxy) @@ -244,6 +256,32 @@ create_display_manager_proxy (UsersServiceDbus *self) g_warning ("Failed to get DisplayManager seat proxy."); return; } + if (!priv->display_manager_props_proxy) + { + g_warning ("Failed to get DisplayManager Properties seat proxy."); + return; + } + + GValue has_guest_session = {0}; + g_value_init (&has_guest_session, G_TYPE_BOOLEAN); + if (!dbus_g_proxy_call (priv->display_manager_props_proxy, + "Get", + &error, + G_TYPE_STRING, + "org.freedesktop.DisplayManager.Seat", + G_TYPE_STRING, + "HasGuestAccount", + G_TYPE_INVALID, + G_TYPE_VALUE, + &has_guest_session, + G_TYPE_INVALID)) + { + g_warning ("Failed to get the HasGuestSession property from the DisplayManager Properties seat proxy. error: %s", error->message); + g_error_free (error); + return; + } + g_debug ("HAS GUEST ACCOUNT = %i", g_value_get_boolean (&has_guest_session)); + priv->guest_session_enabled = g_value_get_boolean (&has_guest_session); } static void @@ -954,3 +992,12 @@ users_service_dbus_set_guest_item (UsersServiceDbus * self, DbusmenuMenuitem * m return; } + +gboolean users_service_dbus_guest_session_enabled (UsersServiceDbus * self) +{ + g_return_val_if_fail(IS_USERS_SERVICE_DBUS(self), FALSE); + UsersServiceDbusPrivate *priv = USERS_SERVICE_DBUS_GET_PRIVATE (self); + + return priv->guest_session_enabled; +} + diff --git a/src/users-service-dbus.h b/src/users-service-dbus.h index 4dbf2a4..25942df 100644 --- a/src/users-service-dbus.h +++ b/src/users-service-dbus.h @@ -85,6 +85,8 @@ gboolean users_service_dbus_activate_guest_session (UsersServiceDbus *self); void users_service_dbus_set_guest_item (UsersServiceDbus * self, DbusmenuMenuitem * mi); +gboolean users_service_dbus_guest_session_enabled (UsersServiceDbus * self); + G_END_DECLS #endif -- cgit v1.2.3