gui/event-widget: Properly handle read-only events
Handle it internally, as it should be.
This commit is contained in:
+34
-19
@@ -62,7 +62,6 @@ struct _GcalEventWidget
|
|||||||
GtkWidget *preview_popover;
|
GtkWidget *preview_popover;
|
||||||
|
|
||||||
/* internal data */
|
/* internal data */
|
||||||
gboolean read_only : 1;
|
|
||||||
gchar *css_class;
|
gchar *css_class;
|
||||||
|
|
||||||
GcalEvent *event;
|
GcalEvent *event;
|
||||||
@@ -104,6 +103,11 @@ typedef enum
|
|||||||
|
|
||||||
static guint signals[NUM_SIGNALS] = { 0, };
|
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_DEFINE_TYPE_WITH_CODE (GcalEventWidget, gcal_event_widget, GTK_TYPE_WIDGET,
|
||||||
G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL));
|
G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL));
|
||||||
|
|
||||||
@@ -503,6 +507,16 @@ gcal_event_widget_set_event_internal (GcalEventWidget *self,
|
|||||||
"text",
|
"text",
|
||||||
G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
|
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_style (self);
|
||||||
gcal_event_widget_update_timestamp (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);
|
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
|
* GObject overrides
|
||||||
@@ -853,18 +885,6 @@ gcal_event_widget_new (GcalContext *context,
|
|||||||
NULL);
|
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:
|
* gcal_event_widget_get_date_end:
|
||||||
* @self: a #GcalEventWidget
|
* @self: a #GcalEventWidget
|
||||||
@@ -1044,12 +1064,7 @@ gcal_event_widget_get_event (GcalEventWidget *self)
|
|||||||
GtkWidget*
|
GtkWidget*
|
||||||
gcal_event_widget_clone (GcalEventWidget *widget)
|
gcal_event_widget_clone (GcalEventWidget *widget)
|
||||||
{
|
{
|
||||||
GtkWidget *new_widget;
|
return gcal_event_widget_new (widget->context, widget->event);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -54,9 +54,6 @@ GDateTime* gcal_event_widget_get_date_end (GcalEventWidge
|
|||||||
void gcal_event_widget_set_date_end (GcalEventWidget *self,
|
void gcal_event_widget_set_date_end (GcalEventWidget *self,
|
||||||
GDateTime *date_end);
|
GDateTime *date_end);
|
||||||
|
|
||||||
void gcal_event_widget_set_read_only (GcalEventWidget *event,
|
|
||||||
gboolean read_only);
|
|
||||||
|
|
||||||
void gcal_event_widget_set_timestamp_policy (GcalEventWidget *event,
|
void gcal_event_widget_set_timestamp_policy (GcalEventWidget *event,
|
||||||
GcalTimestampPolicy timestamp_policy);
|
GcalTimestampPolicy timestamp_policy);
|
||||||
|
|
||||||
|
|||||||
@@ -314,7 +314,6 @@ recalculate_layout_blocks (GcalMonthViewRow *self)
|
|||||||
GtkWidget *event_widget;
|
GtkWidget *event_widget;
|
||||||
|
|
||||||
event_widget = gcal_event_widget_new (self->context, event);
|
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))
|
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);
|
gcal_event_widget_set_timestamp_policy (GCAL_EVENT_WIDGET (event_widget), GCAL_TIMESTAMP_POLICY_START);
|
||||||
setup_child_widget (self, event_widget);
|
setup_child_widget (self, event_widget);
|
||||||
|
|||||||
Reference in New Issue
Block a user