aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConor Curran <conor.curran@canonical.com>2011-08-18 12:20:19 +0100
committerConor Curran <conor.curran@canonical.com>2011-08-18 12:20:19 +0100
commit1909ed838f14287d156e3ad9d619f7604534dae6 (patch)
treee8105894067736a8e919a76a872338fef518c38d
parentce792a6c67408779b7741194a8aa19caa86e0ef8 (diff)
parentc2266fe6e875f30b409b97755aeca512fc2be690 (diff)
downloadayatana-indicator-session-1909ed838f14287d156e3ad9d619f7604534dae6.tar.gz
ayatana-indicator-session-1909ed838f14287d156e3ad9d619f7604534dae6.tar.bz2
ayatana-indicator-session-1909ed838f14287d156e3ad9d619f7604534dae6.zip
ted's merge in for correctly checking active sessions plus UI now correct with regards active sessions and guest session is also in
-rw-r--r--src/Makefile.am21
-rw-r--r--src/org.freedesktop.ConsoleKit.Manager.xml (renamed from src/consolekit-manager.xml)0
-rw-r--r--src/org.freedesktop.ConsoleKit.Seat.xml164
-rw-r--r--src/org.freedesktop.ConsoleKit.Session.xml (renamed from src/consolekit-session.xml)0
-rw-r--r--src/user-menu-mgr.c33
-rw-r--r--src/users-service-dbus.c27
6 files changed, 214 insertions, 31 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 36a1d1f..3bfd790 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -25,19 +25,26 @@ libsession_la_CFLAGS = \
libsession_la_LIBADD = $(APPLET_LIBS)
libsession_la_LDFLAGS = -module -avoid-version
-consolekit-manager-client.h: $(srcdir)/consolekit-manager.xml
+consolekit-manager-client.h: $(srcdir)/org.freedesktop.ConsoleKit.Manager.xml
dbus-binding-tool \
--prefix=_consolekit_manager_client \
--mode=glib-client \
--output=consolekit-manager-client.h \
- $(srcdir)/consolekit-manager.xml
+ $(srcdir)/org.freedesktop.ConsoleKit.Manager.xml
-consolekit-session-client.h: $(srcdir)/consolekit-session.xml
+consolekit-seat-client.h: $(srcdir)/org.freedesktop.ConsoleKit.Seat.xml
+ dbus-binding-tool \
+ --prefix=_consolekit_seat_client \
+ --mode=glib-client \
+ --output=consolekit-seat-client.h \
+ $(srcdir)/org.freedesktop.ConsoleKit.Seat.xml
+
+consolekit-session-client.h: $(srcdir)/org.freedesktop.ConsoleKit.Session.xml
dbus-binding-tool \
--prefix=_consolekit_session_client \
--mode=glib-client \
--output=consolekit-session-client.h \
- $(srcdir)/consolekit-session.xml
+ $(srcdir)/org.freedesktop.ConsoleKit.Session.xml
display-manager-client.h: $(srcdir)/display-manager.xml
dbus-binding-tool \
@@ -143,6 +150,7 @@ gtk_logout_helper_LDADD = \
BUILT_SOURCES = \
consolekit-manager-client.h \
+ consolekit-seat-client.h \
consolekit-session-client.h \
display-manager-client.h \
gen-session-dbus.xml.c \
@@ -152,8 +160,9 @@ BUILT_SOURCES = \
accounts-service-user-client.h
EXTRA_DIST = \
- consolekit-manager.xml \
- consolekit-session.xml \
+ org.freedesktop.ConsoleKit.Manager.xml \
+ org.freedesktop.ConsoleKit.Seat.xml \
+ org.freedesktop.ConsoleKit.Session.xml \
display-manager.xml \
session-dbus.xml \
upower.xml \
diff --git a/src/consolekit-manager.xml b/src/org.freedesktop.ConsoleKit.Manager.xml
index f903b55..f903b55 100644
--- a/src/consolekit-manager.xml
+++ b/src/org.freedesktop.ConsoleKit.Manager.xml
diff --git a/src/org.freedesktop.ConsoleKit.Seat.xml b/src/org.freedesktop.ConsoleKit.Seat.xml
new file mode 100644
index 0000000..d95990b
--- /dev/null
+++ b/src/org.freedesktop.ConsoleKit.Seat.xml
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+
+ <interface name="org.freedesktop.ConsoleKit.Seat">
+ <doc:doc>
+ <doc:description>
+ <doc:para>A seat is a collection of sessions and a set of hardware (usually at
+least a keyboard and mouse). Only one session may be active on a
+seat at a time.</doc:para>
+ </doc:description>
+ </doc:doc>
+
+ <method name="GetId">
+ <arg name="sid" direction="out" type="o">
+ <doc:doc>
+ <doc:summary>Seat ID</doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>Returns the ID for Seat.</doc:para>
+ </doc:description>
+ </doc:doc>
+ </method>
+
+ <method name="GetSessions">
+ <arg name="sessions" direction="out" type="ao">
+ <doc:doc>
+ <doc:summary>an array of Session IDs</doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>This gets a list of all the <doc:ref type="interface" to="Session">Sessions</doc:ref>
+ that are currently attached to this seat.</doc:para>
+ <doc:para>Each Session ID is an D-Bus object path for the object that implements the
+ <doc:ref type="interface" to="Session">Session</doc:ref> interface.</doc:para>
+ </doc:description>
+ </doc:doc>
+ </method>
+
+ <method name="GetDevices">
+ <arg name="devices" direction="out" type="a(ss)">
+ <doc:doc>
+ <doc:summary>an array of devices</doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>This gets a list of all the devices
+ that are currently associated with this seat.</doc:para>
+ <doc:para>Each device is an D-Bus structure that represents
+ the device type and the device id.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ </method>
+
+ <method name="GetActiveSession">
+ <arg name="ssid" direction="out" type="o">
+ <doc:doc>
+ <doc:summary>Session ID</doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>Gets the Session ID that is currently active on this Seat.</doc:para>
+ <doc:para>Returns NULL if there is no active session.</doc:para>
+ </doc:description>
+ </doc:doc>
+ </method>
+
+ <method name="CanActivateSessions">
+ <arg name="can_activate" direction="out" type="b">
+ <doc:doc>
+ <doc:summary>TRUE if seat supports session activation</doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description><doc:para>Used to determine whether the seat supports session activation.</doc:para>
+ </doc:description>
+ </doc:doc>
+ </method>
+
+ <method name="ActivateSession">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <arg name="ssid" direction="in" type="o">
+ <doc:doc>
+ <doc:summary>Session ID</doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>Attempt to activate the specified session. In most
+ cases, if successful, this will cause the session to
+ become visible and take control of the hardware that is
+ associated with this seat.</doc:para>
+ </doc:description>
+ <doc:seealso><doc:ref type="method" to="Session.Activate">Activate()</doc:ref></doc:seealso>
+ </doc:doc>
+ </method>
+
+ <signal name="ActiveSessionChanged">
+ <arg name="ssid" type="o">
+ <doc:doc>
+ <doc:summary>Session ID</doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>Emitted when the active session has changed.</doc:para>
+ </doc:description>
+ </doc:doc>
+ </signal>
+ <signal name="SessionAdded">
+ <arg name="ssid" type="o">
+ <doc:doc>
+ <doc:summary>Session ID</doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>Emitted when a session has been added to the seat.</doc:para>
+ </doc:description>
+ </doc:doc>
+ </signal>
+ <signal name="SessionRemoved">
+ <arg name="ssid" type="o">
+ <doc:doc>
+ <doc:summary>Session ID</doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>Emitted when a session has been removed from the seat.</doc:para>
+ </doc:description>
+ </doc:doc>
+ </signal>
+ <signal name="DeviceAdded">
+ <arg name="device" type="(ss)">
+ <doc:doc>
+ <doc:summary>Device structure</doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>Emitted when a device has been associated with the seat.</doc:para>
+ </doc:description>
+ </doc:doc>
+ </signal>
+ <signal name="DeviceRemoved">
+ <arg name="device" type="(ss)">
+ <doc:doc>
+ <doc:summary>Device structure</doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>Emitted when a device has been dissociated from the seat.</doc:para>
+ </doc:description>
+ </doc:doc>
+ </signal>
+ </interface>
+</node>
diff --git a/src/consolekit-session.xml b/src/org.freedesktop.ConsoleKit.Session.xml
index b6e1cdb..b6e1cdb 100644
--- a/src/consolekit-session.xml
+++ b/src/org.freedesktop.ConsoleKit.Session.xml
diff --git a/src/user-menu-mgr.c b/src/user-menu-mgr.c
index 6f9f53a..f2757ad 100644
--- a/src/user-menu-mgr.c
+++ b/src/user-menu-mgr.c
@@ -26,8 +26,6 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include "lock-helper.h"
#include "users-service-dbus.h"
-#define GUEST_SESSION_LAUNCHER "/usr/share/gdm/guest-session/guest-session-launch"
-
static GConfClient * gconf_client = NULL;
static DbusmenuMenuitem *switch_menuitem = NULL;
@@ -227,7 +225,7 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self)
}
dbusmenu_menuitem_property_set_bool (mi,
USER_ITEM_PROP_LOGGED_IN,
- /*user->sessions != NULL*/FALSE);
+ user->sessions != NULL);
if (user->icon_file != NULL && user->icon_file[0] != '\0') {
dbusmenu_menuitem_property_set(mi, USER_ITEM_PROP_ICON, user->icon_file);
} else {
@@ -397,11 +395,6 @@ check_guest_session (void)
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;
}
@@ -410,25 +403,15 @@ check_guest_session (void)
static void
activate_guest_session (DbusmenuMenuitem * mi, guint timestamp, gpointer user_data)
{
- GError * error = NULL;
- UserData *user = (UserData *)user_data;
- UsersServiceDbus *service = user->service;
+ g_return_if_fail (USER_IS_MENU_MGR (user_data));
+ UserMenuMgr* user_mgr = USER_MENU_MGR(user_data);
+ UsersServiceDbus *service = user_mgr->users_dbus_interface;
lock_if_possible();
-
- if (dbusmenu_menuitem_property_get_bool(mi, USER_ITEM_PROP_LOGGED_IN)) {
- if (users_service_dbus_activate_guest_session(service)) {
- return;
- }
- g_warning("Unable to activate guest session, falling back to command line activation.");
- }
-
- if (!g_spawn_command_line_async(GUEST_SESSION_LAUNCHER " --no-lock", &error)) {
- g_warning("Unable to start guest session: %s", error->message);
- g_error_free(error);
- }
-
- return;
+
+ if (users_service_dbus_activate_guest_session(service)) {
+ return;
+ }
}
diff --git a/src/users-service-dbus.c b/src/users-service-dbus.c
index 07de28e..e7507a4 100644
--- a/src/users-service-dbus.c
+++ b/src/users-service-dbus.c
@@ -36,6 +36,7 @@
#include "accounts-service-client.h"
#include "consolekit-manager-client.h"
#include "consolekit-session-client.h"
+#include "consolekit-seat-client.h"
#define CK_ADDR "org.freedesktop.ConsoleKit"
#define CK_SESSION_IFACE "org.freedesktop.ConsoleKit.Session"
@@ -315,6 +316,28 @@ create_ck_proxy (UsersServiceDbus *self)
}
}
+/* Get the initial sessions when starting up */
+static void
+get_cksessions_cb (DBusGProxy *proxy, GPtrArray * sessions, GError * error, gpointer userdata)
+{
+ if (error != NULL) {
+ g_warning("Unable to get initial sessions: %s", error->message);
+ return;
+ }
+
+ /* If there's no error we should at least get an
+ array of zero entries */
+ g_return_if_fail(sessions != NULL);
+ g_debug("Got %d initial sessions", sessions->len);
+
+ int i;
+ for (i = 0; i < sessions->len; i++) {
+ seat_proxy_session_added(proxy, g_ptr_array_index(sessions, i), USERS_SERVICE_DBUS(userdata));
+ }
+
+ return;
+}
+
static void
create_seat_proxy (UsersServiceDbus *self)
{
@@ -363,6 +386,10 @@ create_seat_proxy (UsersServiceDbus *self)
G_CALLBACK (seat_proxy_session_removed),
self,
NULL);
+
+ org_freedesktop_ConsoleKit_Seat_get_sessions_async (priv->seat_proxy, get_cksessions_cb, self);
+
+ return;
}
static void