[gnome-calendar/gnome-3-36] month-view: Ignore events outside current range
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar/gnome-3-36] month-view: Ignore events outside current range
- Date: Thu, 16 Apr 2020 19:58:08 +0000 (UTC)
commit da9322ecec10de7e08d57c67191a60257d999809
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Thu Apr 16 16:16:49 2020 -0300
month-view: Ignore events outside current range
The month view looks specially awful when switching between
dates, since it doesn't implicitly filter the ranges it's
displaying.
Ignore events outside the current month range, since they'll
be removed anyway by the timeline.
src/views/gcal-month-view.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
---
diff --git a/src/views/gcal-month-view.c b/src/views/gcal-month-view.c
index 5bd27f71..0558a6f5 100644
--- a/src/views/gcal-month-view.c
+++ b/src/views/gcal-month-view.c
@@ -573,6 +573,16 @@ get_real_event_widget_height (GtkWidget *widget)
return min_height;
}
+static inline gboolean
+month_view_contains_event (GcalRange *month_range,
+ GcalEvent *event)
+{
+ GcalRangeOverlap overlap;
+
+ overlap = gcal_range_calculate_overlap (month_range, gcal_event_get_range (event), NULL);
+ return overlap != GCAL_RANGE_NO_OVERLAP;
+}
+
static void
allocate_multiday_events (GcalMonthView *self,
gdouble *vertical_cell_space,
@@ -580,12 +590,14 @@ allocate_multiday_events (GcalMonthView *self,
gint *events_at_day,
gint *allocated_events_at_day)
{
+ g_autoptr (GcalRange) month_range = NULL;
GtkAllocation event_allocation;
GtkBorder margin;
GList *l;
gboolean is_rtl;
is_rtl = gtk_widget_get_direction (GTK_WIDGET (self)) == GTK_TEXT_DIR_RTL;
+ month_range = gcal_timeline_subscriber_get_range (GCAL_TIMELINE_SUBSCRIBER (self));
for (l = self->multi_cell_children; l; l = g_list_next (l))
{
@@ -603,6 +615,9 @@ allocate_multiday_events (GcalMonthView *self,
event = gcal_event_widget_get_event (l->data);
child_context = gtk_widget_get_style_context (l->data);
+ if (!month_view_contains_event (month_range, event))
+ continue;
+
/*
* Multiday events can "break" following these rules:
*
@@ -744,12 +759,15 @@ allocate_single_day_events (GcalMonthView *self,
gint *events_at_day,
gint *allocated_events_at_day)
{
+ g_autoptr (GcalRange) month_range = NULL;
GHashTableIter iter;
GtkAllocation event_allocation;
GtkAllocation cell_allocation;
GtkBorder margin;
gpointer key, value;
+ month_range = gcal_timeline_subscriber_get_range (GCAL_TIMELINE_SUBSCRIBER (self));
+
g_hash_table_iter_init (&iter, self->single_cell_children);
while (g_hash_table_iter_next (&iter, &key, &value))
@@ -770,6 +788,7 @@ allocate_single_day_events (GcalMonthView *self,
l = (GList*) value;
for (aux = l; aux; aux = g_list_next (aux))
{
+ GcalEvent *event;
GtkStyleContext *child_context;
GtkWidget *child_widget;
gdouble real_height;
@@ -780,10 +799,14 @@ allocate_single_day_events (GcalMonthView *self,
gint minimum_height;
child_widget = aux->data;
+ event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (child_widget));
if (!gtk_widget_get_visible (child_widget))
continue;
+ if (!month_view_contains_event (month_range, event))
+ continue;
+
child_context = gtk_widget_get_style_context (child_widget);
gtk_style_context_get_margin (child_context, gtk_style_context_get_state (child_context), &margin);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]