views/week: Use widget for drop target indicator
Gets rid of a few warnings
This commit is contained in:
@@ -73,6 +73,7 @@ struct _GcalWeekGrid
|
|||||||
|
|
||||||
struct {
|
struct {
|
||||||
gint cell;
|
gint cell;
|
||||||
|
GtkWidget *widget;
|
||||||
} dnd;
|
} dnd;
|
||||||
|
|
||||||
GcalContext *context;
|
GcalContext *context;
|
||||||
@@ -454,6 +455,21 @@ on_drop_target_drop_cb (GtkDropTarget *drop_target,
|
|||||||
GCAL_RETURN (TRUE);
|
GCAL_RETURN (TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GdkDragAction
|
||||||
|
on_drop_target_enter_cb (GtkDropTarget *drop_target,
|
||||||
|
gdouble x,
|
||||||
|
gdouble y,
|
||||||
|
GcalWeekGrid *self)
|
||||||
|
{
|
||||||
|
|
||||||
|
GCAL_ENTRY;
|
||||||
|
|
||||||
|
self->dnd.cell = get_dnd_cell (self, x, y);
|
||||||
|
gtk_widget_set_visible (self->dnd.widget, TRUE);
|
||||||
|
|
||||||
|
GCAL_RETURN (GDK_ACTION_COPY);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
on_drop_target_leave_cb (GtkDropTarget *drop_target,
|
on_drop_target_leave_cb (GtkDropTarget *drop_target,
|
||||||
GcalWeekGrid *self)
|
GcalWeekGrid *self)
|
||||||
@@ -461,7 +477,7 @@ on_drop_target_leave_cb (GtkDropTarget *drop_target,
|
|||||||
GCAL_ENTRY;
|
GCAL_ENTRY;
|
||||||
|
|
||||||
self->dnd.cell = -1;
|
self->dnd.cell = -1;
|
||||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
gtk_widget_set_visible (self->dnd.widget, FALSE);
|
||||||
|
|
||||||
GCAL_EXIT;
|
GCAL_EXIT;
|
||||||
}
|
}
|
||||||
@@ -475,7 +491,7 @@ on_drop_target_motion_cb (GtkDropTarget *drop_target,
|
|||||||
GCAL_ENTRY;
|
GCAL_ENTRY;
|
||||||
|
|
||||||
self->dnd.cell = get_dnd_cell (self, x, y);
|
self->dnd.cell = get_dnd_cell (self, x, y);
|
||||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
gtk_widget_queue_allocate (GTK_WIDGET (self));
|
||||||
|
|
||||||
GCAL_RETURN (GDK_ACTION_COPY);
|
GCAL_RETURN (GDK_ACTION_COPY);
|
||||||
}
|
}
|
||||||
@@ -485,6 +501,7 @@ gcal_week_grid_dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
GcalWeekGrid *self = GCAL_WEEK_GRID (object);
|
GcalWeekGrid *self = GCAL_WEEK_GRID (object);
|
||||||
|
|
||||||
|
g_clear_pointer (&self->dnd.widget, gtk_widget_unparent);
|
||||||
g_clear_pointer (&self->events, gcal_range_tree_unref);
|
g_clear_pointer (&self->events, gcal_range_tree_unref);
|
||||||
g_clear_pointer (&self->now_strip, gtk_widget_unparent);
|
g_clear_pointer (&self->now_strip, gtk_widget_unparent);
|
||||||
|
|
||||||
@@ -606,8 +623,6 @@ gcal_week_grid_snapshot (GtkWidget *widget,
|
|||||||
GcalWeekGrid *self;
|
GcalWeekGrid *self;
|
||||||
GtkBorder padding;
|
GtkBorder padding;
|
||||||
GdkRGBA color;
|
GdkRGBA color;
|
||||||
gdouble minutes_height;
|
|
||||||
gdouble column_width;
|
|
||||||
guint i;
|
guint i;
|
||||||
gint width, height;
|
gint width, height;
|
||||||
|
|
||||||
@@ -621,31 +636,6 @@ gcal_week_grid_snapshot (GtkWidget *widget,
|
|||||||
|
|
||||||
width = gtk_widget_get_width (widget);
|
width = gtk_widget_get_width (widget);
|
||||||
height = gtk_widget_get_height (widget);
|
height = gtk_widget_get_height (widget);
|
||||||
column_width = width / 7.0;
|
|
||||||
minutes_height = (gdouble) height / MINUTES_PER_DAY;
|
|
||||||
|
|
||||||
/* Drag and Drop highlight */
|
|
||||||
if (self->dnd.cell != -1)
|
|
||||||
{
|
|
||||||
gdouble cell_height;
|
|
||||||
gint column, row;
|
|
||||||
|
|
||||||
cell_height = minutes_height * 30;
|
|
||||||
column = self->dnd.cell / (MINUTES_PER_DAY / 30);
|
|
||||||
row = self->dnd.cell - column * 48;
|
|
||||||
|
|
||||||
gtk_style_context_save (context);
|
|
||||||
gtk_style_context_add_class (context, "dnd");
|
|
||||||
|
|
||||||
gtk_snapshot_render_background (snapshot,
|
|
||||||
context,
|
|
||||||
column * column_width,
|
|
||||||
row * cell_height,
|
|
||||||
column_width,
|
|
||||||
cell_height);
|
|
||||||
|
|
||||||
gtk_style_context_restore (context);
|
|
||||||
}
|
|
||||||
|
|
||||||
gcal_week_view_common_snapshot_hour_lines (widget, snapshot, GTK_ORIENTATION_HORIZONTAL, &color, width, height);
|
gcal_week_view_common_snapshot_hour_lines (widget, snapshot, GTK_ORIENTATION_HORIZONTAL, &color, width, height);
|
||||||
gcal_week_view_common_snapshot_hour_lines (widget, snapshot, GTK_ORIENTATION_VERTICAL, &color, width, height);
|
gcal_week_view_common_snapshot_hour_lines (widget, snapshot, GTK_ORIENTATION_VERTICAL, &color, width, height);
|
||||||
@@ -655,6 +645,7 @@ gcal_week_grid_snapshot (GtkWidget *widget,
|
|||||||
/* First, draw the selection */
|
/* First, draw the selection */
|
||||||
if (self->selection.widget)
|
if (self->selection.widget)
|
||||||
gtk_widget_snapshot_child (widget, self->selection.widget, snapshot);
|
gtk_widget_snapshot_child (widget, self->selection.widget, snapshot);
|
||||||
|
gtk_widget_snapshot_child (widget, self->dnd.widget, snapshot);
|
||||||
|
|
||||||
widgets = gcal_range_tree_get_all_data (self->events);
|
widgets = gcal_range_tree_get_all_data (self->events);
|
||||||
for (i = 0; i < widgets->len; i++)
|
for (i = 0; i < widgets->len; i++)
|
||||||
@@ -732,6 +723,27 @@ gcal_week_grid_size_allocate (GtkWidget *widget,
|
|||||||
baseline);
|
baseline);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gtk_widget_should_layout (self->dnd.widget))
|
||||||
|
{
|
||||||
|
gdouble cell_height;
|
||||||
|
gint column, row;
|
||||||
|
|
||||||
|
g_assert (self->dnd.cell != -1);
|
||||||
|
|
||||||
|
cell_height = minutes_height * 30;
|
||||||
|
column = self->dnd.cell / (MINUTES_PER_DAY / 30);
|
||||||
|
row = self->dnd.cell - column * 48;
|
||||||
|
|
||||||
|
gtk_widget_size_allocate (self->dnd.widget,
|
||||||
|
&(GtkAllocation) {
|
||||||
|
.x = column * column_width,
|
||||||
|
.y = row * cell_height,
|
||||||
|
.width = column_width,
|
||||||
|
.height = cell_height,
|
||||||
|
},
|
||||||
|
baseline);
|
||||||
|
}
|
||||||
|
|
||||||
/* Temporary range tree to hold positioned events' indexes */
|
/* Temporary range tree to hold positioned events' indexes */
|
||||||
overlaps = gcal_range_tree_new ();
|
overlaps = gcal_range_tree_new ();
|
||||||
|
|
||||||
@@ -896,7 +908,11 @@ gcal_week_grid_init (GcalWeekGrid *self)
|
|||||||
|
|
||||||
self->selection.start = -1;
|
self->selection.start = -1;
|
||||||
self->selection.end = -1;
|
self->selection.end = -1;
|
||||||
|
|
||||||
self->dnd.cell = -1;
|
self->dnd.cell = -1;
|
||||||
|
self->dnd.widget = gcal_create_drop_target_widget ();
|
||||||
|
gtk_widget_set_visible (self->dnd.widget, FALSE);
|
||||||
|
gtk_widget_set_parent (self->dnd.widget, GTK_WIDGET (self));
|
||||||
|
|
||||||
self->events = gcal_range_tree_new_with_free_func (child_data_free);
|
self->events = gcal_range_tree_new_with_free_func (child_data_free);
|
||||||
|
|
||||||
@@ -918,6 +934,7 @@ gcal_week_grid_init (GcalWeekGrid *self)
|
|||||||
|
|
||||||
drop_target = gtk_drop_target_new (GCAL_TYPE_EVENT_WIDGET, GDK_ACTION_COPY);
|
drop_target = gtk_drop_target_new (GCAL_TYPE_EVENT_WIDGET, GDK_ACTION_COPY);
|
||||||
g_signal_connect (drop_target, "drop", G_CALLBACK (on_drop_target_drop_cb), self);
|
g_signal_connect (drop_target, "drop", G_CALLBACK (on_drop_target_drop_cb), self);
|
||||||
|
g_signal_connect (drop_target, "enter", G_CALLBACK (on_drop_target_enter_cb), self);
|
||||||
g_signal_connect (drop_target, "leave", G_CALLBACK (on_drop_target_leave_cb), self);
|
g_signal_connect (drop_target, "leave", G_CALLBACK (on_drop_target_leave_cb), self);
|
||||||
g_signal_connect (drop_target, "motion", G_CALLBACK (on_drop_target_motion_cb), self);
|
g_signal_connect (drop_target, "motion", G_CALLBACK (on_drop_target_motion_cb), self);
|
||||||
gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (drop_target));
|
gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (drop_target));
|
||||||
|
|||||||
+2
-1
@@ -251,7 +251,8 @@ weekgrid.dnd, .week-header.dnd {
|
|||||||
background-color: alpha(@accent_bg_color, 0.25);
|
background-color: alpha(@accent_bg_color, 0.25);
|
||||||
}
|
}
|
||||||
|
|
||||||
weekgrid > selection {
|
weekgrid > selection,
|
||||||
|
weekgrid > droptarget {
|
||||||
background-color: alpha(@accent_bg_color, 0.25);
|
background-color: alpha(@accent_bg_color, 0.25);
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
margin: 2px 0 1px 2px;
|
margin: 2px 0 1px 2px;
|
||||||
|
|||||||
Reference in New Issue
Block a user