Remove gdk_drag_get_data

This is not used anymore, so we can remove it,
and the GtkDropTarget::drag-data-received signal
that it emits.
This commit is contained in:
Matthias Clasen
2020-01-03 16:26:15 -05:00
parent 1075607528
commit 19ee9b4c57
4 changed files with 3 additions and 218 deletions

View File

@@ -107,168 +107,6 @@ static GtkDragDestInfo * gtk_drag_get_dest_info (GdkDrop *drop,
gboolean create);
/********************
* Destination side *
********************/
typedef struct {
GdkDrop *drop;
GtkWidget *widget;
const char *mime_type;
} GtkDragGetData;
static void
gtk_drag_get_data_finish (GtkDragGetData *data,
guchar *bytes,
gsize size)
{
GtkDragDestSite *site;
GtkSelectionData sdata;
GdkContentFormats *target_list = NULL;
GdkDragAction actions = 0;
GtkDestDefaults flags = 0;
site = g_object_get_data (G_OBJECT (data->widget), "gtk-drag-dest");
sdata.target = data->mime_type;
sdata.type = data->mime_type;
sdata.format = 8;
sdata.length = size;
sdata.data = bytes ? bytes : (guchar *)g_strdup ("");
sdata.display = gtk_widget_get_display (data->widget);
if (site)
{
target_list = gtk_drop_target_get_formats (site->dest);
actions = gtk_drop_target_get_actions (site->dest);
flags = gtk_drop_target_get_defaults (site->dest);
}
if (target_list)
{
if (gdk_content_formats_contain_mime_type (target_list, data->mime_type))
{
if (!(flags & GTK_DEST_DEFAULT_DROP) || size >= 0)
gtk_drop_target_emit_drag_data_received (site->dest, data->drop, &sdata);
}
}
else
{
gtk_drop_target_emit_drag_data_received (site->dest, data->drop, &sdata);
}
if (flags & GTK_DEST_DEFAULT_DROP)
{
GdkDragAction action = actions & gdk_drop_get_actions (data->drop);
if (size == 0)
action = 0;
if (!gdk_drag_action_is_unique (action))
{
if (action & GDK_ACTION_COPY)
action = GDK_ACTION_COPY;
else if (action & GDK_ACTION_MOVE)
action = GDK_ACTION_MOVE;
}
gdk_drop_finish (data->drop, action);
}
g_object_unref (data->widget);
g_object_unref (data->drop);
g_slice_free (GtkDragGetData, data);
}
static void
gtk_drag_get_data_got_data (GObject *source,
GAsyncResult *result,
gpointer data)
{
gssize written;
written = g_output_stream_splice_finish (G_OUTPUT_STREAM (source), result, NULL);
if (written < 0)
{
gtk_drag_get_data_finish (data, NULL, 0);
}
else
{
gtk_drag_get_data_finish (data,
g_memory_output_stream_get_data (G_MEMORY_OUTPUT_STREAM (source)),
g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (source)));
}
}
static void
gtk_drag_get_data_got_stream (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
GtkDragGetData *data = user_data;
GInputStream *input_stream;
GOutputStream *output_stream;
input_stream = gdk_drop_read_finish (GDK_DROP (source), result, &data->mime_type, NULL);
if (input_stream == NULL)
{
gtk_drag_get_data_finish (data, NULL, 0);
return;
}
output_stream = g_memory_output_stream_new_resizable ();
g_output_stream_splice_async (output_stream,
input_stream,
G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE | G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET,
G_PRIORITY_DEFAULT,
NULL,
gtk_drag_get_data_got_data,
data);
g_object_unref (output_stream);
g_object_unref (input_stream);
}
/**
* gtk_drag_get_data: (method)
* @widget: the widget that will receive the
* #GtkWidget::drag-data-received signal
* @drop: the #GdkDrop
* @target: the target (form of the data) to retrieve
*
* Gets the data associated with a drag. When the data
* is received or the retrieval fails, GTK+ will emit a
* #GtkWidget::drag-data-received signal. Failure of the retrieval
* is indicated by the length field of the @selection_data
* signal parameter being negative. However, when gtk_drag_get_data()
* is called implicitely because the %GTK_DEST_DEFAULT_DROP was set,
* then the widget will not receive notification of failed
* drops.
*/
void
gtk_drag_get_data (GtkWidget *widget,
GdkDrop *drop,
GdkAtom target)
{
GtkDragGetData *data;
g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (GDK_IS_DROP (drop));
data = g_slice_new0 (GtkDragGetData);
data->widget = g_object_ref (widget);
data->drop = g_object_ref (drop);
data->mime_type = target;
gdk_drop_read_async (drop,
(const gchar *[2]) { target, NULL },
G_PRIORITY_DEFAULT,
NULL,
gtk_drag_get_data_got_stream,
data);
}
/*
* _gtk_drag_dest_handle_event:
* @toplevel: Toplevel widget that received the event
@@ -591,33 +429,12 @@ gtk_drag_dest_drop (GtkWidget *widget,
{
GtkDragDestSite *site;
GtkDragDestInfo *info;
GtkDestDefaults flags;
gboolean retval;
site = g_object_get_data (G_OBJECT (widget), "gtk-drag-dest");
g_return_val_if_fail (site != NULL, FALSE);
flags = gtk_drop_target_get_defaults (site->dest);
info = gtk_drag_get_dest_info (drop, FALSE);
g_return_val_if_fail (info != NULL, FALSE);
if (flags & GTK_DEST_DEFAULT_DROP)
{
GdkAtom target;
target = gtk_drop_target_match (site->dest, drop);
if (target == NULL)
{
gdk_drop_finish (drop, 0);
return TRUE;
}
else
gtk_drag_get_data (widget, drop, target);
}
retval = gtk_drop_target_emit_drag_drop (site->dest, drop, x, y);
return (flags & GTK_DEST_DEFAULT_DROP) ? TRUE : retval;
return gtk_drop_target_emit_drag_drop (site->dest, drop, x, y);
}

View File

@@ -39,11 +39,6 @@ G_BEGIN_DECLS
/* Destination side */
GDK_AVAILABLE_IN_ALL
void gtk_drag_get_data (GtkWidget *widget,
GdkDrop *drop,
GdkAtom target);
G_END_DECLS

View File

@@ -391,19 +391,6 @@ gtk_drop_target_class_init (GtkDropTargetClass *class)
NULL,
G_TYPE_BOOLEAN, 2,
G_TYPE_INT, G_TYPE_INT);
signals[DRAG_DATA_RECEIVED] =
g_signal_new (I_("drag-data-received"),
G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
_gtk_marshal_VOID__BOXED,
G_TYPE_NONE, 1,
GTK_TYPE_SELECTION_DATA | G_SIGNAL_TYPE_STATIC_SCOPE);
g_signal_set_va_marshaller (signals[DRAG_DATA_RECEIVED],
G_TYPE_FROM_CLASS (class),
_gtk_marshal_VOID__BOXEDv);
}
/**
@@ -756,15 +743,6 @@ gtk_drop_target_emit_drag_drop (GtkDropTarget *dest,
return result;
}
void
gtk_drop_target_emit_drag_data_received (GtkDropTarget *dest,
GdkDrop *drop,
GtkSelectionData *sdata)
{
set_drop (dest, drop);
g_signal_emit (dest, signals[DRAG_DATA_RECEIVED], 0, sdata);
}
/**
* gtk_drag_highlight: (method)
* @widget: a widget to highlight

View File

@@ -48,12 +48,7 @@ typedef struct _GtkDropTarget GtkDropTarget;
* @GTK_DEST_DEFAULT_HIGHLIGHT: If set for a widget, GTK+ will draw a highlight on
* this widget as long as a drag is over this widget and the widget drag format
* and action are acceptable.
* @GTK_DEST_DEFAULT_OP: If set for a widget, when a drop occurs, GTK+ will
* will check if the drag matches this widgets list of possible formats and
* actions. If so, GTK+ will call gtk_drag_get_data() on behalf of the widget.
* Whether or not the drop is successful, GTK+ will call gdk_drag_finish(). If
* the action was a move, then if the drag was successful, then %TRUE will be
* passed for the @delete parameter to gdk_drag_finish().
* @GTK_DEST_DEFAULT_DROP: Does not do anything now.
* @GTK_DEST_DEFAULT_ALL: If set, specifies that all default actions should
* be taken.
*
@@ -65,7 +60,7 @@ typedef enum {
GTK_DEST_DEFAULT_MOTION = 1 << 0,
GTK_DEST_DEFAULT_HIGHLIGHT = 1 << 1,
GTK_DEST_DEFAULT_DROP = 1 << 2,
GTK_DEST_DEFAULT_ALL = 0x07
GTK_DEST_DEFAULT_ALL = 0x7
} GtkDestDefaults;