diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/datetime-service.c | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/src/datetime-service.c b/src/datetime-service.c index 1e4404d..cd8ca92 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -236,9 +236,19 @@ check_for_calendar (gpointer user_data) } /* Populate the menu with todays, next 5 appointments. We probably want to shift this off to an idle-add + * the problem is the inserting order of items and updating them might be difficult. + * we should hook into the ABOUT TO SHOW signal and use that to update the appointments. */ static gboolean -update_calendar_menu_items (gpointer user_data) { +update_appointment_menu_items (gpointer user_data) { + + time_t t1, t2; + gchar *query, *is, *ie; + GList *objects = NULL, *l; + GError *gerror = NULL; + DbusmenuMenuitem * item = NULL; + gint i; + ecal = e_cal_new_system_calendar(); if (!ecal) { g_debug("e_cal_new_system_calendar failed"); @@ -261,13 +271,6 @@ update_calendar_menu_items (gpointer user_data) { ecal_timezone = icaltimezone_get_tzid(tzone); - time_t t1, t2; - gchar *query, *is, *ie; - GList *objects = NULL, *l; - GError *gerror = NULL; - DbusmenuMenuitem * item = NULL; - gint i; - // TODO: Remove all the existing menu items which are appointments. time(&t1); @@ -283,7 +286,7 @@ update_calendar_menu_items (gpointer user_data) { g_debug("Failed to get objects\n"); g_free(ecal); ecal = NULL; - return TRUE; + return FALSE; } i = 0; gint width, height; @@ -293,7 +296,7 @@ update_calendar_menu_items (gpointer user_data) { icalcomponent *icalcomp = l->data; icalproperty* p; icalvalue *v; - gchar *name, due; + gchar *name, *due, *uri; p = icalcomponent_get_first_property(icalcomp, ICAL_NAME_PROPERTY); v = icalproperty_get_value(p); name = icalvalue_get_string(v); @@ -302,7 +305,6 @@ update_calendar_menu_items (gpointer user_data) { v = icalproperty_get_value(p); due = icalvalue_get_string(v); - // TODO: now we pull out the URI for the calendar event and try to create a URI that'll work when we execute evolution //cairo_surface_t *cs = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); @@ -321,10 +323,14 @@ update_calendar_menu_items (gpointer user_data) { dbusmenu_menuitem_property_set_bool (item, DBUSMENU_MENUITEM_PROP_ENABLED, TRUE); dbusmenu_menuitem_property_set_bool (item, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); dbusmenu_menuitem_child_append (root, item); + //g_signal_connect (G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + // G_CALLBACK (activate_cb), "evolution %s", uri); if (i == 4) break; // See above FIXME regarding query result limit i++; } + g_free(ecal); // Really we should do the setup somewhere where we know it'll only run once, right now, we'll do it every time and free it. + return TRUE; } /* Looks for the time and date admin application and enables the @@ -374,8 +380,17 @@ build_menus (DbusmenuMenuitem * root) g_idle_add(check_for_calendar, NULL); } + DbusmenuMenuitem * separator; + + separator = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set(separator, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); + dbusmenu_menuitem_child_append(root, separator); + + // This just populates the items on startup later we want to be able to update the appointments before + // presenting the menu. + update_appointment_menu_items(NULL); - DbusmenuMenuitem * separator = dbusmenu_menuitem_new(); + separator = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set(separator, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); dbusmenu_menuitem_child_append(root, separator); |