[gtk/dnd-gestures-2: 178/242] dragsource: Tweak api, update all callers
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/dnd-gestures-2: 178/242] dragsource: Tweak api, update all callers
- Date: Tue, 7 Jan 2020 19:58:21 +0000 (UTC)
commit b05b5ec0b1d1997f8799a0de40b0ca371f38c612
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Jan 6 13:28:25 2020 -0500
dragsource: Tweak api, update all callers
Add GdkDrag back to signals, drop ::drag-data-delete,
and replace it with a boolean in ::drag-end.
demos/gtk-demo/clipboard.c | 1 +
demos/icon-browser/iconbrowserwin.c | 1 +
gtk/gtkcolorbutton.c | 1 +
gtk/gtkcolorswatch.c | 1 +
gtk/gtkdragsource.c | 54 ++++++++++++----------------
gtk/gtkiconview.c | 31 ++++++++++------
gtk/gtknotebook.c | 14 ++++++--
gtk/gtkplacessidebar.c | 5 ++-
gtk/gtktext.c | 12 ++++---
gtk/gtktreeview.c | 72 ++++++++++++++++++-------------------
tests/testdnd2.c | 7 ++--
tests/testlist3.c | 1 +
12 files changed, 109 insertions(+), 91 deletions(-)
---
diff --git a/demos/gtk-demo/clipboard.c b/demos/gtk-demo/clipboard.c
index b484f5eec7..51f5507c26 100644
--- a/demos/gtk-demo/clipboard.c
+++ b/demos/gtk-demo/clipboard.c
@@ -120,6 +120,7 @@ get_image_paintable (GtkImage *image)
static void
drag_begin (GtkDragSource *source,
+ GdkDrag *drag,
GtkWidget *widget)
{
GdkPaintable *paintable;
diff --git a/demos/icon-browser/iconbrowserwin.c b/demos/icon-browser/iconbrowserwin.c
index dcd7801fa4..e560bc612e 100644
--- a/demos/icon-browser/iconbrowserwin.c
+++ b/demos/icon-browser/iconbrowserwin.c
@@ -373,6 +373,7 @@ get_image_paintable (GtkImage *image)
static void
drag_begin (GtkDragSource *source,
+ GdkDrag *drag,
GtkWidget *widget)
{
GdkPaintable *paintable;
diff --git a/gtk/gtkcolorbutton.c b/gtk/gtkcolorbutton.c
index 581da04d59..00fcf02b68 100644
--- a/gtk/gtkcolorbutton.c
+++ b/gtk/gtkcolorbutton.c
@@ -269,6 +269,7 @@ gtk_color_button_drag_drop (GtkDropTarget *dest,
static void
gtk_color_button_drag_begin (GtkDragSource *source,
+ GdkDrag *drag,
GtkColorButton *button)
{
GtkColorButtonPrivate *priv = gtk_color_button_get_instance_private (button);
diff --git a/gtk/gtkcolorswatch.c b/gtk/gtkcolorswatch.c
index 188f08d8d1..9bdcca3e83 100644
--- a/gtk/gtkcolorswatch.c
+++ b/gtk/gtkcolorswatch.c
@@ -117,6 +117,7 @@ swatch_snapshot (GtkWidget *widget,
static void
gtk_color_swatch_drag_begin (GtkDragSource *source,
+ GdkDrag *drag,
GtkColorSwatch *swatch)
{
GtkColorSwatchPrivate *priv = gtk_color_swatch_get_instance_private (swatch);
diff --git a/gtk/gtkdragsource.c b/gtk/gtkdragsource.c
index 53c80774d3..6fa40897f4 100644
--- a/gtk/gtkdragsource.c
+++ b/gtk/gtkdragsource.c
@@ -110,7 +110,6 @@ enum {
DRAG_BEGIN,
DRAG_END,
DRAG_FAILED,
- DRAG_DATA_DELETE,
NUM_SIGNALS
};
@@ -225,12 +224,11 @@ gtk_drag_source_class_init (GtkDragSourceClass *class)
/**
* GtkDragSource::drag-begin:
* @source: the #GtkDragSource
+ * @drag: the #GtkDrag object
*
* The ::drag-begin signal is emitted on the drag source when a drag
* is started. It can be used to e.g. set a custom drag icon with
- * gtk_drag_source_set_icon(). But all of the setup can also be
- * done before calling gtk_drag_source_drag_begin(), so this is not
- * really necessary.
+ * gtk_drag_source_set_icon().
*/
signals[DRAG_BEGIN] =
g_signal_new (I_("drag-begin"),
@@ -239,11 +237,15 @@ gtk_drag_source_class_init (GtkDragSourceClass *class)
0,
NULL, NULL,
NULL,
- G_TYPE_NONE, 0);
+ G_TYPE_NONE, 1,
+ GDK_TYPE_DRAG);
/**
* GtkDragSource::drag-end:
* @source: the #GtkDragSource
+ * @drag: the #GtkDrag object
+ * @delete_data: %TRUE if the drag was performing %GDK_ACTION_MOVE,
+ * and the data should be deleted
*
* The ::drag-end signal is emitted on the drag source when a drag is
* finished. A typical reason to connect to this signal is to undo
@@ -256,11 +258,14 @@ gtk_drag_source_class_init (GtkDragSourceClass *class)
0,
NULL, NULL,
NULL,
- G_TYPE_NONE, 0);
+ G_TYPE_NONE, 2,
+ GDK_TYPE_DRAG,
+ G_TYPE_BOOLEAN);
/**
* GtkDragSource::drag-failed:
* @source: the #GtkDragSource
+ * @drag: the #GtkDrag object
* @reason: information on why the drag failed
*
* The ::drag-failed signal is emitted on the drag source when a drag has
@@ -276,27 +281,10 @@ gtk_drag_source_class_init (GtkDragSourceClass *class)
G_SIGNAL_RUN_LAST,
0,
_gtk_boolean_handled_accumulator, NULL,
- _gtk_marshal_BOOLEAN__ENUM,
- G_TYPE_BOOLEAN, 1,
+ _gtk_marshal_BOOLEAN__OBJECT_ENUM,
+ G_TYPE_BOOLEAN, 2,
+ GDK_TYPE_DRAG,
GDK_TYPE_DRAG_CANCEL_REASON);
-
- /**
- * GtkDragSource::drag-data-delete:
- * @source: the #GtkDragSource
- *
- * The ::drag-data-delete signal is emitted on the drag source when a drag
- * with the action %GDK_ACTION_MOVE is successfully completed. The signal
- * handler is responsible for deleting the data that has been dropped. What
- * "delete" means depends on the context of the drag operation.
- */
- signals[DRAG_DATA_DELETE] =
- g_signal_new (I_("drag-data-delete"),
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- NULL,
- G_TYPE_NONE, 0);
}
static void gtk_drag_source_dnd_finished_cb (GdkDrag *drag,
@@ -311,11 +299,15 @@ static void
drag_end (GtkDragSource *source,
gboolean success)
{
+ gboolean delete_data;
+
g_signal_handlers_disconnect_by_func (source->drag, gtk_drag_source_drop_performed_cb, source);
g_signal_handlers_disconnect_by_func (source->drag, gtk_drag_source_dnd_finished_cb, source);
g_signal_handlers_disconnect_by_func (source->drag, gtk_drag_source_cancel_cb, source);
- g_signal_emit (source, signals[DRAG_END], 0);
+ delete_data = success && gdk_drag_get_selected_action (source->drag) == GDK_ACTION_MOVE;
+
+ g_signal_emit (source, signals[DRAG_END], 0, source->drag, delete_data);
gdk_drag_drop_done (source->drag, success);
@@ -329,8 +321,6 @@ static void
gtk_drag_source_dnd_finished_cb (GdkDrag *drag,
GtkDragSource *source)
{
- if (gdk_drag_get_selected_action (drag) == GDK_ACTION_MOVE)
- g_signal_emit (source, signals[DRAG_DATA_DELETE], 0);
drag_end (source, TRUE);
}
@@ -341,7 +331,7 @@ gtk_drag_source_cancel_cb (GdkDrag *drag,
{
gboolean success = FALSE;
- g_signal_emit (source, signals[DRAG_FAILED], 0, reason, &success);
+ g_signal_emit (source, signals[DRAG_FAILED], 0, source->drag, reason, &success);
drag_end (source, FALSE);
}
@@ -415,7 +405,7 @@ gtk_drag_source_drag_begin (GtkDragSource *source,
/* We hold a ref until ::drag-end is emitted */
g_object_ref (source);
- g_signal_emit (source, signals[DRAG_BEGIN], 0);
+ g_signal_emit (source, signals[DRAG_BEGIN], 0, source->drag);
if (!source->paintable)
{
@@ -777,7 +767,7 @@ gtk_drag_source_drag_cancel (GtkDragSource *source)
{
gboolean success = FALSE;
- g_signal_emit (source, signals[DRAG_FAILED], 0, GDK_DRAG_CANCEL_ERROR, &success);
+ g_signal_emit (source, signals[DRAG_FAILED], 0, source->drag, GDK_DRAG_CANCEL_ERROR, &success);
gdk_drag_drop_done (source->drag, success);
}
diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c
index a2491bcf06..caa589b519 100644
--- a/gtk/gtkiconview.c
+++ b/gtk/gtkiconview.c
@@ -281,12 +281,15 @@ static void update_text_cell (GtkIco
static void update_pixbuf_cell (GtkIconView *icon_view);
/* Source side drag signals */
-static void gtk_icon_view_drag_begin (GtkDragSource *source,
- GtkWidget *widget);
-static GBytes * gtk_icon_view_drag_data_get (const char *mime_type,
- gpointer data);
-static void gtk_icon_view_drag_data_delete (GtkDragSource *source,
- GtkWidget *widget);
+static void gtk_icon_view_drag_begin (GtkDragSource *source,
+ GdkDrag *drag,
+ GtkWidget *widget);
+static void gtk_icon_view_drag_end (GtkDragSource *source,
+ GdkDrag *drag,
+ gboolean delete_data,
+ GtkWidget *widget);
+static GBytes * gtk_icon_view_drag_data_get (const char *mime_type,
+ gpointer data);
/* Target side drag signals */
static void gtk_icon_view_drag_leave (GtkDropTarget *dest,
@@ -6083,7 +6086,8 @@ gtk_icon_view_maybe_begin_drag (GtkIconView *icon_view,
/* Source side drag signals */
static void
gtk_icon_view_drag_begin (GtkDragSource *source,
- GtkWidget *widget)
+ GdkDrag *drag,
+ GtkWidget *widget)
{
GtkIconView *icon_view;
GtkIconViewItem *item;
@@ -6162,13 +6166,18 @@ gtk_icon_view_drag_data_get (const char *mime_type,
}
static void
-gtk_icon_view_drag_data_delete (GtkDragSource *source,
- GtkWidget *widget)
+gtk_icon_view_drag_end (GtkDragSource *source,
+ GdkDrag *drag,
+ gboolean delete_data,
+ GtkWidget *widget)
{
GtkTreeModel *model;
GtkIconView *icon_view;
GtkTreePath *source_row;
+ if (!delete_data)
+ return;
+
icon_view = GTK_ICON_VIEW (widget);
model = gtk_icon_view_get_model (icon_view);
@@ -6462,8 +6471,8 @@ gtk_icon_view_enable_model_drag_source (GtkIconView *icon_view,
g_signal_connect (icon_view->priv->source, "drag-begin",
G_CALLBACK (gtk_icon_view_drag_begin), icon_view);
- g_signal_connect (icon_view->priv->source, "drag-data-delete",
- G_CALLBACK (gtk_icon_view_drag_data_delete), icon_view);
+ g_signal_connect (icon_view->priv->source, "drag-end",
+ G_CALLBACK (gtk_icon_view_drag_end), icon_view);
icon_view->priv->start_button_mask = start_button_mask;
icon_view->priv->source_actions = actions;
diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
index 556db516f8..586b2c2705 100644
--- a/gtk/gtknotebook.c
+++ b/gtk/gtknotebook.c
@@ -697,10 +697,14 @@ static gboolean gtk_notebook_focus (GtkWidget *widget,
/*** Drag and drop Methods ***/
static void gtk_notebook_drag_begin (GtkDragSource *source,
+ GdkDrag *drag,
GtkWidget *widget);
static void gtk_notebook_drag_end (GtkDragSource *source,
+ GdkDrag *drag,
+ gboolean delete_data,
GtkWidget *widget);
static gboolean gtk_notebook_drag_failed (GtkDragSource *source,
+ GdkDrag *drag,
GdkDragCancelReason reason,
GtkWidget *widget);
static gboolean gtk_notebook_drag_motion (GtkDropTarget *dest,
@@ -3089,6 +3093,7 @@ update_arrow_nodes (GtkNotebook *notebook)
static void
gtk_notebook_drag_begin (GtkDragSource *source,
+ GdkDrag *drag,
GtkWidget *widget)
{
GtkNotebook *notebook = GTK_NOTEBOOK (widget);
@@ -3113,6 +3118,8 @@ gtk_notebook_drag_begin (GtkDragSource *source,
static void
gtk_notebook_drag_end (GtkDragSource *source,
+ GdkDrag *drag,
+ gboolean delete_data,
GtkWidget *widget)
{
GtkNotebook *notebook = GTK_NOTEBOOK (widget);
@@ -3148,9 +3155,10 @@ gtk_notebook_create_window (GtkNotebook *notebook,
}
static gboolean
-gtk_notebook_drag_failed (GtkDragSource *source,
- GdkDragCancelReason reason,
- GtkWidget *widget)
+gtk_notebook_drag_failed (GtkDragSource *source,
+ GdkDrag *drag,
+ GdkDragCancelReason reason,
+ GtkWidget *widget)
{
GtkNotebook *notebook = GTK_NOTEBOOK (widget);
GtkNotebookPrivate *priv = notebook->priv;
diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c
index 907482748c..5fcb8f6f57 100644
--- a/gtk/gtkplacessidebar.c
+++ b/gtk/gtkplacessidebar.c
@@ -1728,7 +1728,8 @@ stop_drop_feedback (GtkPlacesSidebar *sidebar)
static void
drag_begin_callback (GtkDragSource *source,
- gpointer user_data)
+ GdkDrag *drag,
+ gpointer user_data)
{
GtkPlacesSidebar *sidebar = GTK_PLACES_SIDEBAR (user_data);
GtkAllocation allocation;
@@ -2092,6 +2093,8 @@ out_free:
static void
drag_end_callback (GtkDragSource *source,
+ GdkDrag *drag,
+ gboolean delete_data,
gpointer user_data)
{
stop_drop_feedback (GTK_PLACES_SIDEBAR (user_data));
diff --git a/gtk/gtktext.c b/gtk/gtktext.c
index 72cf662fc6..f8959ce16d 100644
--- a/gtk/gtktext.c
+++ b/gtk/gtktext.c
@@ -2791,9 +2791,14 @@ gtk_text_motion_controller_motion (GtkEventControllerMotion *controller,
}
static void
-drag_end (GtkText *self)
+drag_end (GtkDragSource *source,
+ GdkDrag *drag,
+ gboolean delete_data,
+ GtkText *self)
{
g_object_set_data (G_OBJECT (self), "drag-source", NULL);
+ if (delete_data)
+ gtk_text_delete_selection (self);
}
static void
@@ -2848,10 +2853,7 @@ gtk_text_drag_gesture_update (GtkGestureDrag *gesture,
paintable,
priv->drag_start_x - ranges[0],
priv->drag_start_y);
- g_signal_connect_swapped (source, "drag-data-delete",
- G_CALLBACK (gtk_text_delete_selection), self);
- g_signal_connect_swapped (source, "drag-end",
- G_CALLBACK (drag_end), self);
+ g_signal_connect_swapped (source, "drag-end", G_CALLBACK (drag_end), self);
g_object_set_data_full (G_OBJECT (self), "drag-source", source, g_object_unref);
gtk_drag_source_drag_begin (source,
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index e319430e03..42acb3f50b 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -677,13 +677,14 @@ static void gtk_tree_view_forall (GtkContainer *container,
/* Source side drag signals */
static void gtk_tree_view_drag_begin (GtkDragSource *source,
+ GdkDrag *drag,
GtkWidget *widget);
static void gtk_tree_view_drag_end (GtkDragSource *source,
+ GdkDrag *drag,
+ gboolean delete_data,
GtkWidget *widget);
static GBytes *gtk_tree_view_drag_data_get (const char *mimetype,
gpointer data);
-static void gtk_tree_view_drag_data_delete (GtkDragSource *source,
- GtkWidget *widget);
/* Target side drag signals */
static void gtk_tree_view_drag_leave (GtkDropTarget *dest,
@@ -7129,6 +7130,7 @@ gtk_tree_view_maybe_begin_dragging_row (GtkTreeView *tree_view)
static void
gtk_tree_view_drag_begin (GtkDragSource *source,
+ GdkDrag *drag,
GtkWidget *widget)
{
GtkTreeView *tree_view;
@@ -7171,13 +7173,43 @@ gtk_tree_view_drag_begin (GtkDragSource *source,
}
static void
-gtk_tree_view_drag_end (GtkDragSource *sourc,
+gtk_tree_view_drag_end (GtkDragSource *source,
+ GdkDrag *drag,
+ gboolean delete_data,
GtkWidget *widget)
{
GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
+ TreeViewDragInfo *di;
+ GtkTreeModel *model;
+ GtkTreePath *source_row;
tree_view->event_last_x = -10000;
tree_view->event_last_y = -10000;
+
+ if (!delete_data)
+ return;
+
+ tree_view = GTK_TREE_VIEW (widget);
+ model = gtk_tree_view_get_model (tree_view);
+
+ if (!check_model_dnd (model, GTK_TYPE_TREE_DRAG_SOURCE, "drag_data_delete"))
+ return;
+
+ di = get_info (tree_view);
+
+ if (di == NULL)
+ return;
+
+ source_row = get_source_row (source);
+
+ if (source_row == NULL)
+ return;
+
+ gtk_tree_drag_source_drag_data_delete (GTK_TREE_DRAG_SOURCE (model), source_row);
+
+ gtk_tree_path_free (source_row);
+
+ set_source_row (source, NULL, NULL);
}
/* Default signal implementations for the drag signals */
@@ -7232,39 +7264,6 @@ gtk_tree_view_drag_data_get (const char *mime_type,
gtk_selection_data_get_length (&sdata));
}
-
-static void
-gtk_tree_view_drag_data_delete (GtkDragSource *source,
- GtkWidget *widget)
-{
- TreeViewDragInfo *di;
- GtkTreeModel *model;
- GtkTreeView *tree_view;
- GtkTreePath *source_row;
-
- tree_view = GTK_TREE_VIEW (widget);
- model = gtk_tree_view_get_model (tree_view);
-
- if (!check_model_dnd (model, GTK_TYPE_TREE_DRAG_SOURCE, "drag_data_delete"))
- return;
-
- di = get_info (tree_view);
-
- if (di == NULL)
- return;
-
- source_row = get_source_row (source);
-
- if (source_row == NULL)
- return;
-
- gtk_tree_drag_source_drag_data_delete (GTK_TREE_DRAG_SOURCE (model), source_row);
-
- gtk_tree_path_free (source_row);
-
- set_source_row (source, NULL, NULL);
-}
-
static void
gtk_tree_view_drag_leave (GtkDropTarget *dest,
GtkTreeView *tree_view)
@@ -12934,7 +12933,6 @@ gtk_tree_view_enable_model_drag_source (GtkTreeView *tree_view,
g_object_unref (content);
g_signal_connect (di->source, "drag-begin", G_CALLBACK (gtk_tree_view_drag_begin), tree_view);
g_signal_connect (di->source, "drag-end", G_CALLBACK (gtk_tree_view_drag_end), tree_view);
- g_signal_connect (di->source, "drag-data-delete", G_CALLBACK (gtk_tree_view_drag_data_delete), tree_view);
di->start_button_mask = start_button_mask;
di->source_set = TRUE;
diff --git a/tests/testdnd2.c b/tests/testdnd2.c
index 98c44c8c76..b766d0460b 100644
--- a/tests/testdnd2.c
+++ b/tests/testdnd2.c
@@ -273,7 +273,9 @@ drag_end (GtkDragSource *source)
}
static gboolean
-drag_failed (GtkDragSource *source, GdkDragCancelReason reason)
+drag_failed (GtkDragSource *source,
+ GdkDrag *drag,
+ GdkDragCancelReason reason)
{
g_print ("drag failed: %d\n", reason);
return FALSE;
@@ -316,7 +318,8 @@ make_image (const gchar *icon_name, int hotspot)
static void
spinner_drag_begin (GtkDragSource *source,
- GtkWidget *widget)
+ GdkDrag *drag,
+ GtkWidget *widget)
{
GdkPaintable *paintable;
diff --git a/tests/testlist3.c b/tests/testlist3.c
index 5795067e93..3cdf7872dc 100644
--- a/tests/testlist3.c
+++ b/tests/testlist3.c
@@ -6,6 +6,7 @@ static const char *entries[] = {
static void
drag_begin (GtkDragSource *source,
+ GdkDrag *drag,
GtkWidget *widget)
{
GtkWidget *row;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]