[gnome-calendar] week-grid: Allocate event widgets a valid size



commit 9c641fa597de890b67cdd9845dad21758c6411c5
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Thu May 5 07:52:19 2022 +0200

    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;
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]