gui/event-widget: Make event setter public

And make the "event" property read-write and not construct-only.

This will be useful for recycling event widgets later.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/758>
This commit is contained in:
Georges Basile Stavracas Neto
2026-05-19 22:20:09 +00:00
committed by Marge Bot
parent 3104f16f7c
commit 9ef437009f
2 changed files with 47 additions and 39 deletions
+45 -39
View File
@@ -445,8 +445,7 @@ gcal_event_widget_update_timestamp (GcalEventWidget *self)
g_autofree gchar *timestamp_str = NULL;
GcalContext *context;
if (GCAL_IS_EVENT (self->event) &&
self->timestamp_policy != GCAL_TIMESTAMP_POLICY_NONE)
if (self->event && self->timestamp_policy != GCAL_TIMESTAMP_POLICY_NONE)
{
context = gcal_application_get_context (GCAL_DEFAULT_APPLICATION);
g_autoptr (GDateTime) time = NULL;
@@ -474,41 +473,6 @@ gcal_event_widget_update_timestamp (GcalEventWidget *self)
gtk_label_set_label (GTK_LABEL (self->timestamp_label), timestamp_str);
}
static void
gcal_event_widget_set_event_internal (GcalEventWidget *self,
GcalEvent *event)
{
/*
* This function is called only once, since the property is
* set as CONSTRUCT_ONLY. Any other attempt to set an event
* will be ignored.
*
* Because of that condition, we don't really have to care about
* disconnecting functions or cleaning up the previous event.
*/
GcalContext *context = gcal_application_get_context (GCAL_DEFAULT_APPLICATION);
/* The event spawns with a floating reference, and we take it's ownership */
g_set_object (&self->event, event);
/*
* Initially, the widget's start and end dates are the same
* of the event's ones. We may change it afterwards.
*/
gcal_event_widget_set_date_start (self, gcal_event_get_date_start (event));
gcal_event_widget_set_date_end (self, gcal_event_get_date_end (event));
g_signal_group_set_target (self->context_signal_group, context);
g_signal_group_set_target (self->clock_signal_group, gcal_context_get_clock (context));
g_signal_group_set_target (self->event_signal_group, event);
update_color (self);
gcal_event_widget_set_event_tooltip (self, event);
gcal_event_widget_update_style (self);
gcal_event_widget_update_timestamp (self);
}
static void
reply_preview_callback (GtkWidget *event_popover,
PreviewData *data,
@@ -628,7 +592,7 @@ gcal_event_widget_set_property (GObject *object,
switch (property_id)
{
case PROP_EVENT:
gcal_event_widget_set_event_internal (self, g_value_get_object (value));
gcal_event_widget_set_event (self, g_value_get_object (value));
break;
case PROP_TIMESTAMP_POLICY:
@@ -725,7 +689,7 @@ gcal_event_widget_class_init (GcalEventWidgetClass *klass)
*/
properties[PROP_EVENT] = g_param_spec_object ("event", NULL, NULL,
GCAL_TYPE_EVENT,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
/**
* GcalEventWidget::timestamp-policy:
@@ -1004,6 +968,48 @@ gcal_event_widget_get_event (GcalEventWidget *self)
return self->event;
}
/**
* gcal_event_widget_set_event:
* @event: (nullable)(transfer none): the event
*
* Sets the event of this widget to @event.
*/
void
gcal_event_widget_set_event (GcalEventWidget *self,
GcalEvent *event)
{
g_assert (GCAL_IS_EVENT_WIDGET (self));
g_assert (event == NULL || GCAL_IS_EVENT (event));
if (!g_set_object (&self->event, event))
return;
if (event)
{
GcalContext *context = gcal_application_get_context (GCAL_DEFAULT_APPLICATION);
gcal_event_widget_set_date_start (self, gcal_event_get_date_start (event));
gcal_event_widget_set_date_end (self, gcal_event_get_date_end (event));
g_signal_group_set_target (self->context_signal_group, context);
g_signal_group_set_target (self->clock_signal_group, gcal_context_get_clock (context));
g_signal_group_set_target (self->event_signal_group, event);
update_color (self);
gcal_event_widget_set_event_tooltip (self, event);
gcal_event_widget_update_style (self);
gcal_event_widget_update_timestamp (self);
}
else
{
g_signal_group_set_target (self->context_signal_group, NULL);
g_signal_group_set_target (self->clock_signal_group, NULL);
g_signal_group_set_target (self->event_signal_group, NULL);
}
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_EVENT]);
}
GtkWidget*
gcal_event_widget_clone (GcalEventWidget *widget)
{
+2
View File
@@ -42,6 +42,8 @@ typedef void (*GcalEventPreviewCallback) (GcalEventWidge
GtkWidget* gcal_event_widget_new (GcalEvent *event);
GcalEvent* gcal_event_widget_get_event (GcalEventWidget *self);
void gcal_event_widget_set_event (GcalEventWidget *self,
GcalEvent *event);
GDateTime* gcal_event_widget_get_date_start (GcalEventWidget *self);