summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2017-12-11 22:55:54 +0100
committerBenjamin Otte <otte@redhat.com>2017-12-12 00:31:49 +0100
commit04ac4c66aeeb559983b74d97b44db72b0f5028cc (patch)
tree4fd0c958335fcfe94e09357ba0f2845e1a0742c2 /gtk
parent23c798b41d57bb4f8255f61c6f0f3b6e1516eeca (diff)
downloadgtk+-04ac4c66aeeb559983b74d97b44db72b0f5028cc.tar.gz
dnd: Pass device, not event
You don't start a dnd operation with a device, you start it with an event.
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkcalendar.c11
-rw-r--r--gtk/gtkdnd.c56
-rw-r--r--gtk/gtkdnd.h2
-rw-r--r--gtk/gtkdndprivate.h2
-rw-r--r--gtk/gtkdragsource.c14
-rw-r--r--gtk/gtkentry.c7
-rw-r--r--gtk/gtkiconview.c2
-rw-r--r--gtk/gtklabel.c7
-rw-r--r--gtk/gtknotebook.c5
-rw-r--r--gtk/gtkplacessidebar.c5
-rw-r--r--gtk/gtktextview.c6
-rw-r--r--gtk/gtktreeview.c6
12 files changed, 53 insertions, 70 deletions
diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c
index f3e20a050c..a745f394e6 100644
--- a/gtk/gtkcalendar.c
+++ b/gtk/gtkcalendar.c
@@ -2665,8 +2665,6 @@ gtk_calendar_drag_update (GtkGestureDrag *gesture,
gdouble start_x, start_y;
GdkDragContext *context;
GdkContentFormats *targets;
- GdkEventSequence *sequence;
- GdkEvent *last_event;
if (!priv->in_drag)
return;
@@ -2676,20 +2674,17 @@ gtk_calendar_drag_update (GtkGestureDrag *gesture,
gtk_gesture_drag_get_start_point (gesture, &start_x, &start_y);
- sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
- last_event = gdk_event_copy (gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence));
-
gtk_event_controller_reset (GTK_EVENT_CONTROLLER (gesture));
targets = gdk_content_formats_new (NULL, 0);
targets = gtk_content_formats_add_text_targets (targets);
- context = gtk_drag_begin_with_coordinates (widget, targets, GDK_ACTION_COPY,
- last_event,
+ context = gtk_drag_begin_with_coordinates (widget,
+ gtk_gesture_get_device (GTK_GESTURE (gesture)),
+ targets, GDK_ACTION_COPY,
start_x, start_y);
priv->in_drag = 0;
gdk_content_formats_unref (targets);
- gdk_event_free (last_event);
gtk_drag_set_icon_default (context);
}
diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c
index d506e48e5d..085a7a9774 100644
--- a/gtk/gtkdnd.c
+++ b/gtk/gtkdnd.c
@@ -965,46 +965,27 @@ gtk_drag_dest_drop (GtkWidget *widget,
*/
GdkDragContext *
gtk_drag_begin_internal (GtkWidget *widget,
+ GdkDevice *device,
GtkImageDefinition *icon,
GdkContentFormats *target_list,
GdkDragAction actions,
- const GdkEvent *event,
int x,
int y)
{
GtkDragSourceInfo *info;
GtkWidget *toplevel;
- guint32 time = GDK_CURRENT_TIME;
GdkDragContext *context;
GtkWidget *ipc_widget;
- GdkDevice *pointer;
GdkWindow *ipc_window;
int dx, dy;
GdkAtom selection;
+ guint32 time;
ipc_widget = gtk_drag_get_ipc_widget (widget);
+ time = gtk_get_current_event_time ();
- if (event)
- {
- time = gdk_event_get_time (event);
- if (time == GDK_CURRENT_TIME)
- time = gtk_get_current_event_time ();
-
- pointer = gdk_event_get_device (event);
-
- if (gdk_device_get_source (pointer) == GDK_SOURCE_KEYBOARD)
- pointer = gdk_device_get_associated_device (pointer);
- }
- else
- {
- GdkSeat *seat;
-
- seat = gdk_display_get_default_seat (gtk_widget_get_display (widget));
- pointer = gdk_seat_get_pointer (seat);
- }
-
- if (!pointer)
- return NULL;
+ if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
+ device = gdk_device_get_associated_device (device);
ipc_window = gtk_widget_get_window (ipc_widget);
@@ -1014,13 +995,13 @@ gtk_drag_begin_internal (GtkWidget *widget,
gtk_widget_translate_coordinates (widget, toplevel,
x, y, &x, &y);
gdk_window_get_device_position (gtk_widget_get_window (toplevel),
- pointer,
+ device,
&dx, &dy,
NULL);
dx -= x;
dy -= y;
- context = gdk_drag_begin (ipc_window, pointer, target_list, actions, dx, dy);
+ context = gdk_drag_begin (ipc_window, device, target_list, actions, dx, dy);
if (context == NULL)
{
gtk_drag_release_ipc_widget (ipc_widget);
@@ -1096,11 +1077,11 @@ gtk_drag_begin_internal (GtkWidget *widget,
/**
* gtk_drag_begin_with_coordinates: (method)
* @widget: the source widget
+ * @device: (nullable): the device that starts the drag or %NULL to use the default
+ * pointer.
* @targets: The targets (data formats) in which the
* source can provide the data
* @actions: A bitmask of the allowed drag actions for this drag
- * @event: (nullable): The event that triggered the start of the drag,
- * or %NULL if none can be obtained.
* @x: The initial x coordinate to start dragging from, in the coordinate space
* of @widget.
* @y: The initial y coordinate to start dragging from, in the coordinate space
@@ -1138,18 +1119,31 @@ gtk_drag_begin_internal (GtkWidget *widget,
*/
GdkDragContext *
gtk_drag_begin_with_coordinates (GtkWidget *widget,
+ GdkDevice *device,
GdkContentFormats *targets,
GdkDragAction actions,
- GdkEvent *event,
gint x,
gint y)
{
g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+ g_return_val_if_fail (device == NULL || GDK_IS_DEVICE (device), NULL);
g_return_val_if_fail (gtk_widget_get_realized (widget), NULL);
g_return_val_if_fail (targets != NULL, NULL);
- return gtk_drag_begin_internal (widget, NULL, targets,
- actions, event, x, y);
+ if (device == NULL)
+ {
+ GdkSeat *seat;
+
+ seat = gdk_display_get_default_seat (gtk_widget_get_display (widget));
+ device = gdk_seat_get_pointer (seat);
+ }
+
+ return gtk_drag_begin_internal (widget,
+ device,
+ NULL,
+ targets,
+ actions,
+ x, y);
}
static void
diff --git a/gtk/gtkdnd.h b/gtk/gtkdnd.h
index 82f2f78d5c..7da0ff0226 100644
--- a/gtk/gtkdnd.h
+++ b/gtk/gtkdnd.h
@@ -61,9 +61,9 @@ void gtk_drag_unhighlight (GtkWidget *widget);
GDK_AVAILABLE_IN_3_10
GdkDragContext *gtk_drag_begin_with_coordinates (GtkWidget *widget,
+ GdkDevice *device,
GdkContentFormats *targets,
GdkDragAction actions,
- GdkEvent *event,
gint x,
gint y);
diff --git a/gtk/gtkdndprivate.h b/gtk/gtkdndprivate.h
index 5bd617635a..5691451e30 100644
--- a/gtk/gtkdndprivate.h
+++ b/gtk/gtkdndprivate.h
@@ -41,10 +41,10 @@ struct _GtkDragDestSite
G_BEGIN_DECLS
GdkDragContext * gtk_drag_begin_internal (GtkWidget *widget,
+ GdkDevice *device,
GtkImageDefinition *icon,
GdkContentFormats *target_list,
GdkDragAction actions,
- const GdkEvent *event,
int x,
int y);
void gtk_drag_set_icon_definition (GdkDragContext *context,
diff --git a/gtk/gtkdragsource.c b/gtk/gtkdragsource.c
index 6fd0f82820..294c619876 100644
--- a/gtk/gtkdragsource.c
+++ b/gtk/gtkdragsource.c
@@ -85,20 +85,14 @@ gtk_drag_source_event_cb (GtkWidget *widget,
if (gtk_drag_check_threshold (widget, start_x, start_y,
start_x + offset_x, start_y + offset_y))
{
- GdkEventSequence *sequence;
- GdkEvent *last_event;
-
- sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (site->drag_gesture));
- last_event = gdk_event_copy (gtk_gesture_get_last_event (site->drag_gesture, sequence));
-
gtk_event_controller_reset (GTK_EVENT_CONTROLLER (site->drag_gesture));
- gtk_drag_begin_internal (widget, site->image_def, site->target_list,
- site->actions, last_event,
+ gtk_drag_begin_internal (widget,
+ gtk_gesture_get_device (site->drag_gesture),
+ site->image_def, site->target_list,
+ site->actions,
start_x, start_y);
- gdk_event_free (last_event);
-
return TRUE;
}
}
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index 359496a176..2d3f754bb7 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -3677,9 +3677,9 @@ gtk_entry_event (GtkWidget *widget,
{
icon_info->in_drag = TRUE;
gtk_drag_begin_with_coordinates (widget,
+ device,
icon_info->target_list,
icon_info->actions,
- event,
priv->start_x,
priv->start_y);
}
@@ -4002,8 +4002,9 @@ gtk_entry_drag_gesture_update (GtkGestureDrag *gesture,
gtk_entry_get_pixel_ranges (entry, &ranges, &n_ranges);
- gtk_drag_begin_with_coordinates (widget, target_list, actions,
- (GdkEvent*) event,
+ gtk_drag_begin_with_coordinates (widget,
+ gdk_event_get_device ((GdkEvent*) event),
+ target_list, actions,
priv->drag_start_x + ranges[0],
priv->drag_start_y);
g_free (ranges);
diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c
index 8c248f8ee9..f97fc219e8 100644
--- a/gtk/gtkiconview.c
+++ b/gtk/gtkiconview.c
@@ -6191,9 +6191,9 @@ gtk_icon_view_maybe_begin_drag (GtkIconView *icon_view,
retval = TRUE;
context = gtk_drag_begin_with_coordinates (widget,
+ gdk_event_get_device ((GdkEvent*) event),
gtk_drag_source_get_target_list (widget),
icon_view->priv->source_actions,
- (GdkEvent*)event,
icon_view->priv->press_start_x,
icon_view->priv->press_start_y);
diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
index 6c5165ec42..ae4d9c32b8 100644
--- a/gtk/gtklabel.c
+++ b/gtk/gtklabel.c
@@ -4769,16 +4769,15 @@ gtk_label_drag_gesture_update (GtkGestureDrag *gesture,
x, y))
{
GdkContentFormats *target_list = gdk_content_formats_new (NULL, 0);
- const GdkEvent *event;
- event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence);
target_list = gtk_content_formats_add_text_targets (target_list);
g_signal_connect (widget, "drag-begin",
G_CALLBACK (drag_begin_cb), NULL);
- gtk_drag_begin_with_coordinates (widget, target_list,
+ gtk_drag_begin_with_coordinates (widget,
+ gtk_gesture_get_device (GTK_GESTURE (gesture)),
+ target_list,
GDK_ACTION_COPY,
- (GdkEvent*) event,
info->drag_start_x,
info->drag_start_y);
diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
index f9a1bfdcea..6adc286de9 100644
--- a/gtk/gtknotebook.c
+++ b/gtk/gtknotebook.c
@@ -2712,8 +2712,9 @@ gtk_notebook_motion_notify (GtkWidget *widget,
{
priv->detached_tab = priv->cur_page;
- gtk_drag_begin_with_coordinates (widget, priv->source_targets, GDK_ACTION_MOVE,
- (GdkEvent*) event,
+ gtk_drag_begin_with_coordinates (widget,
+ gdk_event_get_device ((GdkEvent*) event),
+ priv->source_targets, GDK_ACTION_MOVE,
priv->drag_begin_x, priv->drag_begin_y);
return TRUE;
}
diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c
index 56c392ac40..ceae9e5a6d 100644
--- a/gtk/gtkplacessidebar.c
+++ b/gtk/gtkplacessidebar.c
@@ -1725,8 +1725,9 @@ on_motion_notify_event (GtkWidget *widget,
{
sidebar->dragging_over = TRUE;
- gtk_drag_begin_with_coordinates (widget, sidebar->source_targets, GDK_ACTION_MOVE,
- (GdkEvent*)event,
+ gtk_drag_begin_with_coordinates (widget,
+ gdk_event_get_device ((GdkEvent*) event),
+ sidebar->source_targets, GDK_ACTION_MOVE,
-1, -1);
}
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index 371f5f48a4..12475c416a 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -7819,9 +7819,11 @@ gtk_text_view_start_selection_dnd (GtkTextView *text_view,
g_signal_connect (text_view, "drag-begin",
G_CALLBACK (drag_begin_cb), NULL);
- gtk_drag_begin_with_coordinates (GTK_WIDGET (text_view), formats,
+ gtk_drag_begin_with_coordinates (GTK_WIDGET (text_view),
+ gdk_event_get_device (event),
+ formats,
GDK_ACTION_COPY | GDK_ACTION_MOVE,
- (GdkEvent*) event, x, y);
+ x, y);
}
static void
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index 5cdc8a1f83..0a8b5d5b99 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -7421,8 +7421,6 @@ gtk_tree_view_maybe_begin_dragging_row (GtkTreeView *tree_view)
{
GtkWidget *widget = GTK_WIDGET (tree_view);
gdouble start_x, start_y, offset_x, offset_y;
- GdkEventSequence *sequence;
- const GdkEvent *event;
GdkDragContext *context;
TreeViewDragInfo *di;
GtkTreePath *path = NULL;
@@ -7479,13 +7477,11 @@ gtk_tree_view_maybe_begin_dragging_row (GtkTreeView *tree_view)
/* Now we can begin the drag */
gtk_gesture_set_state (GTK_GESTURE (tree_view->priv->drag_gesture),
GTK_EVENT_SEQUENCE_CLAIMED);
- sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (tree_view->priv->drag_gesture));
- event = gtk_gesture_get_last_event (GTK_GESTURE (tree_view->priv->drag_gesture), sequence);
context = gtk_drag_begin_with_coordinates (widget,
+ gtk_gesture_get_device (GTK_GESTURE (tree_view->priv->drag_gesture)),
gtk_drag_source_get_target_list (widget),
di->source_actions,
- (GdkEvent*)event,
start_x, start_y);
set_source_row (context, model, path);