From f436da0a3f8cf7a01ccb0ae062d53e5be6cd5ff8 Mon Sep 17 00:00:00 2001 From: karl-qdh Date: Wed, 23 Mar 2011 10:24:35 +0000 Subject: changes for bug #649800 - requires dbusmenu to be released --- src/indicator-datetime.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 1cdcd3f..fb77974 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1149,13 +1149,17 @@ indicator_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_MARK)) { ido_calendar_menu_item_mark_day (IDO_CALENDAR_MENU_ITEM (mi_data), g_variant_get_int16(value)); + g_debug("Marked day: %d", g_variant_get_int16(value)); } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_UNMARK)) { ido_calendar_menu_item_unmark_day (IDO_CALENDAR_MENU_ITEM (mi_data), g_variant_get_int16(value)); + g_debug("Unmarked day: %d", g_variant_get_int16(value)); } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_CLEAR_MARKS)) { + g_debug("Cleared Marks"); ido_calendar_menu_item_clear_marks (IDO_CALENDAR_MENU_ITEM (mi_data)); } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_SET_DATE)) { gsize size = 3; const gint * array = g_variant_get_fixed_array(value, &size, sizeof(gint)); + g_debug("Setting date y-m-d: %d-%d-%d", array[0], array[1], array[2]); ido_calendar_menu_item_set_date (IDO_CALENDAR_MENU_ITEM (mi_data), array[0], array[1], array[2]); } else { g_warning("Indicator Item property '%s' unknown", prop); -- cgit v1.2.3 From 37128f74bece1fea1d16503593546ce936568ae1 Mon Sep 17 00:00:00 2001 From: karl-qdh Date: Fri, 25 Mar 2011 16:09:17 +0000 Subject: Try splitting the function see if that works --- src/indicator-datetime.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 7b1164d..b47f1af 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1144,10 +1144,17 @@ indicator_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, timezone_update_labels(mi_data); } else if (!g_strcmp0(prop, TIMEZONE_MENUITEM_PROP_RADIO)) { gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mi_data->gmi), g_variant_get_boolean(value)); - - // Properties for marking and unmarking the calendar - - } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_MARK)) { + } else { + g_warning("Indicator Item property '%s' unknown", prop); + } + return; +} +// Properties for marking and unmarking the calendar +static void +calendar_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, IdoCalendarMenuItem * mi_data) +{ + g_debug("Changing calendar property"); + if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_MARK)) { ido_calendar_menu_item_mark_day (IDO_CALENDAR_MENU_ITEM (mi_data), g_variant_get_int16(value)); g_debug("Marked day: %d", g_variant_get_int16(value)); } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_UNMARK)) { @@ -1332,7 +1339,7 @@ new_calendar_item (DbusmenuMenuitem * newitem, g_signal_connect_after(ido, "day-selected", G_CALLBACK(day_selected_cb), (gpointer)newitem); g_signal_connect_after(ido, "day-selected-double-click", G_CALLBACK(day_selected_double_click_cb), (gpointer)newitem); - g_signal_connect(G_OBJECT(newitem), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(indicator_prop_change_cb), ido); + g_signal_connect(G_OBJECT(newitem), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(calendar_prop_change_cb), ido); return TRUE; } -- cgit v1.2.3 From 26fddf955899a2751b140a8c5a75f6861509b66e Mon Sep 17 00:00:00 2001 From: karl-qdh Date: Tue, 29 Mar 2011 14:23:29 +0100 Subject: Adding tedg's suggested change to the property sending, no change in signals being received by the other side. --- src/indicator-datetime.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index b47f1af..71b174c 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1155,14 +1155,28 @@ calendar_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, I { g_debug("Changing calendar property"); if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_MARK)) { - ido_calendar_menu_item_mark_day (IDO_CALENDAR_MENU_ITEM (mi_data), g_variant_get_int16(value)); - g_debug("Marked day: %d", g_variant_get_int16(value)); + GVariantIter iter; + GVariant *day; + gchar *key; + + g_variant_iter_init (&iter, value); + while (g_variant_iter_loop (&iter, "{i}", &key, &day)) { + ido_calendar_menu_item_mark_day (IDO_CALENDAR_MENU_ITEM (mi_data), g_variant_get_int32(day)); + g_debug("Marked day: %d", g_variant_get_int32(day)); + } } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_UNMARK)) { - ido_calendar_menu_item_unmark_day (IDO_CALENDAR_MENU_ITEM (mi_data), g_variant_get_int16(value)); - g_debug("Unmarked day: %d", g_variant_get_int16(value)); + GVariantIter iter; + GVariant *day; + gchar *key; + + g_variant_iter_init (&iter, value); + while (g_variant_iter_loop (&iter, "{i}", &key, &day)) { + ido_calendar_menu_item_unmark_day (IDO_CALENDAR_MENU_ITEM (mi_data), g_variant_get_int32(day)); + g_debug("Unmarked day: %d", g_variant_get_int32(day)); + } } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_CLEAR_MARKS)) { - g_debug("Cleared Marks"); ido_calendar_menu_item_clear_marks (IDO_CALENDAR_MENU_ITEM (mi_data)); + g_debug("Cleared Marks"); } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_SET_DATE)) { gsize size = 3; const gint * array = g_variant_get_fixed_array(value, &size, sizeof(gint)); -- cgit v1.2.3 From 851b7395730c2679403bc69013a9aea94584721d Mon Sep 17 00:00:00 2001 From: karl-qdh Date: Wed, 30 Mar 2011 12:49:01 +0100 Subject: Made marking work when you change month, still needs more work to get it to do it on startup properly. --- src/indicator-datetime.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 71b174c..ef3a857 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1155,25 +1155,27 @@ calendar_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, I { g_debug("Changing calendar property"); if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_MARK)) { - GVariantIter iter; - GVariant *day; - gchar *key; - - g_variant_iter_init (&iter, value); - while (g_variant_iter_loop (&iter, "{i}", &key, &day)) { - ido_calendar_menu_item_mark_day (IDO_CALENDAR_MENU_ITEM (mi_data), g_variant_get_int32(day)); - g_debug("Marked day: %d", g_variant_get_int32(day)); + ido_calendar_menu_item_clear_marks (IDO_CALENDAR_MENU_ITEM (mi_data)); + g_debug("Marks: Cleared"); + GVariantIter *iter; + gint day; + + g_variant_get (value, "ai", &iter); + while (g_variant_iter_loop (iter, "i", &day)) { + ido_calendar_menu_item_mark_day (IDO_CALENDAR_MENU_ITEM (mi_data), day); + g_debug("Marks: Marked day: %d", day); } + g_variant_iter_free (iter); } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_UNMARK)) { - GVariantIter iter; - GVariant *day; - gchar *key; - - g_variant_iter_init (&iter, value); - while (g_variant_iter_loop (&iter, "{i}", &key, &day)) { - ido_calendar_menu_item_unmark_day (IDO_CALENDAR_MENU_ITEM (mi_data), g_variant_get_int32(day)); - g_debug("Unmarked day: %d", g_variant_get_int32(day)); + GVariantIter *iter; + gint day; + + g_variant_get (value, "ai", &iter); + while (g_variant_iter_loop (iter, "i", &day)) { + g_debug("Unmarked day: %d", day); + ido_calendar_menu_item_unmark_day (IDO_CALENDAR_MENU_ITEM (mi_data), day); } + g_variant_iter_free (iter); } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_CLEAR_MARKS)) { ido_calendar_menu_item_clear_marks (IDO_CALENDAR_MENU_ITEM (mi_data)); g_debug("Cleared Marks"); -- cgit v1.2.3 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/indicator-datetime.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src/indicator-datetime.c') 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 From f8923be6312878885431503e0ee372b1e11676ea Mon Sep 17 00:00:00 2001 From: karl-qdh Date: Wed, 30 Mar 2011 16:02:50 +0100 Subject: Might not like that signal notation --- src/indicator-datetime.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index e55bfa0..addc2c2 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -379,7 +379,7 @@ system_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data) g_error_free(error); return; } - g_signal_connect(proxy, "g-signal::ActiveChanged", G_CALLBACK(session_active_change_cb), self); + g_signal_connect(proxy, "g-signal", G_CALLBACK(session_active_change_cb), self); } @@ -806,7 +806,9 @@ session_active_change_cb (GDBusProxy * proxy, gchar * sender_name, gchar * signa { // Just returned from suspend IndicatorDatetime * self = INDICATOR_DATETIME(user_data); - update_time(self); + if (g_strcmp0(signal_name, "ActiveChanged") == 0) { + update_time(self); + } return; } -- cgit v1.2.3 From fb7e5a07951216e5771614b92f4a49f57807b337 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 30 Mar 2011 10:29:58 -0500 Subject: Switching to one variable with all the marks in it --- src/indicator-datetime.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index e55bfa0..b6b8885 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1192,7 +1192,7 @@ static void calendar_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, IdoCalendarMenuItem * mi_data) { g_debug("Changing calendar property"); - if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_MARK)) { + if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_MARKS)) { ido_calendar_menu_item_clear_marks (IDO_CALENDAR_MENU_ITEM (mi_data)); g_debug("Marks: Cleared"); GVariantIter *iter; @@ -1204,19 +1204,6 @@ calendar_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, I g_debug("Marks: Marked day: %d", day); } g_variant_iter_free (iter); - } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_UNMARK)) { - GVariantIter *iter; - gint day; - - g_variant_get (value, "ai", &iter); - while (g_variant_iter_loop (iter, "i", &day)) { - g_debug("Unmarked day: %d", day); - ido_calendar_menu_item_unmark_day (IDO_CALENDAR_MENU_ITEM (mi_data), day); - } - g_variant_iter_free (iter); - } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_CLEAR_MARKS)) { - ido_calendar_menu_item_clear_marks (IDO_CALENDAR_MENU_ITEM (mi_data)); - g_debug("Cleared Marks"); } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_SET_DATE)) { gsize size = 3; const gint * array = g_variant_get_fixed_array(value, &size, sizeof(gint)); -- cgit v1.2.3 From b7c7b708126be12a4c73f14a7017c8118f99e10e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 30 Mar 2011 10:34:58 -0500 Subject: Some debugging info --- src/indicator-datetime.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index b6b8885..707dd24 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1191,7 +1191,7 @@ indicator_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, static void calendar_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, IdoCalendarMenuItem * mi_data) { - g_debug("Changing calendar property"); + g_debug("Changing calendar property: %s", prop); if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_MARKS)) { ido_calendar_menu_item_clear_marks (IDO_CALENDAR_MENU_ITEM (mi_data)); g_debug("Marks: Cleared"); @@ -1350,6 +1350,7 @@ new_calendar_item (DbusmenuMenuitem * newitem, DbusmenuClient * client, gpointer user_data) { + g_debug("New calendar item"); g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE); g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE); /* Note: not checking parent, it's reasonable for it to be NULL */ -- cgit v1.2.3 From ce0945b155b33f862904fa4a8c05b8f4cd119ece Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 30 Mar 2011 10:43:05 -0500 Subject: Making sure to get the inital values of the calendar properties --- src/indicator-datetime.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 707dd24..1bd1916 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1377,11 +1377,26 @@ new_calendar_item (DbusmenuMenuitem * newitem, gtk_widget_set_visible (GTK_WIDGET (self->priv->ido_calendar), self->priv->show_calendar); dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, GTK_MENU_ITEM(ido), parent); + g_signal_connect_after(ido, "month-changed", G_CALLBACK(month_changed_cb), (gpointer)newitem); g_signal_connect_after(ido, "day-selected", G_CALLBACK(day_selected_cb), (gpointer)newitem); g_signal_connect_after(ido, "day-selected-double-click", G_CALLBACK(day_selected_double_click_cb), (gpointer)newitem); g_signal_connect(G_OBJECT(newitem), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(calendar_prop_change_cb), ido); + + /* Run the current values through prop changed */ + GVariant * propval = NULL; + + propval = dbusmenu_menuitem_property_get_variant(newitem, CALENDAR_MENUITEM_PROP_MARKS); + if (propval != NULL) { + calendar_prop_change_cb(newitem, CALENDAR_MENUITEM_PROP_MARKS, propval, ido); + } + + propval = dbusmenu_menuitem_property_get_variant(newitem, CALENDAR_MENUITEM_PROP_SET_DATE); + if (propval != NULL) { + calendar_prop_change_cb(newitem, CALENDAR_MENUITEM_PROP_SET_DATE, propval, ido); + } + return TRUE; } -- cgit v1.2.3 From 8e1ab0d64a937669c7e9361e7e0942c4c8099358 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 30 Mar 2011 10:54:47 -0500 Subject: Making the right size group more real to remove an annoying error --- src/indicator-datetime.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 1bd1916..7b6695c 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -101,6 +101,8 @@ struct _IndicatorDatetimePrivate { GList * timezone_items; GSettings * settings; + + GtkSizeGroup * indicator_right_group; }; /* Enum for the properties so that they can be quickly @@ -182,8 +184,6 @@ INDICATOR_SET_TYPE(INDICATOR_DATETIME_TYPE) G_DEFINE_TYPE (IndicatorDatetime, indicator_datetime, INDICATOR_OBJECT_TYPE); -static GtkSizeGroup * indicator_right_group = NULL; - static void indicator_datetime_class_init (IndicatorDatetimeClass *klass) { @@ -341,6 +341,7 @@ indicator_datetime_init (IndicatorDatetime *self) } self->priv->sm = indicator_service_manager_new_version(SERVICE_NAME, SERVICE_VERSION); + self->priv->indicator_right_group = GTK_SIZE_GROUP(gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL)); self->priv->service_proxy_cancel = g_cancellable_new(); @@ -458,6 +459,11 @@ indicator_datetime_dispose (GObject *object) self->priv->service_proxy = NULL; } + if (self->priv->indicator_right_group != NULL) { + g_object_unref(G_OBJECT(self->priv->indicator_right_group)); + self->priv->indicator_right_group = NULL; + } + G_OBJECT_CLASS (indicator_datetime_parent_class)->dispose (object); return; } @@ -1226,7 +1232,9 @@ new_appointment_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbu { g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE); g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE); + g_return_val_if_fail(IS_INDICATOR_DATETIME(user_data), FALSE); /* Note: not checking parent, it's reasonable for it to be NULL */ + IndicatorDatetime * self = INDICATOR_DATETIME(user_data); indicator_item_t * mi_data = g_new0(indicator_item_t, 1); @@ -1276,7 +1284,7 @@ new_appointment_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbu /* Usually either the time or the count on the individual item. */ mi_data->right = gtk_label_new(dbusmenu_menuitem_property_get(newitem, APPOINTMENT_MENUITEM_PROP_RIGHT)); - gtk_size_group_add_widget(indicator_right_group, mi_data->right); + gtk_size_group_add_widget(self->priv->indicator_right_group, mi_data->right); gtk_misc_set_alignment(GTK_MISC(mi_data->right), 1.0, 0.5); gtk_box_pack_start(GTK_BOX(hbox), mi_data->right, FALSE, FALSE, 0); gtk_widget_show(mi_data->right); @@ -1426,15 +1434,10 @@ new_timezone_item(DbusmenuMenuitem * newitem, { g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE); g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE); + g_return_val_if_fail(IS_INDICATOR_DATETIME(user_data), FALSE); /* Note: not checking parent, it's reasonable for it to be NULL */ - - IndicatorObject *io = g_object_get_data (G_OBJECT (client), "indicator"); - if (io == NULL) { - g_warning ("found no indicator to attach the timezone to"); - return FALSE; - } - IndicatorDatetime *self = INDICATOR_DATETIME(io); + IndicatorDatetime * self = INDICATOR_DATETIME(user_data); IndicatorDatetimePrivate *priv = INDICATOR_DATETIME_GET_PRIVATE(self); // Menu item with a radio button and a right aligned time @@ -1461,7 +1464,7 @@ new_timezone_item(DbusmenuMenuitem * newitem, /* Usually either the time or the count on the individual item. */ mi_data->right = gtk_label_new(""); - gtk_size_group_add_widget(indicator_right_group, mi_data->right); + gtk_size_group_add_widget(self->priv->indicator_right_group, mi_data->right); gtk_misc_set_alignment(GTK_MISC(mi_data->right), 1.0, 0.5); gtk_box_pack_start(GTK_BOX(hbox), mi_data->right, FALSE, FALSE, 0); gtk_widget_show(mi_data->right); @@ -1518,9 +1521,9 @@ get_menu (IndicatorObject * io) DbusmenuGtkClient *client = dbusmenu_gtkmenu_get_client(self->priv->menu); g_object_set_data (G_OBJECT (client), "indicator", io); - dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(client), DBUSMENU_CALENDAR_MENUITEM_TYPE, new_calendar_item); - dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(client), APPOINTMENT_MENUITEM_TYPE, new_appointment_item); - dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(client), TIMEZONE_MENUITEM_TYPE, new_timezone_item); + dbusmenu_client_add_type_handler_full(DBUSMENU_CLIENT(client), DBUSMENU_CALENDAR_MENUITEM_TYPE, new_calendar_item, io, NULL); + dbusmenu_client_add_type_handler_full(DBUSMENU_CLIENT(client), APPOINTMENT_MENUITEM_TYPE, new_appointment_item, io, NULL); + dbusmenu_client_add_type_handler_full(DBUSMENU_CLIENT(client), TIMEZONE_MENUITEM_TYPE, new_timezone_item, io, NULL); return GTK_MENU(self->priv->menu); } -- cgit v1.2.3 From 073715557f637c7cd87c906718d99a3c682f7e5f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 30 Mar 2011 10:57:02 -0500 Subject: Cleaning up debug output --- src/indicator-datetime.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 7b6695c..5d35c59 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1200,14 +1200,14 @@ calendar_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, I g_debug("Changing calendar property: %s", prop); if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_MARKS)) { ido_calendar_menu_item_clear_marks (IDO_CALENDAR_MENU_ITEM (mi_data)); - g_debug("Marks: Cleared"); GVariantIter *iter; gint day; + g_debug("\tMarks: %s", g_variant_print(value, FALSE)); + g_variant_get (value, "ai", &iter); while (g_variant_iter_loop (iter, "i", &day)) { ido_calendar_menu_item_mark_day (IDO_CALENDAR_MENU_ITEM (mi_data), day); - g_debug("Marks: Marked day: %d", day); } g_variant_iter_free (iter); } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_SET_DATE)) { -- cgit v1.2.3 From fbd5c581cc7f8ca4bc7386f6957b5c41e3d266cf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 30 Mar 2011 10:58:17 -0500 Subject: Protecting against NULL values --- src/indicator-datetime.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 5d35c59..c96ec48 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1200,21 +1200,28 @@ calendar_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, I g_debug("Changing calendar property: %s", prop); if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_MARKS)) { ido_calendar_menu_item_clear_marks (IDO_CALENDAR_MENU_ITEM (mi_data)); - GVariantIter *iter; - gint day; - g_debug("\tMarks: %s", g_variant_print(value, FALSE)); + if (value != NULL) { + GVariantIter *iter; + gint day; - g_variant_get (value, "ai", &iter); - while (g_variant_iter_loop (iter, "i", &day)) { - ido_calendar_menu_item_mark_day (IDO_CALENDAR_MENU_ITEM (mi_data), day); + g_debug("\tMarks: %s", g_variant_print(value, FALSE)); + + g_variant_get (value, "ai", &iter); + while (g_variant_iter_loop (iter, "i", &day)) { + ido_calendar_menu_item_mark_day (IDO_CALENDAR_MENU_ITEM (mi_data), day); + } + g_variant_iter_free (iter); + } else { + g_debug("\tMarks: "); } - g_variant_iter_free (iter); } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_SET_DATE)) { - gsize size = 3; - const gint * array = g_variant_get_fixed_array(value, &size, sizeof(gint)); - g_debug("Setting date y-m-d: %d-%d-%d", array[0], array[1], array[2]); - ido_calendar_menu_item_set_date (IDO_CALENDAR_MENU_ITEM (mi_data), array[0], array[1], array[2]); + if (value != NULL) { + gsize size = 3; + const gint * array = g_variant_get_fixed_array(value, &size, sizeof(gint)); + g_debug("Setting date y-m-d: %d-%d-%d", array[0], array[1], array[2]); + ido_calendar_menu_item_set_date (IDO_CALENDAR_MENU_ITEM (mi_data), array[0], array[1], array[2]); + } } else { g_warning("Indicator Item property '%s' unknown", prop); } -- cgit v1.2.3 From 6be8ddada1ca8b9901d7b9dccef39af47230bf32 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 30 Mar 2011 13:21:10 -0500 Subject: Moving the registration of the type handlers into the init so that they'll not execute more than once. --- src/indicator-datetime.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index c96ec48..1e8b452 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -177,6 +177,9 @@ static void system_proxy_cb (GObject * object, GAsyncResult * res, gpointer use 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); +static gboolean new_calendar_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client, gpointer user_data); +static gboolean new_appointment_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client, gpointer user_data); +static gboolean new_timezone_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client, gpointer user_data); /* Indicator Module Config */ INDICATOR_SET_VERSION @@ -343,6 +346,13 @@ indicator_datetime_init (IndicatorDatetime *self) self->priv->sm = indicator_service_manager_new_version(SERVICE_NAME, SERVICE_VERSION); self->priv->indicator_right_group = GTK_SIZE_GROUP(gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL)); + self->priv->menu = dbusmenu_gtkmenu_new(SERVICE_NAME, MENU_OBJ); + + DbusmenuGtkClient *client = dbusmenu_gtkmenu_get_client(self->priv->menu); + dbusmenu_client_add_type_handler_full(DBUSMENU_CLIENT(client), DBUSMENU_CALENDAR_MENUITEM_TYPE, new_calendar_item, self, NULL); + dbusmenu_client_add_type_handler_full(DBUSMENU_CLIENT(client), APPOINTMENT_MENUITEM_TYPE, new_appointment_item, self, NULL); + dbusmenu_client_add_type_handler_full(DBUSMENU_CLIENT(client), TIMEZONE_MENUITEM_TYPE, new_timezone_item, self, NULL); + self->priv->service_proxy_cancel = g_cancellable_new(); g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION, @@ -1368,15 +1378,10 @@ new_calendar_item (DbusmenuMenuitem * newitem, g_debug("New calendar item"); g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE); g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE); + g_return_val_if_fail(IS_INDICATOR_DATETIME(user_data), FALSE); /* Note: not checking parent, it's reasonable for it to be NULL */ - IndicatorObject *io = g_object_get_data (G_OBJECT (client), "indicator"); - if (io == NULL) { - g_warning ("found no indicator to attach the caledar to"); - return FALSE; - } - - IndicatorDatetime *self = INDICATOR_DATETIME(io); + IndicatorDatetime *self = INDICATOR_DATETIME(user_data); self->priv = INDICATOR_DATETIME_GET_PRIVATE(self); IdoCalendarMenuItem *ido = IDO_CALENDAR_MENU_ITEM (ido_calendar_menu_item_new ()); @@ -1521,17 +1526,6 @@ get_menu (IndicatorObject * io) { IndicatorDatetime * self = INDICATOR_DATETIME(io); - if (self->priv->menu == NULL) { - self->priv->menu = dbusmenu_gtkmenu_new(SERVICE_NAME, MENU_OBJ); - } - - DbusmenuGtkClient *client = dbusmenu_gtkmenu_get_client(self->priv->menu); - g_object_set_data (G_OBJECT (client), "indicator", io); - - dbusmenu_client_add_type_handler_full(DBUSMENU_CLIENT(client), DBUSMENU_CALENDAR_MENUITEM_TYPE, new_calendar_item, io, NULL); - dbusmenu_client_add_type_handler_full(DBUSMENU_CLIENT(client), APPOINTMENT_MENUITEM_TYPE, new_appointment_item, io, NULL); - dbusmenu_client_add_type_handler_full(DBUSMENU_CLIENT(client), TIMEZONE_MENUITEM_TYPE, new_timezone_item, io, NULL); - return GTK_MENU(self->priv->menu); } -- cgit v1.2.3 From b9355e5f0e32e04c93158e962e985f60abfbb35b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 30 Mar 2011 13:23:49 -0500 Subject: Check for the signal name in the handler --- src/indicator-datetime.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 1e8b452..222844e 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -390,7 +390,7 @@ system_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data) g_error_free(error); return; } - g_signal_connect(proxy, "g-signal::ActiveChanged", G_CALLBACK(session_active_change_cb), self); + g_signal_connect(proxy, "g-signal", G_CALLBACK(session_active_change_cb), self); } @@ -820,9 +820,11 @@ 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); + if (g_strcmp0(signal_name, "ActiveChanged") == 0) { + // Just returned from suspend + IndicatorDatetime * self = INDICATOR_DATETIME(user_data); + update_time(self); + } return; } -- cgit v1.2.3 From c0166121f74d4d0552f1241a8bc42f380cfbd662 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 30 Mar 2011 13:32:31 -0500 Subject: Protecting against the widgets being NULL at startup --- src/indicator-datetime.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 222844e..cafcf1f 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -556,7 +556,9 @@ set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec case PROP_SHOW_CLOCK: { if (g_value_get_boolean(value) != self->priv->show_clock) { self->priv->show_clock = g_value_get_boolean(value); - gtk_widget_set_visible (GTK_WIDGET (self->priv->label), self->priv->show_clock); + if (self->priv->label != NULL) { + gtk_widget_set_visible (GTK_WIDGET (self->priv->label), self->priv->show_clock); + } } break; } @@ -626,7 +628,9 @@ set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec case PROP_SHOW_CALENDAR: { if (g_value_get_boolean(value) != self->priv->show_calendar) { self->priv->show_calendar = g_value_get_boolean(value); - gtk_widget_set_visible (GTK_WIDGET (self->priv->ido_calendar), self->priv->show_calendar); + if (self->priv->ido_calendar != NULL) { + gtk_widget_set_visible (GTK_WIDGET (self->priv->ido_calendar), self->priv->show_calendar); + } } break; } -- cgit v1.2.3 From 99044a57ae60b55336f8db18734d89be707c23a5 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 30 Mar 2011 16:52:03 -0500 Subject: Removing a warning that will occur on the default GTK properties --- src/indicator-datetime.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'src/indicator-datetime.c') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 3f9344d..d85b3fd 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1204,8 +1204,6 @@ indicator_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, timezone_update_labels(mi_data); } else if (!g_strcmp0(prop, TIMEZONE_MENUITEM_PROP_RADIO)) { gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mi_data->gmi), g_variant_get_boolean(value)); - } else { - g_warning("Indicator Item property '%s' unknown", prop); } return; } @@ -1238,8 +1236,6 @@ calendar_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, I g_debug("Setting date y-m-d: %d-%d-%d", array[0], array[1], array[2]); ido_calendar_menu_item_set_date (IDO_CALENDAR_MENU_ITEM (mi_data), array[0], array[1], array[2]); } - } else { - g_warning("Indicator Item property '%s' unknown", prop); } return; } -- cgit v1.2.3