[gnome-calendar] week-grid: Allocate event widgets a valid size
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar] week-grid: Allocate event widgets a valid size
- Date: Wed, 15 Jun 2022 14:41:38 +0000 (UTC)
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]