diff options
-rw-r--r-- | ChangeLog | 60 | ||||
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/Makefile.am | 21 | ||||
-rw-r--r-- | src/Makefile.in | 21 | ||||
-rw-r--r-- | src/apt-transaction.c | 17 | ||||
-rw-r--r-- | src/apt-watcher.c | 7 | ||||
-rw-r--r-- | src/device-menu-mgr.c | 9 | ||||
-rw-r--r-- | src/gconf-helper.c | 6 | ||||
-rw-r--r-- | src/indicator-session.c | 6 | ||||
-rw-r--r-- | src/lock-helper.c | 25 | ||||
-rw-r--r-- | src/org.freedesktop.ConsoleKit.Manager.xml (renamed from src/consolekit-manager.xml) | 0 | ||||
-rw-r--r-- | src/org.freedesktop.ConsoleKit.Seat.xml | 164 | ||||
-rw-r--r-- | src/org.freedesktop.ConsoleKit.Session.xml (renamed from src/consolekit-session.xml) | 0 | ||||
-rw-r--r-- | src/session-service.c | 2 | ||||
-rw-r--r-- | src/udev-mgr.c | 6 | ||||
-rw-r--r-- | src/user-menu-mgr.c | 78 | ||||
-rw-r--r-- | src/user-menu-mgr.h | 3 | ||||
-rw-r--r-- | src/user-widget.c | 26 | ||||
-rw-r--r-- | src/users-service-dbus.c | 33 |
20 files changed, 420 insertions, 68 deletions
@@ -1,5 +1,65 @@ # Generated by Makefile. Do not edit. +2011-08-18 Conor Curran <conor.curran@canonical.com> + + Ellipses fixes + +2011-08-18 Conor Curran <conor.curran@canonical.com> + + merged the ellipsis strings fixes + +2011-06-12 Gabor Kelemen <kelemeng@gnome.hu> + + Use ellipsis character instead of full stops. Fixes LP: 621339 + +2011-08-18 Conor Curran <conor.curran@canonical.com> + + merge in the big fix branch + +2011-08-18 Conor Curran <conor.curran@canonical.com> + + greeter mode uses to flag whether we are showing the user menu or not + +2011-08-18 Conor Curran <conor.curran@canonical.com> + + merged mterry's move over to gsettings + +2011-08-17 Michael Terry <michael.terry@canonical.com> + + don't start/lock the screensaver from the login screen + +2011-08-18 Conor Curran <conor.curran@canonical.com> + + ted's merge in for correctly checking active sessions plus UI now correct with regards active sessions and guest session is also in + +2011-08-17 Ted Gould <ted@gould.cx> + + Debugging info and a protection + +2011-08-17 Ted Gould <ted@gould.cx> + + After setting up the signals get the initial list of sessions + +2011-08-17 Ted Gould <ted@gould.cx> + + Updated to DBus interface files currently in ConsoleKit and added the seat files as well + +2011-08-17 Conor Curran <conor.curran@canonical.com> + + added some trace to the add sessions for user method + +2011-08-17 Conor Curran <conor.curran@canonical.com> + + put guest item in place and fixed ticked icon on user menu + +2011-08-18 Conor Curran <conor.curran@canonical.com> + + updates item fix and restart awareness plus correct icons + +2011-08-12 Conor Curran <conor.curran@canonical.com> + + fixed the misguided software available flag + 2011-08-10 Conor Curran <conor.curran@canonical.com> bumped for new release @@ -2759,7 +2759,7 @@ fi # Define the identity of the package. PACKAGE=indicator-session - VERSION=0.3.1 + VERSION=0.3.2 cat >>confdefs.h <<_ACEOF diff --git a/configure.ac b/configure.ac index 19cc4bc..9f6b1ab 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ AC_INIT(src/indicator-session.c) AC_PREREQ(2.53) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(indicator-session, 0.3.1) +AM_INIT_AUTOMAKE(indicator-session, 0.3.2) AM_MAINTAINER_MODE 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/Makefile.in b/src/Makefile.in index f70131c..ae051cb 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -395,6 +395,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 \ @@ -404,8 +405,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 \ @@ -1035,19 +1037,26 @@ uninstall-am: uninstall-libexecPROGRAMS \ uninstall-sessionlibLTLIBRARIES -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 \ diff --git a/src/apt-transaction.c b/src/apt-transaction.c index 647f4ba..be1c57b 100644 --- a/src/apt-transaction.c +++ b/src/apt-transaction.c @@ -185,11 +185,18 @@ apt_transaction_receive_signal (GDBusProxy * proxy, g_variant_get (value, "(asasasasasasas)", &install, &reinstall, &remove, &purge, &upgrade, &downgrade, &keep); - gboolean upgrade_needed = (g_strv_length(upgrade) > 0) || - (g_strv_length(install) > 0) || - (g_strv_length(reinstall) > 0) || - (g_strv_length(remove) > 0) || - (g_strv_length(purge) > 0); + /* + g_debug ("upgrade package length %i", g_strv_length(upgrade)); + g_debug ("install package length %i", g_strv_length(install)); + g_debug ("reinstall package length %i", g_strv_length(reinstall)); + g_debug ("remove package length %i", g_strv_length(remove)); + g_debug ("purge package length %i", g_strv_length(purge)); + */ + gboolean upgrade_needed = (g_strv_length(upgrade) > 1) || + (g_strv_length(install) > 1) || + (g_strv_length(reinstall) > 1) || + (g_strv_length(remove) > 1) || + (g_strv_length(purge) > 1); if (upgrade_needed == TRUE){ current_state = UPDATES_AVAILABLE; } diff --git a/src/apt-watcher.c b/src/apt-watcher.c index 72a63ac..7d706a0 100644 --- a/src/apt-watcher.c +++ b/src/apt-watcher.c @@ -281,8 +281,9 @@ apt_watcher_transaction_state_update_cb (AptTransaction* trans, _("Reboot Required")); session_dbus_restart_required (self->session_dbus_interface); } + g_debug ("Finished with a reboot value of %i", reboot); g_object_unref (G_OBJECT(self->current_transaction)); - self->current_transaction = NULL; + self->current_transaction = NULL; } self->current_state = state; } @@ -327,9 +328,7 @@ static void apt_watcher_signal_cb ( GDBusProxy* proxy, self->current_transaction = apt_transaction_new (input, REAL); g_signal_connect (G_OBJECT(self->current_transaction), "state-update", - G_CALLBACK(apt_watcher_transaction_state_update_cb), self); - - + G_CALLBACK(apt_watcher_transaction_state_update_cb), self); } } g_variant_unref (parameters); diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 3223cf5..cbddaa3 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -523,7 +523,7 @@ device_menu_mgr_build_settings_items (DeviceMenuMgr* self) system_settings_menuitem = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (system_settings_menuitem, DBUSMENU_MENUITEM_PROP_LABEL, - _("System Settings...")); + _("System Settings…")); g_signal_connect (G_OBJECT(system_settings_menuitem), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_system_settings_with_context), ""); @@ -534,7 +534,7 @@ device_menu_mgr_build_settings_items (DeviceMenuMgr* self) display_settings_menuitem = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (display_settings_menuitem, DBUSMENU_MENUITEM_PROP_LABEL, - _("Displays...")); + _("Displays…")); g_signal_connect (G_OBJECT(display_settings_menuitem), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_system_settings_with_context), "display"); @@ -544,7 +544,7 @@ device_menu_mgr_build_settings_items (DeviceMenuMgr* self) bluetooth_settings_menuitem = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (bluetooth_settings_menuitem, DBUSMENU_MENUITEM_PROP_LABEL, - _("Bluetooth...")); + _("Bluetooth…")); g_signal_connect (G_OBJECT(bluetooth_settings_menuitem), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_system_settings_with_context), "bluetooth"); @@ -555,7 +555,7 @@ device_menu_mgr_build_settings_items (DeviceMenuMgr* self) login_settings_menuitem = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (login_settings_menuitem, DBUSMENU_MENUITEM_PROP_LABEL, - _("Startup Applications...")); + _("Startup Applications…")); g_signal_connect (G_OBJECT(login_settings_menuitem), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_session_properties), @@ -834,7 +834,6 @@ device_menu_mgr_ensure_gconf_client (DeviceMenuMgr* self) { if (!gconf_client) { gconf_client = gconf_client_get_default (); - gconf_client_add_dir(gconf_client, LOCKDOWN_DIR, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); gconf_client_notify_add (gconf_client, LOCKDOWN_DIR, diff --git a/src/gconf-helper.c b/src/gconf-helper.c index 4911dcb..93ae96f 100644 --- a/src/gconf-helper.c +++ b/src/gconf-helper.c @@ -82,9 +82,9 @@ static void update_menu_entries_callback (GConfClient *client, guint cnxn_id, GC dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->restart_mi, RESTART_ITEM_LABEL, _("Restart")); dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->shutdown_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Shut Down")); } else { - dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->logout_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Log Out...")); - dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->restart_mi, RESTART_ITEM_LABEL, _("Restart...")); - dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->shutdown_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Shut Down...")); + dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->logout_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Log Out…")); + dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->restart_mi, RESTART_ITEM_LABEL, _("Restart…")); + dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->shutdown_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Shut Down…")); } } } diff --git a/src/indicator-session.c b/src/indicator-session.c index bfe0b75..f6727d9 100644 --- a/src/indicator-session.c +++ b/src/indicator-session.c @@ -163,13 +163,11 @@ indicator_session_init (IndicatorSession *self) } self->users.label = GTK_LABEL (gtk_label_new (NULL)); - // Only show once we have a valid username - // gtk_widget_hide (GTK_WIDGET(self->users.label)); // devices self->devices.menu = GTK_MENU (dbusmenu_gtkmenu_new(INDICATOR_SESSION_DBUS_NAME, INDICATOR_SESSION_DBUS_OBJECT)); - self->devices.image = indicator_image_helper (ICON_DEFAULT); + self->devices.image = indicator_image_helper ("system-devices-panel"); gtk_widget_show (GTK_WIDGET(self->devices.menu)); gtk_widget_show (GTK_WIDGET(self->devices.image)); @@ -501,7 +499,7 @@ receive_signal (GDBusProxy * proxy, } else if (g_strcmp0(signal_name, "RebootRequired") == 0) { // TODO waiting on design to give me a name. - self->devices.image = indicator_image_helper (ICON_DEFAULT); + self->devices.image = indicator_image_helper ("system-devices-alert-panel"); } } diff --git a/src/lock-helper.c b/src/lock-helper.c index 9b15070..4c91aa5 100644 --- a/src/lock-helper.c +++ b/src/lock-helper.c @@ -20,12 +20,12 @@ with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <glib/gi18n.h> -#include <gconf/gconf-client.h> +#include <gio/gio.h> #include <dbus/dbus-glib.h> #include "lock-helper.h" -#define GCONF_DIR "/apps/gnome-screensaver" -#define GCONF_KEY GCONF_DIR "/lock_enabled" +#define SCREENSAVER_SCHEMA "org.gnome.desktop.screensaver" +#define SCREENSAVER_LOCK_ENABLED_KEY "lock-enabled" static DBusGProxy * gss_proxy = NULL; static GMainLoop * gss_mainloop = NULL; @@ -34,7 +34,7 @@ static DBusGProxyCall * cookie_call = NULL; static gboolean is_guest = FALSE; -static GConfClient * gconf_client = NULL; +static GSettings * settings = NULL; void build_gss_proxy (void); @@ -131,11 +131,11 @@ will_lock_screen (void) return FALSE; } - if (gconf_client == NULL) { - gconf_client = gconf_client_get_default(); + if (settings == NULL) { + settings = g_settings_new (SCREENSAVER_SCHEMA); } - return gconf_client_get_bool (gconf_client, GCONF_KEY, NULL); + return g_settings_get_boolean (settings, SCREENSAVER_LOCK_ENABLED_KEY); } /* When the screensave go active, if we've got a mainloop @@ -150,11 +150,22 @@ gss_active_changed (DBusGProxy * proxy, gboolean active, gpointer data) return; } +static gboolean +get_greeter_mode (void) +{ + const gchar *var; + var = g_getenv("INDICATOR_GREETER_MODE"); + return (g_strcmp0(var, "1") == 0); +} + /* Build the gss proxy and set up it's signals */ void build_gss_proxy (void) { if (gss_proxy == NULL) { + if (get_greeter_mode ()) + return; /* Don't start/lock the screensaver from the login screen */ + DBusGConnection * session_bus = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); g_return_if_fail(session_bus != NULL); 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/session-service.c b/src/session-service.c index fa212fd..753e304 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -118,7 +118,7 @@ main (int argc, char ** argv) if (!greeter_mode) { // Users - UserMenuMgr* user_mgr = user_menu_mgr_new (session_dbus); + UserMenuMgr* user_mgr = user_menu_mgr_new (session_dbus, greeter_mode); DbusmenuServer* users_server = dbusmenu_server_new (INDICATOR_USERS_DBUS_OBJECT); dbusmenu_server_set_root (users_server, user_mgr_get_root_item (user_mgr)); } diff --git a/src/udev-mgr.c b/src/udev-mgr.c index e3328ec..f66d862 100644 --- a/src/udev-mgr.c +++ b/src/udev-mgr.c @@ -254,7 +254,7 @@ debug_device (UdevMgr* self, GUdevDevice* device, UdevMgrDeviceAction action) { - const gchar* vendor; + /*const gchar* vendor; const gchar* product; const gchar* number; const gchar* name; @@ -269,7 +269,7 @@ debug_device (UdevMgr* self, g_strdup(product), g_strdup(number), g_strdup(name)); - + const gchar *const *list; const gchar *const *iter; char propstr[500]; @@ -290,7 +290,7 @@ debug_device (UdevMgr* self, strcat(propstr, " "); strcat(propstr, g_udev_device_get_property(device, *iter)); g_debug("%s", propstr); - } + }*/ } static void udev_mgr_handle_scsi_device (UdevMgr* self, diff --git a/src/user-menu-mgr.c b/src/user-menu-mgr.c index bf3b77f..44c1960 100644 --- a/src/user-menu-mgr.c +++ b/src/user-menu-mgr.c @@ -49,13 +49,19 @@ static gint compare_users_by_username (const gchar *a, static void activate_online_accounts (DbusmenuMenuitem *mi, guint timestamp, gpointer user_data); -static void user_menu_mgr_rebuild_items (UserMenuMgr *self); +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_gconf_client (); +static gboolean check_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); @@ -93,7 +99,7 @@ user_menu_mgr_class_init (UserMenuMgrClass *klass) /* Builds up the menu for us */ static void -user_menu_mgr_rebuild_items (UserMenuMgr *self) +user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode) { DbusmenuMenuitem *mi = NULL; DbusmenuMenuitem *guest_mi = NULL; @@ -121,6 +127,7 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self) /* Build all of the user switching items */ if (can_activate == TRUE) { + if (check_new_session ()){ switch_menuitem = dbusmenu_menuitem_new (); dbusmenu_menuitem_property_set (switch_menuitem, @@ -134,14 +141,41 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self) DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK (activate_new_session), self->users_dbus_interface); + } + + if (check_guest_session ()) + { + guest_mi = dbusmenu_menuitem_new (); + dbusmenu_menuitem_property_set (guest_mi, + DBUSMENU_MENUITEM_PROP_TYPE, + USER_ITEM_TYPE); + dbusmenu_menuitem_property_set (guest_mi, + USER_ITEM_PROP_NAME, + _("Guest Session")); + dbusmenu_menuitem_property_set_bool (guest_mi, + USER_ITEM_PROP_LOGGED_IN, + FALSE); + dbusmenu_menuitem_child_append (self->root_item, guest_mi); + g_signal_connect (G_OBJECT (guest_mi), + DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + G_CALLBACK (activate_guest_session), + self); + users_service_dbus_set_guest_item (self->users_dbus_interface, + guest_mi); } - + GList * users = NULL; users = users_service_dbus_get_user_list (self->users_dbus_interface); self->user_count = g_list_length(users); - g_debug ("USER COUNT = %i", self->user_count); - session_dbus_set_user_menu_visibility (self->session_dbus_interface, self->user_count > 1); + gboolean user_menu_is_visible = FALSE; + + if (!greeter_mode){ + user_menu_is_visible = self->user_count > 1; + } + + 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); @@ -232,7 +266,7 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self) DBUSMENU_CLIENT_TYPES_DEFAULT); dbusmenu_menuitem_property_set (online_accounts_item, DBUSMENU_MENUITEM_PROP_LABEL, - _("Online Accounts...")); + _("Online Accounts…")); g_signal_connect (G_OBJECT (online_accounts_item), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, @@ -354,15 +388,43 @@ user_mgr_get_root_item (UserMenuMgr* self) return self->root_item; } +/* Checks to see if we should show the guest suession item */ +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; + } + + return TRUE; +} + +/* Called when someone clicks on the guest session item. */ +static void +activate_guest_session (DbusmenuMenuitem * mi, guint timestamp, gpointer user_data) +{ + 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 (users_service_dbus_activate_guest_session(service)) { + return; + } +} + /* * Clean Entry Point */ -UserMenuMgr* user_menu_mgr_new (SessionDbus* session_dbus) +UserMenuMgr* user_menu_mgr_new (SessionDbus* session_dbus, gboolean greeter_mode) { UserMenuMgr* user_mgr = g_object_new (USER_TYPE_MENU_MGR, NULL); user_mgr->session_dbus_interface = session_dbus; - user_menu_mgr_rebuild_items (user_mgr); + user_menu_mgr_rebuild_items (user_mgr, greeter_mode); return user_mgr; } diff --git a/src/user-menu-mgr.h b/src/user-menu-mgr.h index ff2cb77..01823e7 100644 --- a/src/user-menu-mgr.h +++ b/src/user-menu-mgr.h @@ -45,7 +45,8 @@ struct _UserMenuMgrClass }; GType user_menu_mgr_get_type (void) G_GNUC_CONST; -UserMenuMgr* user_menu_mgr_new (SessionDbus* session_dbus); +UserMenuMgr* user_menu_mgr_new (SessionDbus* session_dbus, + gboolean greeter_mode); DbusmenuMenuitem* user_mgr_get_root_item (UserMenuMgr* self); G_END_DECLS diff --git a/src/user-widget.c b/src/user-widget.c index 9b046c5..6495e80 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -126,8 +126,6 @@ user_widget_init (UserWidget *self) priv->user_name = gtk_label_new (""); priv->container = gtk_hbox_new (FALSE, 0); - // TODO: - // Delete tick icon and draw primitively. priv->tick_icon = gtk_image_new_from_icon_name ("account-logged-in", GTK_ICON_SIZE_MENU); gtk_misc_set_alignment(GTK_MISC(priv->tick_icon), 1.0, 0.5); @@ -151,6 +149,10 @@ user_widget_init (UserWidget *self) gtk_widget_show_all (priv->container); gtk_container_add (GTK_CONTAINER (self), priv->container); + gtk_widget_show_all (priv->tick_icon); + gtk_widget_set_no_show_all (priv->tick_icon, TRUE); + gtk_widget_hide (priv->tick_icon); + // Fetch the drawing context. #if GTK_CHECK_VERSION(3, 0, 0) g_signal_connect_after (GTK_WIDGET(self), "draw", @@ -178,11 +180,6 @@ user_widget_finalize (GObject *object) G_OBJECT_CLASS (user_widget_parent_class)->finalize (object); } -/** - * We override the expose method to enable primitive drawing of the - * empty album art image and rounded rectangles on the album art. - */ - #if GTK_CHECK_VERSION(3, 0, 0) // Draw the radio dot and/or green check mark @@ -317,11 +314,16 @@ user_widget_set_twin_item (UserWidget* self, gtk_label_set_label (GTK_LABEL (priv->user_name), dbusmenu_menuitem_property_get (twin_item, USER_ITEM_PROP_NAME)); - //if (dbusmenu_menuitem_property_get_bool (twin_item, USER_ITEM_PROP_LOGGED_IN)) { - // gtk_widget_show(priv->tick_icon); - //} else { - gtk_widget_show(priv->tick_icon); - //} + if (dbusmenu_menuitem_property_get_bool (twin_item, USER_ITEM_PROP_LOGGED_IN)) { + g_debug ("%s USER HAS ACTIVE SESSIONS", + dbusmenu_menuitem_property_get (twin_item, USER_ITEM_PROP_NAME)); + gtk_widget_show(priv->tick_icon); + } + else { + g_debug ("%s USER DOESN'T HAVE ACTIVE SESSIONS", + dbusmenu_menuitem_property_get (twin_item, USER_ITEM_PROP_NAME)); + gtk_widget_hide(priv->tick_icon); + } g_debug("Using user icon for '%s' from file: %s", dbusmenu_menuitem_property_get(twin_item, USER_ITEM_PROP_NAME), icon_name); diff --git a/src/users-service-dbus.c b/src/users-service-dbus.c index 83edaa3..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 @@ -556,7 +583,11 @@ static void add_sessions_for_user (UsersServiceDbus *self, UserData *user) { - g_return_if_fail(IS_USERS_SERVICE_DBUS(self)); + g_return_if_fail (IS_USERS_SERVICE_DBUS(self)); + + g_debug ("!!!!!!!!!! - add_sessions_for_user %i %s", + (int)user->uid, user->user_name); + UsersServiceDbusPrivate *priv = USERS_SERVICE_DBUS_GET_PRIVATE (self); GError *error; GPtrArray *sessions; |