commit db3e82f4f81b26517dd4fef356e966dd0a88637b
parent b2a333b15db652704143c59ef7e9242598e102aa
Author: William Casarin <jb55@jb55.com>
Date:   Tue,  2 Oct 2018 00:31:28 -0700
selection: free selecting events workingish
Diffstat:
| M | viscal.c | | | 47 | +++++++++++++++++++++++++++++++++++++++++------ | 
1 file changed, 41 insertions(+), 6 deletions(-)
diff --git a/viscal.c b/viscal.c
@@ -630,10 +630,18 @@ static int query_span(struct cal *cal, int index_hint, time_t start, time_t end,
 {
 	time_t st, et;
 	struct event *ev;
+	int ret;
 
 	for (int i=index_hint; i < cal->nevents; i++) {
 		ev = &cal->events[i];
 
+		icaltimetype dtstart =
+			icalcomponent_get_dtstart(ev->vevent);
+
+		// date events aren't spans
+		if (dtstart.is_date)
+			continue;
+
 		vevent_span_timet(ev->vevent, &st, &et);
 		
 		if ((min_start != 0 && st < min_start) ||
@@ -652,13 +660,40 @@ static int timeblock_seconds(struct cal *cal) {
 
 static void move_relative(struct cal *cal, int rel)
 {
+	time_t st;
+	time_t et;
+	int hit;
 	int timeblock = timeblock_seconds(cal);
-	cal->current += rel * timeblock;
 
-	time_t st = cal->current;
-	time_t et = cal->current + timeblock_seconds;
+	// no current event selection
+	if (cal->selected_event_ind == -1)  {
+		cal->current += rel * timeblock;
+	}
+	else { // and event is selection
+		struct event *ev = get_selected_event(cal);
+		vevent_span_timet(ev->vevent, &st, &et);
+
+		cal->current = rel > 0 ? et : st - timeblock;
+	}
+
+	st = cal->current;
+	et = cal->current + timeblock;
+ 
+	if ((hit = query_span(cal, 0, st, et, 0, 0)) != -1) {
+		struct event *ev = &cal->events[hit];
+		icaltimetype dtstart =
+			icalcomponent_get_dtstart(ev->vevent);
+			
+		vevent_span_timet(ev->vevent, &st, &et);
+		cal->current = st;
+		const char * const summary =
+			icalcomponent_get_summary(ev->vevent);
+
+		printf("hit %d\n", hit);
+	}
 
-	if (query_span(cal, 0, st, et, 0, et)
+quit:
+	cal->selected_event_ind = hit;
 }
 
 static void move_up(struct cal *cal, int repeat)
@@ -1372,7 +1407,7 @@ draw_calendar (cairo_t *cr, struct cal *cal) {
 		draw_event(cr, cal, ev);
 	}
 
-	if (cal->selected_event_ind != -1)
+	if (cal->selected_event_ind == -1)
 		draw_selection(cr, cal);
 
 	draw_time_line(cr, cal, time(&now));
@@ -1476,7 +1511,7 @@ int main(int argc, char *argv[])
 
 
 	on_change_view(&cal);
-	select_closest_to_now(&cal);
+	//select_closest_to_now(&cal);
 
 	// TODO: get system timezone
 	cal.tz = icaltimezone_get_builtin_timezone("America/Vancouver");