From 0ecb2dd406a7981d197f57b33934b02fbf034b3d Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Wed, 13 Apr 2011 15:32:18 -0400 Subject: watch for resume in the service, not the indicator; update today's menu label after resume --- src/datetime-service.c | 43 +++++++++++++++++++++++++++++++++++++++++++ src/indicator-datetime.c | 40 ---------------------------------------- 2 files changed, 43 insertions(+), 40 deletions(-) diff --git a/src/datetime-service.c b/src/datetime-service.c index 08b352a..08ff9ad 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -1199,6 +1199,40 @@ setup_timer (void) return; } +static void +session_active_change_cb (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, + GVariant * parameters, gpointer user_data) +{ + // Just returned from suspend + if (g_strcmp0(signal_name, "SystemIdleHintChanged") == 0) { + gboolean idle = FALSE; + g_variant_get(parameters, "(b)", &idle); + if (!idle) { + datetime_interface_update(DATETIME_INTERFACE(user_data)); + update_datetime(NULL); + setup_timer(); + } + } + return; +} + +/* for hooking into console kit signal on wake from suspend */ +static void +system_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data) +{ + GError * error = NULL; + + GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error); + + if (error != NULL) { + g_warning("Could not grab DBus proxy for ConsoleKit: %s", error->message); + g_error_free(error); + return; + } + + g_signal_connect(proxy, "g-signal", G_CALLBACK(session_active_change_cb), user_data); +} + /* Callback from getting the address */ static void geo_address_cb (GeoclueAddress * address, int timestamp, GHashTable * addy_data, GeoclueAccuracy * accuracy, GError * error, gpointer user_data) @@ -1433,6 +1467,15 @@ main (int argc, char ** argv) /* Setup the timer */ setup_timer(); + /* And watch for system resumes */ + g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_NONE, + NULL, + "org.freedesktop.ConsoleKit", + "/org/freedesktop/ConsoleKit/Manager", + "org.freedesktop.ConsoleKit.Manager", + NULL, system_proxy_cb, dbus); + mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index b322cc6..1c05ff0 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -171,9 +171,7 @@ static void update_label (IndicatorDatetime * io, GDateTime ** static void guess_label_size (IndicatorDatetime * self); static void setup_timer (IndicatorDatetime * self, GDateTime * datetime); static void update_time (IndicatorDatetime * self); -static void session_active_change_cb (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, GVariant * parameters, gpointer user_data); static void receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, GVariant * parameters, gpointer user_data); -static void system_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data); static void service_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data); static gint generate_strftime_bitmask (const char *time_str); static void timezone_update_labels (indicator_item_t * mi_data); @@ -396,34 +394,8 @@ indicator_datetime_init (IndicatorDatetime *self) service_proxy_cb, self); - g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - "org.freedesktop.ConsoleKit", - "/org/freedesktop/ConsoleKit/Manager", - "org.freedesktop.ConsoleKit.Manager", - NULL, system_proxy_cb, self); return; } -/* for hooking into console kit signal on wake from suspend */ -static void -system_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data) -{ - GError * error = NULL; - - IndicatorDatetime * self = INDICATOR_DATETIME(user_data); - g_return_if_fail(self != NULL); - - GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error); - - if (error != NULL) { - g_warning("Could not grab DBus proxy for %s: %s", SERVICE_NAME, error->message); - g_error_free(error); - return; - } - g_signal_connect(proxy, "g-signal", G_CALLBACK(session_active_change_cb), self); - -} /* Callback from trying to create the proxy for the serivce, this could include starting the service. Sometime it'll fail and @@ -855,18 +827,6 @@ update_time (IndicatorDatetime * self) return; } -static void -session_active_change_cb (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, - GVariant * parameters, gpointer user_data) -{ - // Just returned from suspend - IndicatorDatetime * self = INDICATOR_DATETIME(user_data); - if (g_strcmp0(signal_name, "SystemIdleHintChanged") == 0 && g_variant_get_boolean(parameters) == FALSE) { - update_time(self); - } - return; -} - /* Receives all signals from the service, routed to the appropriate functions */ static void receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, -- cgit v1.2.3