[nautilus] dnd: Major cleanup
- From: António Fernandes <antoniof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus] dnd: Major cleanup
- Date: Thu, 30 Jun 2022 17:41:23 +0000 (UTC)
commit ef1eb2aaf95fb471eb4a35e2f73602a96a3884ff
Author: António Fernandes <antoniof gnome org>
Date: Thu Jun 30 01:28:55 2022 +0100
dnd: Major cleanup
GTK4 does the heavy lifting now, with GtkDropTarget and company.
So, remove code that's no longer going to be useful.
Also slim down file headers.
src/nautilus-dnd.c | 729 +----------------------------------------------------
src/nautilus-dnd.h | 135 +---------
2 files changed, 21 insertions(+), 843 deletions(-)
---
diff --git a/src/nautilus-dnd.c b/src/nautilus-dnd.c
index e57be8a27..eb25b5d4e 100644
--- a/src/nautilus-dnd.c
+++ b/src/nautilus-dnd.c
@@ -1,356 +1,15 @@
-/* nautilus-dnd.c - Common Drag & drop handling code shared by the icon container
- * and the list view.
+/* nautilus-dnd.h - Common Drag & drop handling code
*
- * Copyright (C) 2000, 2001 Eazel, Inc.
+ * Authors: Pavel Cisler <pavel eazel com>,
+ * Ettore Perazzoli <ettore gnu org>
+ * Copyright (C) 2000, 2001 Eazel, Inc.
+ * Copyright (C) 2022 The GNOME project contributors
*
- * The Gnome Library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * The Gnome Library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with the Gnome Library; see the file COPYING.LIB. If not,
- * see <http://www.gnu.org/licenses/>.
- *
- * Authors: Pavel Cisler <pavel eazel com>,
- * Ettore Perazzoli <ettore gnu org>
+ * SPDX-License-Identifier: GPL-3.0-or-later
*/
-#include <config.h>
#include "nautilus-dnd.h"
-#include <eel/eel-vfs-extensions.h>
-
-#if 0 && NAUTILUS_DND_NEEDS_GTK4_REIMPLEMENTATION
-
-#include "nautilus-program-choosing.h"
-#include <eel/eel-glib-extensions.h>
-#include <eel/eel-string.h>
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-#include "nautilus-file-utilities.h"
-#include <stdio.h>
-#include <string.h>
-
-/* a set of defines stolen from the eel-icon-dnd.c file.
- * These are in microseconds.
- */
-#define AUTOSCROLL_TIMEOUT_INTERVAL 100
-#define AUTOSCROLL_INITIAL_DELAY 100000
-
-/* drag this close to the view edge to start auto scroll*/
-#define AUTO_SCROLL_MARGIN 30
-
-/* the smallest amount of auto scroll used when we just enter the autoscroll
- * margin
- */
-#define MIN_AUTOSCROLL_DELTA 5
-
-/* the largest amount of auto scroll used when we are right over the view
- * edge
- */
-#define MAX_AUTOSCROLL_DELTA 50
-
-void
-nautilus_drag_init (NautilusDragInfo *drag_info,
- const GtkTargetEntry *drag_types,
- int drag_type_count,
- gboolean add_text_targets)
-{
- drag_info->target_list = gtk_target_list_new (drag_types,
- drag_type_count);
-
- if (add_text_targets)
- {
- gtk_target_list_add_text_targets (drag_info->target_list,
- NAUTILUS_ICON_DND_TEXT);
- }
-
- drag_info->drop_occurred = FALSE;
- drag_info->need_to_destroy = FALSE;
-}
-
-void
-nautilus_drag_finalize (NautilusDragInfo *drag_info)
-{
- gtk_target_list_unref (drag_info->target_list);
- nautilus_drag_destroy_selection_list (drag_info->selection_list);
- nautilus_drag_destroy_selection_list (drag_info->selection_cache);
-
- g_free (drag_info);
-}
-
-
-/* Functions to deal with NautilusDragSelectionItems. */
-
-NautilusDragSelectionItem *
-nautilus_drag_selection_item_new (void)
-{
- return g_new0 (NautilusDragSelectionItem, 1);
-}
-
-static void
-drag_selection_item_destroy (NautilusDragSelectionItem *item)
-{
- g_clear_object (&item->file);
- g_free (item->uri);
- g_free (item);
-}
-
-void
-nautilus_drag_destroy_selection_list (GList *list)
-{
- GList *p;
-
- if (list == NULL)
- {
- return;
- }
-
- for (p = list; p != NULL; p = p->next)
- {
- drag_selection_item_destroy (p->data);
- }
-
- g_list_free (list);
-}
-
-GList *
-nautilus_drag_uri_list_from_selection_list (const GList *selection_list)
-{
- NautilusDragSelectionItem *selection_item;
- GList *uri_list;
- const GList *l;
-
- uri_list = NULL;
- for (l = selection_list; l != NULL; l = l->next)
- {
- selection_item = (NautilusDragSelectionItem *) l->data;
- if (selection_item->uri != NULL)
- {
- uri_list = g_list_prepend (uri_list, g_strdup (selection_item->uri));
- }
- }
-
- return g_list_reverse (uri_list);
-}
-
-/*
- * Transfer: Full. Free with g_list_free_full (list, g_object_unref);
- */
-GList *
-nautilus_drag_file_list_from_selection_list (const GList *selection_list)
-{
- NautilusDragSelectionItem *selection_item;
- GList *file_list;
- const GList *l;
-
- file_list = NULL;
- for (l = selection_list; l != NULL; l = l->next)
- {
- selection_item = (NautilusDragSelectionItem *) l->data;
- if (selection_item->file != NULL)
- {
- file_list = g_list_prepend (file_list, g_object_ref (selection_item->file));
- }
- }
-
- return g_list_reverse (file_list);
-}
-
-GList *
-nautilus_drag_uri_list_from_array (const char **uris)
-{
- GList *uri_list;
- int i;
-
- if (uris == NULL)
- {
- return NULL;
- }
-
- uri_list = NULL;
-
- for (i = 0; uris[i] != NULL; i++)
- {
- uri_list = g_list_prepend (uri_list, g_strdup (uris[i]));
- }
-
- return g_list_reverse (uri_list);
-}
-
-GList *
-nautilus_drag_build_selection_list (GtkSelectionData *data)
-{
- GList *result;
- const guchar *p, *oldp;
- int size;
-
- result = NULL;
- oldp = gtk_selection_data_get_data (data);
- size = gtk_selection_data_get_length (data);
-
- while (size > 0)
- {
- NautilusDragSelectionItem *item;
- guint len;
-
- /* The list is in the form:
- *
- * name\rx:y:width:height\r\n
- *
- * The geometry information after the first \r is optional. */
-
- /* 1: Decode name. */
-
- p = memchr (oldp, '\r', size);
- if (p == NULL)
- {
- break;
- }
-
- item = nautilus_drag_selection_item_new ();
-
- len = p - oldp;
-
- item->uri = g_malloc (len + 1);
- memcpy (item->uri, oldp, len);
- item->uri[len] = 0;
- item->file = nautilus_file_get_by_uri (item->uri);
-
- p++;
- if (*p == '\n' || *p == '\0')
- {
- result = g_list_prepend (result, item);
- if (p == 0)
- {
- g_warning ("Invalid x-special/gnome-icon-list data received: "
- "missing newline character.");
- break;
- }
- else
- {
- oldp = p + 1;
- continue;
- }
- }
-
- size -= p - oldp;
- oldp = p;
-
- /* 2: Decode geometry information. */
-
- item->got_icon_position = sscanf ((const gchar *) p, "%d:%d:%d:%d%*s",
- &item->icon_x, &item->icon_y,
- &item->icon_width, &item->icon_height) == 4;
- if (!item->got_icon_position)
- {
- g_warning ("Invalid x-special/gnome-icon-list data received: "
- "invalid icon position specification.");
- }
-
- result = g_list_prepend (result, item);
-
- p = memchr (p, '\r', size);
- if (p == NULL || p[1] != '\n')
- {
- g_warning ("Invalid x-special/gnome-icon-list data received: "
- "missing newline character.");
- if (p == NULL)
- {
- break;
- }
- }
- else
- {
- p += 2;
- }
-
- size -= p - oldp;
- oldp = p;
- }
-
- return g_list_reverse (result);
-}
-
-static gboolean
-nautilus_drag_file_local_internal (const char *target_uri_string,
- const char *first_source_uri)
-{
- /* check if the first item on the list has target_uri_string as a parent
- * FIXME:
- * we should really test each item but that would be slow for large selections
- * and currently dropped items can only be from the same container
- */
- GFile *target, *item, *parent;
- gboolean result;
-
- result = FALSE;
-
- target = g_file_new_for_uri (target_uri_string);
-
- /* get the parent URI of the first item in the selection */
- item = g_file_new_for_uri (first_source_uri);
- parent = g_file_get_parent (item);
- g_object_unref (item);
-
- if (parent != NULL)
- {
- result = g_file_equal (parent, target);
- g_object_unref (parent);
- }
-
- g_object_unref (target);
-
- return result;
-}
-
-gboolean
-nautilus_drag_uris_local (const char *target_uri,
- const GList *source_uri_list)
-{
- /* must have at least one item */
- g_assert (source_uri_list);
-
- return nautilus_drag_file_local_internal (target_uri, source_uri_list->data);
-}
-
-gboolean
-nautilus_drag_items_local (const char *target_uri_string,
- const GList *selection_list)
-{
- /* must have at least one item */
- g_assert (selection_list);
-
- return nautilus_drag_file_local_internal (target_uri_string,
- ((NautilusDragSelectionItem *) selection_list->data)->uri);
-}
-
-GdkDragAction
-nautilus_drag_default_drop_action_for_netscape_url (GdkDragContext *context)
-{
- /* Mozilla defaults to copy, but unless thats the
- * only allowed thing (enforced by ctrl) we want to LINK */
- if (gdk_drag_context_get_suggested_action (context) == GDK_ACTION_COPY &&
- gdk_drag_context_get_actions (context) != GDK_ACTION_COPY)
- {
- return GDK_ACTION_LINK;
- }
- else if (gdk_drag_context_get_suggested_action (context) == GDK_ACTION_MOVE)
- {
- /* Don't support move */
- return GDK_ACTION_COPY;
- }
-
- return gdk_drag_context_get_suggested_action (context);
-}
-#endif
-
static gboolean
check_same_fs (NautilusFile *file1,
NautilusFile *file2)
@@ -397,234 +56,6 @@ source_is_deletable (GFile *file)
}
#if 0 && NAUTILUS_DND_NEEDS_GTK4_REIMPLEMENTATION
-
-NautilusDragInfo *
-nautilus_drag_get_source_data (GdkDragContext *context)
-{
- GtkWidget *source_widget;
- NautilusDragInfo *source_data;
-
- source_widget = gtk_drag_get_source_widget (context);
- if (source_widget == NULL)
- {
- return NULL;
- }
-
- if (GTK_IS_TREE_VIEW (source_widget))
- {
- NautilusWindow *window;
- NautilusWindowSlot *active_slot;
- NautilusView *view;
-
- window = NAUTILUS_WINDOW (gtk_widget_get_root (source_widget));
- active_slot = nautilus_window_get_active_slot (window);
- view = nautilus_window_slot_get_current_view (active_slot);
- if (NAUTILUS_IS_LIST_VIEW (view))
- {
- source_data = nautilus_list_view_dnd_get_drag_source_data (NAUTILUS_LIST_VIEW (view),
- context);
- }
- else
- {
- g_warning ("Got a drag context with a tree view source widget, but current view is not list
view");
- source_data = NULL;
- }
- }
- else
- {
- /* it's a slot or something else */
- g_warning ("Requested drag source data from a widget that doesn't support it");
- source_data = NULL;
- }
-
- return source_data;
-}
-#endif
-
-#if 0 && NAUTILUS_DND_NEEDS_GTK4_REIMPLEMENTATION
-
-GdkDragAction
-nautilus_drag_default_drop_action_for_uri_list (GdkDragContext *context,
- const char *target_uri_string)
-{
- if (eel_uri_is_trash (target_uri_string) && (gdk_drag_context_get_actions (context) & GDK_ACTION_MOVE))
- {
- /* Only move to Trash */
- return GDK_ACTION_MOVE;
- }
- else
- {
- return gdk_drag_context_get_suggested_action (context);
- }
-}
-
-/* Encode a "x-special/gnome-icon-list" selection.
- * Along with the URIs of the dragged files, this encodes
- * the location and size of each icon relative to the cursor.
- */
-static void
-add_one_gnome_icon (const char *uri,
- int x,
- int y,
- int w,
- int h,
- gpointer data)
-{
- GString *result;
-
- result = (GString *) data;
-
- g_string_append_printf (result, "%s\r%d:%d:%hu:%hu\r\n",
- uri, x, y, w, h);
-}
-
-static void
-add_one_uri (const char *uri,
- int x,
- int y,
- int w,
- int h,
- gpointer data)
-{
- GString *result;
-
- result = (GString *) data;
-
- g_string_append (result, uri);
- g_string_append (result, "\r\n");
-}
-
-static void
-cache_one_item (const char *uri,
- int x,
- int y,
- int w,
- int h,
- gpointer data)
-{
- GList **cache = data;
- NautilusDragSelectionItem *item;
-
- item = nautilus_drag_selection_item_new ();
- item->uri = nautilus_uri_to_native_uri (uri);
-
- if (item->uri == NULL)
- {
- item->uri = g_strdup (uri);
- }
-
- item->file = nautilus_file_get_by_uri (uri);
- item->icon_x = x;
- item->icon_y = y;
- item->icon_width = w;
- item->icon_height = h;
- *cache = g_list_prepend (*cache, item);
-}
-
-GList *
-nautilus_drag_create_selection_cache (gpointer container_context,
- NautilusDragEachSelectedItemIterator each_selected_item_iterator)
-{
- GList *cache = NULL;
-
- (*each_selected_item_iterator)(cache_one_item, container_context, &cache);
- cache = g_list_reverse (cache);
-
- return cache;
-}
-
-/* Common function for drag_data_get_callback calls.
- * Returns FALSE if it doesn't handle drag data */
-gboolean
-nautilus_drag_drag_data_get_from_cache (GList *cache,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- guint info,
- guint32 time)
-{
- GList *l;
- GString *result;
- NautilusDragEachSelectedItemDataGet func;
-
- if (cache == NULL)
- {
- return FALSE;
- }
-
- switch (info)
- {
- case NAUTILUS_ICON_DND_GNOME_ICON_LIST:
- {
- func = add_one_gnome_icon;
- }
- break;
-
- case NAUTILUS_ICON_DND_URI_LIST:
- case NAUTILUS_ICON_DND_TEXT:
- {
- func = add_one_uri;
- }
- break;
-
- default:
- {
- return FALSE;
- }
- }
-
- result = g_string_new (NULL);
-
- for (l = cache; l != NULL; l = l->next)
- {
- NautilusDragSelectionItem *item = l->data;
- (*func)(item->uri, item->icon_x, item->icon_y, item->icon_width, item->icon_height, result);
- }
-
- gtk_selection_data_set (selection_data,
- gtk_selection_data_get_target (selection_data),
- 8, (guchar *) result->str, result->len);
- g_string_free (result, TRUE);
-
- return TRUE;
-}
-
-typedef struct
-{
- GMainLoop *loop;
- GdkDragAction chosen;
-} DropActionMenuData;
-
-static void
-menu_deactivate_callback (GtkWidget *menu,
- gpointer data)
-{
- DropActionMenuData *damd;
-
- damd = data;
-
- if (g_main_loop_is_running (damd->loop))
- {
- g_main_loop_quit (damd->loop);
- }
-}
-
-static void
-drop_action_activated_callback (GtkWidget *menu_item,
- gpointer data)
-{
- DropActionMenuData *damd;
-
- damd = data;
-
- damd->chosen = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu_item),
- "action"));
-
- if (g_main_loop_is_running (damd->loop))
- {
- g_main_loop_quit (damd->loop);
- }
-}
-
static void
append_drop_action_menu_item (GtkWidget *menu,
const char *text,
@@ -650,12 +81,13 @@ append_drop_action_menu_item (GtkWidget *menu,
gtk_widget_show (menu_item);
}
-
+#endif
/* Pops up a menu of actions to perform on dropped files */
GdkDragAction
nautilus_drag_drop_action_ask (GtkWidget *widget,
GdkDragAction actions)
{
+#if 0
GtkWidget *popover;
GtkWidget *menu;
GtkWidget *menu_item;
@@ -723,150 +155,9 @@ nautilus_drag_drop_action_ask (GtkWidget *widget,
g_object_unref (popover);
return damd.chosen;
-}
-
-gboolean
-nautilus_drag_autoscroll_in_scroll_region (GtkWidget *widget)
-{
- float x_scroll_delta, y_scroll_delta;
-
- nautilus_drag_autoscroll_calculate_delta (widget, &x_scroll_delta, &y_scroll_delta);
-
- return x_scroll_delta != 0 || y_scroll_delta != 0;
-}
-
-
-void
-nautilus_drag_autoscroll_calculate_delta (GtkWidget *widget,
- float *x_scroll_delta,
- float *y_scroll_delta)
-{
- GtkAllocation allocation;
- GdkDisplay *display;
- GdkSeat *seat;
- GdkDevice *pointer;
- int x, y;
-
- g_assert (GTK_IS_WIDGET (widget));
-
- display = gtk_widget_get_display (widget);
- seat = gdk_display_get_default_seat (display);
- pointer = gdk_seat_get_pointer (seat);
- gdk_window_get_device_position (gtk_widget_get_window (widget), pointer,
- &x, &y, NULL);
-
- /* Find out if we are anywhere close to the tree view edges
- * to see if we need to autoscroll.
- */
- *x_scroll_delta = 0;
- *y_scroll_delta = 0;
-
- if (x < AUTO_SCROLL_MARGIN)
- {
- *x_scroll_delta = (float) (x - AUTO_SCROLL_MARGIN);
- }
-
- gtk_widget_get_allocation (widget, &allocation);
- if (x > allocation.width - AUTO_SCROLL_MARGIN)
- {
- if (*x_scroll_delta != 0)
- {
- /* Already trying to scroll because of being too close to
- * the top edge -- must be the window is really short,
- * don't autoscroll.
- */
- return;
- }
- *x_scroll_delta = (float) (x - (allocation.width - AUTO_SCROLL_MARGIN));
- }
-
- if (y < AUTO_SCROLL_MARGIN)
- {
- *y_scroll_delta = (float) (y - AUTO_SCROLL_MARGIN);
- }
-
- if (y > allocation.height - AUTO_SCROLL_MARGIN)
- {
- if (*y_scroll_delta != 0)
- {
- /* Already trying to scroll because of being too close to
- * the top edge -- must be the window is really narrow,
- * don't autoscroll.
- */
- return;
- }
- *y_scroll_delta = (float) (y - (allocation.height - AUTO_SCROLL_MARGIN));
- }
-
- if (*x_scroll_delta == 0 && *y_scroll_delta == 0)
- {
- /* no work */
- return;
- }
-
- /* Adjust the scroll delta to the proper acceleration values depending on how far
- * into the sroll margins we are.
- * FIXME bugzilla.eazel.com 2486:
- * we could use an exponential acceleration factor here for better feel
- */
- if (*x_scroll_delta != 0)
- {
- *x_scroll_delta /= AUTO_SCROLL_MARGIN;
- *x_scroll_delta *= (MAX_AUTOSCROLL_DELTA - MIN_AUTOSCROLL_DELTA);
- *x_scroll_delta += MIN_AUTOSCROLL_DELTA;
- }
-
- if (*y_scroll_delta != 0)
- {
- *y_scroll_delta /= AUTO_SCROLL_MARGIN;
- *y_scroll_delta *= (MAX_AUTOSCROLL_DELTA - MIN_AUTOSCROLL_DELTA);
- *y_scroll_delta += MIN_AUTOSCROLL_DELTA;
- }
-}
-
-
-
-void
-nautilus_drag_autoscroll_start (NautilusDragInfo *drag_info,
- GtkWidget *widget,
- GSourceFunc callback,
- gpointer user_data)
-{
- if (nautilus_drag_autoscroll_in_scroll_region (widget))
- {
- if (drag_info->auto_scroll_timeout_id == 0)
- {
- drag_info->waiting_to_autoscroll = TRUE;
- drag_info->start_auto_scroll_in = g_get_monotonic_time ()
- + AUTOSCROLL_INITIAL_DELAY;
-
- drag_info->auto_scroll_timeout_id = g_timeout_add
- (AUTOSCROLL_TIMEOUT_INTERVAL,
- callback,
- user_data);
- }
- }
- else
- {
- if (drag_info->auto_scroll_timeout_id != 0)
- {
- g_source_remove (drag_info->auto_scroll_timeout_id);
- drag_info->auto_scroll_timeout_id = 0;
- }
- }
-}
-
-void
-nautilus_drag_autoscroll_stop (NautilusDragInfo *drag_info)
-{
- if (drag_info->auto_scroll_timeout_id != 0)
- {
- g_source_remove (drag_info->auto_scroll_timeout_id);
- drag_info->auto_scroll_timeout_id = 0;
- }
-}
-
#endif
+ return 0;
+}
GdkDragAction
nautilus_dnd_get_prefered_action (NautilusFile *target_file,
diff --git a/src/nautilus-dnd.h b/src/nautilus-dnd.h
index 2c45a0ec1..5fec2858b 100644
--- a/src/nautilus-dnd.h
+++ b/src/nautilus-dnd.h
@@ -1,26 +1,12 @@
-
-/* nautilus-dnd.h - Common Drag & drop handling code shared by the icon container
- and the list view.
-
- Copyright (C) 2000 Eazel, Inc.
-
- The Gnome Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The Gnome Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the Gnome Library; see the file COPYING.LIB. If not,
- see <http://www.gnu.org/licenses/>.
-
- Authors: Pavel Cisler <pavel eazel com>,
- Ettore Perazzoli <ettore gnu org>
-*/
+/* nautilus-dnd.h - Common Drag & drop handling code
+ *
+ * Authors: Pavel Cisler <pavel eazel com>,
+ * Ettore Perazzoli <ettore gnu org>
+ * Copyright (C) 2000 Eazel, Inc.
+ * Copyright (C) 2022 The GNOME project contributors
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
#pragma once
@@ -29,8 +15,6 @@
#define HOVER_TIMEOUT 500
-#if 0 && NAUTILUS_DND_NEEDS_GTK4_REIMPLEMENTATION
-
/* Drag & Drop target names. */
#define NAUTILUS_ICON_DND_GNOME_ICON_LIST_TYPE "x-special/gnome-icon-list"
#define NAUTILUS_ICON_DND_URI_LIST_TYPE "text/uri-list"
@@ -39,105 +23,8 @@
#define NAUTILUS_ICON_DND_XDNDDIRECTSAVE_TYPE "XdndDirectSave0" /* XDS Protocol Type */
#define NAUTILUS_ICON_DND_RAW_TYPE "application/octet-stream"
-/* drag&drop-related information. */
-typedef struct {
- GtkTargetList *target_list;
-
- /* Stuff saved at "receive data" time needed later in the drag. */
- gboolean got_drop_data_type;
- NautilusIconDndTargetType data_type;
- GtkSelectionData *selection_data;
- char *direct_save_uri;
-
- /* Start of the drag, in window coordinates. */
- int start_x, start_y;
-
- /* List of NautilusDragSelectionItems, representing items being dragged, or NULL
- * if data about them has not been received from the source yet.
- */
- GList *selection_list;
-
- /* cache of selected URIs, representing items being dragged */
- GList *selection_cache;
-
- /* File selection list information request handler, for the call for
- * information (mostly the file system info, in order to know if we want
- * co copy or move the files) about the files being dragged, that can
- * come from another nautilus process, like the desktop. */
- NautilusFileListHandle *file_list_info_handler;
-
- /* has the drop occurred ? */
- gboolean drop_occurred;
-
- /* whether or not need to clean up the previous dnd data */
- gboolean need_to_destroy;
-
- /* autoscrolling during dragging */
- int auto_scroll_timeout_id;
- gboolean waiting_to_autoscroll;
- gint64 start_auto_scroll_in;
-
- /* source context actions. Used for peek the actions using a GdkDragContext
- * source at drag-begin time when they are not available yet (they become
- * available at drag-motion time) */
- guint32 source_actions;
-
-} NautilusDragInfo;
-
-typedef void (* NautilusDragEachSelectedItemDataGet) (const char *url,
- int x, int y, int w, int h,
- gpointer data);
-typedef void (* NautilusDragEachSelectedItemIterator) (NautilusDragEachSelectedItemDataGet
iteratee,
- gpointer iterator_context,
- gpointer data);
-
-void nautilus_drag_init (NautilusDragInfo
*drag_info,
- const GtkTargetEntry
*drag_types,
- int
drag_type_count,
- gboolean
add_text_targets);
-void nautilus_drag_finalize (NautilusDragInfo
*drag_info);
-NautilusDragSelectionItem *nautilus_drag_selection_item_new (void);
-void nautilus_drag_destroy_selection_list (GList
*selection_list);
-GList *nautilus_drag_build_selection_list (GtkSelectionData
*data);
-
-GList * nautilus_drag_uri_list_from_selection_list (const GList
*selection_list);
-
-GList * nautilus_drag_uri_list_from_array (const char
**uris);
-
-gboolean nautilus_drag_items_local (const char
*target_uri,
- const GList
*selection_list);
-gboolean nautilus_drag_uris_local (const char
*target_uri,
- const GList
*source_uri_list);
-GdkDragAction nautilus_drag_default_drop_action_for_netscape_url (GdkDragContext
*context);
-GdkDragAction nautilus_drag_default_drop_action_for_uri_list (GdkDragContext
*context,
- const char
*target_uri_string);
-GList *nautilus_drag_create_selection_cache (gpointer
container_context,
- NautilusDragEachSelectedItemIterator
each_selected_item_iterator);
-gboolean nautilus_drag_drag_data_get_from_cache (GList
*cache,
- GdkDragContext
*context,
- GtkSelectionData
*selection_data,
- guint
info,
- guint32
time);
-int nautilus_drag_modifier_based_action (int
default_action,
- int
non_default_action);
-
-GdkDragAction nautilus_drag_drop_action_ask (GtkWidget
*widget,
- GdkDragAction
possible_actions);
-
-gboolean nautilus_drag_autoscroll_in_scroll_region (GtkWidget
*widget);
-void nautilus_drag_autoscroll_calculate_delta (GtkWidget
*widget,
- float
*x_scroll_delta,
- float
*y_scroll_delta);
-void nautilus_drag_autoscroll_start (NautilusDragInfo
*drag_info,
- GtkWidget
*widget,
- GSourceFunc
callback,
- gpointer
user_data);
-void nautilus_drag_autoscroll_stop (NautilusDragInfo
*drag_info);
-
-NautilusDragInfo * nautilus_drag_get_source_data (GdkDragContext
*context);
-
-GList * nautilus_drag_file_list_from_selection_list (const GList
*selection_list);
-#endif
+GdkDragAction nautilus_drag_drop_action_ask (GtkWidget *widget,
+ GdkDragAction possible_actions);
GdkDragAction nautilus_dnd_get_prefered_action (NautilusFile *target_file,
GFile *dropped);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]