diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-01-01 02:25:18 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-01-08 18:48:20 -0500 |
commit | 9b01d9a78421d04472e1b9397428c7ca9b2e4a08 (patch) | |
tree | 58ea8d35732f7178d601f2a2b0611172a1002e45 /gtk/gtkdragsource.c | |
parent | b4c689ecd623c38b22fc7f3f6a83860d5d1e02f6 (diff) | |
download | gtk+-9b01d9a78421d04472e1b9397428c7ca9b2e4a08.tar.gz |
Remove traditional drag source API
gtk_drag_source_set, gtk_drag_begin, related apis
and the GtkWidget source-side signals have all been
replaced by GtkDragSource.
Diffstat (limited to 'gtk/gtkdragsource.c')
-rw-r--r-- | gtk/gtkdragsource.c | 357 |
1 files changed, 0 insertions, 357 deletions
diff --git a/gtk/gtkdragsource.c b/gtk/gtkdragsource.c index 5074ab944e..b0300df724 100644 --- a/gtk/gtkdragsource.c +++ b/gtk/gtkdragsource.c @@ -40,363 +40,6 @@ #include "gtkprivate.h" #include "gtkmarshalers.h" - -typedef struct _GtkDragSourceSite GtkDragSourceSite; - -struct _GtkDragSourceSite -{ - GdkModifierType start_button_mask; - GdkContentFormats *target_list; /* Targets for drag data */ - GdkDragAction actions; /* Possible actions */ - - GtkImageDefinition *image_def; - GtkGesture *drag_gesture; -}; - -static void -gtk_drag_source_gesture_begin (GtkGesture *gesture, - GdkEventSequence *sequence, - gpointer data) -{ - GtkDragSourceSite *site = data; - guint button; - - if (gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture))) - button = 1; - else - button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture)); - - g_assert (button >= 1); - - if (!site->start_button_mask || - !(site->start_button_mask & (GDK_BUTTON1_MASK << (button - 1)))) - gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_DENIED); -} - -static void -gtk_drag_source_gesture_update (GtkGesture *gesture, - GdkEventSequence *sequence, - gpointer data) -{ - gdouble start_x, start_y, offset_x, offset_y; - GtkDragSourceSite *site = data; - GtkWidget *widget; - - widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture)); - - if (gtk_gesture_is_recognized (site->drag_gesture)) - { - gtk_gesture_drag_get_start_point (GTK_GESTURE_DRAG (site->drag_gesture), - &start_x, &start_y); - gtk_gesture_drag_get_offset (GTK_GESTURE_DRAG (site->drag_gesture), - &offset_x, &offset_y); - - if (gtk_drag_check_threshold (widget, start_x, start_y, - start_x + offset_x, start_y + offset_y)) - { - GdkDevice *device = gtk_gesture_get_device (site->drag_gesture); - - gtk_event_controller_reset (GTK_EVENT_CONTROLLER (site->drag_gesture)); - - gtk_drag_begin_internal (widget, - device, - site->image_def, site->target_list, - site->actions, - start_x, start_y); - } - } -} - -static void -gtk_drag_source_site_destroy (gpointer data) -{ - GtkDragSourceSite *site = data; - - if (site->target_list) - gdk_content_formats_unref (site->target_list); - - gtk_image_definition_unref (site->image_def); - /* This gets called only during widget finalization. - * And widget finalization takes care of gestures. */ - g_slice_free (GtkDragSourceSite, site); -} - -/** - * gtk_drag_source_set: (method) - * @widget: a #GtkWidget - * @start_button_mask: the bitmask of buttons that can start the drag - * @formats: (allow-none): the formats that the drag will support, - * may be %NULL - * @actions: the bitmask of possible actions for a drag from this widget - * - * Sets up a widget so that GTK+ will start a drag operation when the user - * clicks and drags on the widget. The widget must have a window. - */ -void -gtk_drag_source_set (GtkWidget *widget, - GdkModifierType start_button_mask, - GdkContentFormats *targets, - GdkDragAction actions) -{ - GtkDragSourceSite *site; - - g_return_if_fail (GTK_IS_WIDGET (widget)); - - site = g_object_get_data (G_OBJECT (widget), "gtk-site-data"); - - if (site) - { - if (site->target_list) - gdk_content_formats_unref (site->target_list); - } - else - { - site = g_slice_new0 (GtkDragSourceSite); - site->image_def = gtk_image_definition_new_empty (); - site->drag_gesture = gtk_gesture_drag_new (); - gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (site->drag_gesture), - GTK_PHASE_CAPTURE); - gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (site->drag_gesture), 0); - g_signal_connect (site->drag_gesture, "begin", - G_CALLBACK (gtk_drag_source_gesture_begin), - site); - g_signal_connect (site->drag_gesture, "update", - G_CALLBACK (gtk_drag_source_gesture_update), - site); - gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (site->drag_gesture)); - - g_object_set_data_full (G_OBJECT (widget), - I_("gtk-site-data"), - site, gtk_drag_source_site_destroy); - } - - site->start_button_mask = start_button_mask; - - if (targets) - site->target_list = gdk_content_formats_ref (targets); - else - site->target_list = NULL; - - site->actions = actions; -} - -/** - * gtk_drag_source_unset: (method) - * @widget: a #GtkWidget - * - * Undoes the effects of gtk_drag_source_set(). - */ -void -gtk_drag_source_unset (GtkWidget *widget) -{ - g_return_if_fail (GTK_IS_WIDGET (widget)); - - g_object_set_data (G_OBJECT (widget), I_("gtk-site-data"), NULL); -} - -/** - * gtk_drag_source_get_target_list: (method) - * @widget: a #GtkWidget - * - * Gets the list of targets this widget can provide for - * drag-and-drop. - * - * Returns: (nullable) (transfer none): the #GdkContentFormats, or %NULL if none - */ -GdkContentFormats * -gtk_drag_source_get_target_list (GtkWidget *widget) -{ - GtkDragSourceSite *site; - - g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); - - site = g_object_get_data (G_OBJECT (widget), "gtk-site-data"); - - return site ? site->target_list : NULL; -} - -/** - * gtk_drag_source_set_target_list: (method) - * @widget: a #GtkWidget that’s a drag source - * @target_list: (allow-none): list of draggable targets, or %NULL for none - * - * Changes the target types that this widget offers for drag-and-drop. - * The widget must first be made into a drag source with - * gtk_drag_source_set(). - */ -void -gtk_drag_source_set_target_list (GtkWidget *widget, - GdkContentFormats *target_list) -{ - GtkDragSourceSite *site; - - g_return_if_fail (GTK_IS_WIDGET (widget)); - - site = g_object_get_data (G_OBJECT (widget), "gtk-site-data"); - if (site == NULL) - { - g_warning ("gtk_drag_source_set_target_list() requires the widget " - "to already be a drag source."); - return; - } - - if (target_list) - gdk_content_formats_ref (target_list); - - if (site->target_list) - gdk_content_formats_unref (site->target_list); - - site->target_list = target_list; -} - -/** - * gtk_drag_source_add_text_targets: (method) - * @widget: a #GtkWidget that’s is a drag source - * - * Add the text targets supported by #GtkSelectionData to - * the target list of the drag source. The targets - * are added with @info = 0. If you need another value, - * use gtk_content_formats_add_text_targets() and - * gtk_drag_source_set_target_list(). - */ -void -gtk_drag_source_add_text_targets (GtkWidget *widget) -{ - GdkContentFormats *target_list; - - target_list = gtk_drag_source_get_target_list (widget); - if (target_list) - gdk_content_formats_ref (target_list); - else - target_list = gdk_content_formats_new (NULL, 0); - target_list = gtk_content_formats_add_text_targets (target_list); - gtk_drag_source_set_target_list (widget, target_list); - gdk_content_formats_unref (target_list); -} - -/** - * gtk_drag_source_add_image_targets: (method) - * @widget: a #GtkWidget that’s is a drag source - * - * Add the writable image targets supported by #GtkSelectionData to - * the target list of the drag source. The targets - * are added with @info = 0. If you need another value, - * use gtk_target_list_add_image_targets() and - * gtk_drag_source_set_target_list(). - */ -void -gtk_drag_source_add_image_targets (GtkWidget *widget) -{ - GdkContentFormats *target_list; - - target_list = gtk_drag_source_get_target_list (widget); - if (target_list) - gdk_content_formats_ref (target_list); - else - target_list = gdk_content_formats_new (NULL, 0); - target_list = gtk_content_formats_add_image_targets (target_list, TRUE); - gtk_drag_source_set_target_list (widget, target_list); - gdk_content_formats_unref (target_list); -} - -/** - * gtk_drag_source_add_uri_targets: (method) - * @widget: a #GtkWidget that’s is a drag source - * - * Add the URI targets supported by #GtkSelectionData to - * the target list of the drag source. The targets - * are added with @info = 0. If you need another value, - * use gtk_content_formats_add_uri_targets() and - * gtk_drag_source_set_target_list(). - */ -void -gtk_drag_source_add_uri_targets (GtkWidget *widget) -{ - GdkContentFormats *target_list; - - target_list = gtk_drag_source_get_target_list (widget); - if (target_list) - gdk_content_formats_ref (target_list); - else - target_list = gdk_content_formats_new (NULL, 0); - target_list = gtk_content_formats_add_uri_targets (target_list); - gtk_drag_source_set_target_list (widget, target_list); - gdk_content_formats_unref (target_list); -} - -/** - * gtk_drag_source_set_icon_name: (method) - * @widget: a #GtkWidget - * @icon_name: name of icon to use - * - * Sets the icon that will be used for drags from a particular source - * to a themed icon. See the docs for #GtkIconTheme for more details. - */ -void -gtk_drag_source_set_icon_name (GtkWidget *widget, - const gchar *icon_name) -{ - GtkDragSourceSite *site; - - g_return_if_fail (GTK_IS_WIDGET (widget)); - g_return_if_fail (icon_name != NULL); - - site = g_object_get_data (G_OBJECT (widget), "gtk-site-data"); - g_return_if_fail (site != NULL); - - gtk_image_definition_unref (site->image_def); - site->image_def = gtk_image_definition_new_icon_name (icon_name); -} - -/** - * gtk_drag_source_set_icon_gicon: (method) - * @widget: a #GtkWidget - * @icon: A #GIcon - * - * Sets the icon that will be used for drags from a particular source - * to @icon. See the docs for #GtkIconTheme for more details. - */ -void -gtk_drag_source_set_icon_gicon (GtkWidget *widget, - GIcon *icon) -{ - GtkDragSourceSite *site; - - g_return_if_fail (GTK_IS_WIDGET (widget)); - g_return_if_fail (icon != NULL); - - site = g_object_get_data (G_OBJECT (widget), "gtk-site-data"); - g_return_if_fail (site != NULL); - - gtk_image_definition_unref (site->image_def); - site->image_def = gtk_image_definition_new_gicon (icon); -} - -/** - * gtk_drag_source_set_icon_paintable: (method) - * @widget: a #GtkWidget - * @paintable: A #GdkPaintable - * - * Sets the icon that will be used for drags from a particular source - * to @paintable. - */ -void -gtk_drag_source_set_icon_paintable (GtkWidget *widget, - GdkPaintable *paintable) -{ - GtkDragSourceSite *site; - - g_return_if_fail (GTK_IS_WIDGET (widget)); - g_return_if_fail (GDK_IS_PAINTABLE (paintable)); - - site = g_object_get_data (G_OBJECT (widget), "gtk-site-data"); - g_return_if_fail (site != NULL); - - gtk_image_definition_unref (site->image_def); - site->image_def = gtk_image_definition_new_paintable (paintable); -} - - /** * SECTION:gtkdragsource * @Short_description: An object to initiate DND operations |