aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac2
-rw-r--r--data/com.canonical.indicator.session.gschema.xml.in6
-rw-r--r--src/dbus-shared-names.h2
-rw-r--r--src/indicator-session.c19
-rw-r--r--src/settings-helper.c6
-rw-r--r--src/settings-helper.h3
-rw-r--r--src/user-menu-mgr.c26
7 files changed, 48 insertions, 16 deletions
diff --git a/configure.ac b/configure.ac
index 951e8a3..a89c30d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@ AC_INIT(src/indicator-session.c)
AC_PREREQ(2.53)
AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(indicator-session, 0.3.4.2)
+AM_INIT_AUTOMAKE(indicator-session, 0.3.4.3)
AM_MAINTAINER_MODE
diff --git a/data/com.canonical.indicator.session.gschema.xml.in b/data/com.canonical.indicator.session.gschema.xml.in
index d1d7d4c..e0d14c3 100644
--- a/data/com.canonical.indicator.session.gschema.xml.in
+++ b/data/com.canonical.indicator.session.gschema.xml.in
@@ -20,5 +20,11 @@
<_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>
+ <key type="b" name="user-show-menu">
+ <default>true</default>
+ <summary>Determine the visibility of the User Menu</summary>
+ <description>Allow for the user menu to be hidden by the user.</description>
+ </key>
</schema>
+
</schemalist>
diff --git a/src/dbus-shared-names.h b/src/dbus-shared-names.h
index c5372e4..5f35903 100644
--- a/src/dbus-shared-names.h
+++ b/src/dbus-shared-names.h
@@ -63,5 +63,7 @@ typedef enum {
#define ICON_DEFAULT "system-devices-panel"
#define ICON_RESTART "system-devices-panel-alert"
+#define GREETER_ICON_DEFAULT "system-shutdown-panel"
+#define GREETER_ICON_RESTART "system-shutdown-panel-restart"
#endif /* __DBUS_SHARED_NAMES_H__ */
diff --git a/src/indicator-session.c b/src/indicator-session.c
index aacef49..2f1764f 100644
--- a/src/indicator-session.c
+++ b/src/indicator-session.c
@@ -70,6 +70,8 @@ struct _IndicatorSession {
GDBusProxy * service_proxy;
};
+static gboolean greeter_mode;
+
GType indicator_session_get_type (void);
/* Indicator stuff */
@@ -164,10 +166,18 @@ indicator_session_init (IndicatorSession *self)
self->users.label = GTK_LABEL (gtk_label_new (NULL));
+ const gchar *greeter_var;
+ greeter_var = g_getenv("INDICATOR_GREETER_MODE");
+ greeter_mode = g_strcmp0(greeter_var, "1") == 0;
// 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);
+ if (greeter_mode){
+ self->devices.image = indicator_image_helper (GREETER_ICON_DEFAULT);
+ }
+ else{
+ self->devices.image = indicator_image_helper (ICON_DEFAULT);
+ }
gtk_widget_show (GTK_WIDGET(self->devices.menu));
gtk_widget_show (GTK_WIDGET(self->devices.image));
@@ -498,7 +508,12 @@ receive_signal (GDBusProxy * proxy,
}
}
else if (g_strcmp0(signal_name, "RestartRequired") == 0) {
- self->devices.image = indicator_image_helper (ICON_RESTART);
+ if (greeter_mode == TRUE){
+ self->devices.image = indicator_image_helper (GREETER_ICON_RESTART);
+ }
+ else{
+ self->devices.image = indicator_image_helper (ICON_RESTART);
+ }
}
}
diff --git a/src/settings-helper.c b/src/settings-helper.c
index 5a69d17..d70df95 100644
--- a/src/settings-helper.c
+++ b/src/settings-helper.c
@@ -53,6 +53,12 @@ supress_confirmations (void) {
}
gboolean
+should_show_user_menu (void) {
+ build_settings();
+ return g_settings_get_boolean (settings, SHOW_USER_MENU) ;
+}
+
+gboolean
show_logout (void) {
build_settings();
return !g_settings_get_boolean (settings, LOGOUT_KEY) ;
diff --git a/src/settings-helper.h b/src/settings-helper.h
index 7b377ca..ae57575 100644
--- a/src/settings-helper.h
+++ b/src/settings-helper.h
@@ -36,6 +36,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOGOUT_KEY "suppress-logout-menuitem"
#define RESTART_KEY "suppress-restart-menuitem"
#define SHUTDOWN_KEY "suppress-shutdown-menuitem"
+#define SHOW_USER_MENU "user-show-menu"
#define LOCKDOWN_SCHEMA "org.gnome.desktop.lockdown"
#define LOCKDOWN_KEY_USER "disable-user-switching"
@@ -56,5 +57,7 @@ gboolean supress_confirmations (void);
gboolean show_logout (void);
gboolean show_restart (void);
gboolean show_shutdown (void);
+gboolean should_show_user_menu (void);
+
#endif /* __GCONF_HELPER__ */
diff --git a/src/user-menu-mgr.c b/src/user-menu-mgr.c
index a4308dd..16c6e3b 100644
--- a/src/user-menu-mgr.c
+++ b/src/user-menu-mgr.c
@@ -18,7 +18,6 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <libdbusmenu-glib/client.h>
-
#include "user-menu-mgr.h"
#include "settings-helper.h"
#include "dbus-shared-names.h"
@@ -54,22 +53,19 @@ static void activate_online_accounts (DbusmenuMenuitem *mi,
gpointer user_data);
static void activate_user_accounts (DbusmenuMenuitem *mi,
guint timestamp,
- gpointer user_data);
-
+ gpointer user_data);
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_settings_client ();
-static gboolean check_guest_session (void);
+static gboolean is_this_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);
@@ -148,7 +144,7 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode)
self->users_dbus_interface);
}
- if (check_guest_session ())
+ if (is_this_guest_session ())
{
guest_mi = dbusmenu_menuitem_new ();
dbusmenu_menuitem_property_set (guest_mi,
@@ -177,14 +173,18 @@ user_menu_mgr_rebuild_items (UserMenuMgr *self, gboolean greeter_mode)
users = users_service_dbus_get_user_list (self->users_dbus_interface);
self->user_count = g_list_length(users);
- gboolean user_menu_is_visible = FALSE;
+ gboolean user_menu_is_visible = should_show_user_menu();
- if (!greeter_mode){
- user_menu_is_visible = TRUE;
+ if (user_menu_is_visible == FALSE || greeter_mode == TRUE){
+ session_dbus_set_user_menu_visibility (self->session_dbus_interface,
+ FALSE);
+ }
+ else{
+ // This needs to be updated once the ability to query guest session support is available
+ session_dbus_set_user_menu_visibility (self->session_dbus_interface,
+ user_menu_is_visible);
}
- 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);
@@ -415,7 +415,7 @@ user_mgr_get_root_item (UserMenuMgr* self)
/* Checks to see if we should show the guest suession item */
static gboolean
-check_guest_session (void)
+is_this_guest_session (void)
{
if (geteuid() < 500) {
/* System users shouldn't have guest account shown. Mostly