Merge lp:~3v1n0/indicator-session/shell-mode into lp:indicator-session/13.04

Proposed by Marco Trevisan (Treviño)
Status: Merged
Approved by: Charles Kerr
Approved revision: 391
Merged at revision: 386
Proposed branch: lp:~3v1n0/indicator-session/shell-mode
Merge into: lp:indicator-session/13.04
Diff against target: 239 lines (+149/-4)
1 file modified
src/session-menu-mgr.c (+149/-4)
To merge this branch: bzr merge lp:~3v1n0/indicator-session/shell-mode
Reviewer Review Type Date Requested Status
Charles Kerr (community) Approve
PS Jenkins bot (community) continuous-integration Approve
Review via email: mp+151976@code.launchpad.net

Commit message

SessionMenuMgr: use unity shutdown dialogs if they're available, hiding Reboot action

Description of the change

To impelment the shutdown dialogs in Unity we're implementing the org.gnome.Shell's org.gnome.SessionManager.EndSessionDialog interface, this will allow us to react to gnome-session events with a nice UI flawlessly.

In that case, as the spec says, the indicator-session should not show the "Reboot" actions since both it and the "Shut Down" one are now pointing to the same screen.

So, when the org.gnome.Shell name appears now we hide the unneeded Reboot menu action and we call the GnomeSessionManager methods instead of opening the legacy dialog.

JohnLea has approved this change.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
391. By Marco Trevisan (Treviño)

SessionMenuMgr: show the reboot menu item in shell-mode with no confirmation

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Ted Gould (ted) wrote :

This merge needs a change to here:

https://wiki.ubuntu.com/SystemMenu

Before it should be applied so that they stay in sync.

Revision history for this message
Marco Trevisan (Treviño) (3v1n0) wrote :

> This merge needs a change to here:
>
> https://wiki.ubuntu.com/SystemMenu
>
> Before it should be applied so that they stay in sync.

Fine, can I do that, or should I wait for design?

Revision history for this message
Charles Kerr (charlesk) wrote :

Since we're up on FF and the design's been approved for some time now, IMO on balance it's better to approve this.

However let's make sure mpt's aware of this change and see if he has any concerns/issues that we can address during bugfixing.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/session-menu-mgr.c'
--- src/session-menu-mgr.c 2012-11-16 09:30:53 +0000
+++ src/session-menu-mgr.c 2013-03-06 15:31:21 +0000
@@ -110,8 +110,10 @@
110 gboolean allow_hibernate;110 gboolean allow_hibernate;
111 gboolean allow_suspend;111 gboolean allow_suspend;
112112
113 gboolean shell_mode;
113 gboolean greeter_mode;114 gboolean greeter_mode;
114115
116 guint shell_name_watcher;
115 GCancellable * cancellable;117 GCancellable * cancellable;
116 DBusUPower * upower_proxy;118 DBusUPower * upower_proxy;
117 SessionDbus * session_dbus;119 SessionDbus * session_dbus;
@@ -122,6 +124,7 @@
122static SwitcherMode get_switcher_mode (SessionMenuMgr *);124static SwitcherMode get_switcher_mode (SessionMenuMgr *);
123125
124static void init_upower_proxy (SessionMenuMgr *);126static void init_upower_proxy (SessionMenuMgr *);
127static void init_shell_watcher (SessionMenuMgr *);
125128
126static void update_screensaver_shortcut (SessionMenuMgr *);129static void update_screensaver_shortcut (SessionMenuMgr *);
127static void update_user_menuitems (SessionMenuMgr *);130static void update_user_menuitems (SessionMenuMgr *);
@@ -131,6 +134,9 @@
131static void action_func_lock (SessionMenuMgr *);134static void action_func_lock (SessionMenuMgr *);
132static void action_func_suspend (SessionMenuMgr *);135static void action_func_suspend (SessionMenuMgr *);
133static void action_func_hibernate (SessionMenuMgr *);136static void action_func_hibernate (SessionMenuMgr *);
137static void action_func_shutdown (SessionMenuMgr *);
138static void action_func_reboot (SessionMenuMgr *);
139static void action_func_logout (SessionMenuMgr *);
134static void action_func_switch_to_lockscreen (SessionMenuMgr *);140static void action_func_switch_to_lockscreen (SessionMenuMgr *);
135static void action_func_switch_to_greeter (SessionMenuMgr *);141static void action_func_switch_to_greeter (SessionMenuMgr *);
136static void action_func_switch_to_guest (SessionMenuMgr *);142static void action_func_switch_to_guest (SessionMenuMgr *);
@@ -172,6 +178,8 @@
172 s = g_settings_new ("com.canonical.indicator.session");178 s = g_settings_new ("com.canonical.indicator.session");
173 g_signal_connect_swapped (s, "changed::suppress-logout-restart-shutdown",179 g_signal_connect_swapped (s, "changed::suppress-logout-restart-shutdown",
174 G_CALLBACK(update_confirmation_labels), mgr);180 G_CALLBACK(update_confirmation_labels), mgr);
181 g_signal_connect_swapped (s, "changed::suppress-logout-restart-shutdown",
182 G_CALLBACK(update_session_menuitems), mgr);
175 g_signal_connect_swapped (s, "changed::suppress-logout-menuitem",183 g_signal_connect_swapped (s, "changed::suppress-logout-menuitem",
176 G_CALLBACK(update_session_menuitems), mgr);184 G_CALLBACK(update_session_menuitems), mgr);
177 g_signal_connect_swapped (s, "changed::suppress-restart-menuitem",185 g_signal_connect_swapped (s, "changed::suppress-restart-menuitem",
@@ -196,6 +204,7 @@
196 G_CALLBACK(on_guest_logged_in_changed), mgr);204 G_CALLBACK(on_guest_logged_in_changed), mgr);
197205
198 init_upower_proxy (mgr);206 init_upower_proxy (mgr);
207 init_shell_watcher (mgr);
199208
200 /* Online accounts menu item */209 /* Online accounts menu item */
201 mgr->online_accounts_mgr = online_accounts_mgr_new ();210 mgr->online_accounts_mgr = online_accounts_mgr_new ();
@@ -224,6 +233,11 @@
224 g_slist_free (mgr->user_menuitems);233 g_slist_free (mgr->user_menuitems);
225 mgr->user_menuitems = NULL;234 mgr->user_menuitems = NULL;
226235
236 if (mgr->shell_name_watcher)
237 {
238 g_bus_unwatch_name (mgr->shell_name_watcher);
239 }
240
227 G_OBJECT_CLASS (session_menu_mgr_parent_class)->dispose (object);241 G_OBJECT_CLASS (session_menu_mgr_parent_class)->dispose (object);
228}242}
229243
@@ -328,6 +342,37 @@
328 }342 }
329}343}
330344
345static void
346on_shell_name_appeared (GDBusConnection *connection, const gchar *name,
347 const gchar *name_owner, gpointer user_data)
348{
349 SessionMenuMgr * mgr = SESSION_MENU_MGR(user_data);
350
351 g_debug("Shell appeared");
352 mgr->shell_mode = TRUE;
353 update_session_menuitems (mgr);
354}
355
356static void
357on_shell_name_vanished (GDBusConnection *connection, const gchar *name, gpointer user_data)
358{
359 SessionMenuMgr * mgr = SESSION_MENU_MGR(user_data);
360
361 g_debug("Shell vanished");
362 mgr->shell_mode = FALSE;
363 update_session_menuitems (mgr);
364}
365
366static void
367init_shell_watcher (SessionMenuMgr * mgr)
368{
369 mgr->shell_name_watcher = g_bus_watch_name (G_BUS_TYPE_SESSION, "org.gnome.Shell",
370 G_BUS_NAME_WATCHER_FLAGS_NONE,
371 on_shell_name_appeared,
372 on_shell_name_vanished,
373 mgr, NULL);
374}
375
331/***376/***
332**** Menuitem Helpers377**** Menuitem Helpers
333***/378***/
@@ -468,7 +513,8 @@
468 && mgr->allow_hibernate;513 && mgr->allow_hibernate;
469 mi_set_visible (mgr->hibernate_mi, v);514 mi_set_visible (mgr->hibernate_mi, v);
470515
471 v = HAVE_RESTART_CMD516 v = (!mgr->shell_mode || g_settings_get_boolean (s, "suppress-logout-restart-shutdown"))
517 && (HAVE_RESTART_CMD || mgr->shell_mode)
472 && !g_settings_get_boolean (s, "suppress-restart-menuitem");518 && !g_settings_get_boolean (s, "suppress-restart-menuitem");
473 mi_set_visible (mgr->restart_mi, v);519 mi_set_visible (mgr->restart_mi, v);
474520
@@ -507,7 +553,7 @@
507 mi = mgr->logout_mi = mi_new (_("Log Out\342\200\246"));553 mi = mgr->logout_mi = mi_new (_("Log Out\342\200\246"));
508 dbusmenu_menuitem_child_append (mgr->top_mi, mi);554 dbusmenu_menuitem_child_append (mgr->top_mi, mi);
509 g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,555 g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
510 G_CALLBACK(action_func_spawn_async), CMD_LOGOUT);556 G_CALLBACK(action_func_logout), mgr);
511557
512 mi = mgr->suspend_mi = mi_new (_("Suspend"));558 mi = mgr->suspend_mi = mi_new (_("Suspend"));
513 dbusmenu_menuitem_child_append (mgr->top_mi, mi);559 dbusmenu_menuitem_child_append (mgr->top_mi, mi);
@@ -522,12 +568,12 @@
522 mi = mgr->restart_mi = mi_new (_("Restart\342\200\246"));568 mi = mgr->restart_mi = mi_new (_("Restart\342\200\246"));
523 dbusmenu_menuitem_child_append (mgr->top_mi, mi);569 dbusmenu_menuitem_child_append (mgr->top_mi, mi);
524 g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,570 g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
525 G_CALLBACK(action_func_spawn_async), CMD_RESTART);571 G_CALLBACK(action_func_reboot), mgr);
526572
527 mi = mgr->shutdown_mi = mi_new (_("Shut Down\342\200\246"));573 mi = mgr->shutdown_mi = mi_new (_("Shut Down\342\200\246"));
528 dbusmenu_menuitem_child_append (mgr->top_mi, mi);574 dbusmenu_menuitem_child_append (mgr->top_mi, mi);
529 g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,575 g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
530 G_CALLBACK(action_func_spawn_async), CMD_SHUTDOWN);576 G_CALLBACK(action_func_shutdown), mgr);
531577
532 update_confirmation_labels (mgr);578 update_confirmation_labels (mgr);
533 update_session_menuitems (mgr);579 update_session_menuitems (mgr);
@@ -1128,6 +1174,105 @@
1128 }1174 }
1129}1175}
11301176
1177static gboolean
1178call_session_manager_method (const gchar * method_name, GVariant * parameters)
1179{
1180 gboolean result = TRUE;
1181 GError * error = NULL;
1182 GDBusProxy * proxy = g_dbus_proxy_new_for_bus_sync (
1183 G_BUS_TYPE_SESSION,
1184 G_DBUS_PROXY_FLAGS_NONE,
1185 NULL,
1186 "org.gnome.SessionManager",
1187 "/org/gnome/SessionManager",
1188 "org.gnome.SessionManager",
1189 NULL,
1190 &error);
1191
1192 if (error == NULL)
1193 {
1194 g_dbus_proxy_call_sync (proxy, method_name, parameters,
1195 G_DBUS_CALL_FLAGS_NONE, -1, NULL,
1196 &error);
1197 }
1198 else if (parameters != NULL)
1199 {
1200 g_variant_unref (parameters);
1201 }
1202
1203 if (error != NULL)
1204 {
1205 result = FALSE;
1206 g_warning ("Error shutting down: %s", error->message);
1207 g_clear_error (&error);
1208 }
1209
1210 g_clear_object (&proxy);
1211
1212 return result;
1213}
1214
1215static void
1216action_func_shutdown (SessionMenuMgr * mgr)
1217{
1218 gboolean result = FALSE;
1219
1220 if (mgr->shell_mode)
1221 {
1222 if (g_settings_get_boolean (mgr->indicator_settings,
1223 "suppress-logout-restart-shutdown"))
1224 {
1225 result = call_session_manager_method ("Shutdown", NULL);
1226 }
1227 else
1228 {
1229 /* We call 'Reboot' method instead of 'Shutdown' because
1230 * Unity SessionManager handles the Shutdown request as a more
1231 * general request as the default SessionManager dialog would do */
1232 result = call_session_manager_method ("Reboot", NULL);
1233 }
1234 }
1235
1236 if (!result)
1237 {
1238 action_func_spawn_async (CMD_SHUTDOWN);
1239 }
1240}
1241
1242static void
1243action_func_logout (SessionMenuMgr * mgr)
1244{
1245 gboolean result = FALSE;
1246
1247 if (mgr->shell_mode)
1248 {
1249 guint interactive_mode = 0;
1250 result = call_session_manager_method ("Logout",
1251 g_variant_new ("(u)", interactive_mode));
1252 }
1253
1254 if (!result)
1255 {
1256 action_func_spawn_async (CMD_LOGOUT);
1257 }
1258}
1259
1260static void
1261action_func_reboot (SessionMenuMgr * mgr)
1262{
1263 gboolean result = FALSE;
1264
1265 if (mgr->shell_mode)
1266 {
1267 result = call_session_manager_method ("Reboot", NULL);
1268 }
1269
1270 if (!result)
1271 {
1272 action_func_spawn_async (CMD_RESTART);
1273 }
1274}
1275
1131/***1276/***
1132****1277****
1133***/1278***/

Subscribers

People subscribed via source and target branches