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:
185
gtk/gtkdnd.c
185
gtk/gtkdnd.c
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 widget’s 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;
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user