From 65fe469210b617061b28f2ce83b6fc187a0eb756 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 23 Jul 2009 16:15:04 -0500 Subject: Some comments are always good. --- src/session-service.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/session-service.c b/src/session-service.c index c8b3170..84091c8 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -12,6 +12,10 @@ static DbusmenuMenuitem * root_menuitem = NULL; static GMainLoop * mainloop = NULL; +/* 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, gchar * type) { @@ -32,6 +36,8 @@ show_dialog (DbusmenuMenuitem * mi, gchar * type) return; } +/* This function creates all of the menuitems that the service + provides in the UI. It also connects them to the callbacks. */ static void create_items (DbusmenuMenuitem * root) { DbusmenuMenuitem * mi = NULL; @@ -64,6 +70,8 @@ create_items (DbusmenuMenuitem * root) { return; } +/* Main, is well, main. It brings everything up and throws + us into the mainloop of no return. */ int main (int argc, char ** argv) { -- cgit v1.2.3 From 44fe17857bc3fca0093a83c4d4d4c344d14fca46 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 23 Jul 2009 20:37:51 -0500 Subject: Adding in some DKp defines. --- src/session-service.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/session-service.c b/src/session-service.c index 84091c8..c281a8a 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -9,6 +9,10 @@ #include "dbus-shared-names.h" +#define DKP_ADDRESS "org.freedesktop.DeviceKit.Power" +#define DKP_OBJECT "/org/freedesktop/DeviceKit/Power" +#define DKP_INTERFACE "org.freedesktop.DeviceKit.Power" + static DbusmenuMenuitem * root_menuitem = NULL; static GMainLoop * mainloop = NULL; -- cgit v1.2.3 From 7419d52e1e26079f01c8981306d8fed50fd8c265 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 23 Jul 2009 21:11:50 -0500 Subject: Building the DKP proxies --- src/session-service.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/session-service.c b/src/session-service.c index c281a8a..7b686d5 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -15,6 +15,35 @@ static DbusmenuMenuitem * root_menuitem = NULL; static GMainLoop * mainloop = NULL; +static DBusGProxy * dkp_main_proxy = NULL; +static DBusGProxy * dkp_prop_proxy = NULL; + +/* 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_dkp (void) { + DBusGConnection * bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL); + g_return_if_fail(bus != NULL); + + if (dkp_main_proxy == NULL) { + dkp_main_proxy = dbus_g_proxy_new_for_name(bus, + DKP_ADDRESS, + DKP_OBJECT, + DKP_INTERFACE); + } + g_return_if_fail(dkp_main_proxy != NULL); + + if (dkp_prop_proxy == NULL) { + dkp_prop_proxy = dbus_g_proxy_new_for_name(bus, + DKP_ADDRESS, + DKP_OBJECT, + DBUS_INTERFACE_PROPERTIES); + } + g_return_if_fail(dkp_prop_proxy != NULL); + + return; +} /* This is the function to show a dialog on actions that can destroy data. Currently it just calls the GTK version @@ -100,6 +129,7 @@ main (int argc, char ** argv) g_debug("Root ID: %d", dbusmenu_menuitem_get_id(root_menuitem)); create_items(root_menuitem); + setup_dkp(); DbusmenuServer * server = dbusmenu_server_new(INDICATOR_SESSION_DBUS_OBJECT); dbusmenu_server_set_root(server, root_menuitem); -- cgit v1.2.3 From db481c5758ce617524fc8ba373538d8be7ed0c8e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 23 Jul 2009 21:53:04 -0500 Subject: Adding in the function to make the calls to DKP --- src/session-service.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/session-service.c b/src/session-service.c index 7b686d5..f17a2d6 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -18,6 +18,24 @@ static GMainLoop * mainloop = NULL; static DBusGProxy * dkp_main_proxy = NULL; static DBusGProxy * dkp_prop_proxy = NULL; +/* Hibernate the machine */ +static void +sleep (DbusmenuMenuitem * mi, gpointer userdata) +{ + gchar * type = (gchar *)userdata; + + if (dkp_main_proxy == NULL) { + g_warning("Can not %s as no DeviceKit Power Proxy", type); + } + + dbus_g_proxy_call_no_reply(dkp_main_proxy, + type, + G_TYPE_INVALID, + G_TYPE_INVALID); + + return; +} + /* 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 */ @@ -83,12 +101,12 @@ create_items (DbusmenuMenuitem * root) { mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set(mi, "label", _("Suspend")); dbusmenu_menuitem_child_append(root, mi); - g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_dialog), "suspend"); + g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(sleep), "Suspend"); mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set(mi, "label", _("Hibernate")); dbusmenu_menuitem_child_append(root, mi); - g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_dialog), "hibernate"); + g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(sleep), "Hibernate"); mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set(mi, "label", _("Restart")); -- cgit v1.2.3 From f97c0f6c6838fcbc536e718f7107ded62e9e5d8b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 24 Jul 2009 08:28:39 -0500 Subject: Comment update --- src/session-service.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/session-service.c b/src/session-service.c index f17a2d6..431d5ea 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -18,7 +18,8 @@ static GMainLoop * mainloop = NULL; static DBusGProxy * dkp_main_proxy = NULL; static DBusGProxy * dkp_prop_proxy = NULL; -/* Hibernate the machine */ +/* Let's put this machine to sleep, with some info on how + it should sleep. */ static void sleep (DbusmenuMenuitem * mi, gpointer userdata) { -- cgit v1.2.3 From 73a077d2efd6a5465f3927a8b151371315faf041 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 24 Jul 2009 10:42:42 -0500 Subject: TODO list --- src/session-service.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/session-service.c b/src/session-service.c index 431d5ea..30bb5de 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -61,6 +61,12 @@ setup_dkp (void) { } g_return_if_fail(dkp_prop_proxy != NULL); + /* Connect to changed signal */ + + /* Start Async call to see if we can hibernate */ + + /* Start Async call to see if we can suspend */ + return; } -- cgit v1.2.3 From 7892498e5af9af135aab6268ec875384ecf47109 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 24 Jul 2009 13:52:45 -0500 Subject: Setting up change, and issuing a response --- src/session-service.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 72 insertions(+), 4 deletions(-) diff --git a/src/session-service.c b/src/session-service.c index 30bb5de..50e0f13 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -18,6 +18,9 @@ static GMainLoop * mainloop = NULL; static DBusGProxy * dkp_main_proxy = NULL; static DBusGProxy * dkp_prop_proxy = NULL; +static DBusGProxyCall * suspend_call = NULL; +static DBusGProxyCall * hibernate_call = NULL; + /* Let's put this machine to sleep, with some info on how it should sleep. */ static void @@ -37,6 +40,63 @@ sleep (DbusmenuMenuitem * mi, gpointer userdata) return; } +static void +suspend_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) +{ + suspend_call = NULL; + +} + +static void +hibernate_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) +{ + hibernate_call = NULL; + +} + +/* A signal that we need to recheck to ensure we can still + hibernate and/or suspend */ +static void +dpk_changed_cb (DBusGProxy * proxy, gpointer user_data) +{ + /* Start Async call to see if we can hibernate */ + if (suspend_call == NULL) { + suspend_call = dbus_g_proxy_begin_call(dkp_prop_proxy, + "Get", + suspend_prop_cb, + NULL, + NULL, + G_TYPE_STRING, + DKP_INTERFACE, + G_TYPE_STRING, + "can-suspend", + G_TYPE_INVALID, + G_TYPE_BOOLEAN, + G_TYPE_INVALID); + + } + + /* Start Async call to see if we can suspend */ + if (hibernate_call == NULL) { + hibernate_call = dbus_g_proxy_begin_call(dkp_prop_proxy, + "Get", + hibernate_prop_cb, + NULL, + NULL, + G_TYPE_STRING, + DKP_INTERFACE, + G_TYPE_STRING, + "can-hibernate", + G_TYPE_INVALID, + G_TYPE_BOOLEAN, + G_TYPE_INVALID); + + + } + + return; +} + /* 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 */ @@ -62,10 +122,18 @@ setup_dkp (void) { g_return_if_fail(dkp_prop_proxy != NULL); /* Connect to changed signal */ - - /* Start Async call to see if we can hibernate */ - - /* Start Async call to see if we can suspend */ + dbus_g_proxy_add_signal(dkp_main_proxy, + "Changed", + G_TYPE_INVALID); + + dbus_g_proxy_connect_signal(dkp_main_proxy, + "Changed", + G_CALLBACK(dpk_changed_cb), + NULL, + NULL); + + /* Force an original "changed" event */ + dpk_changed_cb(dkp_main_proxy, NULL); return; } -- cgit v1.2.3 From 030273f33da9c1ac7875d7319ffc6d78561719cf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 24 Jul 2009 15:56:36 -0500 Subject: Checking the suspend and hibernate properties --- src/session-service.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/session-service.c b/src/session-service.c index 50e0f13..240f397 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -45,6 +45,18 @@ suspend_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) { 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"); + + + return; } static void @@ -52,6 +64,18 @@ hibernate_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) { 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"); + + + return; } /* A signal that we need to recheck to ensure we can still @@ -71,7 +95,7 @@ dpk_changed_cb (DBusGProxy * proxy, gpointer user_data) G_TYPE_STRING, "can-suspend", G_TYPE_INVALID, - G_TYPE_BOOLEAN, + G_TYPE_VALUE, G_TYPE_INVALID); } @@ -88,7 +112,7 @@ dpk_changed_cb (DBusGProxy * proxy, gpointer user_data) G_TYPE_STRING, "can-hibernate", G_TYPE_INVALID, - G_TYPE_BOOLEAN, + G_TYPE_VALUE, G_TYPE_INVALID); -- cgit v1.2.3 From ec987aaf9598ffa43561e9f3ef9cb4bcf0d21218 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 24 Jul 2009 16:15:09 -0500 Subject: Setting the visiblity of the menu items based on whether DKP reports that we have the functionality. --- src/session-service.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/session-service.c b/src/session-service.c index 240f397..92e4184 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -21,6 +21,9 @@ static DBusGProxy * dkp_prop_proxy = NULL; static DBusGProxyCall * suspend_call = NULL; static DBusGProxyCall * hibernate_call = NULL; +static DbusmenuMenuitem * hibernate_mi = NULL; +static DbusmenuMenuitem * suspend_mi = NULL; + /* Let's put this machine to sleep, with some info on how it should sleep. */ static void @@ -40,6 +43,7 @@ sleep (DbusmenuMenuitem * mi, gpointer userdata) return; } +/* A response to getting the suspend property */ static void suspend_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) { @@ -55,10 +59,14 @@ suspend_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) } g_debug("Got Suspend: %s", g_value_get_boolean(&candoit) ? "true" : "false"); + if (suspend_mi != NULL) { + dbusmenu_menuitem_property_set(suspend_mi, "visible", g_value_get_boolean(&candoit) ? "true" : "false"); + } return; } +/* Response to getting the hibernate property */ static void hibernate_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) { @@ -74,6 +82,9 @@ hibernate_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata) } g_debug("Got Hibernate: %s", g_value_get_boolean(&candoit) ? "true" : "false"); + if (suspend_mi != NULL) { + dbusmenu_menuitem_property_set(hibernate_mi, "visible", g_value_get_boolean(&candoit) ? "true" : "false"); + } return; } @@ -197,15 +208,17 @@ create_items (DbusmenuMenuitem * root) { dbusmenu_menuitem_child_append(root, mi); g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_dialog), "logout"); - mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set(mi, "label", _("Suspend")); - dbusmenu_menuitem_child_append(root, mi); - g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(sleep), "Suspend"); - - mi = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set(mi, "label", _("Hibernate")); - dbusmenu_menuitem_child_append(root, mi); - g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(sleep), "Hibernate"); + suspend_mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set(suspend_mi, "visible", "false"); + dbusmenu_menuitem_property_set(suspend_mi, "label", _("Suspend")); + dbusmenu_menuitem_child_append(root, suspend_mi); + g_signal_connect(G_OBJECT(suspend_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(sleep), "Suspend"); + + hibernate_mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set(hibernate_mi, "visible", "false"); + dbusmenu_menuitem_property_set(hibernate_mi, "label", _("Hibernate")); + dbusmenu_menuitem_child_append(root, hibernate_mi); + g_signal_connect(G_OBJECT(hibernate_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(sleep), "Hibernate"); mi = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set(mi, "label", _("Restart")); -- cgit v1.2.3 From 4f711cf53d1742f4e08058cc3ca2c02e664fc9e1 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 24 Jul 2009 16:16:14 -0500 Subject: Whitespace, who hoo, I'm earning karma for this --- src/session-service.c | 47 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/src/session-service.c b/src/session-service.c index 92e4184..235d0bc 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -97,36 +97,33 @@ dpk_changed_cb (DBusGProxy * proxy, gpointer user_data) /* Start Async call to see if we can hibernate */ if (suspend_call == NULL) { suspend_call = dbus_g_proxy_begin_call(dkp_prop_proxy, - "Get", - suspend_prop_cb, - NULL, - NULL, - G_TYPE_STRING, - DKP_INTERFACE, - G_TYPE_STRING, - "can-suspend", - G_TYPE_INVALID, - G_TYPE_VALUE, - G_TYPE_INVALID); - + "Get", + suspend_prop_cb, + NULL, + NULL, + G_TYPE_STRING, + DKP_INTERFACE, + G_TYPE_STRING, + "can-suspend", + G_TYPE_INVALID, + G_TYPE_VALUE, + G_TYPE_INVALID); } /* Start Async call to see if we can suspend */ if (hibernate_call == NULL) { hibernate_call = dbus_g_proxy_begin_call(dkp_prop_proxy, - "Get", - hibernate_prop_cb, - NULL, - NULL, - G_TYPE_STRING, - DKP_INTERFACE, - G_TYPE_STRING, - "can-hibernate", - G_TYPE_INVALID, - G_TYPE_VALUE, - G_TYPE_INVALID); - - + "Get", + hibernate_prop_cb, + NULL, + NULL, + G_TYPE_STRING, + DKP_INTERFACE, + G_TYPE_STRING, + "can-hibernate", + G_TYPE_INVALID, + G_TYPE_VALUE, + G_TYPE_INVALID); } return; -- cgit v1.2.3 From 091902b3d9fc772cdccc7081264799a712451beb Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 24 Jul 2009 16:19:29 -0500 Subject: Changing to the ayatana.org namespace --- src/dbus-shared-names.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/dbus-shared-names.h b/src/dbus-shared-names.h index f56e9cb..bd2f8ab 100644 --- a/src/dbus-shared-names.h +++ b/src/dbus-shared-names.h @@ -2,13 +2,13 @@ #ifndef __DBUS_SHARED_NAMES_H__ #define __DBUS_SHARED_NAMES_H__ 1 -#define INDICATOR_STATUS_DBUS_NAME "com.ubuntu.indicator.status" -#define INDICATOR_STATUS_DBUS_OBJECT "/com/ubuntu/indicator/status" +#define INDICATOR_STATUS_DBUS_NAME "org.ayatana.indicator.status" +#define INDICATOR_STATUS_DBUS_OBJECT "/org/ayatana/indicator/status" -#define INDICATOR_USERS_DBUS_NAME "com.ubuntu.indicator.users" -#define INDICATOR_USERS_DBUS_OBJECT "/com/ubuntu/indicator/users" +#define INDICATOR_USERS_DBUS_NAME "org.ayatana.indicator.users" +#define INDICATOR_USERS_DBUS_OBJECT "/org/ayatana/indicator/users" -#define INDICATOR_SESSION_DBUS_NAME "com.ubuntu.indicator.session" -#define INDICATOR_SESSION_DBUS_OBJECT "/com/ubuntu/indicator/session" +#define INDICATOR_SESSION_DBUS_NAME "org.ayatana.indicator.session" +#define INDICATOR_SESSION_DBUS_OBJECT "/org/ayatana/indicator/session" #endif /* __DBUS_SHARED_NAMES_H__ */ -- cgit v1.2.3 From efaf013ecf6c0bc65e34aaceee1792fc53c37b45 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 24 Jul 2009 16:45:20 -0500 Subject: Adding a debug message --- src/status-service.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/status-service.c b/src/status-service.c index 314929e..e02e70f 100644 --- a/src/status-service.c +++ b/src/status-service.c @@ -52,6 +52,7 @@ static void status_menu_click (DbusmenuMenuitem * mi, gpointer data) { StatusProviderStatus status = (StatusProviderStatus)GPOINTER_TO_INT(data); + g_debug("Setting status: %d", status); int i; for (i = 0; i < STATUS_PROVIDER_CNT; i++) { status_provider_set_status(status_providers[i], status); -- cgit v1.2.3