From 3bd841330e0299c54031218e3fc20f911ba7e952 Mon Sep 17 00:00:00 2001 From: karl-qdh Date: Tue, 8 Mar 2011 13:18:50 +0000 Subject: Fixed incorrect year in tm struct for indicator-datetime.c:month_changed_cb, still receiving a segfault in datetime-service.c when we try to use the variant. Checked the variant value over dbus and its fine. --- src/datetime-service.c | 15 ++++++++++----- src/indicator-datetime.c | 21 +++++++++------------ 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/datetime-service.c b/src/datetime-service.c index b097217..78e695d 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -82,6 +82,7 @@ static GList * appointments = NULL; static GList * dconflocations = NULL; static GList * comp_instances = NULL; static gboolean updating_appointments = FALSE; +//static time_t start_time_appointments = NULL; GSettings *conf; @@ -279,12 +280,16 @@ activate_cb (DbusmenuMenuitem * menuitem, guint timestamp, const gchar *command) static gboolean month_changed_cb (DbusmenuMenuitem * menuitem, GVariant *variant, guint timestamp) { - // BLOCKED: Get string from the variant causes segfault in glib - // TODO: * Decode the month/year from the string we received - // * Check what our current month/year are - // * Set some globals so when we-re-run update appointment menu items it gets the right start date + // BLOCKED: get type, then get type as string from the variant causes segfault in glib + // TODO: * Set some globals so when we-re-run update appointment menu items it gets the right start date // * update appointment menu items - g_debug("Received month changed : %d", g_variant_get_uint32(variant)); + if (g_variant_get_type(variant) != G_VARIANT_TYPE_UINT32) + g_debug("Variant type is not uint32"); + else + g_debug("Received month changed with timestamp: %d", g_variant_get_uint32(variant)); + + //start_time_appointments = (time_t)g_variant_get_uint32(variant); + //update_appointment_menu_items(NULL); return TRUE; } diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 944b33d..86eeed6 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1192,24 +1192,21 @@ static void month_changed_cb (IdoCalendarMenuItem *ido, gpointer user_data) { - gchar datestring[20]; guint d,m,y; DbusmenuMenuitem * item = DBUSMENU_MENUITEM (user_data); ido_calendar_menu_item_get_date(ido, &y, &m, &d); - g_sprintf(datestring, "%d-%d-%d", y, m, d); - struct tm date; + struct tm date = {0}; date.tm_mday = d; - date.tm_mon = m; - date.tm_year = y; - date.tm_hour = 0; - date.tm_min = 0; + date.tm_mon = m + 1; // Month is always off by one + date.tm_year = y - 1900; guint selecteddate = (guint)mktime(&date); + g_debug("Got month changed signal: %s", asctime(&date)); + g_debug("Selected date %d from %d-%d-%d", selecteddate, d, m, y); GVariant *variant = g_variant_new_uint32(selecteddate); guint timestamp = (guint)time(NULL); dbusmenu_menuitem_handle_event(DBUSMENU_MENUITEM(item), "month-changed", variant, timestamp); - g_debug("Got month changed signal: %s", datestring); } - +/* The following needs ido changes to be merged static void day_selected_cb (IdoCalendarMenuItem *ido, guint day, @@ -1241,7 +1238,7 @@ day_selected_double_click_cb (IdoCalendarMenuItem *ido, dbusmenu_menuitem_handle_event(DBUSMENU_MENUITEM(item), "day-selected-double-click", variant, timestamp); g_debug("Got day-selected-double-click signal: %s", datestring); } - +*/ static gboolean new_calendar_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, @@ -1274,9 +1271,9 @@ new_calendar_item (DbusmenuMenuitem * newitem, 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); dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, GTK_MENU_ITEM(ido), parent); - g_signal_connect_after(ido, "day-selected", G_CALLBACK(day_selected_cb), (gpointer)newitem); + /*g_signal_connect_after(ido, "day-selected", G_CALLBACK(day_selected_cb), (gpointer)newitem); dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, GTK_MENU_ITEM(ido), parent); - g_signal_connect_after(ido, "day-selected-double-click", G_CALLBACK(day_selected_double_click_cb), (gpointer)newitem); + g_signal_connect_after(ido, "day-selected-double-click", G_CALLBACK(day_selected_double_click_cb), (gpointer)newitem);*/ return TRUE; } -- cgit v1.2.3