static void nautilus_tree_view_drag_dest_finalize (GObject *object) { NautilusTreeViewDragDest *dest; dest = NAUTILUS_TREE_VIEW_DRAG_DEST (object); free_drag_data (dest); G_OBJECT_CLASS (nautilus_tree_view_drag_dest_parent_class)->finalize (object); }
static void nemo_tree_view_drag_dest_finalize (GObject *object) { NemoTreeViewDragDest *dest; dest = NEMO_TREE_VIEW_DRAG_DEST (object); free_drag_data (dest); G_OBJECT_CLASS (nemo_tree_view_drag_dest_parent_class)->finalize (object); }
static void drag_leave_cb (GtkWidget *widget, GdkDragContext *context, guint32 time, EphyNodeView *view) { clear_drag_dest_row (view); free_drag_data (view); remove_scroll_timeout (view); }
static void drag_leave_callback (GtkWidget *widget, GdkDragContext *context, guint32 time, gpointer data) { NautilusTreeViewDragDest *dest; dest = NAUTILUS_TREE_VIEW_DRAG_DEST (data); clear_drag_dest_row (dest); free_drag_data (dest); remove_scroll_timeout (dest); }
static void drag_data_received_cb (GtkWidget *widget, GdkDragContext *context, int x, int y, GtkSelectionData *selection_data, guint info, guint32 time, EphyNodeView *view) { GtkTreeViewDropPosition pos; /* x and y here are valid only on drop ! */ if ((gtk_selection_data_get_length (selection_data) <= 0) || (gtk_selection_data_get_data (selection_data) == NULL)) { return; } /* appease GtkTreeView by preventing its drag_data_receive * from being called */ g_signal_stop_emission_by_name (view, "drag_data_received"); if (!view->priv->have_drag_data) { view->priv->have_drag_data = TRUE; view->priv->drag_data = gtk_selection_data_copy (selection_data); } if (view->priv->drop_occurred) { EphyNode *node; char **uris; gboolean success = FALSE; GtkTreePath *path; if (gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (widget), x, y, &path, &pos) == FALSE) { return; } node = get_node_from_path (view, path); if (node == NULL) return; uris = gtk_selection_data_get_uris (selection_data); if (uris != NULL && ephy_node_get_is_drag_dest (node)) { /* FIXME fill success */ g_signal_emit (G_OBJECT (view), ephy_node_view_signals[NODE_DROPPED], 0, node, uris); g_strfreev (uris); } view->priv->drop_occurred = FALSE; free_drag_data (view); gtk_drag_finish (context, success, FALSE, time); if (path) { gtk_tree_path_free (path); } } }
static gboolean drag_data_received_callback (GtkWidget *widget, GdkDragContext *context, int x, int y, GtkSelectionData *selection_data, guint info, guint32 time, gpointer data) { NautilusTreeViewDragDest *dest; const gchar *tmp; int length; gboolean success, finished; dest = NAUTILUS_TREE_VIEW_DRAG_DEST (data); if (!dest->details->have_drag_data) { dest->details->have_drag_data = TRUE; dest->details->drag_type = info; dest->details->drag_data = gtk_selection_data_copy (selection_data); if (info == NAUTILUS_ICON_DND_GNOME_ICON_LIST) { dest->details->drag_list = nautilus_drag_build_selection_list (selection_data); } } if (dest->details->drop_occurred) { success = FALSE; finished = TRUE; switch (info) { case NAUTILUS_ICON_DND_GNOME_ICON_LIST : receive_dropped_icons (dest, context, x, y); success = TRUE; break; case NAUTILUS_ICON_DND_NETSCAPE_URL : receive_dropped_netscape_url (dest, context, x, y); success = TRUE; break; case NAUTILUS_ICON_DND_URI_LIST : receive_dropped_uri_list (dest, context, x, y); success = TRUE; break; case NAUTILUS_ICON_DND_TEXT: receive_dropped_text (dest, context, x, y); success = TRUE; break; case NAUTILUS_ICON_DND_RAW: length = gtk_selection_data_get_length (selection_data); tmp = (const gchar *) gtk_selection_data_get_data (selection_data); receive_dropped_raw (dest, tmp, length, context, x, y); success = TRUE; break; case NAUTILUS_ICON_DND_XDNDDIRECTSAVE: finished = receive_xds (dest, widget, time, context, x, y); success = TRUE; break; } if (finished) { dest->details->drop_occurred = FALSE; free_drag_data (dest); gtk_drag_finish (context, success, FALSE, time); } } /* appease GtkTreeView by preventing its drag_data_receive * from being called */ g_signal_stop_emission_by_name (dest->details->tree_view, "drag-data-received"); return TRUE; }