← Back to team overview

ayatana-commits team mailing list archive

[Merge] lp:~ted/indicator-session/configurable-restart into lp:indicator-session

 

Ted Gould has proposed merging lp:~ted/indicator-session/configurable-restart into lp:indicator-session.

Requested reviews:
  Indicator Applet Developers (indicator-applet-developers)


Adds GConf keys to suppress the restart and shutdown menu items.
-- 
https://code.launchpad.net/~ted/indicator-session/configurable-restart/+merge/22922
Your team ayatana-commits is subscribed to branch lp:indicator-session.
=== modified file 'data/indicator-session.schemas.in'
--- data/indicator-session.schemas.in	2010-03-16 02:25:33 +0000
+++ data/indicator-session.schemas.in	2010-04-07 03:45:28 +0000
@@ -2,16 +2,16 @@
 <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>
+		<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>
@@ -24,5 +24,27 @@
 			<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>

=== modified file 'src/gconf-helper.c'
--- src/gconf-helper.c	2010-03-18 19:01:25 +0000
+++ src/gconf-helper.c	2010-04-07 03:45:28 +0000
@@ -36,6 +36,8 @@
 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;
 
 gboolean
 supress_confirmations (void) {
@@ -53,6 +55,22 @@
 	return !gconf_client_get_bool (gconf_client, LOGOUT_KEY, NULL) ;
 }
 
+gboolean
+show_restart (void) {
+	if(!gconf_client) {
+		gconf_client = gconf_client_get_default ();
+	}
+	return !gconf_client_get_bool (gconf_client, RESTART_KEY, NULL) ;
+}
+
+gboolean
+show_shutdown (void) {
+	if(!gconf_client) {
+		gconf_client = gconf_client_get_default ();
+	}
+	return !gconf_client_get_bool (gconf_client, SHUTDOWN_KEY, NULL) ;
+}
+
 static void update_menu_entries_callback (GConfClient *client, guint cnxn_id, GConfEntry  *entry, gpointer data) {
 	RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi = (RestartShutdownLogoutMenuItems*) data;
 	GConfValue * value = gconf_entry_get_value (entry);
@@ -82,8 +100,30 @@
 	}
 }
 
+static void
+update_restart_callback (GConfClient *client, guint cnxn_id, GConfEntry  *entry, 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));
+	}
+}
+
+static void
+update_shutdown_callback (GConfClient *client, guint cnxn_id, GConfEntry  *entry, 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));
+	}
+}
+
 void
-update_menu_entries(RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi, DbusmenuMenuitem * logoutitem) {
+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 ();
@@ -106,9 +146,25 @@
 		logout_notify = 0;
 	}
 
+	if (restart_notify != 0) {
+		gconf_client_notify_remove (gconf_client, restart_notify);
+		restart_notify = 0;
+	}
+
+	if (shutdown_notify != 0) {
+		gconf_client_notify_remove (gconf_client, 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, logoutitem, NULL, NULL);
+				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);
+
+	return;
 }
 

=== modified file 'src/gconf-helper.h'
--- src/gconf-helper.h	2010-03-16 02:50:48 +0000
+++ src/gconf-helper.h	2010-04-07 03:45:28 +0000
@@ -36,6 +36,8 @@
 #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"
 
 typedef struct _RestartShutdownLogoutMenuItems
 {
@@ -45,8 +47,10 @@
 }
 RestartShutdownLogoutMenuItems;
 
-void update_menu_entries(RestartShutdownLogoutMenuItems*, DbusmenuMenuitem * logoutitem);
+void update_menu_entries(RestartShutdownLogoutMenuItems*);
 gboolean supress_confirmations (void);
 gboolean show_logout (void);
+gboolean show_restart (void);
+gboolean show_shutdown (void);
 
 #endif /* __GCONF_HELPER__ */

=== modified file 'src/session-service.c'
--- src/session-service.c	2010-04-06 16:49:10 +0000
+++ src/session-service.c	2010-04-07 03:45:28 +0000
@@ -656,6 +656,7 @@
 	} else {
 		dbusmenu_menuitem_property_set(restart_mi, RESTART_ITEM_LABEL, _("Restart..."));
 	}
+	dbusmenu_menuitem_property_set_bool(restart_mi, DBUSMENU_MENUITEM_PROP_VISIBLE, show_restart());
 	dbusmenu_menuitem_child_append(root, restart_mi);
 	g_signal_connect(G_OBJECT(restart_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_dialog), "restart");
 
@@ -665,6 +666,7 @@
 	} else {
 		dbusmenu_menuitem_property_set(shutdown_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Shut Down..."));
 	}
+	dbusmenu_menuitem_property_set_bool(shutdown_mi, DBUSMENU_MENUITEM_PROP_VISIBLE, show_shutdown());
 	dbusmenu_menuitem_child_append(root, shutdown_mi);
 	g_signal_connect(G_OBJECT(shutdown_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_dialog), "shutdown");
 
@@ -673,7 +675,7 @@
 	restart_shutdown_logout_mi->restart_mi = restart_mi;
 	restart_shutdown_logout_mi->shutdown_mi = shutdown_mi;
 
-	update_menu_entries(restart_shutdown_logout_mi, logout_mi);
+	update_menu_entries(restart_shutdown_logout_mi);
 
 	if (g_file_test(DESKTOP_FILE, G_FILE_TEST_EXISTS)) {
 		GAppInfo * appinfo = G_APP_INFO(g_desktop_app_info_new_from_filename(DESKTOP_FILE));


Follow ups