summaryrefslogtreecommitdiff
path: root/gnome-extra/gnome-calendar/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /gnome-extra/gnome-calendar/files
reinit the tree, so we can have metadata
Diffstat (limited to 'gnome-extra/gnome-calendar/files')
-rw-r--r--gnome-extra/gnome-calendar/files/3.24.3-week-grid-fixes.patch112
1 files changed, 112 insertions, 0 deletions
diff --git a/gnome-extra/gnome-calendar/files/3.24.3-week-grid-fixes.patch b/gnome-extra/gnome-calendar/files/3.24.3-week-grid-fixes.patch
new file mode 100644
index 000000000000..e382029ceeb1
--- /dev/null
+++ b/gnome-extra/gnome-calendar/files/3.24.3-week-grid-fixes.patch
@@ -0,0 +1,112 @@
+From 9f4bc90761bb9eb3b3e8bdc9ec6b42f44f02053e Mon Sep 17 00:00:00 2001
+From: Abdullahi Usman
+Date: Mon, 10 Jul 2017 11:43:36 +0100
+Subject: week-grid : seperate week's events overlaps.
+
+The week view can display mutilple events that can partly or fully span
+same time ranges.
+
+But week view fails to make correct assumption about the width of events when
+two or more events span some time ranges in which these events also span some
+time ranges with other events, and whereby the number of these other events
+that they span time ranges with does not coincide with the number of the events
+that the other event also span. Week view ended up calculating cells that
+appears horizontally jointed up. Also int16_compare() does not dereference the
+pointer from g_ptr_array_sort() correctly and that makes it sort events
+incorrectly and hence making events appears vertically jointed up.
+
+If an event have other events in which they span some time, we calcuate its width
+by taking into consideration of all the events that the other event may span
+time with. The event that has the higher number of time spans is considered.
+We also save and retrieve our positions using UINT_TO_POINTER and POINTER_TO_UINT()
+respectively, and then dereference the pointer from g_ptr_array_sort() correctly.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=777416
+---
+ src/views/gcal-week-grid.c | 41 +++++++++++++++++++++++++++++++++++------
+ 1 file changed, 35 insertions(+), 6 deletions(-)
+
+diff --git a/src/views/gcal-week-grid.c b/src/views/gcal-week-grid.c
+index 20ddb48..ab125b0 100644
+--- a/src/views/gcal-week-grid.c
++++ b/src/views/gcal-week-grid.c
+@@ -184,10 +184,10 @@ get_event_range (GcalWeekGrid *self,
+ }
+
+ static inline gint
+-int16_compare (gconstpointer a,
+- gconstpointer b)
++uint16_compare (gconstpointer a,
++ gconstpointer b)
+ {
+- return GPOINTER_TO_INT (a) - GPOINTER_TO_INT (b);
++ return GPOINTER_TO_UINT (*(gint*)a) - GPOINTER_TO_UINT (*(gint*)b);
+ }
+
+ static inline guint
+@@ -204,7 +204,7 @@ get_event_index (GcalRangeTree *tree,
+ if (!array)
+ return 0;
+
+- g_ptr_array_sort (array, int16_compare);
++ g_ptr_array_sort (array, uint16_compare);
+
+ for (i = 0; array && i < array->len; i++)
+ {
+@@ -235,6 +235,35 @@ count_overlaps_at_range (GcalRangeTree *self,
+
+ n_events = gcal_range_tree_count_entries_at_range (self, i, i + 1);
+
++ if (n_events == 0)
++ break;
++
++ counter = MAX (counter, n_events);
++ }
++
++ return counter;
++}
++
++static guint
++count_overlaps_of_event (GcalRangeTree *self,
++ guint16 day_start,
++ guint16 day_end,
++ guint16 event_start,
++ guint16 event_end)
++{
++ guint64 i, counter;
++
++ counter = count_overlaps_at_range (self, event_start, day_end);
++
++ for (i = event_start; i > day_start; i--)
++ {
++ guint n_events;
++
++ n_events = gcal_range_tree_count_entries_at_range (self, i - 1, i);
++
++ if (n_events == 0)
++ break;
++
+ counter = MAX (counter, n_events);
+ }
+
+@@ -652,7 +681,7 @@ gcal_week_grid_size_allocate (GtkWidget *widget,
+ context = gtk_widget_get_style_context (event_widget);
+
+ /* The total number of events available in this range */
+- events_at_range = count_overlaps_at_range (self->events, data->start, data->end);
++ events_at_range = count_overlaps_of_event (self->events, day_start, day_end, data->start, data->end);
+
+ /* The real horizontal position of this event */
+ widget_index = get_event_index (overlaps, data->start, data->end);
+@@ -689,7 +718,7 @@ gcal_week_grid_size_allocate (GtkWidget *widget,
+ gcal_range_tree_add_range (overlaps,
+ data->start,
+ data->end,
+- GINT_TO_POINTER (widget_index));
++ GUINT_TO_POINTER (widget_index));
+ }
+
+ g_clear_pointer (&widgets_data, g_ptr_array_unref);
+--
+cgit v0.12
+