| 2992 | } |
| 2993 | |
| 2994 | G_MODULE_EXPORT gboolean |
| 2995 | presets_drop_cb (GtkDropTargetAsync *drop_target, GdkDrop *drop, double x, double y, signal_user_data_t *ud) |
| 2996 | { |
| 2997 | GtkTreeView *tv; |
| 2998 | GtkTreeModel *dst_model; |
| 2999 | GtkTreePath *dst_treepath = NULL; |
| 3000 | GtkTreeViewDropPosition drop_pos; |
| 3001 | GtkTreeIter dst_iter, src_iter; |
| 3002 | gint src_ptype; |
| 3003 | gboolean src_folder, dst_folder; |
| 3004 | |
| 3005 | tv = GTK_TREE_VIEW(gtk_event_controller_get_widget(GTK_EVENT_CONTROLLER(drop_target))); |
| 3006 | g_return_val_if_fail(GTK_IS_TREE_VIEW(tv), FALSE); |
| 3007 | |
| 3008 | dst_model = gtk_tree_view_get_model(tv); |
| 3009 | gtk_tree_view_get_drag_dest_row(tv, &dst_treepath, &drop_pos); |
| 3010 | if (dst_treepath == NULL) |
| 3011 | { |
| 3012 | return FALSE; |
| 3013 | } |
| 3014 | |
| 3015 | GtkTreeView *src_widget; |
| 3016 | GtkTreeModel *src_model; |
| 3017 | GtkTreeSelection *select; |
| 3018 | hb_preset_index_t *dst_path, *src_path; |
| 3019 | |
| 3020 | src_widget = tv; |
| 3021 | select = gtk_tree_view_get_selection (src_widget); |
| 3022 | gtk_tree_selection_get_selected(select, &src_model, &src_iter); |
| 3023 | |
| 3024 | src_path = tree_get_index(src_model, &src_iter); |
| 3025 | src_ptype = preset_get_type(src_path); |
| 3026 | src_folder = preset_is_folder(src_path); |
| 3027 | |
| 3028 | // Don't allow repositioning of builtin presets |
| 3029 | if (src_ptype != HB_PRESET_TYPE_CUSTOM) |
| 3030 | { |
| 3031 | free(src_path); |
| 3032 | gtk_tree_path_free(dst_treepath); |
| 3033 | dst_treepath = NULL; |
| 3034 | return FALSE; |
| 3035 | } |
| 3036 | |
| 3037 | dst_path = tree_path_get_index(dst_treepath); |
| 3038 | dst_folder = preset_is_folder(dst_path); |
| 3039 | |
| 3040 | // Don't allow allow dropping source folders after/before non-folders |
| 3041 | if (src_folder && !dst_folder) |
| 3042 | { |
| 3043 | gtk_tree_path_up(dst_treepath); |
| 3044 | dst_path = tree_path_get_index(dst_treepath); |
| 3045 | dst_folder = preset_is_folder(dst_path); |
| 3046 | |
| 3047 | drop_pos = GTK_TREE_VIEW_DROP_AFTER; |
| 3048 | } |
| 3049 | |
| 3050 | // Don't allow dropping folders into other folders, only before/after |
| 3051 | if (src_folder && dst_folder) |
nothing calls this directly
no test coverage detected