From 015f1c1636e6c3b3d84375121ed14a760d76ee8e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Jul 2009 11:28:50 -0500 Subject: Switching from dummy users to useful menuitems --- src/users-service.c | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) (limited to 'src/users-service.c') diff --git a/src/users-service.c b/src/users-service.c index 409a1d0..66dc86e 100644 --- a/src/users-service.c +++ b/src/users-service.c @@ -1,4 +1,6 @@ +#include + #include #include @@ -10,20 +12,31 @@ static DbusmenuMenuitem * root_menuitem = NULL; static GMainLoop * mainloop = NULL; -gchar * dummies[] = { - "Bob", "Jim", "Alvin", "Mary", NULL -}; +static void +activate_guest_session (DbusmenuMenuitem * mi, gpointer user_data) +{ + +} + +static void +activate_new_session (DbusmenuMenuitem * mi, gpointer user_data) +{ + +} static void -dummy_users (DbusmenuMenuitem * root) { - int count; - for (count = 0; dummies[count] != NULL; count++) { - DbusmenuMenuitem * mi = dbusmenu_menuitem_new(); - g_debug("Creating item: %d %s", dbusmenu_menuitem_get_id(mi), dummies[count]); - g_debug("\tRoot ID: %d", dbusmenu_menuitem_get_id(root)); - dbusmenu_menuitem_property_set(mi, "label", dummies[count]); - dbusmenu_menuitem_child_add_position(root, mi, count); - } +create_items (DbusmenuMenuitem * root) { + DbusmenuMenuitem * mi = NULL; + + mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set(mi, "label", _("Guest Session")); + dbusmenu_menuitem_child_append(root, mi); + g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_guest_session), NULL); + + mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set(mi, "label", _("New Session...")); + dbusmenu_menuitem_child_append(root, mi); + g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_new_session), NULL); return; } @@ -51,7 +64,7 @@ main (int argc, char ** argv) root_menuitem = dbusmenu_menuitem_new(); g_debug("Root ID: %d", dbusmenu_menuitem_get_id(root_menuitem)); - dummy_users(root_menuitem); + create_items(root_menuitem); DbusmenuServer * server = dbusmenu_server_new(INDICATOR_USERS_DBUS_OBJECT); dbusmenu_server_set_root(server, root_menuitem); -- cgit v1.2.3 From c1b327315d06e8082dad23380d360a22a0542c4b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Jul 2009 12:44:32 -0500 Subject: Setting the menu item to activate the guest user session --- src/users-service.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'src/users-service.c') diff --git a/src/users-service.c b/src/users-service.c index 66dc86e..39c30bb 100644 --- a/src/users-service.c +++ b/src/users-service.c @@ -9,13 +9,33 @@ #include "dbus-shared-names.h" +#define GUEST_SESSION_LAUNCHER "/usr/share/gdm/guest-session/guest-session-launch" + static DbusmenuMenuitem * root_menuitem = NULL; static GMainLoop * mainloop = NULL; +static gboolean +check_guest_session (void) +{ + if (geteuid() < 500) { + /* System users shouldn't have guest account shown. Mosly + this would be the case of the guest user itself. */ + return FALSE; + } + if (!g_file_test(GUEST_SESSION_LAUNCHER, G_FILE_TEST_IS_EXECUTABLE)) { + /* It doesn't appear that the Guest session stuff is + installed. So let's not use it then! */ + return FALSE; + } + + return TRUE; +} + static void activate_guest_session (DbusmenuMenuitem * mi, gpointer user_data) { - + gchar *argv[] = {GUEST_SESSION_LAUNCHER, NULL }; + g_spawn_sync (NULL, argv, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL); } static void @@ -28,10 +48,12 @@ static void create_items (DbusmenuMenuitem * root) { DbusmenuMenuitem * mi = NULL; - mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set(mi, "label", _("Guest Session")); - dbusmenu_menuitem_child_append(root, mi); - g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_guest_session), NULL); + if (check_guest_session()) { + mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set(mi, "label", _("Guest Session")); + dbusmenu_menuitem_child_append(root, mi); + g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_guest_session), NULL); + } mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set(mi, "label", _("New Session...")); -- cgit v1.2.3 From bde7584ca763892c43a1db195d27a27e231a68fe Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Jul 2009 14:02:40 -0500 Subject: Turning everythign into a check and a way to start a new fancy login session --- src/users-service.c | 58 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 8 deletions(-) (limited to 'src/users-service.c') diff --git a/src/users-service.c b/src/users-service.c index 39c30bb..b8b5c2f 100644 --- a/src/users-service.c +++ b/src/users-service.c @@ -11,6 +11,10 @@ #define GUEST_SESSION_LAUNCHER "/usr/share/gdm/guest-session/guest-session-launch" +static DBusGConnection * session_bus = NULL; +static DBusGConnection * system_bus = NULL; +static DBusGProxy * bus_proxy = NULL; +static DBusGProxy * gdm_proxy = NULL; static DbusmenuMenuitem * root_menuitem = NULL; static GMainLoop * mainloop = NULL; @@ -34,14 +38,50 @@ check_guest_session (void) static void activate_guest_session (DbusmenuMenuitem * mi, gpointer user_data) { - gchar *argv[] = {GUEST_SESSION_LAUNCHER, NULL }; - g_spawn_sync (NULL, argv, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL); + GError * error = NULL; + if (!g_spawn_command_line_async(GUEST_SESSION_LAUNCHER, &error)) { + g_warning("Unable to start guest session: %s", error->message); + g_error_free(error); + } + + return; +} + +static gboolean +check_new_session (void) +{ + if (system_bus == NULL) { + system_bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL); + } + + if (system_bus == NULL) { + return FALSE; + } + + if (gdm_proxy == NULL) { + gdm_proxy = dbus_g_proxy_new_for_name(system_bus, + "org.gnome.DisplayManager", + "/org/gnome/DisplayManager/LocalDisplayFactory", + "org.gnome.DisplayManager.LocalDisplayFactory"); + } + + if (gdm_proxy == NULL) { + return FALSE; + } + + return TRUE; } static void activate_new_session (DbusmenuMenuitem * mi, gpointer user_data) { + GError * error = NULL; + if (!g_spawn_command_line_async("gdmflexiserver -s", &error)) { + g_warning("Unable to start guest session: %s", error->message); + g_error_free(error); + } + return; } static void @@ -55,10 +95,12 @@ create_items (DbusmenuMenuitem * root) { g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_guest_session), NULL); } - mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set(mi, "label", _("New Session...")); - dbusmenu_menuitem_child_append(root, mi); - g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_new_session), NULL); + if (check_new_session()) { + mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set(mi, "label", _("New Session...")); + dbusmenu_menuitem_child_append(root, mi); + g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_new_session), NULL); + } return; } @@ -68,8 +110,8 @@ main (int argc, char ** argv) { g_type_init(); - DBusGConnection * connection = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); - DBusGProxy * bus_proxy = dbus_g_proxy_new_for_name(connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); + session_bus = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); + bus_proxy = dbus_g_proxy_new_for_name(session_bus, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); GError * error = NULL; guint nameret = 0; -- cgit v1.2.3 From fdb5cc0addc4ad4a801854879a2b1869da18073f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Jul 2009 14:04:15 -0500 Subject: Expanding command line option to make it easier to read --- src/users-service.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/users-service.c') diff --git a/src/users-service.c b/src/users-service.c index b8b5c2f..731bc4d 100644 --- a/src/users-service.c +++ b/src/users-service.c @@ -76,7 +76,7 @@ static void activate_new_session (DbusmenuMenuitem * mi, gpointer user_data) { GError * error = NULL; - if (!g_spawn_command_line_async("gdmflexiserver -s", &error)) { + if (!g_spawn_command_line_async("gdmflexiserver --startnew", &error)) { g_warning("Unable to start guest session: %s", error->message); g_error_free(error); } -- cgit v1.2.3