[gnome-calendar/wip/pandusonu/week-view] week-header: fix merging events
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar/wip/pandusonu/week-view] week-header: fix merging events
- Date: Wed, 7 Dec 2016 23:32:29 +0000 (UTC)
commit 4a7754c677112d6702aeb5e275fe24b25511919f
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Sat Dec 3 00:00:16 2016 -0200
week-header: fix merging events
src/views/gcal-week-header.c | 48 ++++++++++++++++++++++-------------------
1 files changed, 26 insertions(+), 22 deletions(-)
---
diff --git a/src/views/gcal-week-header.c b/src/views/gcal-week-header.c
index 5933ef1..0c46961 100644
--- a/src/views/gcal-week-header.c
+++ b/src/views/gcal-week-header.c
@@ -209,7 +209,7 @@ add_event_to_weekday (GcalWeekHeader *self,
return g_list_index (l, event);
}
-static gint
+static void
merge_events (GcalWeekHeader *self,
GtkWidget *event,
GtkWidget *to_be_removed)
@@ -222,9 +222,6 @@ merge_events (GcalWeekHeader *self,
"width", &deleted_width,
NULL);
- if (event == to_be_removed)
- goto out;
-
gtk_container_child_get (GTK_CONTAINER (self->grid),
event,
"width", ¤t_width,
@@ -237,26 +234,23 @@ merge_events (GcalWeekHeader *self,
event,
"width", current_width + deleted_width,
NULL);
-
-out:
- return deleted_width;
}
static void
check_mergeable_events (GcalWeekHeader *self)
{
+ GList *checked_events[7] = { NULL, };
gint weekday;
/* We don't need to check the last column */
for (weekday = 0; weekday < 6; weekday++)
{
- GList *events_at_weekday, *l;
+ GList *l;
gint index;
index = 0;
- events_at_weekday = self->events[weekday];
- for (l = events_at_weekday; l != NULL; l = l->next)
+ for (l = self->events[weekday]; l != NULL; l = l->next)
{
GcalEvent *current_event;
gint events_to_merge, i;
@@ -264,9 +258,15 @@ check_mergeable_events (GcalWeekHeader *self)
current_event = l->data;
events_to_merge = 0;
- /* No need to continue if we're hiding the events */
- if (!self->expanded && index > 2)
- break;
+ if (g_list_find (checked_events[weekday], current_event))
+ {
+ index++;
+ continue;
+ }
+ else
+ {
+ checked_events[weekday] = g_list_prepend (checked_events[weekday], current_event);
+ }
/*
* Horizontally check if the next cells have the same event
@@ -282,28 +282,32 @@ check_mergeable_events (GcalWeekHeader *self)
break;
events_to_merge++;
+
+ /* Add to the list of checked days so we don't check it more times than necessary */
+ checked_events[weekday + i] = g_list_prepend (checked_events[weekday + i], current_event);
}
/* We found events to merge. Lets merge them */
i = 0;
- while (events_to_merge > 0)
+ for (i = 0; i < events_to_merge; i++)
{
GtkWidget *current_widget, *to_be_removed;
- gint removed_cells;
- current_widget = gtk_grid_get_child_at (GTK_GRID (self->grid), weekday + i, index);
- to_be_removed = gtk_grid_get_child_at (GTK_GRID (self->grid), weekday + i + 1, index);
+ current_widget = gtk_grid_get_child_at (GTK_GRID (self->grid), weekday + i, index + 1);
+ to_be_removed = gtk_grid_get_child_at (GTK_GRID (self->grid), weekday + i + 1, index + 1);
- /* First, remove the events from the cells */
- removed_cells = merge_events (self, current_widget, to_be_removed);
+ if (current_widget == to_be_removed)
+ continue;
- events_to_merge -= removed_cells;
- i += removed_cells;
+ merge_events (self, current_widget, to_be_removed);
}
index++;
}
+
+ /* We can get rid of the checked list here */
+ g_list_free (checked_events[weekday]);
}
}
@@ -378,7 +382,7 @@ split_event_widget_at_column (GcalWeekHeader *self,
old_width - 1,
1);
- new_width = old_width - (column - left_attach + 1);
+ new_width = column - left_attach + 1;
/* Only update the current widget's width */
gtk_container_child_set (GTK_CONTAINER (self->grid),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]