From d01d3a708cd5b3ec7438e9f3105ad19c693a5053 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 4 Jun 2012 17:02:42 -0500 Subject: remove the printer settings menuitem; it's no longer in the spec --- src/device-menu-mgr.c | 31 +++---------------------------- 1 file changed, 3 insertions(+), 28 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index d081937..a04cfe4 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -63,7 +63,6 @@ static DbusmenuMenuitem *login_settings_menuitem = NULL; #ifdef HAVE_APT static DbusmenuMenuitem *software_updates_menuitem = NULL; #endif /* HAVE_APT */ -static DbusmenuMenuitem *printers_menuitem = NULL; static DbusmenuMenuitem *scanners_menuitem = NULL; static DbusmenuMenuitem *webcam_menuitem = NULL; @@ -432,19 +431,6 @@ show_session_properties (DbusmenuMenuitem * mi, } } -static void -show_printer_properties (DbusmenuMenuitem * mi, - guint timestamp, - gchar * type) -{ - GError * error = NULL; - if (!g_spawn_command_line_async("system-config-printer", &error)) - { - g_warning("Unable to show dialog: %s", error->message); - g_error_free(error); - } -} - static void show_system_settings_with_context (DbusmenuMenuitem * mi, guint timestamp, @@ -572,17 +558,6 @@ device_menu_mgr_build_devices_items (DeviceMenuMgr* self) device_heading, 5); - printers_menuitem = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (printers_menuitem, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Printers")); - g_signal_connect (G_OBJECT(printers_menuitem), - DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(show_printer_properties), - "printers"); - dbusmenu_menuitem_child_add_position(self->root_item, - printers_menuitem, - 6); scanners_menuitem = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (scanners_menuitem, DBUSMENU_MENUITEM_PROP_LABEL, @@ -593,7 +568,7 @@ device_menu_mgr_build_devices_items (DeviceMenuMgr* self) NULL); dbusmenu_menuitem_child_add_position (self->root_item, scanners_menuitem, - 7); + 6); dbusmenu_menuitem_property_set_bool (scanners_menuitem, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE); @@ -608,7 +583,7 @@ device_menu_mgr_build_devices_items (DeviceMenuMgr* self) NULL); dbusmenu_menuitem_child_add_position (self->root_item, webcam_menuitem, - 8); + 7); dbusmenu_menuitem_property_set_bool (webcam_menuitem, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE); @@ -617,7 +592,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, 9); + dbusmenu_menuitem_child_add_position (self->root_item, separator3, 8); } static void -- cgit v1.2.3 From d224ef8dba8de6971c4e4e281fbace4d14a1da6b Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 4 Jun 2012 17:03:53 -0500 Subject: remove the scanner menuitem; it's no longer in the spec --- src/device-menu-mgr.c | 44 ++------------------------------------------ 1 file changed, 2 insertions(+), 42 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index a04cfe4..0ec3ec2 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -63,7 +63,6 @@ static DbusmenuMenuitem *login_settings_menuitem = NULL; #ifdef HAVE_APT static DbusmenuMenuitem *software_updates_menuitem = NULL; #endif /* HAVE_APT */ -static DbusmenuMenuitem *scanners_menuitem = NULL; static DbusmenuMenuitem *webcam_menuitem = NULL; static DBusGProxyCall * suspend_call = NULL; @@ -91,9 +90,6 @@ static void show_system_settings_with_context (DbusmenuMenuitem * mi, guint timestamp, gchar * type); -static void device_menu_mgr_show_simple_scan (DbusmenuMenuitem * mi, - guint timestamp, - gchar * type); static void device_menu_mgr_show_cheese (DbusmenuMenuitem * mi, guint timestamp, gchar * type); @@ -451,27 +447,6 @@ show_system_settings_with_context (DbusmenuMenuitem * mi, g_free(control_centre_command); } -// TODO: refactor both of these down to the one method. -static void device_menu_mgr_show_simple_scan (DbusmenuMenuitem * mi, - guint timestamp, - gchar * type) -{ - GError * error = NULL; - if (!g_spawn_command_line_async("simple-scan", &error)) - { - g_warning("Unable to launch simple-scan: %s", error->message); - g_error_free(error); -#ifdef HAVE_APT - if (!g_spawn_command_line_async("software-center simple-scan", &error)) - { - g_warning ("Unable to launch software-centre simple-scan: %s", - error->message); - g_error_free(error); - } -#endif /* HAVE_APT */ - } -} - static void device_menu_mgr_show_cheese (DbusmenuMenuitem * mi, guint timestamp, gchar * type) @@ -558,21 +533,6 @@ device_menu_mgr_build_devices_items (DeviceMenuMgr* self) device_heading, 5); - scanners_menuitem = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (scanners_menuitem, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Scanners")); - g_signal_connect (G_OBJECT(scanners_menuitem), - DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(device_menu_mgr_show_simple_scan), - NULL); - dbusmenu_menuitem_child_add_position (self->root_item, - scanners_menuitem, - 6); - dbusmenu_menuitem_property_set_bool (scanners_menuitem, - DBUSMENU_MENUITEM_PROP_VISIBLE, - FALSE); - webcam_menuitem = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (webcam_menuitem, DBUSMENU_MENUITEM_PROP_LABEL, @@ -583,7 +543,7 @@ device_menu_mgr_build_devices_items (DeviceMenuMgr* self) NULL); dbusmenu_menuitem_child_add_position (self->root_item, webcam_menuitem, - 7); + 6); dbusmenu_menuitem_property_set_bool (webcam_menuitem, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE); @@ -592,7 +552,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, 8); + dbusmenu_menuitem_child_add_position (self->root_item, separator3, 7); } static void -- cgit v1.2.3 From 8e724cdfa041bbbba1f06896d5f4193a49c84852 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 4 Jun 2012 17:04:51 -0500 Subject: remove the webcam menuitem; it's no longer in the spec --- src/device-menu-mgr.c | 42 +----------------------------------------- 1 file changed, 1 insertion(+), 41 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 0ec3ec2..92f33b0 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -63,7 +63,6 @@ static DbusmenuMenuitem *login_settings_menuitem = NULL; #ifdef HAVE_APT static DbusmenuMenuitem *software_updates_menuitem = NULL; #endif /* HAVE_APT */ -static DbusmenuMenuitem *webcam_menuitem = NULL; static DBusGProxyCall * suspend_call = NULL; static DBusGProxyCall * hibernate_call = NULL; @@ -90,10 +89,6 @@ static void show_system_settings_with_context (DbusmenuMenuitem * mi, guint timestamp, gchar * type); -static void device_menu_mgr_show_cheese (DbusmenuMenuitem * mi, - guint timestamp, - gchar * type); - static void machine_sleep_from_hibernate (DbusmenuMenuitem * mi, guint timestamp, @@ -447,26 +442,6 @@ show_system_settings_with_context (DbusmenuMenuitem * mi, g_free(control_centre_command); } -static void device_menu_mgr_show_cheese (DbusmenuMenuitem * mi, - guint timestamp, - gchar * type) -{ - GError * error = NULL; - if (!g_spawn_command_line_async("cheese", &error)) - { - g_warning("Unable to launch cheese: %s", error->message); - g_error_free(error); -#ifdef HAVE_APT - if (!g_spawn_command_line_async("software-center cheese", &error)) - { - g_warning ("Unable to launch software-centre cheese: %s", - error->message); - g_error_free(error); - } -#endif /* HAVE_APT */ - } -} - static void device_menu_mgr_build_settings_items (DeviceMenuMgr* self) { @@ -533,26 +508,11 @@ device_menu_mgr_build_devices_items (DeviceMenuMgr* self) device_heading, 5); - webcam_menuitem = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (webcam_menuitem, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Webcam")); - g_signal_connect (G_OBJECT(webcam_menuitem), - DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(device_menu_mgr_show_cheese), - NULL); - dbusmenu_menuitem_child_add_position (self->root_item, - webcam_menuitem, - 6); - dbusmenu_menuitem_property_set_bool (webcam_menuitem, - DBUSMENU_MENUITEM_PROP_VISIBLE, - FALSE); - DbusmenuMenuitem * separator3 = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (separator3, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); - dbusmenu_menuitem_child_add_position (self->root_item, separator3, 7); + dbusmenu_menuitem_child_add_position (self->root_item, separator3, 6); } static void -- cgit v1.2.3 From b63c0ea041fec172b3ceba900c0249408f66cf41 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 4 Jun 2012 17:06:24 -0500 Subject: remove the display menuitem; it's no longer in the spec --- src/device-menu-mgr.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 92f33b0..d0a22bb 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -58,7 +58,6 @@ 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 *login_settings_menuitem = NULL; #ifdef HAVE_APT static DbusmenuMenuitem *software_updates_menuitem = NULL; @@ -456,16 +455,6 @@ device_menu_mgr_build_settings_items (DeviceMenuMgr* self) system_settings_menuitem, 0); - display_settings_menuitem = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (display_settings_menuitem, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Displays…")); - g_signal_connect (G_OBJECT(display_settings_menuitem), - DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(show_system_settings_with_context), "display"); - dbusmenu_menuitem_child_add_position(self->root_item, - display_settings_menuitem, - 1); login_settings_menuitem = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (login_settings_menuitem, DBUSMENU_MENUITEM_PROP_LABEL, @@ -476,7 +465,7 @@ device_menu_mgr_build_settings_items (DeviceMenuMgr* self) "login"); dbusmenu_menuitem_child_add_position(self->root_item, login_settings_menuitem, - 2); + 1); #ifdef HAVE_APT software_updates_menuitem = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (software_updates_menuitem, @@ -484,14 +473,14 @@ device_menu_mgr_build_settings_items (DeviceMenuMgr* self) _("Software Up to Date")); dbusmenu_menuitem_child_add_position(self->root_item, software_updates_menuitem, - 3); + 2); #endif /* HAVE_APT */ 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, 4); + dbusmenu_menuitem_child_add_position (self->root_item, separator1, 3); } static void -- cgit v1.2.3 From 7a2f7f702c12558905b52335cf34b4fd9cf60233 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 4 Jun 2012 17:09:10 -0500 Subject: remove the startup applications menuitem; it's no longer in the spec --- src/device-menu-mgr.c | 29 ++--------------------------- 1 file changed, 2 insertions(+), 27 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index d0a22bb..654e967 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -58,7 +58,6 @@ static GSettings *lockdown_settings = NULL; static GSettings *keybinding_settings = NULL; static DbusmenuMenuitem *lock_menuitem = NULL; static DbusmenuMenuitem *system_settings_menuitem = NULL; -static DbusmenuMenuitem *login_settings_menuitem = NULL; #ifdef HAVE_APT static DbusmenuMenuitem *software_updates_menuitem = NULL; #endif /* HAVE_APT */ @@ -408,19 +407,6 @@ show_dialog (DbusmenuMenuitem * mi, guint timestamp, gchar * type) g_free(dialog_line); } -static void -show_session_properties (DbusmenuMenuitem * mi, - guint timestamp, - gchar * type) -{ - GError * error = NULL; - if (!g_spawn_command_line_async("gnome-session-properties", &error)) - { - g_warning("Unable to show dialog: %s", error->message); - g_error_free(error); - } -} - static void show_system_settings_with_context (DbusmenuMenuitem * mi, guint timestamp, @@ -455,17 +441,6 @@ device_menu_mgr_build_settings_items (DeviceMenuMgr* self) system_settings_menuitem, 0); - login_settings_menuitem = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (login_settings_menuitem, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Startup Applications…")); - g_signal_connect (G_OBJECT(login_settings_menuitem), - DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(show_session_properties), - "login"); - dbusmenu_menuitem_child_add_position(self->root_item, - login_settings_menuitem, - 1); #ifdef HAVE_APT software_updates_menuitem = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (software_updates_menuitem, @@ -473,14 +448,14 @@ device_menu_mgr_build_settings_items (DeviceMenuMgr* self) _("Software Up to Date")); dbusmenu_menuitem_child_add_position(self->root_item, software_updates_menuitem, - 2); + 1); #endif /* HAVE_APT */ 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, 3); + dbusmenu_menuitem_child_add_position (self->root_item, separator1, 2); } static void -- cgit v1.2.3 From 09ed92a81c950f6b2221652281c04c1c85e68177 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 4 Jun 2012 17:19:23 -0500 Subject: remove the software updates menuitem; it's no longer in the spec --- src/device-menu-mgr.c | 38 +++++++------------------------------- 1 file changed, 7 insertions(+), 31 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 654e967..81182b9 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -18,7 +18,12 @@ with this program. If not, see . */ #include + +#include +#include + #include +#include #include "device-menu-mgr.h" #include "settings-helper.h" @@ -27,10 +32,6 @@ with this program. If not, see . #include "lock-helper.h" #include "upower-client.h" -#ifdef HAVE_APT -#include "apt-watcher.h" -#endif /* HAVE_APT */ - #ifdef HAS_GUDEV #include "udev-mgr.h" #endif /* HAS_GUDEV */ @@ -43,12 +44,9 @@ with this program. If not, see . struct _DeviceMenuMgr { - GObject parent_instance; + GObject parent_instance; DbusmenuMenuitem* root_item; SessionDbus* session_dbus_interface; -#ifdef HAVE_APT - AptWatcher* apt_watcher; -#endif /* HAVE_APT */ #ifdef HAS_GUDEV UdevMgr* udev_mgr; #endif /* HAS_GUDEV */ @@ -58,9 +56,6 @@ static GSettings *lockdown_settings = NULL; static GSettings *keybinding_settings = NULL; static DbusmenuMenuitem *lock_menuitem = NULL; static DbusmenuMenuitem *system_settings_menuitem = NULL; -#ifdef HAVE_APT -static DbusmenuMenuitem *software_updates_menuitem = NULL; -#endif /* HAVE_APT */ static DBusGProxyCall * suspend_call = NULL; static DBusGProxyCall * hibernate_call = NULL; @@ -101,9 +96,6 @@ G_DEFINE_TYPE (DeviceMenuMgr, device_menu_mgr, G_TYPE_OBJECT); static void device_menu_mgr_init (DeviceMenuMgr *self) { -#ifdef HAVE_APT - self->apt_watcher = NULL; -#endif /* HAVE_APT */ self->root_item = dbusmenu_menuitem_new (); setup_up(self); g_idle_add(lock_screen_setup, NULL); @@ -441,21 +433,11 @@ device_menu_mgr_build_settings_items (DeviceMenuMgr* self) system_settings_menuitem, 0); -#ifdef HAVE_APT - 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, - 1); -#endif /* HAVE_APT */ - 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, 2); + dbusmenu_menuitem_child_add_position (self->root_item, separator1, 1); } static void @@ -644,11 +626,5 @@ DeviceMenuMgr* device_menu_mgr_new (SessionDbus* session_dbus, gboolean greeter_ DeviceMenuMgr* device_mgr = g_object_new (DEVICE_TYPE_MENU_MGR, NULL); device_mgr->session_dbus_interface = session_dbus; device_menu_mgr_build_static_items (device_mgr, greeter_mode); -#ifdef HAVE_APT - if (software_updates_menuitem != NULL) { - device_mgr->apt_watcher = apt_watcher_new (session_dbus, - software_updates_menuitem); - } -#endif /* HAVE_APT */ return device_mgr; } -- cgit v1.2.3 From fb89365ff1f8be1b407d1e0519c3d28744692011 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 4 Jun 2012 19:11:25 -0500 Subject: remove our udev dependency now that we no longer use it to look at devices --- src/device-menu-mgr.c | 11 ----------- 1 file changed, 11 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 81182b9..5a31716 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -32,10 +32,6 @@ with this program. If not, see . #include "lock-helper.h" #include "upower-client.h" -#ifdef HAS_GUDEV -#include "udev-mgr.h" -#endif /* HAS_GUDEV */ - #define UP_ADDRESS "org.freedesktop.UPower" #define UP_OBJECT "/org/freedesktop/UPower" #define UP_INTERFACE "org.freedesktop.UPower" @@ -47,9 +43,6 @@ struct _DeviceMenuMgr GObject parent_instance; DbusmenuMenuitem* root_item; SessionDbus* session_dbus_interface; -#ifdef HAS_GUDEV - UdevMgr* udev_mgr; -#endif /* HAS_GUDEV */ }; static GSettings *lockdown_settings = NULL; @@ -579,10 +572,6 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) restart_shutdown_logout_mi->shutdown_mi = shutdown_mi; update_menu_entries(restart_shutdown_logout_mi); -#ifdef HAS_GUDEV - // Time to create the udev mgr and hand it the static relevant items. - self->udev_mgr = udev_mgr_new (scanners_menuitem, webcam_menuitem); -#endif } static void -- cgit v1.2.3 From f49835864541e39f42ed6b06feabbdbcd8d3eac2 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 13:46:29 -0500 Subject: In device-menu-mgr, remove unused context from show_system_settings_with_context() --- src/device-menu-mgr.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 5a31716..a76ecd5 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -71,10 +71,9 @@ static void setup_up (DeviceMenuMgr* self); static void device_menu_mgr_rebuild_items (DeviceMenuMgr *self); static void machine_sleep_with_context (DeviceMenuMgr* self, gchar* type); -static void show_system_settings_with_context (DbusmenuMenuitem * mi, - guint timestamp, - gchar * type); - +static void show_system_settings (DbusmenuMenuitem * mi, + guint timestamp, + gpointer userdata); static void machine_sleep_from_hibernate (DbusmenuMenuitem * mi, guint timestamp, @@ -393,23 +392,18 @@ show_dialog (DbusmenuMenuitem * mi, guint timestamp, gchar * type) } static void -show_system_settings_with_context (DbusmenuMenuitem * mi, - guint timestamp, - gchar * type) +show_system_settings (DbusmenuMenuitem * mi G_GNUC_UNUSED, + guint timestamp G_GNUC_UNUSED, + gpointer user_data G_GNUC_UNUSED) { - gchar * control_centre_command = g_strdup_printf("%s %s", - "gnome-control-center", - type); - - g_debug("Command centre exec call '%s'", control_centre_command); + const char * const cmd = "gnome-control-center"; GError * error = NULL; - if (!g_spawn_command_line_async(control_centre_command, &error)) + if (!g_spawn_command_line_async (cmd, &error)) { g_warning("Unable to show dialog: %s", error->message); g_error_free(error); } - g_free(control_centre_command); } static void @@ -421,7 +415,7 @@ device_menu_mgr_build_settings_items (DeviceMenuMgr* self) _("System Settings…")); g_signal_connect (G_OBJECT(system_settings_menuitem), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(show_system_settings_with_context), ""); + G_CALLBACK(show_system_settings), NULL); dbusmenu_menuitem_child_add_position(self->root_item, system_settings_menuitem, 0); -- cgit v1.2.3 From 913dcda481011189ce4dfd338e11e86ee48a49e1 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 14:00:18 -0500 Subject: remove duplicate code when updating the lock menuitem's keybindings --- src/device-menu-mgr.c | 42 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 25 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index a76ecd5..1e62262 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -129,23 +129,23 @@ lockdown_changed (GSettings * settings, } static void -keybinding_changed (GSettings *settings, - const gchar *key, - gpointer user_data) +update_screensaver_shortcut (DbusmenuMenuitem * menuitem, GSettings * settings) { - if (key == NULL) { - return; - } + if (lock_menuitem != NULL) + { + gchar * val = g_settings_get_string (settings, KEY_LOCK_SCREEN); + g_debug ("Keybinding changed to: %s", val); + dbusmenu_menuitem_property_set_shortcut_string (lock_menuitem, val); + g_free (val); + } +} - if (g_strcmp0 (key, KEY_LOCK_SCREEN) == 0) { - gchar * val = g_settings_get_string(settings, key); - g_debug("Keybinding changed to: %s", val); - if (lock_menuitem != NULL) { - dbusmenu_menuitem_property_set_shortcut_string (lock_menuitem, val); - } - g_free (val); - } - return; +static void +screensaver_keybinding_changed (GSettings * settings, + const gchar * key G_GNUC_UNUSED, + gpointer user_data G_GNUC_UNUSED) +{ + update_screensaver_shortcut (lock_menuitem, settings); } static void @@ -477,15 +477,7 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) DBUSMENU_MENUITEM_PROP_LABEL, _("Lock Screen")); - 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); - g_free(shortcut); - } - else { - g_debug("Unable to get lock screen shortcut."); - } + update_screensaver_shortcut (lock_menuitem, keybinding_settings); g_signal_connect (G_OBJECT(lock_menuitem), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, @@ -590,7 +582,7 @@ device_menu_mgr_ensure_settings_client (DeviceMenuMgr* 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); + g_signal_connect(lockdown_settings, "changed::" KEY_LOCK_SCREEN, G_CALLBACK(screensaver_keybinding_changed), self); } return; } -- cgit v1.2.3 From 47c518ad38b92b2341f85893cc0eca25c3a2bf3c Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 14:03:37 -0500 Subject: In device-menu-mgr.c, lockdown_changed() only exists as a pass-thru for having LOCKDOWN_KEY_USER and LOCKDOWN_KEY_SCREENSAVER changes force a menu rebuild, so eliminate the middleman and connect those property changes directly to the menu rebuild --- src/device-menu-mgr.c | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 1e62262..5b212e7 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -107,27 +107,6 @@ device_menu_mgr_class_init (DeviceMenuMgrClass *klass) object_class->finalize = device_menu_mgr_finalize; } -// TODO -// Is this needed anymore -static void -lockdown_changed (GSettings * settings, - const gchar * key, - gpointer user_data) -{ - DeviceMenuMgr* self = DEVICE_MENU_MGR (user_data); - - if (key == NULL) { - return; - } - - if (g_strcmp0 (key, LOCKDOWN_KEY_USER) == 0 || - g_strcmp0 (key, LOCKDOWN_KEY_SCREENSAVER) == 0) { - device_menu_mgr_rebuild_items(self); - } - - return; -} - static void update_screensaver_shortcut (DbusmenuMenuitem * menuitem, GSettings * settings) { @@ -578,7 +557,8 @@ device_menu_mgr_ensure_settings_client (DeviceMenuMgr* self) { if (!lockdown_settings) { lockdown_settings = g_settings_new (LOCKDOWN_SCHEMA); - g_signal_connect(lockdown_settings, "changed", G_CALLBACK(lockdown_changed), self); + g_signal_connect_swapped (lockdown_settings, "changed::" LOCKDOWN_KEY_USER, G_CALLBACK(device_menu_mgr_rebuild_items), self); + g_signal_connect_swapped (lockdown_settings, "changed::" LOCKDOWN_KEY_SCREENSAVER, G_CALLBACK(device_menu_mgr_rebuild_items), self); } if (!keybinding_settings) { keybinding_settings = g_settings_new (KEYBINDING_SCHEMA); -- cgit v1.2.3 From 470d4c03379c4d45b848b8078f93ab9cadd07c54 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 14:14:54 -0500 Subject: bugfix: we were listening to screensaver shortcut settings changes from the wrong GSettings. --- src/device-menu-mgr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 5b212e7..57738db 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -562,7 +562,7 @@ device_menu_mgr_ensure_settings_client (DeviceMenuMgr* self) } if (!keybinding_settings) { keybinding_settings = g_settings_new (KEYBINDING_SCHEMA); - g_signal_connect(lockdown_settings, "changed::" KEY_LOCK_SCREEN, G_CALLBACK(screensaver_keybinding_changed), self); + g_signal_connect (keybinding_settings, "changed::" KEY_LOCK_SCREEN, G_CALLBACK(screensaver_keybinding_changed), self); } return; } -- cgit v1.2.3 From d767fd18038684dff290581d6b77ddfdf421a341 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 14:18:35 -0500 Subject: make lockdown_settings an instance variable rather than a global one, so that it will get disposed properly and not persist between test sessions --- src/device-menu-mgr.c | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 57738db..043ec0f 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -43,9 +43,9 @@ struct _DeviceMenuMgr GObject parent_instance; DbusmenuMenuitem* root_item; SessionDbus* session_dbus_interface; + GSettings *lockdown_settings; }; -static GSettings *lockdown_settings = NULL; static GSettings *keybinding_settings = NULL; static DbusmenuMenuitem *lock_menuitem = NULL; static DbusmenuMenuitem *system_settings_menuitem = NULL; @@ -89,24 +89,42 @@ static void device_menu_mgr_init (DeviceMenuMgr *self) { self->root_item = dbusmenu_menuitem_new (); - setup_up(self); - g_idle_add(lock_screen_setup, NULL); + + self->lockdown_settings = g_settings_new (LOCKDOWN_SCHEMA); + g_signal_connect_swapped (self->lockdown_settings, "changed::" LOCKDOWN_KEY_USER, G_CALLBACK(device_menu_mgr_rebuild_items), self); + g_signal_connect_swapped (self->lockdown_settings, "changed::" LOCKDOWN_KEY_SCREENSAVER, G_CALLBACK(device_menu_mgr_rebuild_items), self); + + setup_up(self); + g_idle_add(lock_screen_setup, NULL); +} + +static void +device_menu_mgr_dispose (GObject *object) +{ + DeviceMenuMgr * self = DEVICE_MENU_MGR (object); + g_clear_object (&self->lockdown_settings); + + G_OBJECT_CLASS (device_menu_mgr_parent_class)->finalize (object); } static void device_menu_mgr_finalize (GObject *object) { - G_OBJECT_CLASS (device_menu_mgr_parent_class)->finalize (object); + G_OBJECT_CLASS (device_menu_mgr_parent_class)->finalize (object); } -// TODO refactor into one helper method for both menu mgrs. static void device_menu_mgr_class_init (DeviceMenuMgrClass *klass) { - GObjectClass* object_class = G_OBJECT_CLASS (klass); - object_class->finalize = device_menu_mgr_finalize; + GObjectClass* object_class = G_OBJECT_CLASS (klass); + object_class->dispose = device_menu_mgr_dispose; + object_class->finalize = device_menu_mgr_finalize; } +/*** +**** +***/ + static void update_screensaver_shortcut (DbusmenuMenuitem * menuitem, GSettings * settings) { @@ -447,7 +465,7 @@ 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_settings_client (self); - can_lockscreen = !g_settings_get_boolean (lockdown_settings, + can_lockscreen = !g_settings_get_boolean (self->lockdown_settings, LOCKDOWN_KEY_SCREENSAVER); /* Lock screen item */ if (can_lockscreen) { @@ -555,11 +573,6 @@ device_menu_mgr_rebuild_items (DeviceMenuMgr* self) static void device_menu_mgr_ensure_settings_client (DeviceMenuMgr* self) { - if (!lockdown_settings) { - lockdown_settings = g_settings_new (LOCKDOWN_SCHEMA); - g_signal_connect_swapped (lockdown_settings, "changed::" LOCKDOWN_KEY_USER, G_CALLBACK(device_menu_mgr_rebuild_items), self); - g_signal_connect_swapped (lockdown_settings, "changed::" LOCKDOWN_KEY_SCREENSAVER, G_CALLBACK(device_menu_mgr_rebuild_items), self); - } if (!keybinding_settings) { keybinding_settings = g_settings_new (KEYBINDING_SCHEMA); g_signal_connect (keybinding_settings, "changed::" KEY_LOCK_SCREEN, G_CALLBACK(screensaver_keybinding_changed), self); -- cgit v1.2.3 From 732867f44a1bef0bbfd6e8b9be496381d2fe0861 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 14:21:28 -0500 Subject: make keybindings_settings an instance variasble rather than a global one, so that it will get disposed properly and not persist between test sessions --- src/device-menu-mgr.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 043ec0f..704f4c2 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -43,10 +43,11 @@ struct _DeviceMenuMgr GObject parent_instance; DbusmenuMenuitem* root_item; SessionDbus* session_dbus_interface; + GSettings *lockdown_settings; + GSettings * keybinding_settings; }; -static GSettings *keybinding_settings = NULL; static DbusmenuMenuitem *lock_menuitem = NULL; static DbusmenuMenuitem *system_settings_menuitem = NULL; @@ -66,7 +67,6 @@ static gboolean allow_suspend = TRUE; static DBusGProxy * up_main_proxy = NULL; static DBusGProxy * up_prop_proxy = NULL; -static void device_menu_mgr_ensure_settings_client (DeviceMenuMgr* self); static void setup_up (DeviceMenuMgr* self); static void device_menu_mgr_rebuild_items (DeviceMenuMgr *self); static void machine_sleep_with_context (DeviceMenuMgr* self, @@ -94,6 +94,9 @@ device_menu_mgr_init (DeviceMenuMgr *self) g_signal_connect_swapped (self->lockdown_settings, "changed::" LOCKDOWN_KEY_USER, G_CALLBACK(device_menu_mgr_rebuild_items), self); g_signal_connect_swapped (self->lockdown_settings, "changed::" LOCKDOWN_KEY_SCREENSAVER, G_CALLBACK(device_menu_mgr_rebuild_items), self); + self->keybinding_settings = g_settings_new (KEYBINDING_SCHEMA); + g_signal_connect (self->keybinding_settings, "changed::" KEY_LOCK_SCREEN, G_CALLBACK(screensaver_keybinding_changed), self); + setup_up(self); g_idle_add(lock_screen_setup, NULL); } @@ -103,6 +106,7 @@ device_menu_mgr_dispose (GObject *object) { DeviceMenuMgr * self = DEVICE_MENU_MGR (object); g_clear_object (&self->lockdown_settings); + g_clear_object (&self->keybinding_settings); G_OBJECT_CLASS (device_menu_mgr_parent_class)->finalize (object); } @@ -464,7 +468,6 @@ 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_settings_client (self); can_lockscreen = !g_settings_get_boolean (self->lockdown_settings, LOCKDOWN_KEY_SCREENSAVER); /* Lock screen item */ @@ -474,7 +477,7 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) DBUSMENU_MENUITEM_PROP_LABEL, _("Lock Screen")); - update_screensaver_shortcut (lock_menuitem, keybinding_settings); + update_screensaver_shortcut (lock_menuitem, self->keybinding_settings); g_signal_connect (G_OBJECT(lock_menuitem), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, @@ -568,18 +571,6 @@ device_menu_mgr_rebuild_items (DeviceMenuMgr* self) can_suspend && allow_suspend); } -/* Ensures that we have a GConf client and if we build one - set up the signal handler. */ -static void -device_menu_mgr_ensure_settings_client (DeviceMenuMgr* self) -{ - if (!keybinding_settings) { - keybinding_settings = g_settings_new (KEYBINDING_SCHEMA); - g_signal_connect (keybinding_settings, "changed::" KEY_LOCK_SCREEN, G_CALLBACK(screensaver_keybinding_changed), self); - } - return; -} - DbusmenuMenuitem* device_mgr_get_root_item (DeviceMenuMgr* self) { -- cgit v1.2.3 From 91f89a3dcb55902dbd91632aae0c5c902fe0b46a Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 14:27:03 -0500 Subject: make hibernate_mi and suspend_mi instance variables rather than global ones so that their pointer values won't persist between test sessions --- src/device-menu-mgr.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 704f4c2..c982495 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -46,6 +46,9 @@ struct _DeviceMenuMgr GSettings *lockdown_settings; GSettings * keybinding_settings; + + DbusmenuMenuitem * hibernate_mi; + DbusmenuMenuitem * suspend_mi; }; static DbusmenuMenuitem *lock_menuitem = NULL; @@ -54,8 +57,6 @@ static DbusmenuMenuitem *system_settings_menuitem = NULL; static DBusGProxyCall * suspend_call = NULL; static DBusGProxyCall * hibernate_call = NULL; -static DbusmenuMenuitem * hibernate_mi = NULL; -static DbusmenuMenuitem * suspend_mi = NULL; static DbusmenuMenuitem * logout_mi = NULL; static DbusmenuMenuitem * shutdown_mi = NULL; @@ -74,6 +75,7 @@ static void machine_sleep_with_context (DeviceMenuMgr* self, static void show_system_settings (DbusmenuMenuitem * mi, guint timestamp, gpointer userdata); +static void screensaver_keybinding_changed (GSettings*, const gchar*, gpointer); static void machine_sleep_from_hibernate (DbusmenuMenuitem * mi, guint timestamp, @@ -132,11 +134,11 @@ device_menu_mgr_class_init (DeviceMenuMgrClass *klass) static void update_screensaver_shortcut (DbusmenuMenuitem * menuitem, GSettings * settings) { - if (lock_menuitem != NULL) + if (menuitem != NULL) { gchar * val = g_settings_get_string (settings, KEY_LOCK_SCREEN); g_debug ("Keybinding changed to: %s", val); - dbusmenu_menuitem_property_set_shortcut_string (lock_menuitem, val); + dbusmenu_menuitem_property_set_shortcut_string (menuitem, val); g_free (val); } } @@ -507,24 +509,24 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) } if (can_suspend && allow_suspend) { - suspend_mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (suspend_mi, + self->suspend_mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (self->suspend_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Suspend")); - dbusmenu_menuitem_child_append (self->root_item, suspend_mi); - g_signal_connect( G_OBJECT(suspend_mi), + dbusmenu_menuitem_child_append (self->root_item, self->suspend_mi); + g_signal_connect( G_OBJECT(self->suspend_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(machine_sleep_from_suspend), self); } if (can_hibernate && allow_hibernate) { - hibernate_mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (hibernate_mi, + self->hibernate_mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (self->hibernate_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Hibernate")); - dbusmenu_menuitem_child_append(self->root_item, hibernate_mi); - g_signal_connect (G_OBJECT(hibernate_mi), + dbusmenu_menuitem_child_append(self->root_item, self->hibernate_mi); + g_signal_connect (G_OBJECT(self->hibernate_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(machine_sleep_from_hibernate), self); } @@ -563,10 +565,10 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) static void device_menu_mgr_rebuild_items (DeviceMenuMgr* self) { - dbusmenu_menuitem_property_set_bool (hibernate_mi, + dbusmenu_menuitem_property_set_bool (self->hibernate_mi, DBUSMENU_MENUITEM_PROP_VISIBLE, can_hibernate && allow_hibernate); - dbusmenu_menuitem_property_set_bool (suspend_mi, + dbusmenu_menuitem_property_set_bool (self->suspend_mi, DBUSMENU_MENUITEM_PROP_VISIBLE, can_suspend && allow_suspend); } -- cgit v1.2.3 From c60d4ff528281702e454eb4c3bd4d8d3f179c956 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 14:28:12 -0500 Subject: make logout_mi and shutdown_mi local variables rather than global ones so that their pointer values won't persist between test sessions --- src/device-menu-mgr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index c982495..904a9f2 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -57,9 +57,6 @@ static DbusmenuMenuitem *system_settings_menuitem = NULL; static DBusGProxyCall * suspend_call = NULL; static DBusGProxyCall * hibernate_call = NULL; -static DbusmenuMenuitem * logout_mi = NULL; -static DbusmenuMenuitem * shutdown_mi = NULL; - static gboolean can_hibernate = TRUE; static gboolean can_suspend = TRUE; static gboolean allow_hibernate = TRUE; @@ -454,6 +451,9 @@ device_menu_mgr_build_devices_items (DeviceMenuMgr* self) static void device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) { + DbusmenuMenuitem * logout_mi = NULL; + DbusmenuMenuitem * shutdown_mi = NULL; + // Static Setting items if (!greeter_mode) { device_menu_mgr_build_settings_items (self); -- cgit v1.2.3 From 6d597642dbdea6af69f2cc1329e8659cc722908e Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 14:34:31 -0500 Subject: make up_main_proxy and up_prop_proxy instance variables rather than global ones so that their pointer values won't persist between test sessions --- src/device-menu-mgr.c | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 904a9f2..f3c9f85 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -49,6 +49,10 @@ struct _DeviceMenuMgr DbusmenuMenuitem * hibernate_mi; DbusmenuMenuitem * suspend_mi; + + DBusGProxy * up_main_proxy; + DBusGProxy * up_prop_proxy; + }; static DbusmenuMenuitem *lock_menuitem = NULL; @@ -62,9 +66,6 @@ static gboolean can_suspend = TRUE; static gboolean allow_hibernate = TRUE; static gboolean allow_suspend = TRUE; -static DBusGProxy * up_main_proxy = NULL; -static DBusGProxy * up_prop_proxy = NULL; - static void setup_up (DeviceMenuMgr* self); static void device_menu_mgr_rebuild_items (DeviceMenuMgr *self); static void machine_sleep_with_context (DeviceMenuMgr* self, @@ -106,6 +107,8 @@ device_menu_mgr_dispose (GObject *object) DeviceMenuMgr * self = DEVICE_MENU_MGR (object); g_clear_object (&self->lockdown_settings); g_clear_object (&self->keybinding_settings); + g_clear_object (&self->up_main_proxy); + g_clear_object (&self->up_prop_proxy); G_OBJECT_CLASS (device_menu_mgr_parent_class)->finalize (object); } @@ -171,11 +174,11 @@ machine_sleep_from_hibernate (DbusmenuMenuitem * mi, static void machine_sleep_with_context (DeviceMenuMgr* self, gchar* type) { - if (up_main_proxy == NULL) { + if (self->up_main_proxy == NULL) { g_warning("Can not %s as no upower proxy", type); } - dbus_g_proxy_begin_call(up_main_proxy, + dbus_g_proxy_begin_call(self->up_main_proxy, type, NULL, NULL, @@ -242,9 +245,11 @@ hibernate_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) static void up_changed_cb (DBusGProxy * proxy, gpointer user_data) { + DeviceMenuMgr * self = DEVICE_MENU_MGR(user_data); + /* Start Async call to see if we can hibernate */ if (suspend_call == NULL) { - suspend_call = dbus_g_proxy_begin_call(up_prop_proxy, + suspend_call = dbus_g_proxy_begin_call(self->up_prop_proxy, "Get", suspend_prop_cb, user_data, @@ -260,7 +265,7 @@ up_changed_cb (DBusGProxy * proxy, gpointer user_data) /* Start Async call to see if we can suspend */ if (hibernate_call == NULL) { - hibernate_call = dbus_g_proxy_begin_call(up_prop_proxy, + hibernate_call = dbus_g_proxy_begin_call(self->up_prop_proxy, "Get", hibernate_prop_cb, user_data, @@ -324,41 +329,41 @@ setup_up (DeviceMenuMgr* self) { DBusGConnection * bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL); g_return_if_fail(bus != NULL); - if (up_main_proxy == NULL) { - up_main_proxy = dbus_g_proxy_new_for_name(bus, + if (self->up_main_proxy == NULL) { + self->up_main_proxy = dbus_g_proxy_new_for_name(bus, UP_ADDRESS, UP_OBJECT, UP_INTERFACE); } - g_return_if_fail(up_main_proxy != NULL); + g_return_if_fail(self->up_main_proxy != NULL); - if (up_prop_proxy == NULL) { - up_prop_proxy = dbus_g_proxy_new_for_name(bus, + if (self->up_prop_proxy == NULL) { + self->up_prop_proxy = dbus_g_proxy_new_for_name(bus, UP_ADDRESS, UP_OBJECT, DBUS_INTERFACE_PROPERTIES); /* Connect to changed signal */ - dbus_g_proxy_add_signal(up_main_proxy, + dbus_g_proxy_add_signal(self->up_main_proxy, "Changed", G_TYPE_INVALID); - dbus_g_proxy_connect_signal(up_main_proxy, + dbus_g_proxy_connect_signal(self->up_main_proxy, "Changed", G_CALLBACK(up_changed_cb), self, NULL); } - g_return_if_fail(up_prop_proxy != NULL); + g_return_if_fail(self->up_prop_proxy != NULL); /* Force an original "changed" event */ - up_changed_cb(up_main_proxy, self); + up_changed_cb(self->up_main_proxy, self); /* Check to see if these are getting blocked by PolicyKit */ - org_freedesktop_UPower_suspend_allowed_async(up_main_proxy, + org_freedesktop_UPower_suspend_allowed_async(self->up_main_proxy, allowed_suspend_cb, self); - org_freedesktop_UPower_hibernate_allowed_async(up_main_proxy, + org_freedesktop_UPower_hibernate_allowed_async(self->up_main_proxy, allowed_hibernate_cb, self); -- cgit v1.2.3 From 86f0c074a99880ab8d4cc146ab17a8e9ac90c667 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 14:37:22 -0500 Subject: reduce the scope of another formerly global variable: system_settings_menuitem --- src/device-menu-mgr.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index f3c9f85..762ec8a 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -56,7 +56,6 @@ struct _DeviceMenuMgr }; static DbusmenuMenuitem *lock_menuitem = NULL; -static DbusmenuMenuitem *system_settings_menuitem = NULL; static DBusGProxyCall * suspend_call = NULL; static DBusGProxyCall * hibernate_call = NULL; @@ -414,22 +413,19 @@ show_system_settings (DbusmenuMenuitem * mi G_GNUC_UNUSED, static void device_menu_mgr_build_settings_items (DeviceMenuMgr* self) { - system_settings_menuitem = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (system_settings_menuitem, - DBUSMENU_MENUITEM_PROP_LABEL, - _("System Settings…")); - g_signal_connect (G_OBJECT(system_settings_menuitem), - DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + DbusmenuMenuitem * mi; + + /* system settings... */ + mi = dbusmenu_menuitem_new (); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("System Settings…")); + dbusmenu_menuitem_child_add_position(self->root_item, mi, 0); + g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_system_settings), NULL); - dbusmenu_menuitem_child_add_position(self->root_item, - system_settings_menuitem, - 0); - - 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, 1); + + /* separator */ + mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); + dbusmenu_menuitem_child_add_position (self->root_item, mi, 1); } static void -- cgit v1.2.3 From ee9720fc918870672c16f3e44e36661010b2faf2 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 14:44:45 -0500 Subject: make can_hibernate, allow_hibernate, can_suspend, and allow_suspend instance variables rather than global ones so that their pointer values won't persist between test sessions --- src/device-menu-mgr.c | 97 ++++++++++++++++++++++++++------------------------- 1 file changed, 50 insertions(+), 47 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 762ec8a..df63d8d 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -53,6 +53,10 @@ struct _DeviceMenuMgr DBusGProxy * up_main_proxy; DBusGProxy * up_prop_proxy; + gboolean can_hibernate; + gboolean can_suspend; + gboolean allow_hibernate; + gboolean allow_suspend; }; static DbusmenuMenuitem *lock_menuitem = NULL; @@ -60,11 +64,6 @@ static DbusmenuMenuitem *lock_menuitem = NULL; static DBusGProxyCall * suspend_call = NULL; static DBusGProxyCall * hibernate_call = NULL; -static gboolean can_hibernate = TRUE; -static gboolean can_suspend = TRUE; -static gboolean allow_hibernate = TRUE; -static gboolean allow_suspend = TRUE; - static void setup_up (DeviceMenuMgr* self); static void device_menu_mgr_rebuild_items (DeviceMenuMgr *self); static void machine_sleep_with_context (DeviceMenuMgr* self, @@ -89,6 +88,11 @@ device_menu_mgr_init (DeviceMenuMgr *self) { self->root_item = dbusmenu_menuitem_new (); + self->can_hibernate = TRUE; + self->can_suspend = TRUE; + self->allow_hibernate = TRUE; + self->allow_suspend = TRUE; + self->lockdown_settings = g_settings_new (LOCKDOWN_SCHEMA); g_signal_connect_swapped (self->lockdown_settings, "changed::" LOCKDOWN_KEY_USER, G_CALLBACK(device_menu_mgr_rebuild_items), self); g_signal_connect_swapped (self->lockdown_settings, "changed::" LOCKDOWN_KEY_SCREENSAVER, G_CALLBACK(device_menu_mgr_rebuild_items), self); @@ -205,8 +209,8 @@ suspend_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) g_debug("Got Suspend: %s", g_value_get_boolean(&candoit) ? "true" : "false"); gboolean local_can_suspend = g_value_get_boolean(&candoit); - if (local_can_suspend != can_suspend) { - can_suspend = local_can_suspend; + if (local_can_suspend != self->can_suspend) { + self->can_suspend = local_can_suspend; // TODO figure out what needs updating on the menu // And add or remove it but just don't rebuild the whole menu // a waste @@ -233,8 +237,8 @@ hibernate_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) g_debug("Got Hibernate: %s", g_value_get_boolean(&candoit) ? "true" : "false"); gboolean local_can_hibernate = g_value_get_boolean(&candoit); - if (local_can_hibernate != can_hibernate) { - can_hibernate = local_can_hibernate; + if (local_can_hibernate != self->can_hibernate) { + self->can_hibernate = local_can_hibernate; device_menu_mgr_rebuild_items(self); } } @@ -278,46 +282,45 @@ up_changed_cb (DBusGProxy * proxy, gpointer user_data) G_TYPE_INVALID); } } -/* Handle the callback from the allow functions to check and - see if we're changing the value, and if so, rebuilding the - menus based on that info. */ + +/* If the allow-suspend value changed, rebuild the menus */ static void -allowed_suspend_cb (DBusGProxy *proxy, - gboolean OUT_allowed, - GError *error, - gpointer userdata) +allowed_suspend_cb (DBusGProxy * proxy G_GNUC_UNUSED, + gboolean allow_suspend, + GError * error, + gpointer userdata) { - if (error != NULL) { - g_warning("Unable to get information on what is allowed from UPower: %s", - error->message); - return; - } - - if (OUT_allowed != allow_suspend) { - allow_suspend = OUT_allowed; - device_menu_mgr_rebuild_items(DEVICE_MENU_MGR (userdata)); - } + DeviceMenuMgr * self = DEVICE_MENU_MGR (userdata); + + if (error != NULL) + { + g_warning("Unable to get information on what is allowed from UPower: %s", error->message); + } + else if (self->allow_suspend != allow_suspend) + { + self->allow_suspend = allow_suspend; + device_menu_mgr_rebuild_items (self); + } } -/* Handle the callback from the allow functions to check and - see if we're changing the value, and if so, rebuilding the - menus based on that info. */ +/* If the allow-hibernate value changed, rebuild the menus */ static void -allowed_hibernate_cb (DBusGProxy *proxy, - gboolean OUT_allowed, - GError *error, - gpointer userdata) +allowed_hibernate_cb (DBusGProxy * proxy, + gboolean allow_hibernate, + GError * error, + gpointer userdata) { - if (error != NULL) { - g_warning("Unable to get information on what is allowed from UPower: %s", - error->message); - return; - } - - if (OUT_allowed != allow_hibernate) { - allow_hibernate = OUT_allowed; - device_menu_mgr_rebuild_items(DEVICE_MENU_MGR (userdata)); - } + DeviceMenuMgr * self = DEVICE_MENU_MGR (userdata); + + if (error != NULL) + { + g_warning("Unable to get information on what is allowed from UPower: %s", error->message); + } + else if (self->allow_hibernate != allow_hibernate) + { + self->allow_hibernate = allow_hibernate; + device_menu_mgr_rebuild_items (self); + } } /* This function goes through and sets up what we need for @@ -509,7 +512,7 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) G_CALLBACK(show_dialog), "logout"); } - if (can_suspend && allow_suspend) { + if (self->can_suspend && self->allow_suspend) { self->suspend_mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (self->suspend_mi, DBUSMENU_MENUITEM_PROP_LABEL, @@ -521,7 +524,7 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) self); } - if (can_hibernate && allow_hibernate) { + if (self->can_hibernate && self->allow_hibernate) { self->hibernate_mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (self->hibernate_mi, DBUSMENU_MENUITEM_PROP_LABEL, @@ -568,10 +571,10 @@ device_menu_mgr_rebuild_items (DeviceMenuMgr* self) { dbusmenu_menuitem_property_set_bool (self->hibernate_mi, DBUSMENU_MENUITEM_PROP_VISIBLE, - can_hibernate && allow_hibernate); + self->can_hibernate && self->allow_hibernate); dbusmenu_menuitem_property_set_bool (self->suspend_mi, DBUSMENU_MENUITEM_PROP_VISIBLE, - can_suspend && allow_suspend); + self->can_suspend && self->allow_suspend); } DbusmenuMenuitem* -- cgit v1.2.3 From 4e1238c75f3d4c239c61b5c2b841675823a4053f Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 14:47:02 -0500 Subject: make suspend_call and hibernate_call instance variables rather than global ones so that their pointer values won't persist between test sessions --- src/device-menu-mgr.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index df63d8d..7821034 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -57,13 +57,13 @@ struct _DeviceMenuMgr gboolean can_suspend; gboolean allow_hibernate; gboolean allow_suspend; + + DBusGProxyCall * suspend_call; + DBusGProxyCall * hibernate_call; }; static DbusmenuMenuitem *lock_menuitem = NULL; -static DBusGProxyCall * suspend_call = NULL; -static DBusGProxyCall * hibernate_call = NULL; - static void setup_up (DeviceMenuMgr* self); static void device_menu_mgr_rebuild_items (DeviceMenuMgr *self); static void machine_sleep_with_context (DeviceMenuMgr* self, @@ -195,8 +195,9 @@ machine_sleep_with_context (DeviceMenuMgr* self, gchar* type) static void suspend_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) { - suspend_call = NULL; DeviceMenuMgr* self = DEVICE_MENU_MGR (userdata); + + self->suspend_call = NULL; GValue candoit = {0}; GError * error = NULL; @@ -223,9 +224,10 @@ suspend_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) static void hibernate_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) { - hibernate_call = NULL; DeviceMenuMgr* self = DEVICE_MENU_MGR (userdata); + self->hibernate_call = NULL; + GValue candoit = {0}; GError * error = NULL; dbus_g_proxy_end_call(proxy, call, &error, G_TYPE_VALUE, &candoit, G_TYPE_INVALID); @@ -251,8 +253,8 @@ up_changed_cb (DBusGProxy * proxy, gpointer user_data) DeviceMenuMgr * self = DEVICE_MENU_MGR(user_data); /* Start Async call to see if we can hibernate */ - if (suspend_call == NULL) { - suspend_call = dbus_g_proxy_begin_call(self->up_prop_proxy, + if (self->suspend_call == NULL) { + self->suspend_call = dbus_g_proxy_begin_call(self->up_prop_proxy, "Get", suspend_prop_cb, user_data, @@ -267,8 +269,8 @@ up_changed_cb (DBusGProxy * proxy, gpointer user_data) } /* Start Async call to see if we can suspend */ - if (hibernate_call == NULL) { - hibernate_call = dbus_g_proxy_begin_call(self->up_prop_proxy, + if (self->hibernate_call == NULL) { + self->hibernate_call = dbus_g_proxy_begin_call(self->up_prop_proxy, "Get", hibernate_prop_cb, user_data, -- cgit v1.2.3 From 19dd59771d7921fa927840d9864e8ba7b4795a87 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 14:51:32 -0500 Subject: make lock_menuitem an instance variable rather than a global one so that its pointer values won't persist between test sessions. Woot, last global\! --- src/device-menu-mgr.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 7821034..beefc3e 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -49,6 +49,7 @@ struct _DeviceMenuMgr DbusmenuMenuitem * hibernate_mi; DbusmenuMenuitem * suspend_mi; + DbusmenuMenuitem * lock_mi; DBusGProxy * up_main_proxy; DBusGProxy * up_prop_proxy; @@ -62,8 +63,6 @@ struct _DeviceMenuMgr DBusGProxyCall * hibernate_call; }; -static DbusmenuMenuitem *lock_menuitem = NULL; - static void setup_up (DeviceMenuMgr* self); static void device_menu_mgr_rebuild_items (DeviceMenuMgr *self); static void machine_sleep_with_context (DeviceMenuMgr* self, @@ -148,10 +147,10 @@ update_screensaver_shortcut (DbusmenuMenuitem * menuitem, GSettings * settings) static void screensaver_keybinding_changed (GSettings * settings, - const gchar * key G_GNUC_UNUSED, - gpointer user_data G_GNUC_UNUSED) + const gchar * key G_GNUC_UNUSED, + gpointer userdata) { - update_screensaver_shortcut (lock_menuitem, settings); + update_screensaver_shortcut (DEVICE_MENU_MGR(userdata)->lock_mi, settings); } static void @@ -480,17 +479,17 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) LOCKDOWN_KEY_SCREENSAVER); /* Lock screen item */ if (can_lockscreen) { - lock_menuitem = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (lock_menuitem, + self->lock_mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (self->lock_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Lock Screen")); - update_screensaver_shortcut (lock_menuitem, self->keybinding_settings); + update_screensaver_shortcut (self->lock_mi, self->keybinding_settings); - g_signal_connect (G_OBJECT(lock_menuitem), + g_signal_connect (G_OBJECT(self->lock_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(lock_screen), NULL); - dbusmenu_menuitem_child_append(self->root_item, lock_menuitem); + dbusmenu_menuitem_child_append(self->root_item, self->lock_mi); } logout_mi = dbusmenu_menuitem_new(); -- cgit v1.2.3 From bcc1d391440ca6df3b57f30c440b761f2034348f Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 14:53:36 -0500 Subject: constify the machine_sleep_with_context() API --- src/device-menu-mgr.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index beefc3e..0af0af7 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -66,7 +66,7 @@ struct _DeviceMenuMgr static void setup_up (DeviceMenuMgr* self); static void device_menu_mgr_rebuild_items (DeviceMenuMgr *self); static void machine_sleep_with_context (DeviceMenuMgr* self, - gchar* type); + const gchar* type); static void show_system_settings (DbusmenuMenuitem * mi, guint timestamp, gpointer userdata); @@ -154,27 +154,25 @@ screensaver_keybinding_changed (GSettings * settings, } static void -machine_sleep_from_suspend (DbusmenuMenuitem * mi, - guint timestamp, - gpointer userdata) +machine_sleep_from_suspend (DbusmenuMenuitem * mi G_GNUC_UNUSED, + guint timestamp G_GNUC_UNUSED, + gpointer userdata) { - DeviceMenuMgr* self = DEVICE_MENU_MGR (userdata); - machine_sleep_with_context (self, "Suspend"); + machine_sleep_with_context (DEVICE_MENU_MGR(userdata), "Suspend"); } static void -machine_sleep_from_hibernate (DbusmenuMenuitem * mi, - guint timestamp, - gpointer userdata) +machine_sleep_from_hibernate (DbusmenuMenuitem * mi G_GNUC_UNUSED, + guint timestamp G_GNUC_UNUSED, + gpointer userdata) { - DeviceMenuMgr* self = DEVICE_MENU_MGR (userdata); - machine_sleep_with_context (self, "Hibernate"); + machine_sleep_with_context (DEVICE_MENU_MGR(userdata), "Hibernate"); } /* Let's put this machine to sleep, with some info on how it should sleep. */ static void -machine_sleep_with_context (DeviceMenuMgr* self, gchar* type) +machine_sleep_with_context (DeviceMenuMgr* self, const gchar* type) { if (self->up_main_proxy == NULL) { g_warning("Can not %s as no upower proxy", type); -- cgit v1.2.3 From 0941a2b3ec568323b23e69993c88eebe8529c966 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 14:55:11 -0500 Subject: bugfix: in machine_sleep_with_context(), don't call the proxy method if we don't have a proxy --- src/device-menu-mgr.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 0af0af7..20597b0 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -174,18 +174,16 @@ machine_sleep_from_hibernate (DbusmenuMenuitem * mi G_GNUC_UNUSED, static void machine_sleep_with_context (DeviceMenuMgr* self, const gchar* type) { - if (self->up_main_proxy == NULL) { - g_warning("Can not %s as no upower proxy", type); - } - - dbus_g_proxy_begin_call(self->up_main_proxy, - type, - NULL, - NULL, - NULL, - G_TYPE_INVALID); - - return; + if (self->up_main_proxy == NULL) + { + g_warning("Can not %s as no upower proxy", type); + } + else + { + dbus_g_proxy_begin_call (self->up_main_proxy, type, + NULL, NULL, NULL, + G_TYPE_INVALID); + } } /* A response to getting the suspend property */ -- cgit v1.2.3 From 3cab394226cc9f2633fea2bc50b3caa9cacdd7f4 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 15:13:04 -0500 Subject: extract methods to reduce duplicate code in handling dbus notifications that can_suspend, allow_suspend, can_hibernate, or allow_hibernate flags have changed --- src/device-menu-mgr.c | 141 +++++++++++++++++++++----------------------------- 1 file changed, 59 insertions(+), 82 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 20597b0..302e98c 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -186,62 +186,79 @@ machine_sleep_with_context (DeviceMenuMgr* self, const gchar* type) } } -/* A response to getting the suspend property */ +/*** +**** +***/ + +static void +rebuild_if_flag_changed (DeviceMenuMgr * mgr, GError * error, gboolean * setme, gboolean value) +{ + if (error != NULL) + { + g_warning ("Unable to get information on what's allowed from UPower: %s", error->message); + } + else if (*setme != value) + { + *setme = value; + device_menu_mgr_rebuild_items (mgr); + } +} + +/* When allow-suspend changes, rebuild the menus */ +static void +allowed_suspend_cb (DBusGProxy * proxy G_GNUC_UNUSED, + gboolean allow_suspend, + GError * error, + gpointer userdata) +{ + DeviceMenuMgr * mgr = DEVICE_MENU_MGR (userdata); + rebuild_if_flag_changed (mgr, error, &mgr->allow_suspend, allow_suspend); +} + +/* When allow-hibernate changes, rebuild the menus */ +static void +allowed_hibernate_cb (DBusGProxy * proxy G_GNUC_UNUSED, + gboolean allow_hibernate, + GError * error, + gpointer userdata) +{ + DeviceMenuMgr * mgr = DEVICE_MENU_MGR (userdata); + rebuild_if_flag_changed (mgr, error, &mgr->allow_hibernate, allow_hibernate); +} + + +static void +rebuild_if_flag_changed_from_proxy_call (DeviceMenuMgr * mgr, gboolean * setme, DBusGProxy * proxy, DBusGProxyCall * call) +{ + GValue value = {0}; + GError * error = NULL; + + dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_VALUE, &value, G_TYPE_INVALID); + rebuild_if_flag_changed (mgr, error, setme, g_value_get_boolean (&value)); + + g_clear_error (&error); + g_value_unset (&value); +} + +/* When can-suspend changes, rebuild the menus */ static void suspend_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) { DeviceMenuMgr* self = DEVICE_MENU_MGR (userdata); - self->suspend_call = NULL; - - GValue candoit = {0}; - GError * error = NULL; - dbus_g_proxy_end_call(proxy, call, &error, G_TYPE_VALUE, &candoit, G_TYPE_INVALID); - if (error != NULL) { - g_warning("Unable to check suspend: %s", error->message); - g_error_free(error); - return; - } - g_debug("Got Suspend: %s", g_value_get_boolean(&candoit) ? "true" : "false"); - - gboolean local_can_suspend = g_value_get_boolean(&candoit); - if (local_can_suspend != self->can_suspend) { - self->can_suspend = local_can_suspend; - // TODO figure out what needs updating on the menu - // And add or remove it but just don't rebuild the whole menu - // a waste - device_menu_mgr_rebuild_items(self); - } - return; + rebuild_if_flag_changed_from_proxy_call (self, &self->can_suspend, proxy, call); } -/* Response to getting the hibernate property */ +/* When can-hibernate changes, rebuild the menus */ static void hibernate_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) { DeviceMenuMgr* self = DEVICE_MENU_MGR (userdata); - self->hibernate_call = NULL; - - GValue candoit = {0}; - GError * error = NULL; - dbus_g_proxy_end_call(proxy, call, &error, G_TYPE_VALUE, &candoit, G_TYPE_INVALID); - if (error != NULL) { - g_warning("Unable to check hibernate: %s", error->message); - g_error_free(error); - return; - } - g_debug("Got Hibernate: %s", g_value_get_boolean(&candoit) ? "true" : "false"); - - gboolean local_can_hibernate = g_value_get_boolean(&candoit); - if (local_can_hibernate != self->can_hibernate) { - self->can_hibernate = local_can_hibernate; - device_menu_mgr_rebuild_items(self); - } + rebuild_if_flag_changed_from_proxy_call (self, &self->can_hibernate, proxy, call); } -/* A signal that we need to recheck to ensure we can still - hibernate and/or suspend */ +/* A signal that we need to recheck to ensure we can still hibernate and/or suspend */ static void up_changed_cb (DBusGProxy * proxy, gpointer user_data) { @@ -280,46 +297,6 @@ up_changed_cb (DBusGProxy * proxy, gpointer user_data) } } -/* If the allow-suspend value changed, rebuild the menus */ -static void -allowed_suspend_cb (DBusGProxy * proxy G_GNUC_UNUSED, - gboolean allow_suspend, - GError * error, - gpointer userdata) -{ - DeviceMenuMgr * self = DEVICE_MENU_MGR (userdata); - - if (error != NULL) - { - g_warning("Unable to get information on what is allowed from UPower: %s", error->message); - } - else if (self->allow_suspend != allow_suspend) - { - self->allow_suspend = allow_suspend; - device_menu_mgr_rebuild_items (self); - } -} - -/* If the allow-hibernate value changed, rebuild the menus */ -static void -allowed_hibernate_cb (DBusGProxy * proxy, - gboolean allow_hibernate, - GError * error, - gpointer userdata) -{ - DeviceMenuMgr * self = DEVICE_MENU_MGR (userdata); - - if (error != NULL) - { - g_warning("Unable to get information on what is allowed from UPower: %s", error->message); - } - else if (self->allow_hibernate != allow_hibernate) - { - self->allow_hibernate = allow_hibernate; - device_menu_mgr_rebuild_items (self); - } -} - /* This function goes through and sets up what we need for DKp checking. We're even setting up the calls for the props we need */ -- cgit v1.2.3 From a535ab4cae4cb2471f1733fe5bc0bcc2249b5dda Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 15:15:22 -0500 Subject: remove unnecessary prototypes --- src/device-menu-mgr.c | 47 +++++++++++++++++------------------------------ 1 file changed, 17 insertions(+), 30 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 302e98c..80e3b0a 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -65,20 +65,7 @@ struct _DeviceMenuMgr static void setup_up (DeviceMenuMgr* self); static void device_menu_mgr_rebuild_items (DeviceMenuMgr *self); -static void machine_sleep_with_context (DeviceMenuMgr* self, - const gchar* type); -static void show_system_settings (DbusmenuMenuitem * mi, - guint timestamp, - gpointer userdata); static void screensaver_keybinding_changed (GSettings*, const gchar*, gpointer); -static void -machine_sleep_from_hibernate (DbusmenuMenuitem * mi, - guint timestamp, - gpointer userdata); -static void -machine_sleep_from_suspend (DbusmenuMenuitem * mi, - guint timestamp, - gpointer userdata); G_DEFINE_TYPE (DeviceMenuMgr, device_menu_mgr, G_TYPE_OBJECT); @@ -153,6 +140,23 @@ screensaver_keybinding_changed (GSettings * settings, update_screensaver_shortcut (DEVICE_MENU_MGR(userdata)->lock_mi, settings); } + +/* Let's put this machine to sleep with some hints on how it should sleep. */ +static void +machine_sleep_with_context (DeviceMenuMgr* self, const gchar* type) +{ + if (self->up_main_proxy == NULL) + { + g_warning("Cannot %s because no upower proxy", type); + } + else + { + dbus_g_proxy_begin_call (self->up_main_proxy, type, + NULL, NULL, NULL, + G_TYPE_INVALID); + } +} + static void machine_sleep_from_suspend (DbusmenuMenuitem * mi G_GNUC_UNUSED, guint timestamp G_GNUC_UNUSED, @@ -169,23 +173,6 @@ machine_sleep_from_hibernate (DbusmenuMenuitem * mi G_GNUC_UNUSED, machine_sleep_with_context (DEVICE_MENU_MGR(userdata), "Hibernate"); } -/* Let's put this machine to sleep, with some info on how - it should sleep. */ -static void -machine_sleep_with_context (DeviceMenuMgr* self, const gchar* type) -{ - if (self->up_main_proxy == NULL) - { - g_warning("Can not %s as no upower proxy", type); - } - else - { - dbus_g_proxy_begin_call (self->up_main_proxy, type, - NULL, NULL, NULL, - G_TYPE_INVALID); - } -} - /*** **** ***/ -- cgit v1.2.3 From f6a082bcac4299ca82dadb623b497226140bbad1 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 15:58:03 -0500 Subject: fix tab damage in device-menu-mgr.c --- src/device-menu-mgr.c | 390 +++++++++++++++++++++----------------------------- 1 file changed, 166 insertions(+), 224 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 80e3b0a..039b68d 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -249,88 +249,76 @@ hibernate_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) static void up_changed_cb (DBusGProxy * proxy, gpointer user_data) { - DeviceMenuMgr * self = DEVICE_MENU_MGR(user_data); - - /* Start Async call to see if we can hibernate */ - if (self->suspend_call == NULL) { - self->suspend_call = dbus_g_proxy_begin_call(self->up_prop_proxy, - "Get", - suspend_prop_cb, - user_data, - NULL, - G_TYPE_STRING, - UP_INTERFACE, - G_TYPE_STRING, - "CanSuspend", - G_TYPE_INVALID, - G_TYPE_VALUE, - G_TYPE_INVALID); - } - - /* Start Async call to see if we can suspend */ - if (self->hibernate_call == NULL) { - self->hibernate_call = dbus_g_proxy_begin_call(self->up_prop_proxy, - "Get", - hibernate_prop_cb, - user_data, - NULL, - G_TYPE_STRING, - UP_INTERFACE, - G_TYPE_STRING, - "CanHibernate", - G_TYPE_INVALID, - G_TYPE_VALUE, - G_TYPE_INVALID); - } + DeviceMenuMgr * self = DEVICE_MENU_MGR(user_data); + + if (self->suspend_call == NULL) + { + /* start async call to see if we can hibernate */ + self->suspend_call = dbus_g_proxy_begin_call (self->up_prop_proxy, + "Get", + suspend_prop_cb, + user_data, + NULL, + G_TYPE_STRING, + UP_INTERFACE, + G_TYPE_STRING, + "CanSuspend", + G_TYPE_INVALID, + G_TYPE_VALUE, + G_TYPE_INVALID); + } + + if (self->hibernate_call == NULL) + { + /* start async call to see if we can suspend */ + self->hibernate_call = dbus_g_proxy_begin_call (self->up_prop_proxy, + "Get", + hibernate_prop_cb, + user_data, + NULL, + G_TYPE_STRING, + UP_INTERFACE, + G_TYPE_STRING, + "CanHibernate", + G_TYPE_INVALID, + G_TYPE_VALUE, + G_TYPE_INVALID); + } } -/* This function goes through and sets up what we need for - DKp checking. We're even setting up the calls for the props - we need */ +/* This function goes through and sets up what we need for DKp checking. + We're even setting up the calls for the props we need */ static void -setup_up (DeviceMenuMgr* self) { - DBusGConnection * bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL); - g_return_if_fail(bus != NULL); - - if (self->up_main_proxy == NULL) { - self->up_main_proxy = dbus_g_proxy_new_for_name(bus, - UP_ADDRESS, - UP_OBJECT, - UP_INTERFACE); - } - g_return_if_fail(self->up_main_proxy != NULL); - - if (self->up_prop_proxy == NULL) { - self->up_prop_proxy = dbus_g_proxy_new_for_name(bus, - UP_ADDRESS, - UP_OBJECT, - DBUS_INTERFACE_PROPERTIES); - /* Connect to changed signal */ - dbus_g_proxy_add_signal(self->up_main_proxy, - "Changed", - G_TYPE_INVALID); - - dbus_g_proxy_connect_signal(self->up_main_proxy, - "Changed", - G_CALLBACK(up_changed_cb), - self, - NULL); - } - g_return_if_fail(self->up_prop_proxy != NULL); - - - /* Force an original "changed" event */ - up_changed_cb(self->up_main_proxy, self); - - /* Check to see if these are getting blocked by PolicyKit */ - org_freedesktop_UPower_suspend_allowed_async(self->up_main_proxy, - allowed_suspend_cb, - self); - org_freedesktop_UPower_hibernate_allowed_async(self->up_main_proxy, - allowed_hibernate_cb, - self); - - return; +setup_up (DeviceMenuMgr* self) +{ + DBusGConnection * bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL); + g_return_if_fail (bus != NULL); + + if (self->up_main_proxy == NULL) + { + self->up_main_proxy = dbus_g_proxy_new_for_name (bus, + UP_ADDRESS, + UP_OBJECT, + UP_INTERFACE); + } + + if (self->up_prop_proxy == NULL) + { + self->up_prop_proxy = dbus_g_proxy_new_for_name(bus, + UP_ADDRESS, + UP_OBJECT, + DBUS_INTERFACE_PROPERTIES); + /* Connect to changed signal */ + dbus_g_proxy_add_signal(self->up_main_proxy, "Changed", G_TYPE_INVALID); + dbus_g_proxy_connect_signal(self->up_main_proxy, "Changed", G_CALLBACK(up_changed_cb), self, NULL); + } + + /* Force an original "changed" event */ + up_changed_cb(self->up_main_proxy, self); + + /* Check to see if these are getting blocked by PolicyKit */ + org_freedesktop_UPower_suspend_allowed_async(self->up_main_proxy, allowed_suspend_cb, self); + org_freedesktop_UPower_hibernate_allowed_async(self->up_main_proxy, allowed_hibernate_cb, self); } /* This is the function to show a dialog on actions that @@ -340,23 +328,24 @@ setup_up (DeviceMenuMgr* self) { static void show_dialog (DbusmenuMenuitem * mi, guint timestamp, gchar * type) { - #ifdef HAVE_GTKLOGOUTHELPER - gchar * helper = g_build_filename(LIBEXECDIR, "gtk-logout-helper", NULL); + gchar * helper = g_build_filename(LIBEXECDIR, "gtk-logout-helper", NULL); #else - gchar * helper = g_build_filename("gnome-session-quit", NULL); + gchar * helper = g_build_filename("gnome-session-quit", NULL); #endif /* HAVE_GTKLOGOUTHELPER */ - gchar * dialog_line = g_strdup_printf("%s --%s", helper, type); - g_free(helper); + gchar * dialog_line = g_strdup_printf("%s --%s", helper, type); - g_debug("Showing dialog '%s'", dialog_line); + g_debug ("Showing dialog '%s'", dialog_line); + + GError * error = NULL; + if (!g_spawn_command_line_async(dialog_line, &error)) + { + g_warning ("Unable to show dialog: %s", error->message); + g_clear_error (&error); + } - GError * error = NULL; - if (!g_spawn_command_line_async(dialog_line, &error)) { - g_warning("Unable to show dialog: %s", error->message); - g_error_free(error); - } - g_free(dialog_line); + g_free (dialog_line); + g_free (helper); } static void @@ -368,163 +357,116 @@ show_system_settings (DbusmenuMenuitem * mi G_GNUC_UNUSED, GError * error = NULL; if (!g_spawn_command_line_async (cmd, &error)) - { - g_warning("Unable to show dialog: %s", error->message); - g_error_free(error); - } -} - -static void -device_menu_mgr_build_settings_items (DeviceMenuMgr* self) -{ - DbusmenuMenuitem * mi; - - /* system settings... */ - mi = dbusmenu_menuitem_new (); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("System Settings…")); - dbusmenu_menuitem_child_add_position(self->root_item, mi, 0); - g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(show_system_settings), NULL); - - /* separator */ - mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); - dbusmenu_menuitem_child_add_position (self->root_item, mi, 1); -} - -static void -device_menu_mgr_build_devices_items (DeviceMenuMgr* self) -{ - DbusmenuMenuitem * device_heading = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (device_heading, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Attached Devices")); - dbusmenu_menuitem_property_set_bool (device_heading, - DBUSMENU_MENUITEM_PROP_ENABLED, - FALSE); - dbusmenu_menuitem_child_add_position (self->root_item, - device_heading, - 5); - - DbusmenuMenuitem * separator3 = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (separator3, - DBUSMENU_MENUITEM_PROP_TYPE, - DBUSMENU_CLIENT_TYPES_SEPARATOR); - dbusmenu_menuitem_child_add_position (self->root_item, separator3, 6); + { + g_warning("Unable to show dialog: %s", error->message); + g_error_free(error); + } } static void device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) { + DbusmenuMenuitem * mi; DbusmenuMenuitem * logout_mi = NULL; DbusmenuMenuitem * shutdown_mi = NULL; // Static Setting items - if (!greeter_mode) { - device_menu_mgr_build_settings_items (self); - } + if (!greeter_mode) + { + /* system settings... */ + mi = dbusmenu_menuitem_new (); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("System Settings…")); + dbusmenu_menuitem_child_add_position(self->root_item, mi, 0); + g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + G_CALLBACK(show_system_settings), NULL); + + /* separator */ + mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); + dbusmenu_menuitem_child_add_position (self->root_item, mi, 1); + } // Devices control - if (!greeter_mode) { - device_menu_mgr_build_devices_items (self); - } + if (!greeter_mode) + { + /* attached devices... */ + mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Attached Devices")); + dbusmenu_menuitem_property_set_bool (mi, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE); + dbusmenu_menuitem_child_add_position (self->root_item, mi, 5); + + /* separator */ + mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); + dbusmenu_menuitem_child_add_position (self->root_item, mi, 6); + } // Session control - if (!greeter_mode) { - gboolean can_lockscreen; - - /* Make sure we have a valid GConf client, and build one - if needed */ - can_lockscreen = !g_settings_get_boolean (self->lockdown_settings, - LOCKDOWN_KEY_SCREENSAVER); - /* Lock screen item */ - if (can_lockscreen) { - self->lock_mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (self->lock_mi, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Lock Screen")); - - update_screensaver_shortcut (self->lock_mi, self->keybinding_settings); - - g_signal_connect (G_OBJECT(self->lock_mi), - DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(lock_screen), NULL); - dbusmenu_menuitem_child_append(self->root_item, self->lock_mi); + if (!greeter_mode) + { + const gboolean can_lockscreen = !g_settings_get_boolean (self->lockdown_settings, LOCKDOWN_KEY_SCREENSAVER); + + /* lock screen */ + if (can_lockscreen) + { + self->lock_mi = mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Lock Screen")); + update_screensaver_shortcut (mi, self->keybinding_settings); + dbusmenu_menuitem_child_append (self->root_item, mi); + g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + G_CALLBACK(lock_screen), NULL); + } + + /* logout */ + logout_mi = mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, + supress_confirmations() ? _("Log Out") + : _("Log Out\342\200\246")); + dbusmenu_menuitem_property_set_bool (mi, DBUSMENU_MENUITEM_PROP_VISIBLE, show_logout()); + dbusmenu_menuitem_child_append(self->root_item, mi); + g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + G_CALLBACK(show_dialog), "logout"); } - logout_mi = dbusmenu_menuitem_new(); - - if (supress_confirmations()) { - dbusmenu_menuitem_property_set (logout_mi, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Log Out")); + /* suspend */ + if (self->can_suspend && self->allow_suspend) + { + self->suspend_mi = mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Suspend")); + dbusmenu_menuitem_child_append (self->root_item, mi); + g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + G_CALLBACK(machine_sleep_from_suspend), self); } - else { - dbusmenu_menuitem_property_set (logout_mi, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Log Out\342\200\246")); + + /* hibernate */ + if (self->can_hibernate && self->allow_hibernate) + { + self->hibernate_mi = mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Hibernate")); + dbusmenu_menuitem_child_append(self->root_item, mi); + g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + G_CALLBACK(machine_sleep_from_hibernate), self); } - dbusmenu_menuitem_property_set_bool (logout_mi, - DBUSMENU_MENUITEM_PROP_VISIBLE, - show_logout()); - dbusmenu_menuitem_child_append(self->root_item, logout_mi); - g_signal_connect( G_OBJECT(logout_mi), - DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(show_dialog), "logout"); - } - - if (self->can_suspend && self->allow_suspend) { - self->suspend_mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (self->suspend_mi, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Suspend")); - dbusmenu_menuitem_child_append (self->root_item, self->suspend_mi); - g_signal_connect( G_OBJECT(self->suspend_mi), - DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(machine_sleep_from_suspend), - self); - } - - if (self->can_hibernate && self->allow_hibernate) { - self->hibernate_mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (self->hibernate_mi, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Hibernate")); - dbusmenu_menuitem_child_append(self->root_item, self->hibernate_mi); - g_signal_connect (G_OBJECT(self->hibernate_mi), - DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(machine_sleep_from_hibernate), self); - } - - shutdown_mi = dbusmenu_menuitem_new(); - - if (supress_confirmations()) { - dbusmenu_menuitem_property_set (shutdown_mi, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Shut Down")); - } - else { - dbusmenu_menuitem_property_set (shutdown_mi, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Shut Down\342\200\246")); - } - dbusmenu_menuitem_property_set_bool (shutdown_mi, - DBUSMENU_MENUITEM_PROP_VISIBLE, - show_shutdown()); - dbusmenu_menuitem_child_append (self->root_item, shutdown_mi); - g_signal_connect (G_OBJECT(shutdown_mi), - DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + + /* shut down */ + shutdown_mi = mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, + supress_confirmations() ? _("Shut Down") + : _("Shut Down\342\200\246")); + dbusmenu_menuitem_property_set_bool (mi, DBUSMENU_MENUITEM_PROP_VISIBLE, show_shutdown()); + dbusmenu_menuitem_child_append (self->root_item, mi); + g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, #ifdef HAVE_GTKLOGOUTHELPER G_CALLBACK(show_dialog), "shutdown"); #else G_CALLBACK(show_dialog), "power-off"); #endif /* HAVE_GTKLOGOUTHELPER */ - RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi = g_new0 (RestartShutdownLogoutMenuItems, 1); - restart_shutdown_logout_mi->logout_mi = logout_mi; - restart_shutdown_logout_mi->shutdown_mi = shutdown_mi; + RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi = g_new0 (RestartShutdownLogoutMenuItems, 1); + restart_shutdown_logout_mi->logout_mi = logout_mi; + restart_shutdown_logout_mi->shutdown_mi = shutdown_mi; - update_menu_entries(restart_shutdown_logout_mi); + update_menu_entries(restart_shutdown_logout_mi); } static void -- cgit v1.2.3 From 52eec36359fe9236746187290708a02b09809522 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 15:59:29 -0500 Subject: remove the attached devices menuitem; it's no longer in the spec --- src/device-menu-mgr.c | 15 --------------- 1 file changed, 15 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 039b68d..e908087 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -386,21 +386,6 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) dbusmenu_menuitem_child_add_position (self->root_item, mi, 1); } - // Devices control - if (!greeter_mode) - { - /* attached devices... */ - mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Attached Devices")); - dbusmenu_menuitem_property_set_bool (mi, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE); - dbusmenu_menuitem_child_add_position (self->root_item, mi, 5); - - /* separator */ - mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); - dbusmenu_menuitem_child_add_position (self->root_item, mi, 6); - } - // Session control if (!greeter_mode) { -- cgit v1.2.3 From f807a41332bdbb7fe4fc0f8da650176d4e1d626f Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 16:40:15 -0500 Subject: Add the 'About This Computer' and 'Ubuntu Help' menuitems as per the 12.10 spec --- src/device-menu-mgr.c | 107 +++++++++++++++++++++++++++++--------------------- 1 file changed, 62 insertions(+), 45 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index e908087..8aff42f 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -321,6 +321,25 @@ setup_up (DeviceMenuMgr* self) org_freedesktop_UPower_hibernate_allowed_async(self->up_main_proxy, allowed_hibernate_cb, self); } +static void +spawn_command_line_async (const char * fmt, ...) +{ + va_list marker; + va_start (marker, fmt); + gchar * cmd = g_strdup_vprintf (fmt, marker); + va_end (marker); + + GError * error = NULL; + if (!g_spawn_command_line_async (cmd, &error)) + { + g_warning ("Unable to show \"%s\": %s", cmd, error->message); + } + + g_clear_error (&error); + g_free (cmd); +} + + /* This is the function to show a dialog on actions that can destroy data. Currently it just calls the GTK version but it seems that in the future it should figure out @@ -333,57 +352,49 @@ show_dialog (DbusmenuMenuitem * mi, guint timestamp, gchar * type) #else gchar * helper = g_build_filename("gnome-session-quit", NULL); #endif /* HAVE_GTKLOGOUTHELPER */ - gchar * dialog_line = g_strdup_printf("%s --%s", helper, type); - - g_debug ("Showing dialog '%s'", dialog_line); - - GError * error = NULL; - if (!g_spawn_command_line_async(dialog_line, &error)) - { - g_warning ("Unable to show dialog: %s", error->message); - g_clear_error (&error); - } - - g_free (dialog_line); + spawn_command_line_async ("%s --%s", helper, type); g_free (helper); } -static void -show_system_settings (DbusmenuMenuitem * mi G_GNUC_UNUSED, - guint timestamp G_GNUC_UNUSED, - gpointer user_data G_GNUC_UNUSED) -{ - const char * const cmd = "gnome-control-center"; - - GError * error = NULL; - if (!g_spawn_command_line_async (cmd, &error)) - { - g_warning("Unable to show dialog: %s", error->message); - g_error_free(error); - } -} - static void device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) { + const char * name; DbusmenuMenuitem * mi; DbusmenuMenuitem * logout_mi = NULL; DbusmenuMenuitem * shutdown_mi = NULL; - // Static Setting items + /* About this computer */ + name = _("About This Computer"); + mi = dbusmenu_menuitem_new (); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); + dbusmenu_menuitem_child_append (self->root_item, mi); + g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + G_CALLBACK(spawn_command_line_async), "gnome-control-center info"); + + /* ubuntu help */ + name = _("Ubuntu Help"); + mi = dbusmenu_menuitem_new (); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); + dbusmenu_menuitem_child_append (self->root_item, mi); + g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + G_CALLBACK(spawn_command_line_async), "yelp"); + + /* system settings */ if (!greeter_mode) { - /* system settings... */ - mi = dbusmenu_menuitem_new (); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("System Settings…")); - dbusmenu_menuitem_child_add_position(self->root_item, mi, 0); - g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(show_system_settings), NULL); - /* separator */ mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); - dbusmenu_menuitem_child_add_position (self->root_item, mi, 1); + dbusmenu_menuitem_child_append (self->root_item, mi); + + /* system settings... */ + name = _("System Settings…"); + mi = dbusmenu_menuitem_new (); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); + dbusmenu_menuitem_child_append (self->root_item, mi); + g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + G_CALLBACK(spawn_command_line_async), "gnome-control-center"); } // Session control @@ -391,11 +402,17 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) { const gboolean can_lockscreen = !g_settings_get_boolean (self->lockdown_settings, LOCKDOWN_KEY_SCREENSAVER); + /* separator */ + mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); + dbusmenu_menuitem_child_append (self->root_item, mi); + /* lock screen */ if (can_lockscreen) { + name = _("Lock Screen"); self->lock_mi = mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Lock Screen")); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); update_screensaver_shortcut (mi, self->keybinding_settings); dbusmenu_menuitem_child_append (self->root_item, mi); g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, @@ -403,10 +420,9 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) } /* logout */ + name = supress_confirmations() ? _("Log Out") : _("Log Out\342\200\246"); logout_mi = mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, - supress_confirmations() ? _("Log Out") - : _("Log Out\342\200\246")); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); dbusmenu_menuitem_property_set_bool (mi, DBUSMENU_MENUITEM_PROP_VISIBLE, show_logout()); dbusmenu_menuitem_child_append(self->root_item, mi); g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, @@ -416,8 +432,9 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) /* suspend */ if (self->can_suspend && self->allow_suspend) { + name = _("Suspend"); self->suspend_mi = mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Suspend")); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); dbusmenu_menuitem_child_append (self->root_item, mi); g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(machine_sleep_from_suspend), self); @@ -426,18 +443,18 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) /* hibernate */ if (self->can_hibernate && self->allow_hibernate) { + name = _("Hibernate"); self->hibernate_mi = mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Hibernate")); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); dbusmenu_menuitem_child_append(self->root_item, mi); g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(machine_sleep_from_hibernate), self); } /* shut down */ + name = supress_confirmations() ? _("Shut Down") : _("Shut Down\342\200\246"); shutdown_mi = mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, - supress_confirmations() ? _("Shut Down") - : _("Shut Down\342\200\246")); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); dbusmenu_menuitem_property_set_bool (mi, DBUSMENU_MENUITEM_PROP_VISIBLE, show_shutdown()); dbusmenu_menuitem_child_append (self->root_item, mi); g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, -- cgit v1.2.3 From a782ddbe4fffd016b585b5ef51aabad434550eff Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 5 Jun 2012 16:52:08 -0500 Subject: start grouping Admin, Account-Switching, and Session items as per the 12.10 spec --- src/device-menu-mgr.c | 63 ++++++++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 28 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 8aff42f..73b6ed2 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -364,7 +364,10 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) DbusmenuMenuitem * logout_mi = NULL; DbusmenuMenuitem * shutdown_mi = NULL; - /* About this computer */ + /*** + **** Admin items + ***/ + name = _("About This Computer"); mi = dbusmenu_menuitem_new (); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); @@ -372,7 +375,6 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(spawn_command_line_async), "gnome-control-center info"); - /* ubuntu help */ name = _("Ubuntu Help"); mi = dbusmenu_menuitem_new (); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); @@ -380,15 +382,12 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(spawn_command_line_async), "yelp"); - /* system settings */ if (!greeter_mode) { - /* separator */ mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); dbusmenu_menuitem_child_append (self->root_item, mi); - /* system settings... */ name = _("System Settings…"); mi = dbusmenu_menuitem_new (); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); @@ -397,29 +396,34 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) G_CALLBACK(spawn_command_line_async), "gnome-control-center"); } - // Session control - if (!greeter_mode) - { - const gboolean can_lockscreen = !g_settings_get_boolean (self->lockdown_settings, LOCKDOWN_KEY_SCREENSAVER); + /*** + **** Account-switching items + ***/ - /* separator */ - mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); + /* TODO: FIXME */ + + const gboolean can_lockscreen = !g_settings_get_boolean (self->lockdown_settings, LOCKDOWN_KEY_SCREENSAVER); + if (can_lockscreen) + { + name = _("Lock Screen"); + self->lock_mi = mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); + update_screensaver_shortcut (mi, self->keybinding_settings); dbusmenu_menuitem_child_append (self->root_item, mi); + g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + G_CALLBACK(lock_screen), NULL); + } + + /*** + **** Session Items + ***/ - /* lock screen */ - if (can_lockscreen) - { - name = _("Lock Screen"); - self->lock_mi = mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - update_screensaver_shortcut (mi, self->keybinding_settings); - dbusmenu_menuitem_child_append (self->root_item, mi); - g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(lock_screen), NULL); - } - - /* logout */ + mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); + dbusmenu_menuitem_child_append (self->root_item, mi); + + if (!greeter_mode) + { name = supress_confirmations() ? _("Log Out") : _("Log Out\342\200\246"); logout_mi = mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); @@ -429,7 +433,6 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) G_CALLBACK(show_dialog), "logout"); } - /* suspend */ if (self->can_suspend && self->allow_suspend) { name = _("Suspend"); @@ -440,7 +443,6 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) G_CALLBACK(machine_sleep_from_suspend), self); } - /* hibernate */ if (self->can_hibernate && self->allow_hibernate) { name = _("Hibernate"); @@ -450,8 +452,13 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(machine_sleep_from_hibernate), self); } + + name = _("Restart"); + mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); + dbusmenu_menuitem_child_append (self->root_item, mi); + /* FIXME: not implemented */ - /* shut down */ name = supress_confirmations() ? _("Shut Down") : _("Shut Down\342\200\246"); shutdown_mi = mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); -- cgit v1.2.3 From d95d729276b77016d07a04f75efdb5ba7b352b96 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sat, 9 Jun 2012 10:45:38 -0500 Subject: use gdbus-codegen for the UPower dbus interaction --- src/device-menu-mgr.c | 216 ++++++++++++++++++++------------------------------ 1 file changed, 87 insertions(+), 129 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 73b6ed2..9cfb913 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -25,12 +25,12 @@ with this program. If not, see . #include #include +#include "dbus-upower.h" #include "device-menu-mgr.h" #include "settings-helper.h" #include "dbus-shared-names.h" #include "dbusmenu-shared.h" #include "lock-helper.h" -#include "upower-client.h" #define UP_ADDRESS "org.freedesktop.UPower" #define UP_OBJECT "/org/freedesktop/UPower" @@ -51,16 +51,13 @@ struct _DeviceMenuMgr DbusmenuMenuitem * suspend_mi; DbusmenuMenuitem * lock_mi; - DBusGProxy * up_main_proxy; - DBusGProxy * up_prop_proxy; - gboolean can_hibernate; gboolean can_suspend; gboolean allow_hibernate; gboolean allow_suspend; - DBusGProxyCall * suspend_call; - DBusGProxyCall * hibernate_call; + IndicatorSessionUPower * upower_proxy; + GCancellable * cancellable; }; static void setup_up (DeviceMenuMgr* self); @@ -96,8 +93,8 @@ device_menu_mgr_dispose (GObject *object) DeviceMenuMgr * self = DEVICE_MENU_MGR (object); g_clear_object (&self->lockdown_settings); g_clear_object (&self->keybinding_settings); - g_clear_object (&self->up_main_proxy); - g_clear_object (&self->up_prop_proxy); + g_clear_object (&self->upower_proxy); + g_clear_object (&self->cancellable); G_OBJECT_CLASS (device_menu_mgr_parent_class)->finalize (object); } @@ -141,28 +138,20 @@ screensaver_keybinding_changed (GSettings * settings, } -/* Let's put this machine to sleep with some hints on how it should sleep. */ -static void -machine_sleep_with_context (DeviceMenuMgr* self, const gchar* type) -{ - if (self->up_main_proxy == NULL) - { - g_warning("Cannot %s because no upower proxy", type); - } - else - { - dbus_g_proxy_begin_call (self->up_main_proxy, type, - NULL, NULL, NULL, - G_TYPE_INVALID); - } -} - static void machine_sleep_from_suspend (DbusmenuMenuitem * mi G_GNUC_UNUSED, guint timestamp G_GNUC_UNUSED, gpointer userdata) { - machine_sleep_with_context (DEVICE_MENU_MGR(userdata), "Suspend"); + GError * error = NULL; + DeviceMenuMgr * mgr = DEVICE_MENU_MGR (userdata); + + indicator_session_upower_call_suspend_sync (mgr->upower_proxy, mgr->cancellable, &error); + if (error != NULL) + { + g_warning ("%s: %s", G_STRFUNC, error->message); + g_clear_error (&error); + } } static void @@ -170,120 +159,90 @@ machine_sleep_from_hibernate (DbusmenuMenuitem * mi G_GNUC_UNUSED, guint timestamp G_GNUC_UNUSED, gpointer userdata) { - machine_sleep_with_context (DEVICE_MENU_MGR(userdata), "Hibernate"); + GError * error = NULL; + DeviceMenuMgr * mgr = DEVICE_MENU_MGR (userdata); + + indicator_session_upower_call_hibernate_sync (mgr->upower_proxy, mgr->cancellable, &error); + if (error != NULL) + { + g_warning ("%s: %s", G_STRFUNC, error->message); + g_clear_error (&error); + } } /*** **** ***/ +/* When allow-suspend changes, rebuild the menus */ static void -rebuild_if_flag_changed (DeviceMenuMgr * mgr, GError * error, gboolean * setme, gboolean value) +allowed_suspend_cb (GObject * source, GAsyncResult * res, gpointer userdata) { + gboolean allowed; + GError * error = NULL; + DeviceMenuMgr * mgr = DEVICE_MENU_MGR (userdata); + + indicator_session_upower_call_suspend_allowed_finish (mgr->upower_proxy, &allowed, res, &error); if (error != NULL) { - g_warning ("Unable to get information on what's allowed from UPower: %s", error->message); + g_warning ("%s: %s", G_STRFUNC, error->message); + g_error_free (error); } - else if (*setme != value) + else if (mgr->allow_suspend != allowed) { - *setme = value; + mgr->allow_suspend = allowed; device_menu_mgr_rebuild_items (mgr); } } -/* When allow-suspend changes, rebuild the menus */ -static void -allowed_suspend_cb (DBusGProxy * proxy G_GNUC_UNUSED, - gboolean allow_suspend, - GError * error, - gpointer userdata) -{ - DeviceMenuMgr * mgr = DEVICE_MENU_MGR (userdata); - rebuild_if_flag_changed (mgr, error, &mgr->allow_suspend, allow_suspend); -} - /* When allow-hibernate changes, rebuild the menus */ static void -allowed_hibernate_cb (DBusGProxy * proxy G_GNUC_UNUSED, - gboolean allow_hibernate, - GError * error, - gpointer userdata) +allowed_hibernate_cb (GObject * source, GAsyncResult * res, gpointer userdata) { - DeviceMenuMgr * mgr = DEVICE_MENU_MGR (userdata); - rebuild_if_flag_changed (mgr, error, &mgr->allow_hibernate, allow_hibernate); -} - - -static void -rebuild_if_flag_changed_from_proxy_call (DeviceMenuMgr * mgr, gboolean * setme, DBusGProxy * proxy, DBusGProxyCall * call) -{ - GValue value = {0}; + gboolean allowed; GError * error = NULL; + DeviceMenuMgr * mgr = DEVICE_MENU_MGR (userdata); - dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_VALUE, &value, G_TYPE_INVALID); - rebuild_if_flag_changed (mgr, error, setme, g_value_get_boolean (&value)); - - g_clear_error (&error); - g_value_unset (&value); + indicator_session_upower_call_hibernate_allowed_finish (mgr->upower_proxy, &allowed, res, &error); + if (error != NULL) + { + g_warning ("%s: %s", G_STRFUNC, error->message); + g_error_free (error); + } + else if (mgr->allow_hibernate != allowed) + { + mgr->allow_hibernate = allowed; + device_menu_mgr_rebuild_items (mgr); + } } -/* When can-suspend changes, rebuild the menus */ -static void -suspend_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) -{ - DeviceMenuMgr* self = DEVICE_MENU_MGR (userdata); - self->suspend_call = NULL; - rebuild_if_flag_changed_from_proxy_call (self, &self->can_suspend, proxy, call); -} -/* When can-hibernate changes, rebuild the menus */ static void -hibernate_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) +on_upower_properties_changed (IndicatorSessionUPower * upower_proxy, DeviceMenuMgr * mgr) { - DeviceMenuMgr* self = DEVICE_MENU_MGR (userdata); - self->hibernate_call = NULL; - rebuild_if_flag_changed_from_proxy_call (self, &self->can_hibernate, proxy, call); -} + gboolean b; + gboolean refresh = FALSE; -/* A signal that we need to recheck to ensure we can still hibernate and/or suspend */ -static void -up_changed_cb (DBusGProxy * proxy, gpointer user_data) -{ - DeviceMenuMgr * self = DEVICE_MENU_MGR(user_data); + /* suspend */ + b = indicator_session_upower_get_can_suspend (upower_proxy); + if (mgr->can_suspend != b) + { + mgr->can_suspend = b; + refresh = TRUE; + } - if (self->suspend_call == NULL) + /* hibernate */ + b = indicator_session_upower_get_can_hibernate (upower_proxy); + if (mgr->can_hibernate != b) { - /* start async call to see if we can hibernate */ - self->suspend_call = dbus_g_proxy_begin_call (self->up_prop_proxy, - "Get", - suspend_prop_cb, - user_data, - NULL, - G_TYPE_STRING, - UP_INTERFACE, - G_TYPE_STRING, - "CanSuspend", - G_TYPE_INVALID, - G_TYPE_VALUE, - G_TYPE_INVALID); + mgr->can_hibernate = b; + refresh = TRUE; } - if (self->hibernate_call == NULL) - { - /* start async call to see if we can suspend */ - self->hibernate_call = dbus_g_proxy_begin_call (self->up_prop_proxy, - "Get", - hibernate_prop_cb, - user_data, - NULL, - G_TYPE_STRING, - UP_INTERFACE, - G_TYPE_STRING, - "CanHibernate", - G_TYPE_INVALID, - G_TYPE_VALUE, - G_TYPE_INVALID); - } + if (refresh) + { + device_menu_mgr_rebuild_items (mgr); + } } /* This function goes through and sets up what we need for DKp checking. @@ -291,34 +250,33 @@ up_changed_cb (DBusGProxy * proxy, gpointer user_data) static void setup_up (DeviceMenuMgr* self) { - DBusGConnection * bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL); - g_return_if_fail (bus != NULL); + self->cancellable = g_cancellable_new (); - if (self->up_main_proxy == NULL) + GError * error = NULL; + self->upower_proxy = indicator_session_upower_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + 0, + UP_ADDRESS, + UP_OBJECT, + NULL, + &error); + if (error != NULL) { - self->up_main_proxy = dbus_g_proxy_new_for_name (bus, - UP_ADDRESS, - UP_OBJECT, - UP_INTERFACE); + g_warning ("Error creating cups notify handler: %s", error->message); + g_error_free (error); } - - if (self->up_prop_proxy == NULL) + else { - self->up_prop_proxy = dbus_g_proxy_new_for_name(bus, - UP_ADDRESS, - UP_OBJECT, - DBUS_INTERFACE_PROPERTIES); - /* Connect to changed signal */ - dbus_g_proxy_add_signal(self->up_main_proxy, "Changed", G_TYPE_INVALID); - dbus_g_proxy_connect_signal(self->up_main_proxy, "Changed", G_CALLBACK(up_changed_cb), self, NULL); + /* Check to see if these are getting blocked by PolicyKit */ + indicator_session_upower_call_suspend_allowed (self->upower_proxy, self->cancellable, allowed_suspend_cb, self); + indicator_session_upower_call_hibernate_allowed (self->upower_proxy, self->cancellable, allowed_hibernate_cb, self); + + g_signal_connect (self->upower_proxy, "changed", G_CALLBACK(on_upower_properties_changed), self); + + /* trigger an initial "changed" event */ + on_upower_properties_changed (self->upower_proxy, self); } - /* Force an original "changed" event */ - up_changed_cb(self->up_main_proxy, self); - /* Check to see if these are getting blocked by PolicyKit */ - org_freedesktop_UPower_suspend_allowed_async(self->up_main_proxy, allowed_suspend_cb, self); - org_freedesktop_UPower_hibernate_allowed_async(self->up_main_proxy, allowed_hibernate_cb, self); } static void -- cgit v1.2.3 From 41c4ab35750809c59c60cf3a3e1c3deb8449c9b5 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 14 Jun 2012 14:06:34 -0500 Subject: remove the use-username-in-switch-item property; it's no longer spec'ed --- src/device-menu-mgr.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 9cfb913..23a8dc0 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -29,7 +29,6 @@ with this program. If not, see . #include "device-menu-mgr.h" #include "settings-helper.h" #include "dbus-shared-names.h" -#include "dbusmenu-shared.h" #include "lock-helper.h" #define UP_ADDRESS "org.freedesktop.UPower" -- cgit v1.2.3 From 537a40e055d701e5d735f1bf47a4875e3461df02 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 14 Jun 2012 19:51:03 -0500 Subject: a step in merging the two menus: initial merge of the two menus --- src/device-menu-mgr.c | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 23a8dc0..ccf4107 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -40,7 +40,7 @@ with this program. If not, see . struct _DeviceMenuMgr { GObject parent_instance; - DbusmenuMenuitem* root_item; + DbusmenuMenuitem * parent_mi; SessionDbus* session_dbus_interface; GSettings *lockdown_settings; @@ -68,8 +68,6 @@ G_DEFINE_TYPE (DeviceMenuMgr, device_menu_mgr, G_TYPE_OBJECT); static void device_menu_mgr_init (DeviceMenuMgr *self) { - self->root_item = dbusmenu_menuitem_new (); - self->can_hibernate = TRUE; self->can_suspend = TRUE; self->allow_hibernate = TRUE; @@ -328,14 +326,16 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) name = _("About This Computer"); mi = dbusmenu_menuitem_new (); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - dbusmenu_menuitem_child_append (self->root_item, mi); + dbusmenu_menuitem_child_append (self->parent_mi, mi); +g_message ("appending About This Computer to %p", self->parent_mi); + g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(spawn_command_line_async), "gnome-control-center info"); name = _("Ubuntu Help"); mi = dbusmenu_menuitem_new (); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - dbusmenu_menuitem_child_append (self->root_item, mi); + dbusmenu_menuitem_child_append (self->parent_mi, mi); g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(spawn_command_line_async), "yelp"); @@ -343,12 +343,12 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) { mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); - dbusmenu_menuitem_child_append (self->root_item, mi); + dbusmenu_menuitem_child_append (self->parent_mi, mi); name = _("System Settings…"); mi = dbusmenu_menuitem_new (); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - dbusmenu_menuitem_child_append (self->root_item, mi); + dbusmenu_menuitem_child_append (self->parent_mi, mi); g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(spawn_command_line_async), "gnome-control-center"); } @@ -366,7 +366,7 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) self->lock_mi = mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); update_screensaver_shortcut (mi, self->keybinding_settings); - dbusmenu_menuitem_child_append (self->root_item, mi); + dbusmenu_menuitem_child_append (self->parent_mi, mi); g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(lock_screen), NULL); } @@ -377,7 +377,7 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); - dbusmenu_menuitem_child_append (self->root_item, mi); + dbusmenu_menuitem_child_append (self->parent_mi, mi); if (!greeter_mode) { @@ -385,7 +385,7 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) logout_mi = mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); dbusmenu_menuitem_property_set_bool (mi, DBUSMENU_MENUITEM_PROP_VISIBLE, show_logout()); - dbusmenu_menuitem_child_append(self->root_item, mi); + dbusmenu_menuitem_child_append(self->parent_mi, mi); g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_dialog), "logout"); } @@ -395,7 +395,7 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) name = _("Suspend"); self->suspend_mi = mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - dbusmenu_menuitem_child_append (self->root_item, mi); + dbusmenu_menuitem_child_append (self->parent_mi, mi); g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(machine_sleep_from_suspend), self); } @@ -405,7 +405,7 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) name = _("Hibernate"); self->hibernate_mi = mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - dbusmenu_menuitem_child_append(self->root_item, mi); + dbusmenu_menuitem_child_append(self->parent_mi, mi); g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(machine_sleep_from_hibernate), self); } @@ -413,14 +413,14 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) name = _("Restart"); mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - dbusmenu_menuitem_child_append (self->root_item, mi); + dbusmenu_menuitem_child_append (self->parent_mi, mi); /* FIXME: not implemented */ name = supress_confirmations() ? _("Shut Down") : _("Shut Down\342\200\246"); shutdown_mi = mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); dbusmenu_menuitem_property_set_bool (mi, DBUSMENU_MENUITEM_PROP_VISIBLE, show_shutdown()); - dbusmenu_menuitem_child_append (self->root_item, mi); + dbusmenu_menuitem_child_append (self->parent_mi, mi); g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, #ifdef HAVE_GTKLOGOUTHELPER G_CALLBACK(show_dialog), "shutdown"); @@ -446,18 +446,15 @@ device_menu_mgr_rebuild_items (DeviceMenuMgr* self) self->can_suspend && self->allow_suspend); } -DbusmenuMenuitem* -device_mgr_get_root_item (DeviceMenuMgr* self) -{ - return self->root_item; -} - /* * Clean Entry Point */ -DeviceMenuMgr* device_menu_mgr_new (SessionDbus* session_dbus, gboolean greeter_mode) +DeviceMenuMgr* device_menu_mgr_new (DbusmenuMenuitem * parent_mi, + SessionDbus * session_dbus, + gboolean greeter_mode) { DeviceMenuMgr* device_mgr = g_object_new (DEVICE_TYPE_MENU_MGR, NULL); + device_mgr->parent_mi = parent_mi; device_mgr->session_dbus_interface = session_dbus; device_menu_mgr_build_static_items (device_mgr, greeter_mode); return device_mgr; -- cgit v1.2.3 From 8cb934f213894b998bc3c471f5636fa9f0ae1dd4 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Fri, 15 Jun 2012 08:20:45 -0500 Subject: a step in merging the two menus: merge the DeviceMenuMgr and UserMenuMgr classes into a single SessionMenuMgr class --- src/device-menu-mgr.c | 461 -------------------------------------------------- 1 file changed, 461 deletions(-) delete mode 100644 src/device-menu-mgr.c (limited to 'src/device-menu-mgr.c') diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c deleted file mode 100644 index ccf4107..0000000 --- a/src/device-menu-mgr.c +++ /dev/null @@ -1,461 +0,0 @@ -/* -Copyright 2011 Canonical Ltd. - -Authors: - Conor Curran - -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. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . -*/ - -#include - -#include -#include - -#include -#include - -#include "dbus-upower.h" -#include "device-menu-mgr.h" -#include "settings-helper.h" -#include "dbus-shared-names.h" -#include "lock-helper.h" - -#define UP_ADDRESS "org.freedesktop.UPower" -#define UP_OBJECT "/org/freedesktop/UPower" -#define UP_INTERFACE "org.freedesktop.UPower" - -#define EXTRA_LAUNCHER_DIR "/usr/share/indicators/session/applications" - -struct _DeviceMenuMgr -{ - GObject parent_instance; - DbusmenuMenuitem * parent_mi; - SessionDbus* session_dbus_interface; - - GSettings *lockdown_settings; - GSettings * keybinding_settings; - - DbusmenuMenuitem * hibernate_mi; - DbusmenuMenuitem * suspend_mi; - DbusmenuMenuitem * lock_mi; - - gboolean can_hibernate; - gboolean can_suspend; - gboolean allow_hibernate; - gboolean allow_suspend; - - IndicatorSessionUPower * upower_proxy; - GCancellable * cancellable; -}; - -static void setup_up (DeviceMenuMgr* self); -static void device_menu_mgr_rebuild_items (DeviceMenuMgr *self); -static void screensaver_keybinding_changed (GSettings*, const gchar*, gpointer); - -G_DEFINE_TYPE (DeviceMenuMgr, device_menu_mgr, G_TYPE_OBJECT); - -static void -device_menu_mgr_init (DeviceMenuMgr *self) -{ - self->can_hibernate = TRUE; - self->can_suspend = TRUE; - self->allow_hibernate = TRUE; - self->allow_suspend = TRUE; - - self->lockdown_settings = g_settings_new (LOCKDOWN_SCHEMA); - g_signal_connect_swapped (self->lockdown_settings, "changed::" LOCKDOWN_KEY_USER, G_CALLBACK(device_menu_mgr_rebuild_items), self); - g_signal_connect_swapped (self->lockdown_settings, "changed::" LOCKDOWN_KEY_SCREENSAVER, G_CALLBACK(device_menu_mgr_rebuild_items), self); - - self->keybinding_settings = g_settings_new (KEYBINDING_SCHEMA); - g_signal_connect (self->keybinding_settings, "changed::" KEY_LOCK_SCREEN, G_CALLBACK(screensaver_keybinding_changed), self); - - setup_up(self); - g_idle_add(lock_screen_setup, NULL); -} - -static void -device_menu_mgr_dispose (GObject *object) -{ - DeviceMenuMgr * self = DEVICE_MENU_MGR (object); - g_clear_object (&self->lockdown_settings); - g_clear_object (&self->keybinding_settings); - g_clear_object (&self->upower_proxy); - g_clear_object (&self->cancellable); - - G_OBJECT_CLASS (device_menu_mgr_parent_class)->finalize (object); -} - -static void -device_menu_mgr_finalize (GObject *object) -{ - G_OBJECT_CLASS (device_menu_mgr_parent_class)->finalize (object); -} - -static void -device_menu_mgr_class_init (DeviceMenuMgrClass *klass) -{ - GObjectClass* object_class = G_OBJECT_CLASS (klass); - object_class->dispose = device_menu_mgr_dispose; - object_class->finalize = device_menu_mgr_finalize; -} - -/*** -**** -***/ - -static void -update_screensaver_shortcut (DbusmenuMenuitem * menuitem, GSettings * settings) -{ - if (menuitem != NULL) - { - gchar * val = g_settings_get_string (settings, KEY_LOCK_SCREEN); - g_debug ("Keybinding changed to: %s", val); - dbusmenu_menuitem_property_set_shortcut_string (menuitem, val); - g_free (val); - } -} - -static void -screensaver_keybinding_changed (GSettings * settings, - const gchar * key G_GNUC_UNUSED, - gpointer userdata) -{ - update_screensaver_shortcut (DEVICE_MENU_MGR(userdata)->lock_mi, settings); -} - - -static void -machine_sleep_from_suspend (DbusmenuMenuitem * mi G_GNUC_UNUSED, - guint timestamp G_GNUC_UNUSED, - gpointer userdata) -{ - GError * error = NULL; - DeviceMenuMgr * mgr = DEVICE_MENU_MGR (userdata); - - indicator_session_upower_call_suspend_sync (mgr->upower_proxy, mgr->cancellable, &error); - if (error != NULL) - { - g_warning ("%s: %s", G_STRFUNC, error->message); - g_clear_error (&error); - } -} - -static void -machine_sleep_from_hibernate (DbusmenuMenuitem * mi G_GNUC_UNUSED, - guint timestamp G_GNUC_UNUSED, - gpointer userdata) -{ - GError * error = NULL; - DeviceMenuMgr * mgr = DEVICE_MENU_MGR (userdata); - - indicator_session_upower_call_hibernate_sync (mgr->upower_proxy, mgr->cancellable, &error); - if (error != NULL) - { - g_warning ("%s: %s", G_STRFUNC, error->message); - g_clear_error (&error); - } -} - -/*** -**** -***/ - -/* When allow-suspend changes, rebuild the menus */ -static void -allowed_suspend_cb (GObject * source, GAsyncResult * res, gpointer userdata) -{ - gboolean allowed; - GError * error = NULL; - DeviceMenuMgr * mgr = DEVICE_MENU_MGR (userdata); - - indicator_session_upower_call_suspend_allowed_finish (mgr->upower_proxy, &allowed, res, &error); - if (error != NULL) - { - g_warning ("%s: %s", G_STRFUNC, error->message); - g_error_free (error); - } - else if (mgr->allow_suspend != allowed) - { - mgr->allow_suspend = allowed; - device_menu_mgr_rebuild_items (mgr); - } -} - -/* When allow-hibernate changes, rebuild the menus */ -static void -allowed_hibernate_cb (GObject * source, GAsyncResult * res, gpointer userdata) -{ - gboolean allowed; - GError * error = NULL; - DeviceMenuMgr * mgr = DEVICE_MENU_MGR (userdata); - - indicator_session_upower_call_hibernate_allowed_finish (mgr->upower_proxy, &allowed, res, &error); - if (error != NULL) - { - g_warning ("%s: %s", G_STRFUNC, error->message); - g_error_free (error); - } - else if (mgr->allow_hibernate != allowed) - { - mgr->allow_hibernate = allowed; - device_menu_mgr_rebuild_items (mgr); - } -} - - -static void -on_upower_properties_changed (IndicatorSessionUPower * upower_proxy, DeviceMenuMgr * mgr) -{ - gboolean b; - gboolean refresh = FALSE; - - /* suspend */ - b = indicator_session_upower_get_can_suspend (upower_proxy); - if (mgr->can_suspend != b) - { - mgr->can_suspend = b; - refresh = TRUE; - } - - /* hibernate */ - b = indicator_session_upower_get_can_hibernate (upower_proxy); - if (mgr->can_hibernate != b) - { - mgr->can_hibernate = b; - refresh = TRUE; - } - - if (refresh) - { - device_menu_mgr_rebuild_items (mgr); - } -} - -/* This function goes through and sets up what we need for DKp checking. - We're even setting up the calls for the props we need */ -static void -setup_up (DeviceMenuMgr* self) -{ - self->cancellable = g_cancellable_new (); - - GError * error = NULL; - self->upower_proxy = indicator_session_upower_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - 0, - UP_ADDRESS, - UP_OBJECT, - NULL, - &error); - if (error != NULL) - { - g_warning ("Error creating cups notify handler: %s", error->message); - g_error_free (error); - } - else - { - /* Check to see if these are getting blocked by PolicyKit */ - indicator_session_upower_call_suspend_allowed (self->upower_proxy, self->cancellable, allowed_suspend_cb, self); - indicator_session_upower_call_hibernate_allowed (self->upower_proxy, self->cancellable, allowed_hibernate_cb, self); - - g_signal_connect (self->upower_proxy, "changed", G_CALLBACK(on_upower_properties_changed), self); - - /* trigger an initial "changed" event */ - on_upower_properties_changed (self->upower_proxy, self); - } - - -} - -static void -spawn_command_line_async (const char * fmt, ...) -{ - va_list marker; - va_start (marker, fmt); - gchar * cmd = g_strdup_vprintf (fmt, marker); - va_end (marker); - - GError * error = NULL; - if (!g_spawn_command_line_async (cmd, &error)) - { - g_warning ("Unable to show \"%s\": %s", cmd, error->message); - } - - g_clear_error (&error); - g_free (cmd); -} - - -/* This is the function to show a dialog on actions that - can destroy data. Currently it just calls the GTK version - but it seems that in the future it should figure out - what's going on and something better. */ -static void -show_dialog (DbusmenuMenuitem * mi, guint timestamp, gchar * type) -{ -#ifdef HAVE_GTKLOGOUTHELPER - gchar * helper = g_build_filename(LIBEXECDIR, "gtk-logout-helper", NULL); -#else - gchar * helper = g_build_filename("gnome-session-quit", NULL); -#endif /* HAVE_GTKLOGOUTHELPER */ - spawn_command_line_async ("%s --%s", helper, type); - g_free (helper); -} - -static void -device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) -{ - const char * name; - DbusmenuMenuitem * mi; - DbusmenuMenuitem * logout_mi = NULL; - DbusmenuMenuitem * shutdown_mi = NULL; - - /*** - **** Admin items - ***/ - - name = _("About This Computer"); - mi = dbusmenu_menuitem_new (); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - dbusmenu_menuitem_child_append (self->parent_mi, mi); -g_message ("appending About This Computer to %p", self->parent_mi); - - g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(spawn_command_line_async), "gnome-control-center info"); - - name = _("Ubuntu Help"); - mi = dbusmenu_menuitem_new (); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - dbusmenu_menuitem_child_append (self->parent_mi, mi); - g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(spawn_command_line_async), "yelp"); - - if (!greeter_mode) - { - mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); - dbusmenu_menuitem_child_append (self->parent_mi, mi); - - name = _("System Settings…"); - mi = dbusmenu_menuitem_new (); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - dbusmenu_menuitem_child_append (self->parent_mi, mi); - g_signal_connect_swapped (mi, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(spawn_command_line_async), "gnome-control-center"); - } - - /*** - **** Account-switching items - ***/ - - /* TODO: FIXME */ - - const gboolean can_lockscreen = !g_settings_get_boolean (self->lockdown_settings, LOCKDOWN_KEY_SCREENSAVER); - if (can_lockscreen) - { - name = _("Lock Screen"); - self->lock_mi = mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - update_screensaver_shortcut (mi, self->keybinding_settings); - dbusmenu_menuitem_child_append (self->parent_mi, mi); - g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(lock_screen), NULL); - } - - /*** - **** Session Items - ***/ - - mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); - dbusmenu_menuitem_child_append (self->parent_mi, mi); - - if (!greeter_mode) - { - name = supress_confirmations() ? _("Log Out") : _("Log Out\342\200\246"); - logout_mi = mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - dbusmenu_menuitem_property_set_bool (mi, DBUSMENU_MENUITEM_PROP_VISIBLE, show_logout()); - dbusmenu_menuitem_child_append(self->parent_mi, mi); - g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(show_dialog), "logout"); - } - - if (self->can_suspend && self->allow_suspend) - { - name = _("Suspend"); - self->suspend_mi = mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - dbusmenu_menuitem_child_append (self->parent_mi, mi); - g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(machine_sleep_from_suspend), self); - } - - if (self->can_hibernate && self->allow_hibernate) - { - name = _("Hibernate"); - self->hibernate_mi = mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - dbusmenu_menuitem_child_append(self->parent_mi, mi); - g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, - G_CALLBACK(machine_sleep_from_hibernate), self); - } - - name = _("Restart"); - mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - dbusmenu_menuitem_child_append (self->parent_mi, mi); - /* FIXME: not implemented */ - - name = supress_confirmations() ? _("Shut Down") : _("Shut Down\342\200\246"); - shutdown_mi = mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, name); - dbusmenu_menuitem_property_set_bool (mi, DBUSMENU_MENUITEM_PROP_VISIBLE, show_shutdown()); - dbusmenu_menuitem_child_append (self->parent_mi, mi); - g_signal_connect (G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, -#ifdef HAVE_GTKLOGOUTHELPER - G_CALLBACK(show_dialog), "shutdown"); -#else - G_CALLBACK(show_dialog), "power-off"); -#endif /* HAVE_GTKLOGOUTHELPER */ - - RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi = g_new0 (RestartShutdownLogoutMenuItems, 1); - restart_shutdown_logout_mi->logout_mi = logout_mi; - restart_shutdown_logout_mi->shutdown_mi = shutdown_mi; - - update_menu_entries(restart_shutdown_logout_mi); -} - -static void -device_menu_mgr_rebuild_items (DeviceMenuMgr* self) -{ - dbusmenu_menuitem_property_set_bool (self->hibernate_mi, - DBUSMENU_MENUITEM_PROP_VISIBLE, - self->can_hibernate && self->allow_hibernate); - dbusmenu_menuitem_property_set_bool (self->suspend_mi, - DBUSMENU_MENUITEM_PROP_VISIBLE, - self->can_suspend && self->allow_suspend); -} - -/* - * Clean Entry Point - */ -DeviceMenuMgr* device_menu_mgr_new (DbusmenuMenuitem * parent_mi, - SessionDbus * session_dbus, - gboolean greeter_mode) -{ - DeviceMenuMgr* device_mgr = g_object_new (DEVICE_TYPE_MENU_MGR, NULL); - device_mgr->parent_mi = parent_mi; - device_mgr->session_dbus_interface = session_dbus; - device_menu_mgr_build_static_items (device_mgr, greeter_mode); - return device_mgr; -} -- cgit v1.2.3