aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKen VanDine <ken.vandine@canonical.com>2011-08-25 09:03:29 -0400
committerKen VanDine <ken.vandine@canonical.com>2011-08-25 09:03:29 -0400
commit6bacf14ef210f0ff8a2cc179f235d70906485698 (patch)
tree3d4b01e0562a1c44e396ce0a45004d618757728d /src
parent92cb2ff94b4efb98437639a7c37fa894efa03556 (diff)
parentce36ed0c35e58f0244a090250ab7f96b8e5915ac (diff)
downloadayatana-indicator-session-6bacf14ef210f0ff8a2cc179f235d70906485698.tar.gz
ayatana-indicator-session-6bacf14ef210f0ff8a2cc179f235d70906485698.tar.bz2
ayatana-indicator-session-6bacf14ef210f0ff8a2cc179f235d70906485698.zip
* New upstream release.
- User menu should still show even if there is only 1 user (LP: #831758) - Bluetooth item in menu not needed (LP: #825111) - Newly created users are not added to the menu until next login (LP: #552048) - Users list in shutdown menu is not updated on user deletion (LP: #557608) - should use gsettings rather than gconf (LP: #656323)
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am8
-rw-r--r--src/Makefile.in72
-rw-r--r--src/apt-watcher.c3
-rw-r--r--src/dbus-shared-names.h6
-rw-r--r--src/device-menu-mgr.c103
-rw-r--r--src/dialog.c8
-rw-r--r--src/gtk-logout-helper.c2
-rw-r--r--src/indicator-session.c8
-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.c68
-rw-r--r--src/user-menu-mgr.c115
-rw-r--r--src/user-widget.c509
-rw-r--r--src/users-service-dbus.c60
14 files changed, 775 insertions, 315 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 3bfd790..dba0a9e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -96,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 \
@@ -126,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
diff --git a/src/Makefile.in b/src/Makefile.in
index ae051cb..0b5282d 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -40,7 +40,10 @@ libexec_PROGRAMS = indicator-session-service$(EXEEXT) \
subdir = src
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -85,11 +88,11 @@ libsession_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
PROGRAMS = $(libexec_PROGRAMS)
am_gtk_logout_helper_OBJECTS = \
gtk_logout_helper-gtk-logout-helper.$(OBJEXT) \
- gtk_logout_helper-gconf-helper.$(OBJEXT) \
+ gtk_logout_helper-settings-helper.$(OBJEXT) \
gtk_logout_helper-dialog.$(OBJEXT)
gtk_logout_helper_OBJECTS = $(am_gtk_logout_helper_OBJECTS)
gtk_logout_helper_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1)
gtk_logout_helper_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(gtk_logout_helper_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
@@ -99,7 +102,7 @@ am_indicator_session_service_OBJECTS = \
indicator_session_service-session-service.$(OBJEXT) \
indicator_session_service-session-dbus.$(OBJEXT) \
indicator_session_service-gen-session-dbus.xml.$(OBJEXT) \
- indicator_session_service-gconf-helper.$(OBJEXT) \
+ indicator_session_service-settings-helper.$(OBJEXT) \
indicator_session_service-users-service-dbus.$(OBJEXT) \
indicator_session_service-user-menu-mgr.$(OBJEXT) \
indicator_session_service-device-menu-mgr.$(OBJEXT) \
@@ -108,8 +111,7 @@ am_indicator_session_service_OBJECTS = \
indicator_session_service-udev-mgr.$(OBJEXT)
indicator_session_service_OBJECTS = \
$(am_indicator_session_service_OBJECTS)
-indicator_session_service_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
+indicator_session_service_DEPENDENCIES = $(am__DEPENDENCIES_1)
indicator_session_service_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(indicator_session_service_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
@@ -179,16 +181,13 @@ ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
-GCONFTOOL = @GCONFTOOL@
-GCONF_CFLAGS = @GCONF_CFLAGS@
-GCONF_LIBS = @GCONF_LIBS@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
GNOMELOCALEDIR = @GNOMELOCALEDIR@
GREP = @GREP@
+GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
GTKLOGOUTHELPER_CFLAGS = @GTKLOGOUTHELPER_CFLAGS@
GTKLOGOUTHELPER_LIBS = @GTKLOGOUTHELPER_LIBS@
INDICATORDIR = @INDICATORDIR@
@@ -277,6 +276,7 @@ datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
+gsettingsschemadir = @gsettingsschemadir@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
@@ -340,7 +340,7 @@ 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 \
@@ -372,8 +372,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
@@ -542,16 +542,16 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk_logout_helper-dialog.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk_logout_helper-gconf-helper.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk_logout_helper-gtk-logout-helper.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk_logout_helper-settings-helper.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indicator_session_service-apt-transaction.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indicator_session_service-apt-watcher.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indicator_session_service-device-menu-mgr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indicator_session_service-gconf-helper.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indicator_session_service-gen-session-dbus.xml.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indicator_session_service-lock-helper.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indicator_session_service-session-dbus.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indicator_session_service-session-service.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indicator_session_service-settings-helper.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indicator_session_service-udev-mgr.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indicator_session_service-user-menu-mgr.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indicator_session_service-users-service-dbus.Po@am__quote@
@@ -614,21 +614,21 @@ gtk_logout_helper-gtk-logout-helper.obj: gtk-logout-helper.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtk_logout_helper_CFLAGS) $(CFLAGS) -c -o gtk_logout_helper-gtk-logout-helper.obj `if test -f 'gtk-logout-helper.c'; then $(CYGPATH_W) 'gtk-logout-helper.c'; else $(CYGPATH_W) '$(srcdir)/gtk-logout-helper.c'; fi`
-gtk_logout_helper-gconf-helper.o: gconf-helper.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtk_logout_helper_CFLAGS) $(CFLAGS) -MT gtk_logout_helper-gconf-helper.o -MD -MP -MF $(DEPDIR)/gtk_logout_helper-gconf-helper.Tpo -c -o gtk_logout_helper-gconf-helper.o `test -f 'gconf-helper.c' || echo '$(srcdir)/'`gconf-helper.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gtk_logout_helper-gconf-helper.Tpo $(DEPDIR)/gtk_logout_helper-gconf-helper.Po
+gtk_logout_helper-settings-helper.o: settings-helper.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtk_logout_helper_CFLAGS) $(CFLAGS) -MT gtk_logout_helper-settings-helper.o -MD -MP -MF $(DEPDIR)/gtk_logout_helper-settings-helper.Tpo -c -o gtk_logout_helper-settings-helper.o `test -f 'settings-helper.c' || echo '$(srcdir)/'`settings-helper.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gtk_logout_helper-settings-helper.Tpo $(DEPDIR)/gtk_logout_helper-settings-helper.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gconf-helper.c' object='gtk_logout_helper-gconf-helper.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='settings-helper.c' object='gtk_logout_helper-settings-helper.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtk_logout_helper_CFLAGS) $(CFLAGS) -c -o gtk_logout_helper-gconf-helper.o `test -f 'gconf-helper.c' || echo '$(srcdir)/'`gconf-helper.c
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtk_logout_helper_CFLAGS) $(CFLAGS) -c -o gtk_logout_helper-settings-helper.o `test -f 'settings-helper.c' || echo '$(srcdir)/'`settings-helper.c
-gtk_logout_helper-gconf-helper.obj: gconf-helper.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtk_logout_helper_CFLAGS) $(CFLAGS) -MT gtk_logout_helper-gconf-helper.obj -MD -MP -MF $(DEPDIR)/gtk_logout_helper-gconf-helper.Tpo -c -o gtk_logout_helper-gconf-helper.obj `if test -f 'gconf-helper.c'; then $(CYGPATH_W) 'gconf-helper.c'; else $(CYGPATH_W) '$(srcdir)/gconf-helper.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gtk_logout_helper-gconf-helper.Tpo $(DEPDIR)/gtk_logout_helper-gconf-helper.Po
+gtk_logout_helper-settings-helper.obj: settings-helper.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtk_logout_helper_CFLAGS) $(CFLAGS) -MT gtk_logout_helper-settings-helper.obj -MD -MP -MF $(DEPDIR)/gtk_logout_helper-settings-helper.Tpo -c -o gtk_logout_helper-settings-helper.obj `if test -f 'settings-helper.c'; then $(CYGPATH_W) 'settings-helper.c'; else $(CYGPATH_W) '$(srcdir)/settings-helper.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gtk_logout_helper-settings-helper.Tpo $(DEPDIR)/gtk_logout_helper-settings-helper.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gconf-helper.c' object='gtk_logout_helper-gconf-helper.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='settings-helper.c' object='gtk_logout_helper-settings-helper.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtk_logout_helper_CFLAGS) $(CFLAGS) -c -o gtk_logout_helper-gconf-helper.obj `if test -f 'gconf-helper.c'; then $(CYGPATH_W) 'gconf-helper.c'; else $(CYGPATH_W) '$(srcdir)/gconf-helper.c'; fi`
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtk_logout_helper_CFLAGS) $(CFLAGS) -c -o gtk_logout_helper-settings-helper.obj `if test -f 'settings-helper.c'; then $(CYGPATH_W) 'settings-helper.c'; else $(CYGPATH_W) '$(srcdir)/settings-helper.c'; fi`
gtk_logout_helper-dialog.o: dialog.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtk_logout_helper_CFLAGS) $(CFLAGS) -MT gtk_logout_helper-dialog.o -MD -MP -MF $(DEPDIR)/gtk_logout_helper-dialog.Tpo -c -o gtk_logout_helper-dialog.o `test -f 'dialog.c' || echo '$(srcdir)/'`dialog.c
@@ -710,21 +710,21 @@ indicator_session_service-gen-session-dbus.xml.obj: gen-session-dbus.xml.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(indicator_session_service_CFLAGS) $(CFLAGS) -c -o indicator_session_service-gen-session-dbus.xml.obj `if test -f 'gen-session-dbus.xml.c'; then $(CYGPATH_W) 'gen-session-dbus.xml.c'; else $(CYGPATH_W) '$(srcdir)/gen-session-dbus.xml.c'; fi`
-indicator_session_service-gconf-helper.o: gconf-helper.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(indicator_session_service_CFLAGS) $(CFLAGS) -MT indicator_session_service-gconf-helper.o -MD -MP -MF $(DEPDIR)/indicator_session_service-gconf-helper.Tpo -c -o indicator_session_service-gconf-helper.o `test -f 'gconf-helper.c' || echo '$(srcdir)/'`gconf-helper.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/indicator_session_service-gconf-helper.Tpo $(DEPDIR)/indicator_session_service-gconf-helper.Po
+indicator_session_service-settings-helper.o: settings-helper.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(indicator_session_service_CFLAGS) $(CFLAGS) -MT indicator_session_service-settings-helper.o -MD -MP -MF $(DEPDIR)/indicator_session_service-settings-helper.Tpo -c -o indicator_session_service-settings-helper.o `test -f 'settings-helper.c' || echo '$(srcdir)/'`settings-helper.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/indicator_session_service-settings-helper.Tpo $(DEPDIR)/indicator_session_service-settings-helper.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gconf-helper.c' object='indicator_session_service-gconf-helper.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='settings-helper.c' object='indicator_session_service-settings-helper.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(indicator_session_service_CFLAGS) $(CFLAGS) -c -o indicator_session_service-gconf-helper.o `test -f 'gconf-helper.c' || echo '$(srcdir)/'`gconf-helper.c
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(indicator_session_service_CFLAGS) $(CFLAGS) -c -o indicator_session_service-settings-helper.o `test -f 'settings-helper.c' || echo '$(srcdir)/'`settings-helper.c
-indicator_session_service-gconf-helper.obj: gconf-helper.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(indicator_session_service_CFLAGS) $(CFLAGS) -MT indicator_session_service-gconf-helper.obj -MD -MP -MF $(DEPDIR)/indicator_session_service-gconf-helper.Tpo -c -o indicator_session_service-gconf-helper.obj `if test -f 'gconf-helper.c'; then $(CYGPATH_W) 'gconf-helper.c'; else $(CYGPATH_W) '$(srcdir)/gconf-helper.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/indicator_session_service-gconf-helper.Tpo $(DEPDIR)/indicator_session_service-gconf-helper.Po
+indicator_session_service-settings-helper.obj: settings-helper.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(indicator_session_service_CFLAGS) $(CFLAGS) -MT indicator_session_service-settings-helper.obj -MD -MP -MF $(DEPDIR)/indicator_session_service-settings-helper.Tpo -c -o indicator_session_service-settings-helper.obj `if test -f 'settings-helper.c'; then $(CYGPATH_W) 'settings-helper.c'; else $(CYGPATH_W) '$(srcdir)/settings-helper.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/indicator_session_service-settings-helper.Tpo $(DEPDIR)/indicator_session_service-settings-helper.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gconf-helper.c' object='indicator_session_service-gconf-helper.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='settings-helper.c' object='indicator_session_service-settings-helper.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(indicator_session_service_CFLAGS) $(CFLAGS) -c -o indicator_session_service-gconf-helper.obj `if test -f 'gconf-helper.c'; then $(CYGPATH_W) 'gconf-helper.c'; else $(CYGPATH_W) '$(srcdir)/gconf-helper.c'; fi`
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(indicator_session_service_CFLAGS) $(CFLAGS) -c -o indicator_session_service-settings-helper.obj `if test -f 'settings-helper.c'; then $(CYGPATH_W) 'settings-helper.c'; else $(CYGPATH_W) '$(srcdir)/settings-helper.c'; fi`
indicator_session_service-users-service-dbus.o: users-service-dbus.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(indicator_session_service_CFLAGS) $(CFLAGS) -MT indicator_session_service-users-service-dbus.o -MD -MP -MF $(DEPDIR)/indicator_session_service-users-service-dbus.Tpo -c -o indicator_session_service-users-service-dbus.o `test -f 'users-service-dbus.c' || echo '$(srcdir)/'`users-service-dbus.c
diff --git a/src/apt-watcher.c b/src/apt-watcher.c
index 7d706a0..a4298a8 100644
--- a/src/apt-watcher.c
+++ b/src/apt-watcher.c
@@ -279,6 +279,9 @@ apt_watcher_transaction_state_update_cb (AptTransaction* trans,
dbusmenu_menuitem_property_set (self->apt_item,
DBUSMENU_MENUITEM_PROP_LABEL,
_("Reboot Required"));
+ dbusmenu_menuitem_property_set (self->apt_item,
+ DBUSMENU_MENUITEM_PROP_DISPOSITION,
+ DBUSMENU_MENUITEM_DISPOSITION_ALERT);
session_dbus_restart_required (self->session_dbus_interface);
}
g_debug ("Finished with a reboot value of %i", reboot);
diff --git a/src/dbus-shared-names.h b/src/dbus-shared-names.h
index d9dfff1..c5372e4 100644
--- a/src/dbus-shared-names.h
+++ b/src/dbus-shared-names.h
@@ -55,13 +55,13 @@ typedef enum {
#define USER_ITEM_PROP_LOGGED_IN "user-item-logged-in"
#define USER_ITEM_PROP_IS_CURRENT_USER "user-item-is-current-user"
#define USER_ITEM_PROP_ICON "user-item-icon-path"
-#define USER_ITEM_ICON_DEFAULT "user-offline"
+#define USER_ITEM_ICON_DEFAULT "avatar-default"
#define RESTART_ITEM_TYPE "x-canonical-restart-item"
#define RESTART_ITEM_LABEL "restart-label"
#define RESTART_ITEM_ICON "restart-icon"
-#define ICON_DEFAULT "system-shutdown-panel"
-#define ICON_RESTART "system-shutdown-panel-restart"
+#define ICON_DEFAULT "system-devices-panel"
+#define ICON_RESTART "system-devices-panel-alert"
#endif /* __DBUS_SHARED_NAMES_H__ */
diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c
index cbddaa3..523ea8d 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,11 +44,11 @@ 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;
-static DbusmenuMenuitem *bluetooth_settings_menuitem = NULL;
static DbusmenuMenuitem *login_settings_menuitem = NULL;
static DbusmenuMenuitem *software_updates_menuitem = NULL;
static DbusmenuMenuitem *printers_menuitem = NULL;
@@ -72,7 +72,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 +128,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 +147,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 +169,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;
@@ -541,17 +534,6 @@ device_menu_mgr_build_settings_items (DeviceMenuMgr* self)
dbusmenu_menuitem_child_add_position(self->root_item,
display_settings_menuitem,
1);
- bluetooth_settings_menuitem = dbusmenu_menuitem_new();
- dbusmenu_menuitem_property_set (bluetooth_settings_menuitem,
- DBUSMENU_MENUITEM_PROP_LABEL,
- _("Bluetooth…"));
- g_signal_connect (G_OBJECT(bluetooth_settings_menuitem),
- DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
- G_CALLBACK(show_system_settings_with_context), "bluetooth");
- dbusmenu_menuitem_child_add_position(self->root_item,
- bluetooth_settings_menuitem,
- 2);
-
login_settings_menuitem = dbusmenu_menuitem_new();
dbusmenu_menuitem_property_set (login_settings_menuitem,
DBUSMENU_MENUITEM_PROP_LABEL,
@@ -562,20 +544,20 @@ device_menu_mgr_build_settings_items (DeviceMenuMgr* self)
"login");
dbusmenu_menuitem_child_add_position(self->root_item,
login_settings_menuitem,
- 3);
+ 2);
software_updates_menuitem = dbusmenu_menuitem_new();
dbusmenu_menuitem_property_set (software_updates_menuitem,
DBUSMENU_MENUITEM_PROP_LABEL,
_("Software Up to Date"));
dbusmenu_menuitem_child_add_position(self->root_item,
software_updates_menuitem,
- 4);
+ 3);
DbusmenuMenuitem * separator1 = dbusmenu_menuitem_new();
dbusmenu_menuitem_property_set (separator1,
DBUSMENU_MENUITEM_PROP_TYPE,
DBUSMENU_CLIENT_TYPES_SEPARATOR);
- dbusmenu_menuitem_child_add_position (self->root_item, separator1, 5);
+ dbusmenu_menuitem_child_add_position (self->root_item, separator1, 4);
}
static void
@@ -590,7 +572,7 @@ device_menu_mgr_build_devices_items (DeviceMenuMgr* self)
FALSE);
dbusmenu_menuitem_child_add_position (self->root_item,
device_heading,
- 6);
+ 5);
printers_menuitem = dbusmenu_menuitem_new();
dbusmenu_menuitem_property_set (printers_menuitem,
@@ -602,7 +584,7 @@ device_menu_mgr_build_devices_items (DeviceMenuMgr* self)
"printers");
dbusmenu_menuitem_child_add_position(self->root_item,
printers_menuitem,
- 7);
+ 6);
scanners_menuitem = dbusmenu_menuitem_new();
dbusmenu_menuitem_property_set (scanners_menuitem,
DBUSMENU_MENUITEM_PROP_LABEL,
@@ -613,7 +595,7 @@ device_menu_mgr_build_devices_items (DeviceMenuMgr* self)
NULL);
dbusmenu_menuitem_child_add_position (self->root_item,
scanners_menuitem,
- 8);
+ 7);
dbusmenu_menuitem_property_set_bool (scanners_menuitem,
DBUSMENU_MENUITEM_PROP_VISIBLE,
FALSE);
@@ -628,7 +610,7 @@ device_menu_mgr_build_devices_items (DeviceMenuMgr* self)
NULL);
dbusmenu_menuitem_child_add_position (self->root_item,
webcam_menuitem,
- 10);
+ 8);
dbusmenu_menuitem_property_set_bool (webcam_menuitem,
DBUSMENU_MENUITEM_PROP_VISIBLE,
FALSE);
@@ -637,7 +619,7 @@ device_menu_mgr_build_devices_items (DeviceMenuMgr* self)
dbusmenu_menuitem_property_set (separator3,
DBUSMENU_MENUITEM_PROP_TYPE,
DBUSMENU_CLIENT_TYPES_SEPARATOR);
- dbusmenu_menuitem_child_add_position (self->root_item, separator3, 11);
+ dbusmenu_menuitem_child_add_position (self->root_item, separator3, 9);
}
static void
@@ -659,10 +641,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 +651,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);
@@ -759,7 +740,6 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode)
self->udev_mgr = udev_mgr_new (scanners_menuitem, webcam_menuitem);
}
-
static void
device_menu_mgr_rebuild_items (DeviceMenuMgr* self)
{
@@ -830,26 +810,17 @@ 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/dialog.c b/src/dialog.c
index 299f954..4b139ca 100644
--- a/src/dialog.c
+++ b/src/dialog.c
@@ -53,16 +53,16 @@ static const gchar * button_strings[LOGOUT_DIALOG_TYPE_CNT] = {
they are also going to get a password dialog to do the action. */
static const gchar * button_auth_strings[LOGOUT_DIALOG_TYPE_CNT] = {
/* LOGOUT_DIALOG_LOGOUT, */ NC_("button auth", "Log Out"),
- /* LOGOUT_DIALOG_RESTART, */ NC_("button auth", "Restart..."),
- /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("button auth", "Shut Down...")
+ /* LOGOUT_DIALOG_RESTART, */ NC_("button auth", "Restart…"),
+ /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("button auth", "Shut Down…")
};
/* TRANSLATORS: This button appears on the logout dialog when
there are updates that require restart. It will do a restart
in place of a log out. */
static const gchar * restart_updates = N_("Restart Instead");
-static const gchar * restart_auth = N_("Restart Instead...");
-static const gchar * body_logout_update = N_("Some software updates won't apply until the computer next restarts.");
+static const gchar * restart_auth = N_("Restart Instead…");
+static const gchar * body_logout_update = N_("Some software updates won’t apply until the computer next restarts.");
static const gchar * icon_strings[LOGOUT_DIALOG_TYPE_CNT] = {
/* LOGOUT_DIALOG_LOGOUT, */ "system-log-out",
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 f6727d9..fab47b3 100644
--- a/src/indicator-session.c
+++ b/src/indicator-session.c
@@ -167,7 +167,7 @@ indicator_session_init (IndicatorSession *self)
// devices
self->devices.menu = GTK_MENU (dbusmenu_gtkmenu_new(INDICATOR_SESSION_DBUS_NAME,
INDICATOR_SESSION_DBUS_OBJECT));
- self->devices.image = indicator_image_helper ("system-devices-panel");
+ self->devices.image = indicator_image_helper (ICON_DEFAULT);
gtk_widget_show (GTK_WIDGET(self->devices.menu));
gtk_widget_show (GTK_WIDGET(self->devices.image));
@@ -499,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 ("system-devices-alert-panel");
+ self->devices.image = indicator_image_helper (ICON_RESTART);
}
}
@@ -527,7 +527,7 @@ switch_property_change (DbusmenuMenuitem * item,
if (variant == NULL || g_variant_get_string(variant, NULL) == NULL ||
g_variant_get_string(variant, NULL)[0] == '\0' || no_name_in_lang) {
- finalstring = _("Switch User...");
+ finalstring = _("Switch User…");
set_ellipsize = FALSE;
}
@@ -554,7 +554,7 @@ switch_property_change (DbusmenuMenuitem * item,
gdouble ems = width / pixels_per_em;
g_debug("Username width %fem", ems);
- finalstring = g_strdup_printf(_("Switch From %s..."), username);
+ finalstring = g_strdup_printf(_("Switch From %s…"), username);
if (ems >= 20.0f) {
set_ellipsize = TRUE;
} else {
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 f66d862..7e51383 100644
--- a/src/udev-mgr.c
+++ b/src/udev-mgr.c
@@ -19,11 +19,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include <gudev/gudev.h>
-// TEMP
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
+#include <glib/gi18n.h>
#include "udev-mgr.h"
#include "sane-rules.h"
@@ -235,13 +231,29 @@ udev_mgr_handle_webcam (UdevMgr* self,
}
g_hash_table_remove (self->webcams_present,
product);
-
+ dbusmenu_menuitem_property_set (self->webcam_item,
+ DBUSMENU_MENUITEM_PROP_LABEL,
+ _("Webcams"));
}
else {
if (g_hash_table_lookup (self->webcams_present, product) != NULL){
g_warning ("Got an ADD event on a webcam device but we already have that device in our webcam cache");
return;
}
+
+ const gchar* manufacturer = NULL;
+ manufacturer = g_udev_device_get_property (device, "ID_VENDOR");
+
+ if (manufacturer != NULL){
+ gchar* lowered = g_ascii_strdown (manufacturer, -1);
+ lowered[0] = g_ascii_toupper (lowered[0]);
+ gchar* label = g_strdup_printf(_("%s Webcam"), lowered);
+ g_free (lowered);
+ dbusmenu_menuitem_property_set (self->webcam_item,
+ DBUSMENU_MENUITEM_PROP_LABEL,
+ label);
+ }
+
g_hash_table_insert (self->webcams_present,
g_strdup (product),
g_strdup (vendor));
@@ -254,23 +266,26 @@ debug_device (UdevMgr* self,
GUdevDevice* device,
UdevMgrDeviceAction action)
{
- /*const gchar* vendor;
+ const gchar* vendor;
const gchar* product;
const gchar* number;
const gchar* name;
+ const gchar* manufacturer;
vendor = g_udev_device_get_property (device, "ID_VENDOR_ID");
+ manufacturer = g_udev_device_get_property (device, "ID_VENDOR");
product = g_udev_device_get_property (device, "ID_MODEL_ID");
number = g_udev_device_get_number (device);
name = g_udev_device_get_name (device);
- g_debug ("device vendor id %s , product id of %s , number of %s and name of %s",
+ g_debug ("%s device vendor id %s , product id of %s , number of %s and name of %s",
+ g_strdup(manufacturer),
g_strdup(vendor),
g_strdup(product),
g_strdup(number),
g_strdup(name));
- const gchar *const *list;
+ /*const gchar *const *list;
const gchar *const *iter;
char propstr[500];
guint32 namelen = 0, i;
@@ -290,7 +305,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,
@@ -344,6 +359,10 @@ static void udev_mgr_handle_scsi_device (UdevMgr* self,
}
else{
g_hash_table_remove (self->scanners_present, vendor);
+ dbusmenu_menuitem_property_set (self->scanner_item,
+ DBUSMENU_MENUITEM_PROP_LABEL,
+ _("Scanners"));
+
}
}
else{
@@ -351,6 +370,18 @@ static void udev_mgr_handle_scsi_device (UdevMgr* self,
g_warning ("Got an ADD event on a scanner device but we already have that device in our scanners cache");
}
else{
+ const gchar* manufacturer = NULL;
+ manufacturer = g_udev_device_get_property (device, "ID_VENDOR");
+
+ if (manufacturer != NULL){
+ gchar* lowered = g_ascii_strdown (manufacturer, -1);
+ lowered[0] = g_ascii_toupper (lowered[0]);
+ gchar* label = g_strdup_printf(_("%s Scanner"), lowered);
+ g_free (lowered);
+ dbusmenu_menuitem_property_set (self->scanner_item,
+ DBUSMENU_MENUITEM_PROP_LABEL,
+ label);
+ }
g_hash_table_insert (self->scanners_present,
g_strdup(vendor),
g_strdup(model_id));
@@ -397,6 +428,9 @@ udev_mgr_check_if_usb_device_is_supported (UdevMgr* self,
}
else{
g_hash_table_remove (self->scanners_present, vendor);
+ dbusmenu_menuitem_property_set (self->scanner_item,
+ DBUSMENU_MENUITEM_PROP_LABEL,
+ _("Scanners"));
}
}
else{
@@ -404,6 +438,20 @@ udev_mgr_check_if_usb_device_is_supported (UdevMgr* self,
g_warning ("Got an ADD event on a scanner device but we already have that device in our scanners cache");
}
else{
+ const gchar* manufacturer = NULL;
+
+ manufacturer = g_udev_device_get_property (device, "ID_VENDOR");
+ if (manufacturer != NULL){
+
+ gchar* lowered = g_ascii_strdown (manufacturer, -1);
+ lowered[0] = g_ascii_toupper (lowered[0]);
+ gchar* label = g_strdup_printf(_("%s Scanner"), lowered);
+ g_free (lowered);
+ dbusmenu_menuitem_property_set (self->scanner_item,
+ DBUSMENU_MENUITEM_PROP_LABEL,
+ label);
+ }
+
g_hash_table_insert (self->scanners_present,
g_strdup(vendor),
g_strdup(model_id));
diff --git a/src/user-menu-mgr.c b/src/user-menu-mgr.c
index 44c1960..64b29c5 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
@@ -44,11 +44,18 @@ static void activate_new_session (DbusmenuMenuitem * mi,
static void activate_user_session (DbusmenuMenuitem *mi,
guint timestamp,
gpointer user_data);
+static void activate_user_accounts (DbusmenuMenuitem *mi,
+ guint timestamp,
+ gpointer user_data);
static gint compare_users_by_username (const gchar *a,
const gchar *b);
static void activate_online_accounts (DbusmenuMenuitem *mi,
guint timestamp,
gpointer user_data);
+static void activate_user_accounts (DbusmenuMenuitem *mi,
+ guint timestamp,
+ gpointer user_data);
+
static void user_menu_mgr_rebuild_items (UserMenuMgr *self,
gboolean greeter_mode);
static gboolean check_new_session ();
@@ -56,7 +63,7 @@ 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,
@@ -76,7 +83,7 @@ user_menu_mgr_init (UserMenuMgr *self)
G_CALLBACK (user_change),
self);
g_signal_connect (G_OBJECT (self->users_dbus_interface),
- "user-removed",
+ "user-deleted",
G_CALLBACK (user_change),
self);
}
@@ -92,8 +99,6 @@ static void
user_menu_mgr_class_init (UserMenuMgrClass *klass)
{
GObjectClass* object_class = G_OBJECT_CLASS (klass);
- //GObjectClass* parent_class = G_OBJECT_CLASS (klass);
-
object_class->finalize = user_menu_mgr_finalize;
}
@@ -110,11 +115,11 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode)
/* 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);
@@ -171,7 +176,7 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode)
gboolean user_menu_is_visible = FALSE;
if (!greeter_mode){
- user_menu_is_visible = self->user_count > 1;
+ user_menu_is_visible = self->user_count > 1 || check_guest_session();
}
session_dbus_set_user_menu_visibility (self->session_dbus_interface,
@@ -212,15 +217,7 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode)
dbusmenu_menuitem_property_set (mi, USER_ITEM_PROP_NAME, conflictedname);
g_free(conflictedname);
} else {
- //g_debug ("%i %s", (gint)user->uid, user->real_name);
- //g_debug ("users uid = %i", (gint)user->uid);
- //g_debug ("users real name = %s", user->real_name);
- if (user == NULL){
- g_debug ("USER pointer is NULL");
- return;
- }
- g_debug ("%p: %s", user, user->real_name);
-
+ g_debug ("%p: %s", user, user->real_name);
dbusmenu_menuitem_property_set (mi,
USER_ITEM_PROP_NAME,
user->real_name);
@@ -229,19 +226,38 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode)
USER_ITEM_PROP_LOGGED_IN,
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);
+ g_debug ("user %s has this icon : %s",
+ user->user_name,
+ user->icon_file);
+ dbusmenu_menuitem_property_set (mi,
+ USER_ITEM_PROP_ICON,
+ user->icon_file);
} else {
- dbusmenu_menuitem_property_set(mi, USER_ITEM_PROP_ICON, USER_ITEM_ICON_DEFAULT);
+ dbusmenu_menuitem_property_set (mi,
+ USER_ITEM_PROP_ICON,
+ USER_ITEM_ICON_DEFAULT);
}
gboolean logged_in = g_strcmp0 (user->user_name, g_get_user_name()) == 0;
+
+ g_debug ("user name = %s and g user name = %s",
+ user->user_name,
+ g_get_user_name());
+
dbusmenu_menuitem_property_set_bool (mi,
USER_ITEM_PROP_IS_CURRENT_USER,
logged_in);
if (logged_in == TRUE){
- g_debug ("about to set the users real name to %s for user %s",
- user->real_name, user->user_name);
- session_dbus_set_users_real_name (self->session_dbus_interface, user->real_name);
+ if (check_guest_session()){
+ g_debug ("about to set the users real name to %s for user %s",
+ user->real_name, user->user_name);
+ session_dbus_set_users_real_name (self->session_dbus_interface, user->real_name);
+ }
+ else{
+ g_debug ("about to set the users real name to GUEST");
+ session_dbus_set_users_real_name (self->session_dbus_interface,
+ _("Guest"));
+ }
}
dbusmenu_menuitem_child_append (self->root_item, mi);
@@ -273,7 +289,24 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode)
G_CALLBACK (activate_online_accounts),
NULL);
- dbusmenu_menuitem_child_append (self->root_item, online_accounts_item);
+ dbusmenu_menuitem_child_append (self->root_item, online_accounts_item);
+
+ DbusmenuMenuitem * user_accounts_item = dbusmenu_menuitem_new();
+ dbusmenu_menuitem_property_set (user_accounts_item,
+ DBUSMENU_MENUITEM_PROP_TYPE,
+ DBUSMENU_CLIENT_TYPES_DEFAULT);
+ dbusmenu_menuitem_property_set (user_accounts_item,
+ DBUSMENU_MENUITEM_PROP_LABEL,
+ _("User Accounts…"));
+
+ g_signal_connect (G_OBJECT (user_accounts_item),
+ DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
+ G_CALLBACK (activate_user_accounts),
+ NULL);
+
+ dbusmenu_menuitem_child_append (self->root_item, user_accounts_item);
+
+
}
/* Checks to see if we can create sessions */
@@ -288,9 +321,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);
}
@@ -357,6 +390,19 @@ activate_online_accounts (DbusmenuMenuitem *mi,
}
}
+static void
+activate_user_accounts (DbusmenuMenuitem *mi,
+ guint timestamp,
+ gpointer user_data)
+{
+ GError * error = NULL;
+ if (!g_spawn_command_line_async("gnome-control-center user-accounts", &error))
+ {
+ g_warning("Unable to show control centre: %s", error->message);
+ g_error_free(error);
+ }
+}
+
/* Signal called when a user is added. It updates the count and
rebuilds the menu */
static void
@@ -364,22 +410,21 @@ user_change (UsersServiceDbus *service,
const gchar *user_id,
gpointer user_data)
{
- //DbusmenuMenuitem *root = (DbusmenuMenuitem *)user_data;
- // TODO sort this out.
- //rebuild_user_items (root, service);
+ g_return_if_fail (USER_IS_MENU_MGR (user_data));
+ UserMenuMgr* user_mgr = USER_MENU_MGR(user_data);
+ user_menu_mgr_rebuild_items (user_mgr, FALSE);
return;
}
/* 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*
@@ -393,7 +438,7 @@ static gboolean
check_guest_session (void)
{
if (geteuid() < 500) {
- /* System users shouldn't have guest account shown. Mosly
+ /* System users shouldn't have guest account shown. Mostly
this would be the case of the guest user itself. */
return FALSE;
}
diff --git a/src/user-widget.c b/src/user-widget.c
index 6495e80..937a9eb 100644
--- a/src/user-widget.c
+++ b/src/user-widget.c
@@ -3,7 +3,8 @@ Copyright 2011 Canonical Ltd.
Authors:
Conor Curran <conor.curran@canonical.com>
-
+ Mirco Müller <mirco.mueller@canonical.com>
+
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License version 3, as published
by the Free Software Foundation.
@@ -24,6 +25,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include <glib/gi18n.h>
#include <gtk/gtk.h>
#include <glib.h>
+#include <math.h>
#include <libindicator/indicator-image-helper.h>
#include "user-widget.h"
#include "dbus-shared-names.h"
@@ -35,6 +37,7 @@ struct _UserWidgetPrivate
{
DbusmenuMenuitem* twin_item;
GtkWidget* user_image;
+ gboolean using_personal_icon;
GtkWidget* user_name;
GtkWidget* container;
GtkWidget* tick_icon;
@@ -44,6 +47,13 @@ struct _UserWidgetPrivate
#define USER_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), USER_WIDGET_TYPE, UserWidgetPrivate))
+typedef struct
+{
+ double r;
+ double g;
+ double b;
+} CairoColorRGB;
+
/* Prototypes */
static void user_widget_class_init (UserWidgetClass *klass);
static void user_widget_init (UserWidget *self);
@@ -60,14 +70,30 @@ static void user_widget_property_update (DbusmenuMenuitem* item,
gchar* property,
GVariant* value,
gpointer userdata);
+
+
+static void _color_shade (const CairoColorRGB *a,
+ float k,
+ CairoColorRGB *b);
+
+static void draw_album_border (GtkWidget *widget, gboolean selected);
+
#if GTK_CHECK_VERSION(3, 0, 0)
static gboolean user_widget_primitive_draw_cb_gtk_3 (GtkWidget *image,
cairo_t* cr,
gpointer user_data);
+static gboolean user_widget_draw_usericon_gtk_3 (GtkWidget *widget,
+ cairo_t* cr,
+ gpointer user_data);
+
#else
static gboolean user_widget_primitive_draw_cb (GtkWidget *image,
GdkEventExpose *event,
gpointer user_data);
+static gboolean user_widget_draw_usericon_gtk_2 (GtkWidget *widget,
+ GdkEventExpose *event,
+ gpointer user_data);
+
#endif
G_DEFINE_TYPE (UserWidget, user_widget, GTK_TYPE_MENU_ITEM);
@@ -106,24 +132,9 @@ user_widget_init (UserWidget *self)
// Create the UI elements.
priv->user_image = gtk_image_new ();
+ gtk_misc_set_alignment(GTK_MISC(priv->user_image), 0.0, 0.0);
+ gtk_misc_set_padding (GTK_MISC(priv->user_image),0, 4.0);
- // Just for now set the image to the default avator image
- GdkPixbuf* pixbuf = NULL;
- GError* error = NULL;
- pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
- "avatar-default",
- 32,
- GTK_ICON_LOOKUP_FORCE_SIZE,
- &error);
-
- if (pixbuf == NULL || error != NULL) {
- g_warning ("Could not load the default avatar image for some reason");
- }
- else{
- gtk_image_set_from_pixbuf (GTK_IMAGE(priv->user_image), pixbuf);
- g_object_unref (pixbuf);
- }
-
priv->user_name = gtk_label_new ("");
priv->container = gtk_hbox_new (FALSE, 0);
priv->tick_icon = gtk_image_new_from_icon_name ("account-logged-in",
@@ -146,30 +157,36 @@ user_widget_init (UserWidget *self)
FALSE,
FALSE, 5);
- gtk_widget_show_all (priv->container);
- gtk_container_add (GTK_CONTAINER (self), priv->container);
-
+ 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",
G_CALLBACK(user_widget_primitive_draw_cb_gtk_3),
GTK_WIDGET(self));
+
+ g_signal_connect_after (GTK_WIDGET(priv->user_image), "draw",
+ G_CALLBACK(user_widget_draw_usericon_gtk_3),
+ GTK_WIDGET(self));
+
#else
g_signal_connect_after (GTK_WIDGET(self), "expose-event",
G_CALLBACK(user_widget_primitive_draw_cb),
GTK_WIDGET(self));
+ g_signal_connect_after (GTK_WIDGET(priv->user_image), "expose-event",
+ G_CALLBACK(user_widget_draw_usericon_gtk_2),
+ GTK_WIDGET(self));
#endif
}
static void
user_widget_dispose (GObject *object)
{
- //UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(USER_WIDGET(object));
-
G_OBJECT_CLASS (user_widget_parent_class)->dispose (object);
}
@@ -180,9 +197,11 @@ user_widget_finalize (GObject *object)
G_OBJECT_CLASS (user_widget_parent_class)->finalize (object);
}
+
+/*****************************************************************/
+
#if GTK_CHECK_VERSION(3, 0, 0)
-// Draw the radio dot and/or green check mark
// TODO handle drawing of green check mark
static gboolean
user_widget_primitive_draw_cb_gtk_3 (GtkWidget *widget,
@@ -201,15 +220,13 @@ user_widget_primitive_draw_cb_gtk_3 (GtkWidget *widget,
}
GtkStyle *style;
- gdouble x, y;
- gdouble offset = 15.0;
-
+ gdouble x, y;
style = gtk_widget_get_style (widget);
GtkAllocation allocation;
gtk_widget_get_allocation (widget, &allocation);
x = allocation.x + 13;
- y = offset;
+ y = allocation.height / 2;
cairo_arc (cr, x, y, 3.0, 0.0, 2 * G_PI);;
@@ -221,68 +238,381 @@ user_widget_primitive_draw_cb_gtk_3 (GtkWidget *widget,
return FALSE;
}
+static gboolean
+user_widget_draw_usericon_gtk_3 (GtkWidget *widget,
+ cairo_t* cr,
+ gpointer user_data)
+{
+ g_return_val_if_fail(IS_USER_WIDGET(user_data), FALSE);
+ UserWidget* meta = USER_WIDGET(user_data);
+ UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(meta);
+
+ if (priv->using_personal_icon == FALSE)
+ return FALSE;
+
+ draw_album_border (widget, FALSE);
+ return FALSE;
+}
+/**
+ * TODO:
+ * Sort out gtk2
+ */
// GTK 2 Expose handler
#else
-// Draw the triangle if the player is running ...
+static gboolean
+user_widget_draw_usericon_gtk_2 (GtkWidget *widget,
+ GdkEventExpose *event,
+ gpointer user_data)
+{
+ g_return_val_if_fail(IS_USER_WIDGET(user_data), FALSE);
+ UserWidget* meta = USER_WIDGET(user_data);
+ UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(meta);
+
+ if (priv->using_personal_icon == FALSE)
+ return FALSE;
+
+ draw_album_border (widget, FALSE);
+ return FALSE;
+}
+
static gboolean
user_widget_primitive_draw_cb (GtkWidget *widget,
GdkEventExpose *event,
gpointer user_data)
{
- /*
g_return_val_if_fail(IS_USER_WIDGET(user_data), FALSE);
UserWidget* meta = USER_WIDGET(user_data);
UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(meta);
+ // Draw dot only when user is the current user.
+ if (!dbusmenu_menuitem_property_get_bool (priv->twin_item,
+ USER_ITEM_PROP_IS_CURRENT_USER)){
+ return FALSE;
+ }
+
GtkStyle *style;
cairo_t *cr;
- int x, y, arrow_width, arrow_height;
-
- gint offset = 3;
- arrow_width = 5;
- arrow_height = 9;
+ cr = (cairo_t*) gdk_cairo_create (gtk_widget_get_window (widget));
+ gdouble x, y;
style = gtk_widget_get_style (widget);
- cr = (cairo_t*) gdk_cairo_create (gtk_widget_get_window (widget));
-
GtkAllocation allocation;
+
gtk_widget_get_allocation (widget, &allocation);
- x = allocation.x;
- y = allocation.y;
-
- // Draw player icon
- if (priv->icon_buf != NULL){
- gdk_cairo_set_source_pixbuf (cr,
- priv->icon_buf,
- x + arrow_width + 1,
- y + offset);
- cairo_paint (cr);
- }
-
- // Draw triangle but only if the player is running.
- if (dbusmenu_menuitem_property_get_bool (priv->twin_item,
- DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)){
- y += (double)arrow_height/2.0 + offset;
- cairo_set_line_width (cr, 1.0);
-
- cairo_move_to (cr, x, y);
- cairo_line_to (cr, x, y + arrow_height);
- cairo_line_to (cr, x + arrow_width, y + (double)arrow_height/2.0);
- cairo_close_path (cr);
- cairo_set_source_rgb (cr, style->fg[gtk_widget_get_state(widget)].red/65535.0,
- style->fg[gtk_widget_get_state(widget)].green/65535.0,
- style->fg[gtk_widget_get_state(widget)].blue/65535.0);
- cairo_fill (cr);
- }
+ x = allocation.x + 13;
+ y = allocation.y + allocation.height/2;
+
+ cairo_arc (cr, x, y, 3.0, 0.0, 2 * G_PI);;
- cairo_destroy (cr);*/
+ cairo_set_source_rgb (cr, style->fg[gtk_widget_get_state(widget)].red/65535.0,
+ style->fg[gtk_widget_get_state(widget)].green/65535.0,
+ style->fg[gtk_widget_get_state(widget)].blue/65535.0);
+ cairo_fill (cr);
+ cairo_destroy (cr);
+
return FALSE;
}
#endif
+static void
+draw_album_border(GtkWidget *widg, gboolean selected)
+{
+ cairo_t *cr;
+ cr = gdk_cairo_create (gtk_widget_get_window (widg));
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ gtk_style_context_add_class (gtk_widget_get_style_context (widg),
+ "menu");
+ #endif
+
+ GtkStyle *style;
+ style = gtk_widget_get_style (widg);
+
+ GtkAllocation alloc;
+ gtk_widget_get_allocation (widg, &alloc);
+ gint offset = 0;
+ gint v_offset = 4;
+
+ alloc.width = alloc.width + (offset * 2);
+ alloc.height = alloc.height - v_offset - 2;
+ alloc.x = alloc.x - offset;
+ alloc.y = alloc.y + v_offset/2 +1;
+
+ CairoColorRGB bg_normal, fg_normal;
+
+ bg_normal.r = style->bg[0].red/65535.0;
+ bg_normal.g = style->bg[0].green/65535.0;
+ bg_normal.b = style->bg[0].blue/65535.0;
+
+ gint state = selected ? 5 : 0;
+
+ fg_normal.r = style->fg[state].red/65535.0;
+ fg_normal.g = style->fg[state].green/65535.0;
+ fg_normal.b = style->fg[state].blue/65535.0;
+
+ CairoColorRGB dark_top_color;
+ CairoColorRGB light_bottom_color;
+ CairoColorRGB background_color;
+
+ _color_shade ( &bg_normal, 0.93, &background_color );
+ _color_shade ( &bg_normal, 0.23, &dark_top_color );
+ _color_shade ( &fg_normal, 0.55, &light_bottom_color );
+
+ cairo_rectangle (cr,
+ alloc.x, alloc.y,
+ alloc.width, alloc.height);
+
+ cairo_set_line_width (cr, 1.0);
+
+ cairo_clip ( cr );
+
+ cairo_move_to (cr, alloc.x, alloc.y );
+ cairo_line_to (cr, alloc.x + alloc.width,
+ alloc.y );
+ cairo_line_to ( cr, alloc.x + alloc.width,
+ alloc.y + alloc.height );
+ cairo_line_to ( cr, alloc.x, alloc.y + alloc.height );
+ cairo_line_to ( cr, alloc.x, alloc.y);
+ cairo_close_path (cr);
+
+ cairo_set_source_rgba ( cr,
+ background_color.r,
+ background_color.g,
+ background_color.b,
+ 1.0 );
+
+ cairo_stroke ( cr );
+
+ cairo_move_to (cr, alloc.x, alloc.y );
+ cairo_line_to (cr, alloc.x + alloc.width,
+ alloc.y );
+
+ cairo_close_path (cr);
+ cairo_set_source_rgba ( cr,
+ dark_top_color.r,
+ dark_top_color.g,
+ dark_top_color.b,
+ 1.0 );
+
+ cairo_stroke ( cr );
+
+ cairo_move_to ( cr, alloc.x + alloc.width,
+ alloc.y + alloc.height );
+ cairo_line_to ( cr, alloc.x, alloc.y + alloc.height );
+
+ cairo_close_path (cr);
+ cairo_set_source_rgba ( cr,
+ light_bottom_color.r,
+ light_bottom_color.g,
+ light_bottom_color.b,
+ 1.0);
+
+ cairo_stroke ( cr );
+ cairo_destroy (cr);
+}
+
+static void
+_color_rgb_to_hls (gdouble *r,
+ gdouble *g,
+ gdouble *b)
+{
+ gdouble min;
+ gdouble max;
+ gdouble red;
+ gdouble green;
+ gdouble blue;
+ gdouble h = 0;
+ gdouble l;
+ gdouble s;
+ gdouble delta;
+
+ red = *r;
+ green = *g;
+ blue = *b;
+
+ if (red > green)
+ {
+ if (red > blue)
+ max = red;
+ else
+ max = blue;
+
+ if (green < blue)
+ min = green;
+ else
+ min = blue;
+ }
+ else
+ {
+ if (green > blue)
+ max = green;
+ else
+ max = blue;
+
+ if (red < blue)
+ min = red;
+ else
+ min = blue;
+ }
+ l = (max+min)/2;
+ if (fabs (max-min) < 0.0001)
+ {
+ h = 0;
+ s = 0;
+ }
+ else
+ {
+ if (l <= 0.5)
+ s = (max-min)/(max+min);
+ else
+ s = (max-min)/(2-max-min);
+
+ delta = (max -min) != 0 ? (max -min) : 1;
+
+ if(delta == 0)
+ delta = 1;
+ if (red == max)
+ h = (green-blue)/delta;
+ else if (green == max)
+ h = 2+(blue-red)/delta;
+ else if (blue == max)
+ h = 4+(red-green)/delta;
+
+ h *= 60;
+ if (h < 0.0)
+ h += 360;
+ }
+
+ *r = h;
+ *g = l;
+ *b = s;
+}
+
+static void
+_color_hls_to_rgb (gdouble *h,
+ gdouble *l,
+ gdouble *s)
+{
+ gdouble hue;
+ gdouble lightness;
+ gdouble saturation;
+ gdouble m1, m2;
+ gdouble r, g, b;
+
+ lightness = *l;
+ saturation = *s;
+
+ if (lightness <= 0.5)
+ m2 = lightness*(1+saturation);
+ else
+ m2 = lightness+saturation-lightness*saturation;
+
+ m1 = 2*lightness-m2;
+
+ if (saturation == 0)
+ {
+ *h = lightness;
+ *l = lightness;
+ *s = lightness;
+ }
+ else
+ {
+ hue = *h+120;
+ while (hue > 360)
+ hue -= 360;
+ while (hue < 0)
+ hue += 360;
+
+ if (hue < 60)
+ r = m1+(m2-m1)*hue/60;
+ else if (hue < 180)
+ r = m2;
+ else if (hue < 240)
+ r = m1+(m2-m1)*(240-hue)/60;
+ else
+ r = m1;
+
+ hue = *h;
+ while (hue > 360)
+ hue -= 360;
+ while (hue < 0)
+ hue += 360;
+
+ if (hue < 60)
+ g = m1+(m2-m1)*hue/60;
+ else if (hue < 180)
+ g = m2;
+ else if (hue < 240)
+ g = m1+(m2-m1)*(240-hue)/60;
+ else
+ g = m1;
+
+ hue = *h-120;
+ while (hue > 360)
+ hue -= 360;
+ while (hue < 0)
+ hue += 360;
+
+ if (hue < 60)
+ b = m1+(m2-m1)*hue/60;
+ else if (hue < 180)
+ b = m2;
+ else if (hue < 240)
+ b = m1+(m2-m1)*(240-hue)/60;
+ else
+ b = m1;
+
+ *h = r;
+ *l = g;
+ *s = b;
+ }
+}
+
+void
+_color_shade (const CairoColorRGB *a, float k, CairoColorRGB *b)
+{
+ double red;
+ double green;
+ double blue;
+
+ red = a->r;
+ green = a->g;
+ blue = a->b;
+
+ if (k == 1.0)
+ {
+ b->r = red;
+ b->g = green;
+ b->b = blue;
+ return;
+ }
+
+ _color_rgb_to_hls (&red, &green, &blue);
+
+ green *= k;
+ if (green > 1.0)
+ green = 1.0;
+ else if (green < 0.0)
+ green = 0.0;
+
+ blue *= k;
+ if (blue > 1.0)
+ blue = 1.0;
+ else if (blue < 0.0)
+ blue = 0.0;
+
+ _color_hls_to_rgb (&red, &green, &blue);
+
+ b->r = red;
+ b->g = green;
+ b->b = blue;
+}
+
+
+/*****************************************************************/
+
/* Suppress/consume keyevents */
static gboolean
user_widget_button_release_event (GtkWidget *menuitem,
@@ -291,6 +621,10 @@ user_widget_button_release_event (GtkWidget *menuitem,
return FALSE;
}
+
+/**
+ * TODO, be sensitive to UI updates
+ * */
static void
user_widget_property_update (DbusmenuMenuitem* item, gchar* property,
GVariant* value, gpointer userdata)
@@ -300,6 +634,8 @@ user_widget_property_update (DbusmenuMenuitem* item, gchar* property,
}
+
+
static void
user_widget_set_twin_item (UserWidget* self,
DbusmenuMenuitem* twin_item)
@@ -325,9 +661,48 @@ user_widget_set_twin_item (UserWidget* self,
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);
+ GdkPixbuf* pixbuf = NULL;
+ GError* error = NULL;
+ pixbuf = gdk_pixbuf_new_from_file_at_size(icon_name, 32, 32, NULL);
+
+ if (pixbuf == NULL || error != NULL) {
+ g_warning ("Could not load the user image (%s) for some reason",
+ icon_name);
+ if (pixbuf != NULL){
+ g_object_unref (pixbuf);
+ pixbuf = NULL;
+ }
+ if (error != NULL){
+ g_error_free (error);
+ error = NULL;
+ }
+
+ priv->using_personal_icon = FALSE;
+
+ pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
+ USER_ITEM_ICON_DEFAULT,
+ 32,
+ GTK_ICON_LOOKUP_FORCE_SIZE,
+ &error);
+ }
+ else{
+ priv->using_personal_icon = TRUE;
+ }
+ if (pixbuf == NULL || error != NULL) {
+ g_warning ("Could not load the user image");
+ if (error != NULL){
+ g_error_free (error);
+ error = NULL;
+ }
+ }
+ else{
+ gtk_image_set_from_pixbuf (GTK_IMAGE(priv->user_image), pixbuf);
+ }
+ if (pixbuf != NULL){
+ g_object_unref (pixbuf);
+ pixbuf = NULL;
+ }
}
/**
diff --git a/src/users-service-dbus.c b/src/users-service-dbus.c
index e7507a4..4b41f4b 100644
--- a/src/users-service-dbus.c
+++ b/src/users-service-dbus.c
@@ -58,6 +58,8 @@ static void user_added (DBusGProxy *proxy
static void user_deleted (DBusGProxy *proxy,
const gchar *user_id,
gpointer user_data);
+static void user_changed (DBusGProxy *proxy,
+ gpointer user_data);
static void seat_proxy_session_added (DBusGProxy *seat_proxy,
const gchar *session_id,
UsersServiceDbus *service);
@@ -711,11 +713,6 @@ sync_users (UsersServiceDbus *self)
g_return_if_fail(IS_USERS_SERVICE_DBUS(self));
UsersServiceDbusPrivate *priv = USERS_SERVICE_DBUS_GET_PRIVATE (self);
- if (g_hash_table_size (priv->users) > 0)
- {
- return;
- }
-
if (priv->count > MINIMUM_USERS && priv->count < MAXIMUM_USERS)
{
GPtrArray *users = NULL;
@@ -758,15 +755,37 @@ sync_users (UsersServiceDbus *self)
continue;
}
-
- user = g_new0 (UserData, 1);
-
+
+ user = g_hash_table_lookup (priv->users, id);
+ // Double check we havent processed this user already
+ if (user != NULL)
+ {
+ g_free(user->user_name);
+ g_free(user->real_name);
+ g_free(user->icon_file);
+ user->real_name_conflict = FALSE;
+ //continue;
+ }
+ else
+ {
+ user = g_new0 (UserData, 1);
+ }
+ // Can't subscribe to the Changed signal on each individual user path
+ // for some reason.
+ dbus_g_proxy_add_signal (proxy,
+ "Changed",
+ G_TYPE_INVALID);
+
+ dbus_g_proxy_connect_signal (proxy, "Changed",
+ G_CALLBACK(user_changed),
+ self,
+ NULL);
user->uid = g_value_get_uint64 (g_hash_table_lookup (properties, "Uid"));
user->user_name = g_strdup (g_value_get_string (g_hash_table_lookup (properties, "UserName")));
user->real_name = g_strdup (g_value_get_string (g_hash_table_lookup (properties, "RealName")));
user->icon_file = g_strdup (g_value_get_string (g_hash_table_lookup (properties, "IconFile")));
user->real_name_conflict = FALSE;
- user->menuitem = NULL;
+ user->menuitem = NULL;
g_hash_table_unref (properties);
@@ -782,31 +801,50 @@ sync_users (UsersServiceDbus *self)
}
static void
+user_changed (DBusGProxy *proxy,
+ gpointer user_data)
+{
+ g_debug ("JUST RESYNCED THE USERS FROM A USER CHANGE");
+ UsersServiceDbus *service = (UsersServiceDbus *)user_data;
+ sync_users (service);
+}
+
+static void
user_added (DBusGProxy *proxy,
const gchar *user_id,
gpointer user_data)
{
UsersServiceDbus *service = (UsersServiceDbus *)user_data;
UsersServiceDbusPrivate *priv = USERS_SERVICE_DBUS_GET_PRIVATE (service);
-
priv->count++;
if (priv->count < MAXIMUM_USERS)
{
sync_users (service);
}
+
+ g_signal_emit (service,
+ signals[USER_ADDED],
+ 0,
+ user_id);
}
static void
user_deleted (DBusGProxy *proxy,
const gchar *user_id,
gpointer user_data)
-{
+{
UsersServiceDbus *service = (UsersServiceDbus *)user_data;
UsersServiceDbusPrivate *priv = USERS_SERVICE_DBUS_GET_PRIVATE (service);
priv->count--;
g_hash_table_remove (priv->users, user_id);
+
+ g_signal_emit (service,
+ signals[USER_DELETED],
+ 0,
+ user_id);
+
}
UserData *