From afdaa937487ff3db6077d851132ea7ae2353bf0f Mon Sep 17 00:00:00 2001 From: karl-qdh Date: Wed, 30 Mar 2011 15:57:26 +0100 Subject: Potential fix for suspend issue suggested by njpatel --- src/datetime-service.c | 8 +++++++- src/indicator-datetime.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/datetime-service.c b/src/datetime-service.c index 863bc9e..e284418 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -353,6 +353,12 @@ stop_ecal_timer(void) { if (ecaltimer != 0) g_source_remove(ecaltimer); } +static gboolean +idle_start_ecal_timer (gpointer data) +{ + start_ecal_timer(); + return FALSE; +} static void show_events_changed (void) @@ -410,7 +416,7 @@ check_for_calendar (gpointer user_data) if (g_settings_get_boolean(conf, SETTINGS_SHOW_EVENTS_S)) { dbusmenu_menuitem_property_set_bool(add_appointment, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); dbusmenu_menuitem_property_set_bool(events_separator, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); - g_idle_add(start_ecal_timer, NULL); + g_idle_add((GSourceFunc)idle_start_ecal_timer, NULL); } else { dbusmenu_menuitem_property_set_bool(add_appointment, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE); dbusmenu_menuitem_property_set_bool(events_separator, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE); diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index ef3a857..e55bfa0 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -169,7 +169,9 @@ 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); @@ -352,8 +354,34 @@ 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::ActiveChanged", 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 @@ -772,6 +800,16 @@ 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); + 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