/** * gtk_tree_drag_source_drag_data_delete: * @drag_source: a #GtkTreeDragSource * @path: row that was being dragged * * Asks the #GtkTreeDragSource to delete the row at @path, because * it was moved somewhere else via drag-and-drop. Returns %FALSE * if the deletion fails because @path no longer exists, or for * some model-specific reason. Should robustly handle a @path no * longer found in the model! * * Returns: %TRUE if the row was successfully deleted **/ gboolean gtk_tree_drag_source_drag_data_delete (GtkTreeDragSource *drag_source, GtkTreePath *path) { GtkTreeDragSourceIface *iface = GTK_TREE_DRAG_SOURCE_GET_IFACE (drag_source); g_return_val_if_fail (iface->drag_data_delete != NULL, FALSE); g_return_val_if_fail (path != NULL, FALSE); return (* iface->drag_data_delete) (drag_source, path); }
/** * gtk_tree_drag_source_drag_data_get: * @drag_source: a #GtkTreeDragSource * @path: row that was dragged * @selection_data: a #GtkSelectionData to fill with data * from the dragged row * * Asks the #GtkTreeDragSource to fill in @selection_data with a * representation of the row at @path. @selection_data->target gives * the required type of the data. Should robustly handle a @path no * longer found in the model! * * Returns: %TRUE if data of the required type was provided **/ gboolean gtk_tree_drag_source_drag_data_get (GtkTreeDragSource *drag_source, GtkTreePath *path, GtkSelectionData *selection_data) { GtkTreeDragSourceIface *iface = GTK_TREE_DRAG_SOURCE_GET_IFACE (drag_source); g_return_val_if_fail (iface->drag_data_get != NULL, FALSE); g_return_val_if_fail (path != NULL, FALSE); g_return_val_if_fail (selection_data != NULL, FALSE); return (* iface->drag_data_get) (drag_source, path, selection_data); }
void ui_dnd_setup_feedlist (GtkTreeStore *feedstore) { GtkTreeDragSourceIface *drag_source_iface; GtkTreeDragDestIface *drag_dest_iface; drag_source_iface = GTK_TREE_DRAG_SOURCE_GET_IFACE (GTK_TREE_MODEL (feedstore)); drag_source_iface->row_draggable = ui_dnd_feed_draggable; drag_dest_iface = GTK_TREE_DRAG_DEST_GET_IFACE (GTK_TREE_MODEL (feedstore)); old_feed_drop_possible = drag_dest_iface->row_drop_possible; old_feed_drag_data_received = drag_dest_iface->drag_data_received; drag_dest_iface->row_drop_possible = ui_dnd_feed_drop_possible; drag_dest_iface->drag_data_received = ui_dnd_feed_drag_data_received; }
/** * gtk_tree_drag_source_row_draggable: * @drag_source: a #GtkTreeDragSource * @path: row on which user is initiating a drag * * Asks the #GtkTreeDragSource whether a particular row can be used as * the source of a DND operation. If the source doesn’t implement * this interface, the row is assumed draggable. * * Returns: %TRUE if the row can be dragged **/ gboolean gtk_tree_drag_source_row_draggable (GtkTreeDragSource *drag_source, GtkTreePath *path) { GtkTreeDragSourceIface *iface = GTK_TREE_DRAG_SOURCE_GET_IFACE (drag_source); g_return_val_if_fail (path != NULL, FALSE); if (iface->row_draggable) return (* iface->row_draggable) (drag_source, path); else return TRUE; /* Returning TRUE if row_draggable is not implemented is a fallback. Interface implementations such as GtkTreeStore and GtkListStore really should implement row_draggable. */ }