From 9c641fa597de890b67cdd9845dad21758c6411c5 Mon Sep 17 00:00:00 2001 From: Adrien Plazas Date: Thu, 5 May 2022 07:52:19 +0200 Subject: [PATCH] week-grid: Allocate event widgets a valid size This ensures event widgets are allocated at least their size request, fixing critical errors and visual glitches. --- src/gui/views/gcal-week-grid.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/gui/views/gcal-week-grid.c b/src/gui/views/gcal-week-grid.c index 47f77f93..bb0aeaf3 100644 --- a/src/gui/views/gcal-week-grid.c +++ b/src/gui/views/gcal-week-grid.c @@ -753,7 +753,8 @@ gcal_week_grid_size_allocate (GtkWidget *widget, ChildData *data; guint64 events_at_range; gint event_minutes; - gint natural_height; + gint minimum_width; + gint minimum_height; gint widget_index; gint offset; gint event_height; @@ -775,12 +776,18 @@ gcal_week_grid_size_allocate (GtkWidget *widget, /* The real horizontal position of this event */ widget_index = get_event_index (overlaps, event_range); - /* Gtk complains about that */ - gtk_widget_measure (event_widget, GTK_ORIENTATION_VERTICAL, -1, NULL, &natural_height, NULL, NULL); - event_minutes = g_date_time_difference (event_end, event_start) / G_TIME_SPAN_MINUTE; - event_width = column_width / events_at_range; + + /* Compute the height of the widget */ + gtk_widget_measure (event_widget, GTK_ORIENTATION_VERTICAL, -1, &minimum_height, NULL, NULL, NULL); event_height = event_minutes * minutes_height; + event_height = MAX (minimum_height, event_height); + + /* Compute the width of the widget */ + gtk_widget_measure (event_widget, GTK_ORIENTATION_HORIZONTAL, event_height, &minimum_width, NULL, NULL, NULL); + event_width = column_width / events_at_range; + event_width = MAX (minimum_width, event_width); + offset = event_width * widget_index; y = (g_date_time_get_hour (event_start) * 60 + g_date_time_get_minute (event_start)) * minutes_height;