From 203ac0aa61cff1cd386bc0e1a74c234f8bf2681c Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Mon, 27 Jun 2016 08:50:46 +0200 Subject: Highlight days with non-recurrent items Use a different color for days with non-recurrent items in the calendar panel. This makes it possible to easily spot days that actually contain appointments. Signed-off-by: Lukas Fleischer --- src/day.c | 27 +++++++++++++++------------ src/ui-calendar.c | 12 ++++++++++-- 2 files changed, 25 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/day.c b/src/day.c index bd21023..2bd4a31 100644 --- a/src/day.c +++ b/src/day.c @@ -507,13 +507,26 @@ void day_popup_item(struct day_item *day) } /* - * Need to know if there is an item for the current selected day inside - * calendar. This is used to put the correct colors inside calendar panel. + * Check whether there is an item on a given day. + * + * Returns 2 if the selected day contains a regular event or appointment. + * Returns 1 if the selected day does not contain a regular event or + * appointment but an occurrence of a recurrent item. Returns 0 otherwise. */ int day_check_if_item(struct date day) { const time_t t = date2sec(day, 0, 0); + if (LLIST_FIND_FIRST(&eventlist, (time_t *)&t, event_inday)) + return 2; + + LLIST_TS_LOCK(&alist_p); + if (LLIST_TS_FIND_FIRST(&alist_p, (time_t *)&t, apoint_inday)) { + LLIST_TS_UNLOCK(&alist_p); + return 2; + } + LLIST_TS_UNLOCK(&alist_p); + if (LLIST_FIND_FIRST(&recur_elist, (time_t *)&t, recur_event_inday)) return 1; @@ -525,16 +538,6 @@ int day_check_if_item(struct date day) } LLIST_TS_UNLOCK(&recur_alist_p); - if (LLIST_FIND_FIRST(&eventlist, (time_t *)&t, event_inday)) - return 1; - - LLIST_TS_LOCK(&alist_p); - if (LLIST_TS_FIND_FIRST(&alist_p, (time_t *)&t, apoint_inday)) { - LLIST_TS_UNLOCK(&alist_p); - return 1; - } - LLIST_TS_UNLOCK(&alist_p); - return 0; } diff --git a/src/ui-calendar.c b/src/ui-calendar.c index 4f61376..35c2a7e 100644 --- a/src/ui-calendar.c +++ b/src/ui-calendar.c @@ -471,12 +471,18 @@ draw_monthly_view(struct scrollwin *sw, struct date *current_day, ofs_x + day_1_sav + 4 * c_day + 1, "%2d", c_day); custom_remove_attr(sw->inner, ATTR_HIGHEST); - } else if (item_this_day) { + } else if (item_this_day == 1) { custom_apply_attr(sw->inner, ATTR_LOW); mvwprintw(sw->inner, ofs_y + 1, ofs_x + day_1_sav + 4 * c_day + 1, "%2d", c_day); custom_remove_attr(sw->inner, ATTR_LOW); + } else if (item_this_day == 2) { + custom_apply_attr(sw->inner, ATTR_TRUE); + mvwprintw(sw->inner, ofs_y + 1, + ofs_x + day_1_sav + 4 * c_day + 1, "%2d", + c_day); + custom_remove_attr(sw->inner, ATTR_TRUE); } else { /* otherwise, print normal days in black */ mvwprintw(sw->inner, ofs_y + 1, @@ -531,8 +537,10 @@ draw_weekly_view(struct scrollwin *sw, struct date *current_day, attr = ATTR_LOWEST; /* today, but not selected */ else if (t.tm_mday == slctd_day.dd) attr = ATTR_HIGHEST; /* selected day */ - else if (item_this_day) + else if (item_this_day == 1) attr = ATTR_LOW; + else if (item_this_day == 2) + attr = ATTR_TRUE; else attr = 0; -- cgit v1.2.3