From f8f2c10a8e1fe0359d3c10a7528977eb685df26e Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 26 Jul 2023 22:25:17 +0300 Subject: [PATCH] views/dazzling-month-view: Propagate context to rows --- src/gui/views/gcal-dazzling-month-view.c | 4 +++ src/gui/views/gcal-month-view-row.c | 41 ++++++++++++++++++++++++ src/gui/views/gcal-month-view-row.h | 6 ++++ 3 files changed, 51 insertions(+) diff --git a/src/gui/views/gcal-dazzling-month-view.c b/src/gui/views/gcal-dazzling-month-view.c index ce6e66b7..beb28443 100644 --- a/src/gui/views/gcal-dazzling-month-view.c +++ b/src/gui/views/gcal-dazzling-month-view.c @@ -876,6 +876,10 @@ gcal_dazzling_month_view_set_property (GObject *object, case PROP_CONTEXT: g_assert (self->context == NULL); self->context = g_value_dup_object (value); + + for (gint i = 0; i < N_TOTAL_ROWS; i++) + gcal_month_view_row_set_context (g_ptr_array_index (self->week_rows, i), self->context); + g_object_notify (object, "context"); break; diff --git a/src/gui/views/gcal-month-view-row.c b/src/gui/views/gcal-month-view-row.c index c555542e..00d1d6b4 100644 --- a/src/gui/views/gcal-month-view-row.c +++ b/src/gui/views/gcal-month-view-row.c @@ -34,6 +34,7 @@ struct _GcalMonthViewRow GtkWidget *day_cells[7]; GcalRange *range; + GcalContext *context; }; G_DEFINE_FINAL_TYPE (GcalMonthViewRow, gcal_month_view_row, GTK_TYPE_WIDGET) @@ -41,6 +42,7 @@ G_DEFINE_FINAL_TYPE (GcalMonthViewRow, gcal_month_view_row, GTK_TYPE_WIDGET) enum { PROP_0, + PROP_CONTEXT, N_PROPS, }; @@ -169,6 +171,10 @@ gcal_month_view_row_get_property (GObject *object, switch (prop_id) { + case PROP_CONTEXT: + g_value_set_object (value, self->context); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -184,6 +190,10 @@ gcal_month_view_row_set_property (GObject *object, switch (prop_id) { + case PROP_CONTEXT: + gcal_month_view_row_set_context (self, g_value_get_object (value)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -204,6 +214,14 @@ gcal_month_view_row_class_init (GcalMonthViewRowClass *klass) widget_class->size_allocate = gcal_month_view_row_size_allocate; widget_class->snapshot = gcal_month_view_row_snapshot; + properties[PROP_CONTEXT] = g_param_spec_object ("context", + "Context", + "The GcalContext of the application", + GCAL_TYPE_CONTEXT, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties (object_class, N_PROPS, properties); + gtk_widget_class_set_css_name (widget_class, "monthviewrow"); } @@ -224,6 +242,29 @@ gcal_month_view_row_new (void) return g_object_new (GCAL_TYPE_MONTH_VIEW_ROW, NULL); } +GcalContext* +gcal_month_view_row_get_context (GcalMonthViewRow *self) +{ + g_assert (GCAL_IS_MONTH_VIEW_ROW (self)); + + return self->context; +} + +void +gcal_month_view_row_set_context (GcalMonthViewRow *self, + GcalContext *context) +{ + g_assert (GCAL_IS_MONTH_VIEW_ROW (self)); + + if (g_set_object (&self->context, context)) + { + for (guint i = 0; i < 7; i++) + gcal_month_cell_set_context (GCAL_MONTH_CELL (self->day_cells[i]), context); + + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_CONTEXT]); + } +} + GcalRange * gcal_month_view_row_get_range (GcalMonthViewRow *self) { diff --git a/src/gui/views/gcal-month-view-row.h b/src/gui/views/gcal-month-view-row.h index 8e7e3634..b6e09780 100644 --- a/src/gui/views/gcal-month-view-row.h +++ b/src/gui/views/gcal-month-view-row.h @@ -23,6 +23,7 @@ #include +#include "gcal-context.h" #include "gcal-range.h" G_BEGIN_DECLS @@ -32,6 +33,11 @@ G_DECLARE_FINAL_TYPE (GcalMonthViewRow, gcal_month_view_row, GCAL, MONTH_VIEW_RO GtkWidget * gcal_month_view_row_new (void); +GcalContext * gcal_month_view_row_get_context (GcalMonthViewRow *self); + +void gcal_month_view_row_set_context (GcalMonthViewRow *self, + GcalContext *context); + GcalRange * gcal_month_view_row_get_range (GcalMonthViewRow *self); void gcal_month_view_row_set_range (GcalMonthViewRow *self,