aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.bzrignore5
-rw-r--r--configure.ac14
-rw-r--r--data/Makefile.am35
-rw-r--r--data/com.canonical.indicator.session.gschema.xml.in24
-rw-r--r--data/indicator-session.convert5
-rw-r--r--data/indicator-session.schemas.in50
-rw-r--r--po/POTFILES.in4
-rw-r--r--src/Makefile.am29
-rw-r--r--src/apt-transaction.c17
-rw-r--r--src/apt-watcher.c7
-rw-r--r--src/device-menu-mgr.c76
-rw-r--r--src/gtk-logout-helper.c2
-rw-r--r--src/indicator-session.c6
-rw-r--r--src/lock-helper.c25
-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/session-service.c2
-rw-r--r--src/settings-helper.c (renamed from src/gconf-helper.c)102
-rw-r--r--src/settings-helper.h (renamed from src/gconf-helper.h)26
-rw-r--r--src/udev-mgr.c6
-rw-r--r--src/user-menu-mgr.c99
-rw-r--r--src/user-menu-mgr.h3
-rw-r--r--src/user-widget.c26
-rw-r--r--src/users-service-dbus.c33
25 files changed, 483 insertions, 277 deletions
diff --git a/.bzrignore b/.bzrignore
index 96575ef..3a062ec 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -1,6 +1,6 @@
compile
m4
-po
+po/indicator-session.pot
src/libmessaging.la
src/libmessaging_la-indicator-messages.lo
config.guess.cdbs-orig
@@ -200,3 +200,6 @@ src/Makefile
modified:
.bzrignore
src/libsession_la-user-widget.lo
+consolekit-seat-client.h
+data/com.canonical.indicator.session.gschema.valid
+data/com.canonical.indicator.session.gschema.xml
diff --git a/configure.ac b/configure.ac
index 19cc4bc..0240b9c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,10 +4,12 @@ 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
+GLIB_GSETTINGS
+
IT_PROG_INTLTOOL([0.35.0])
AC_ISC_POSIX
@@ -89,16 +91,6 @@ AS_IF([test "x$with_gtk" = x3],
AC_SUBST(GTKLOGOUTHELPER_CFLAGS)
AC_SUBST(GTKLOGOUTHELPER_LIBS)
-AC_PATH_PROG(GCONFTOOL, gconftool-2)
-dnl Specify the gconf configuration source,
-dnl default to xml::$(sysconfdir)/gconf/gconf.xml.defaults
-
-AM_GCONF_SOURCE_2
-
-PKG_CHECK_MODULES(GCONF, gconf-2.0 >= 2.0)
-AC_SUBST(GCONF_CFLAGS)
-AC_SUBST(GCONF_LIBS)
-
###########################
# Check to see if we're local
###########################
diff --git a/data/Makefile.am b/data/Makefile.am
index 1f522d7..27328fb 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -9,37 +9,22 @@ dbus_services_DATA = $(service_in_files:.service.in=.service)
%.service: %.service.in
sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@
-##############################
-# GConf Schema
-##############################
-
-schemadir = \
- $(GCONF_SCHEMA_FILE_DIR)
-
-schema_in_files = \
- indicator-session.schemas.in
-
-schema_DATA = \
- $(schema_in_files:.schemas.in=.schemas)
-
@INTLTOOL_SCHEMAS_RULE@
+@INTLTOOL_XML_NOMERGE_RULE@
+@GSETTINGS_RULES@
+gsettings_SCHEMAS = com.canonical.indicator.session.gschema.xml
+
+convertdir = $(datadir)/GConf/gsettings
+dist_convert_DATA = indicator-session.convert
-#$(dbus_services_DATA): $(service_in_files) Makefile
-# sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@
EXTRA_DIST = \
$(service_in_files) \
- $(schema_in_files)
+ $(gsettings_SCHEMAS:.xml=.xml.in)
+
CLEANFILES = \
$(dbus_services_DATA) \
- $(schema_DATA)
-
-if GCONF_SCHEMAS_INSTALL
-install-data-local:
- GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) \
- gconftool-2 --makefile-install-rule $(schema_DATA)
-else
-install-data-local:
-endif
+ $(gsettings_SCHEMAS)
+
diff --git a/data/com.canonical.indicator.session.gschema.xml.in b/data/com.canonical.indicator.session.gschema.xml.in
new file mode 100644
index 0000000..0cb6815
--- /dev/null
+++ b/data/com.canonical.indicator.session.gschema.xml.in
@@ -0,0 +1,24 @@
+<schemalist>
+ <schema id="com.canonical.indicator.session" path="/apps/indicator-session/">
+ <key name="suppress-logout-restart-shutdown" type="b">
+ <default>false</default>
+ <_summary>Suppress the dialog to confirm logout, restart and shutdown action</_summary>
+ <_description>Whether or not to show confirmation dialogs for logout, restart and shutdown actions.</_description>
+ </key>
+ <key name="suppress-logout-menuitem" type="b">
+ <default>false</default>
+ <_summary>Remove the Log Out item from the session menu</_summary>
+ <_description>Makes it so that the logout button doesn't show in the session menu.</_description>
+ </key>
+ <key name="suppress-restart-menuitem" type="b">
+ <default>false</default>
+ <_summary>Remove the Restart item from the session menu</_summary>
+ <_description>Makes it so that the restart button doesn't show in the session menu.</_description>
+ </key>
+ <key name="suppress-shutdown-menuitem" type="b">
+ <default>false</default>
+ <_summary>Remove the shutdown item from the session menu</_summary>
+ <_description>Makes it so that the shutdown button doesn't show in the session menu.</_description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/data/indicator-session.convert b/data/indicator-session.convert
new file mode 100644
index 0000000..3a087a6
--- /dev/null
+++ b/data/indicator-session.convert
@@ -0,0 +1,5 @@
+[com.canonical.indicator.session]
+suppress_logout_restart_shutdown = /apps/indicator-session/suppress_logout_restart_shutdown
+suppress_logout_menuitem = /apps/indicator-session/suppress_logout_menuitem
+suppress_restart_menuitem = /apps/indicator-session/suppress_restart_menuitem
+suppress_shutdown_menuitem = /apps/indicator-session/suppress_shutdown_menuitem
diff --git a/data/indicator-session.schemas.in b/data/indicator-session.schemas.in
deleted file mode 100644
index f4e70da..0000000
--- a/data/indicator-session.schemas.in
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-<gconfschemafile>
- <schemalist>
- <schema>
- <key>/schemas/apps/indicator-session/suppress_logout_restart_shutdown</key>
- <applyto>/apps/indicator-session/suppress_logout_restart_shutdown</applyto>
- <owner>indicator-session</owner>
- <type>bool</type>
- <default>FALSE</default>
- <locale name="C">
- <short>Suppress the dialog to confirm logout, restart and shutdown action</short>
- <long>Whether or not to show confirmation dialogs for logout,
- restart and shutdown actions.</long>
- </locale>
- </schema>
- <schema>
- <key>/schemas/apps/indicator-session/suppress_logout_menuitem</key>
- <applyto>/apps/indicator-session/suppress_logout_menuitem</applyto>
- <owner>indicator-session</owner>
- <type>bool</type>
- <default>FALSE</default>
- <locale name="C">
- <short>Remove the Log Out item from the session menu</short>
- <long>Makes it so that the logout button doesn't show in the session menu.</long>
- </locale>
- </schema>
- <schema>
- <key>/schemas/apps/indicator-session/suppress_restart_menuitem</key>
- <applyto>/apps/indicator-session/suppress_restart_menuitem</applyto>
- <owner>indicator-session</owner>
- <type>bool</type>
- <default>FALSE</default>
- <locale name="C">
- <short>Remove the Restart item from the session menu</short>
- <long>Makes it so that the restart button doesn't show in the session menu.</long>
- </locale>
- </schema>
- <schema>
- <key>/schemas/apps/indicator-session/suppress_shutdown_menuitem</key>
- <applyto>/apps/indicator-session/suppress_shutdown_menuitem</applyto>
- <owner>indicator-session</owner>
- <type>bool</type>
- <default>FALSE</default>
- <locale name="C">
- <short>Remove the shutdown item from the session menu</short>
- <long>Makes it so that the shutdown button doesn't show in the session menu.</long>
- </locale>
- </schema>
- </schemalist>
-</gconfschemafile>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 08eff5f..df89ec9 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,7 +1,7 @@
[encoding: UTF-8]
-data/indicator-session.schemas.in
+data/com.canonical.indicator.session.gschema.xml.in
data/extra-sessions/classic-desktop.desktop.in.in
-src/gconf-helper.c
+src/settings-helper.c
src/lock-helper.c
src/gtk-logout-helper.c
src/dialog.c
diff --git a/src/Makefile.am b/src/Makefile.am
index 36a1d1f..dba0a9e 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 \
@@ -89,11 +96,11 @@ indicator_session_service_SOURCES = \
session-dbus.h \
gen-session-dbus.xml.c \
dbusmenu-shared.h \
- gconf-helper.c \
+ settings-helper.c \
users-service-dbus.h \
users-service-dbus.c \
user-menu-mgr.h \
- user-menu-mgr.c \
+ user-menu-mgr.c \
device-menu-mgr.h \
device-menu-mgr.c \
apt-watcher.h \
@@ -119,8 +126,8 @@ indicator_session_service_LDADD = \
gtk_logout_helper_SOURCES = \
gtk-logout-helper.c \
- gconf-helper.c \
- gconf-helper.h \
+ settings-helper.c \
+ settings-helper.h \
dialog.c \
dialog.h
@@ -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/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 1dd2d7f..c298682 100644
--- a/src/device-menu-mgr.c
+++ b/src/device-menu-mgr.c
@@ -21,7 +21,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include <libdbusmenu-gtk3/menuitem.h>
#include "device-menu-mgr.h"
-#include "gconf-helper.h"
+#include "settings-helper.h"
#include "dbus-shared-names.h"
#include "dbusmenu-shared.h"
#include "lock-helper.h"
@@ -44,7 +44,8 @@ struct _DeviceMenuMgr
UdevMgr* udev_mgr;
};
-static GConfClient *gconf_client = NULL;
+static GSettings *lockdown_settings = NULL;
+static GSettings *keybinding_settings = NULL;
static DbusmenuMenuitem *lock_menuitem = NULL;
static DbusmenuMenuitem *system_settings_menuitem = NULL;
static DbusmenuMenuitem *display_settings_menuitem = NULL;
@@ -72,7 +73,7 @@ static gboolean allow_suspend = TRUE;
static DBusGProxy * up_main_proxy = NULL;
static DBusGProxy * up_prop_proxy = NULL;
-static void device_menu_mgr_ensure_gconf_client (DeviceMenuMgr* self);
+static void device_menu_mgr_ensure_settings_client (DeviceMenuMgr* self);
static void setup_restart_watch (DeviceMenuMgr* self);
static void setup_up (DeviceMenuMgr* self);
static void device_menu_mgr_rebuild_items (DeviceMenuMgr *self);
@@ -128,21 +129,18 @@ device_menu_mgr_class_init (DeviceMenuMgrClass *klass)
// TODO
// Is this needed anymore
static void
-lockdown_changed (GConfClient *client,
- guint cnxd_id,
- GConfEntry *entry,
+lockdown_changed (GSettings * settings,
+ const gchar * key,
gpointer user_data)
{
- DeviceMenuMgr* self = DEVICE_MENU_MGR (user_data);
- GConfValue *value = gconf_entry_get_value (entry);
- const gchar *key = gconf_entry_get_key (entry);
+ DeviceMenuMgr* self = DEVICE_MENU_MGR (user_data);
- if (value == NULL || key == NULL) {
+ if (key == NULL) {
return;
}
if (g_strcmp0 (key, LOCKDOWN_KEY_USER) == 0 ||
- g_strcmp0 (key, LOCKDOWN_KEY_SCREENSAVER) == 0) {
+ g_strcmp0 (key, LOCKDOWN_KEY_SCREENSAVER) == 0) {
device_menu_mgr_rebuild_items(self);
}
@@ -150,23 +148,19 @@ lockdown_changed (GConfClient *client,
}
static void
-keybinding_changed (GConfClient *client,
- guint cnxd_id,
- GConfEntry *entry,
+keybinding_changed (GSettings *settings,
+ const gchar *key,
gpointer user_data)
{
- GConfValue *value = gconf_entry_get_value (entry);
- const gchar *key = gconf_entry_get_key (entry);
-
- if (value == NULL || key == NULL) {
+ if (key == NULL) {
return;
}
if (g_strcmp0 (key, KEY_LOCK_SCREEN) == 0) {
- g_debug("Keybinding changed to: %s", gconf_value_get_string(value));
+ g_debug("Keybinding changed to: %s", g_settings_get_string(settings, key));
if (lock_menuitem != NULL) {
dbusmenu_menuitem_property_set_shortcut_string (lock_menuitem,
- gconf_value_get_string(value));
+ g_settings_get_string(settings, key));
}
}
return;
@@ -176,9 +170,9 @@ keybinding_changed (GConfClient *client,
locking the screen. If not, lock it. */
static void
lock_if_possible (DeviceMenuMgr* self) {
- device_menu_mgr_ensure_gconf_client (self);
+ device_menu_mgr_ensure_settings_client (self);
- if (!gconf_client_get_bool (gconf_client, LOCKDOWN_KEY_SCREENSAVER, NULL)) {
+ if (!g_settings_get_boolean (lockdown_settings, LOCKDOWN_KEY_SCREENSAVER)) {
lock_screen (NULL, 0, NULL);
}
return;
@@ -659,10 +653,9 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode)
/* Make sure we have a valid GConf client, and build one
if needed */
- device_menu_mgr_ensure_gconf_client (self);
- can_lockscreen = !gconf_client_get_bool ( gconf_client,
- LOCKDOWN_KEY_SCREENSAVER,
- NULL);
+ device_menu_mgr_ensure_settings_client (self);
+ can_lockscreen = !g_settings_get_boolean (lockdown_settings,
+ LOCKDOWN_KEY_SCREENSAVER);
/* Lock screen item */
if (can_lockscreen) {
lock_menuitem = dbusmenu_menuitem_new();
@@ -670,7 +663,7 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode)
DBUSMENU_MENUITEM_PROP_LABEL,
_("Lock Screen"));
- gchar * shortcut = gconf_client_get_string(gconf_client, KEY_LOCK_SCREEN, NULL);
+ gchar * shortcut = g_settings_get_string(keybinding_settings, KEY_LOCK_SCREEN);
if (shortcut != NULL) {
g_debug("Lock screen shortcut: %s", shortcut);
dbusmenu_menuitem_property_set_shortcut_string(lock_menuitem, shortcut);
@@ -830,27 +823,18 @@ setup_restart_watch (DeviceMenuMgr* self)
/* Ensures that we have a GConf client and if we build one
set up the signal handler. */
static void
-device_menu_mgr_ensure_gconf_client (DeviceMenuMgr* self)
+device_menu_mgr_ensure_settings_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,
- lockdown_changed,
- self,
- NULL,
- NULL);
-
- gconf_client_add_dir(gconf_client, KEYBINDING_DIR, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
- gconf_client_notify_add (gconf_client,
- KEYBINDING_DIR,
- keybinding_changed,
- self,
- NULL,
- NULL);
+ if (!lockdown_settings) {
+ lockdown_settings = g_settings_new (LOCKDOWN_SCHEMA);
+ g_signal_connect(lockdown_settings, "changed", G_CALLBACK(lockdown_changed), self);
+ }
+ if (!keybinding_settings) {
+ keybinding_settings = g_settings_new (KEYBINDING_SCHEMA);
+ g_signal_connect(lockdown_settings, "changed::" KEY_LOCK_SCREEN, G_CALLBACK(keybinding_changed), self);
}
+
+ return;
}
DbusmenuMenuitem*
diff --git a/src/gtk-logout-helper.c b/src/gtk-logout-helper.c
index b8923c6..33dce3a 100644
--- a/src/gtk-logout-helper.c
+++ b/src/gtk-logout-helper.c
@@ -26,7 +26,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include <gtk/gtk.h>
#include <dbus/dbus-glib.h>
#include "dialog.h"
-#include "gconf-helper.h"
+#include "settings-helper.h"
static void
consolekit_fallback (LogoutDialogType action)
diff --git a/src/indicator-session.c b/src/indicator-session.c
index 80bf63f..c980378 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/gconf-helper.c b/src/settings-helper.c
index 93ae96f..5a69d17 100644
--- a/src/gconf-helper.c
+++ b/src/settings-helper.c
@@ -1,5 +1,5 @@
/*
-A small wrapper utility for connecting to gconf.
+A small wrapper utility for connecting to GSettings.
Copyright 2009 Canonical Ltd.
@@ -19,9 +19,7 @@ You should have received a copy of the GNU General Public License along
with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-
-#include <gconf/gconf-client.h>
-
+#include <gio/gio.h>
#include <glib/gi18n.h>
#include <dbus/dbus-glib.h>
@@ -31,53 +29,52 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include <libdbusmenu-glib/menuitem.h>
#include "dbus-shared-names.h"
-#include "gconf-helper.h"
+#include "settings-helper.h"
+
+static GSettings* settings = NULL;
-static GConfClient * gconf_client = NULL;
static guint confirmation_notify = 0;
static guint logout_notify = 0;
static guint restart_notify = 0;
static guint shutdown_notify = 0;
+static void
+build_settings (void) {
+ if(!settings) {
+ settings = g_settings_new (SESSION_SCHEMA);
+ }
+ return;
+}
+
gboolean
supress_confirmations (void) {
- if(!gconf_client) {
- gconf_client = gconf_client_get_default ();
- }
- return gconf_client_get_bool (gconf_client, SUPPRESS_KEY, NULL) ;
+ build_settings();
+ return g_settings_get_boolean (settings, SUPPRESS_KEY) ;
}
gboolean
show_logout (void) {
- if(!gconf_client) {
- gconf_client = gconf_client_get_default ();
- }
- return !gconf_client_get_bool (gconf_client, LOGOUT_KEY, NULL) ;
+ build_settings();
+ return !g_settings_get_boolean (settings, LOGOUT_KEY) ;
}
gboolean
show_restart (void) {
- if(!gconf_client) {
- gconf_client = gconf_client_get_default ();
- }
- return !gconf_client_get_bool (gconf_client, RESTART_KEY, NULL) ;
+ build_settings();
+ return !g_settings_get_boolean (settings, RESTART_KEY) ;
}
gboolean
show_shutdown (void) {
- if(!gconf_client) {
- gconf_client = gconf_client_get_default ();
- }
- return !gconf_client_get_bool (gconf_client, SHUTDOWN_KEY, NULL) ;
+ build_settings();
+ return !g_settings_get_boolean (settings, SHUTDOWN_KEY) ;
}
-static void update_menu_entries_callback (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer data) {
+static void update_menu_entries_callback (GSettings * settings, const gchar * key, gpointer data) {
RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi = (RestartShutdownLogoutMenuItems*) data;
- GConfValue * value = gconf_entry_get_value (entry);
- const gchar * key = gconf_entry_get_key (entry);
if(g_strcmp0 (key, SUPPRESS_KEY) == 0) {
- if (gconf_value_get_bool (value)) {
+ if (g_settings_get_boolean (settings, key)) {
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"));
@@ -90,80 +87,65 @@ static void update_menu_entries_callback (GConfClient *client, guint cnxn_id, GC
}
static void
-update_logout_callback (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer data) {
+update_logout_callback (GSettings * settings, const gchar * key, gpointer data) {
DbusmenuMenuitem * mi = (DbusmenuMenuitem*) data;
- GConfValue * value = gconf_entry_get_value (entry);
- const gchar * key = gconf_entry_get_key (entry);
if(g_strcmp0 (key, LOGOUT_KEY) == 0) {
- dbusmenu_menuitem_property_set_bool(mi, DBUSMENU_MENUITEM_PROP_VISIBLE, !gconf_value_get_bool(value));
+ dbusmenu_menuitem_property_set_bool(mi, DBUSMENU_MENUITEM_PROP_VISIBLE, !g_settings_get_boolean(settings, key));
}
}
static void
-update_restart_callback (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer data) {
+update_restart_callback (GSettings * settings, const gchar * key, gpointer data) {
DbusmenuMenuitem * mi = (DbusmenuMenuitem*) data;
- GConfValue * value = gconf_entry_get_value (entry);
- const gchar * key = gconf_entry_get_key (entry);
if(g_strcmp0 (key, RESTART_KEY) == 0) {
- dbusmenu_menuitem_property_set_bool(mi, DBUSMENU_MENUITEM_PROP_VISIBLE, !gconf_value_get_bool(value));
+ dbusmenu_menuitem_property_set_bool(mi, DBUSMENU_MENUITEM_PROP_VISIBLE, !g_settings_get_boolean(settings, key));
}
}
static void
-update_shutdown_callback (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer data) {
+update_shutdown_callback (GSettings * settings, const gchar * key, gpointer data) {
DbusmenuMenuitem * mi = (DbusmenuMenuitem*) data;
- GConfValue * value = gconf_entry_get_value (entry);
- const gchar * key = gconf_entry_get_key (entry);
if(g_strcmp0 (key, SHUTDOWN_KEY) == 0) {
- dbusmenu_menuitem_property_set_bool(mi, DBUSMENU_MENUITEM_PROP_VISIBLE, !gconf_value_get_bool(value));
+ dbusmenu_menuitem_property_set_bool(mi, DBUSMENU_MENUITEM_PROP_VISIBLE, !g_settings_get_boolean(settings, key));
}
}
void
update_menu_entries(RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi) {
/* If we don't have a client, build one. */
- if(!gconf_client) {
- gconf_client = gconf_client_get_default ();
- }
-
- /* If we've not gotten any notifications, then we need
- to add the directory for notifications to come from. */
- if (confirmation_notify == 0 || logout_notify == 0) {
- gconf_client_add_dir (gconf_client, GLOBAL_DIR,
- GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
- }
+ build_settings();
if (confirmation_notify != 0) {
- gconf_client_notify_remove (gconf_client, confirmation_notify);
+ g_signal_handler_disconnect (settings, confirmation_notify);
confirmation_notify = 0;
}
if (logout_notify != 0) {
- gconf_client_notify_remove (gconf_client, logout_notify);
+ g_signal_handler_disconnect (settings, logout_notify);
logout_notify = 0;
}
if (restart_notify != 0) {
- gconf_client_notify_remove (gconf_client, restart_notify);
+ g_signal_handler_disconnect (settings, restart_notify);
restart_notify = 0;
}
if (shutdown_notify != 0) {
- gconf_client_notify_remove (gconf_client, shutdown_notify);
+ g_signal_handler_disconnect (settings, shutdown_notify);
shutdown_notify = 0;
}
- confirmation_notify = gconf_client_notify_add (gconf_client, SUPPRESS_KEY,
- update_menu_entries_callback, restart_shutdown_logout_mi, NULL, NULL);
- logout_notify = gconf_client_notify_add (gconf_client, LOGOUT_KEY,
- update_logout_callback, restart_shutdown_logout_mi->logout_mi, NULL, NULL);
- restart_notify = gconf_client_notify_add (gconf_client, RESTART_KEY,
- update_restart_callback, restart_shutdown_logout_mi->restart_mi, NULL, NULL);
- shutdown_notify = gconf_client_notify_add (gconf_client, SHUTDOWN_KEY,
- update_shutdown_callback, restart_shutdown_logout_mi->shutdown_mi, NULL, NULL);
+ confirmation_notify = g_signal_connect (settings, "changed::" SUPPRESS_KEY,
+ G_CALLBACK(update_menu_entries_callback), restart_shutdown_logout_mi);
+ logout_notify = g_signal_connect (settings, "changed::" LOGOUT_KEY,
+ G_CALLBACK(update_logout_callback), restart_shutdown_logout_mi->logout_mi);
+ restart_notify = g_signal_connect (settings, "changed::" RESTART_KEY,
+ G_CALLBACK(update_restart_callback), restart_shutdown_logout_mi->restart_mi);
+ shutdown_notify = g_signal_connect (settings, "changed::" SHUTDOWN_KEY,
+ G_CALLBACK(update_shutdown_callback), restart_shutdown_logout_mi->shutdown_mi);
return;
}
diff --git a/src/gconf-helper.h b/src/settings-helper.h
index 039b309..7b377ca 100644
--- a/src/gconf-helper.h
+++ b/src/settings-helper.h
@@ -1,5 +1,5 @@
/*
-A small wrapper utility for connecting to gconf.
+A small wrapper utility for connecting to GSettings.
Copyright 2009 Canonical Ltd.
@@ -23,8 +23,6 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef __GCONF_HELPER_H__
#define __GCONF_HELPER_H__ 1
-#include <gconf/gconf-client.h>
-
#include <glib/gi18n.h>
#include <dbus/dbus-glib.h>
@@ -33,17 +31,17 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include <libdbusmenu-glib/server.h>
#include <libdbusmenu-glib/menuitem.h>
-#define GLOBAL_DIR "/apps/indicator-session"
-#define SUPPRESS_KEY GLOBAL_DIR "/suppress_logout_restart_shutdown"
-#define LOGOUT_KEY GLOBAL_DIR "/suppress_logout_menuitem"
-#define RESTART_KEY GLOBAL_DIR "/suppress_restart_menuitem"
-#define SHUTDOWN_KEY GLOBAL_DIR "/suppress_shutdown_menuitem"
-
-#define LOCKDOWN_DIR "/desktop/gnome/lockdown"
-#define LOCKDOWN_KEY_USER LOCKDOWN_DIR "/disable_user_switching"
-#define LOCKDOWN_KEY_SCREENSAVER LOCKDOWN_DIR "/disable_lock_screen"
-#define KEYBINDING_DIR "/apps/gnome_settings_daemon/keybindings"
-#define KEY_LOCK_SCREEN KEYBINDING_DIR "/screensaver"
+#define SESSION_SCHEMA "com.canonical.indicator.session"
+#define SUPPRESS_KEY "suppress-logout-restart-shutdown"
+#define LOGOUT_KEY "suppress-logout-menuitem"
+#define RESTART_KEY "suppress-restart-menuitem"
+#define SHUTDOWN_KEY "suppress-shutdown-menuitem"
+
+#define LOCKDOWN_SCHEMA "org.gnome.desktop.lockdown"
+#define LOCKDOWN_KEY_USER "disable-user-switching"
+#define LOCKDOWN_KEY_SCREENSAVER "disable-lock-screen"
+#define KEYBINDING_SCHEMA "org.gnome.settings-daemon.plugins.media-keys"
+#define KEY_LOCK_SCREEN "screensaver"
typedef struct _RestartShutdownLogoutMenuItems
{
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 8477354..30ea0ff 100644
--- a/src/user-menu-mgr.c
+++ b/src/user-menu-mgr.c
@@ -20,13 +20,13 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include <libdbusmenu-glib/client.h>
#include "user-menu-mgr.h"
-#include "gconf-helper.h"
+#include "settings-helper.h"
#include "dbus-shared-names.h"
#include "dbusmenu-shared.h"
#include "lock-helper.h"
#include "users-service-dbus.h"
-static GConfClient * gconf_client = NULL;
+static GSettings* settings = NULL;
static DbusmenuMenuitem *switch_menuitem = NULL;
struct _UserMenuMgr
@@ -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 void ensure_settings_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;
@@ -104,11 +110,11 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self)
/* Make sure we have a valid GConf client, and build one
if needed */
- ensure_gconf_client ();
+ ensure_settings_client ();
/* Check to see which menu items we're allowed to have */
can_activate = users_service_dbus_can_activate_session (self->users_dbus_interface) &&
- !gconf_client_get_bool (gconf_client, LOCKDOWN_KEY_USER, NULL);
+ !g_settings_get_boolean (settings, LOCKDOWN_KEY_USER);
/* Remove the old menu items if that makes sense */
children = dbusmenu_menuitem_take_children (self->root_item);
@@ -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);
@@ -254,9 +288,9 @@ check_new_session ()
locking the screen. If not, lock it. */
static void
lock_if_possible (void) {
- ensure_gconf_client ();
+ ensure_settings_client ();
- if (!gconf_client_get_bool (gconf_client, LOCKDOWN_KEY_SCREENSAVER, NULL)) {
+ if (!g_settings_get_boolean (settings, LOCKDOWN_KEY_SCREENSAVER)) {
lock_screen(NULL, 0, NULL);
}
@@ -339,13 +373,12 @@ user_change (UsersServiceDbus *service,
/* Ensures that we have a GConf client and if we build one
set up the signal handler. */
static void
-ensure_gconf_client ()
+ensure_settings_client ()
{
- if (!gconf_client) {
- gconf_client = gconf_client_get_default ();
- gconf_client_add_dir (gconf_client, LOCKDOWN_DIR, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
- gconf_client_add_dir (gconf_client, KEYBINDING_DIR, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+ if(!settings) {
+ settings = g_settings_new (LOCKDOWN_SCHEMA);
}
+ return;
}
DbusmenuMenuitem*
@@ -354,15 +387,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;