gui/event-widget: Properly handle read-only events

Handle it internally, as it should be.
This commit is contained in:
Georges Basile Stavracas Neto
2025-03-11 17:52:14 -03:00
parent 03e6e39433
commit de342e5606
3 changed files with 34 additions and 23 deletions
+34 -19
View File
@@ -62,7 +62,6 @@ struct _GcalEventWidget
GtkWidget *preview_popover;
/* internal data */
gboolean read_only : 1;
gchar *css_class;
GcalEvent *event;
@@ -104,6 +103,11 @@ typedef enum
static guint signals[NUM_SIGNALS] = { 0, };
static gboolean read_only_to_propagation_phase_cb (GBinding *binding,
const GValue *from_value,
GValue *to_value,
gpointer user_data);
G_DEFINE_TYPE_WITH_CODE (GcalEventWidget, gcal_event_widget, GTK_TYPE_WIDGET,
G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL));
@@ -503,6 +507,16 @@ gcal_event_widget_set_event_internal (GcalEventWidget *self,
"text",
G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
g_object_bind_property_full (gcal_event_get_calendar (event),
"read-only",
self->drag_source,
"propagation-phase",
G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE,
read_only_to_propagation_phase_cb,
NULL,
self,
NULL);
gcal_event_widget_update_style (self);
gcal_event_widget_update_timestamp (self);
}
@@ -583,6 +597,24 @@ on_event_popover_edit_cb (GtkWidget *event_popover,
reply_preview_callback (event_popover, data, GCAL_EVENT_PREVIEW_ACTION_EDIT);
}
static gboolean
read_only_to_propagation_phase_cb (GBinding *binding,
const GValue *from_value,
GValue *to_value,
gpointer user_data)
{
GtkPropagationPhase phase;
if (g_value_get_boolean (from_value))
phase = GTK_PHASE_NONE;
else
phase = GTK_PHASE_BUBBLE;
g_value_set_enum (to_value, phase);
return TRUE;
}
/*
* GObject overrides
@@ -853,18 +885,6 @@ gcal_event_widget_new (GcalContext *context,
NULL);
}
void
gcal_event_widget_set_read_only (GcalEventWidget *event,
gboolean read_only)
{
g_return_if_fail (GCAL_IS_EVENT_WIDGET (event));
gtk_event_controller_set_propagation_phase (event->drag_source,
read_only ? GTK_PHASE_NONE : GTK_PHASE_BUBBLE);
event->read_only = read_only;
}
/**
* gcal_event_widget_get_date_end:
* @self: a #GcalEventWidget
@@ -1044,12 +1064,7 @@ gcal_event_widget_get_event (GcalEventWidget *self)
GtkWidget*
gcal_event_widget_clone (GcalEventWidget *widget)
{
GtkWidget *new_widget;
new_widget = gcal_event_widget_new (widget->context, widget->event);
gcal_event_widget_set_read_only (GCAL_EVENT_WIDGET (new_widget), widget->read_only);
return new_widget;
return gcal_event_widget_new (widget->context, widget->event);
}
/**
-3
View File
@@ -54,9 +54,6 @@ GDateTime* gcal_event_widget_get_date_end (GcalEventWidge
void gcal_event_widget_set_date_end (GcalEventWidget *self,
GDateTime *date_end);
void gcal_event_widget_set_read_only (GcalEventWidget *event,
gboolean read_only);
void gcal_event_widget_set_timestamp_policy (GcalEventWidget *event,
GcalTimestampPolicy timestamp_policy);
-1
View File
@@ -314,7 +314,6 @@ recalculate_layout_blocks (GcalMonthViewRow *self)
GtkWidget *event_widget;
event_widget = gcal_event_widget_new (self->context, event);
// TODO: gcal_event_widget_set_read_only (GCAL_EVENT_WIDGET (event_widget), gcal_calendar_is_read_only (calendar));
if (!gcal_event_get_all_day (event) && !gcal_event_is_multiday (event))
gcal_event_widget_set_timestamp_policy (GCAL_EVENT_WIDGET (event_widget), GCAL_TIMESTAMP_POLICY_START);
setup_child_widget (self, event_widget);