From 45e18f696c659d4ce83a7d28d0d3c847b5296ea2 Mon Sep 17 00:00:00 2001 From: Jehan Date: Sun, 20 Jun 2021 01:07:52 +0200 Subject: [PATCH] app: add multi-channel drag'n drop ability. --- app/widgets/gimpcontainertreeview-dnd.c | 1 + app/widgets/gimpdnd.c | 18 ++++++++++++++++-- app/widgets/gimpdnd.h | 2 ++ app/widgets/widgets-enums.h | 3 ++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/widgets/gimpcontainertreeview-dnd.c b/app/widgets/gimpcontainertreeview-dnd.c index e961bcb915..5d1643a2b1 100644 --- a/app/widgets/gimpcontainertreeview-dnd.c +++ b/app/widgets/gimpcontainertreeview-dnd.c @@ -206,6 +206,7 @@ gimp_container_tree_view_drop_status (GimpContainerTreeView *tree_view, } break; + case GIMP_DND_TYPE_CHANNEL_LIST: case GIMP_DND_TYPE_LAYER_LIST: /* Various GimpViewable list (GList) drag data. */ { diff --git a/app/widgets/gimpdnd.c b/app/widgets/gimpdnd.c index 89ff18e7b4..30e7efcdd2 100644 --- a/app/widgets/gimpdnd.c +++ b/app/widgets/gimpdnd.c @@ -643,6 +643,20 @@ static const GimpDndDataDef dnd_data_defs[] = gimp_dnd_set_item_list_data, }, + { + GIMP_TARGET_CHANNEL_LIST, + + "gimp-dnd-get-channel-list-func", + "gimp-dnd-get-channel-list-data", + + "gimp-dnd-set-channel-list-func", + "gimp-dnd-set-channel-list-data", + + gimp_dnd_get_viewable_list_icon, + gimp_dnd_get_item_list_data, + gimp_dnd_set_item_list_data, + }, + }; @@ -1916,9 +1930,9 @@ gimp_dnd_data_type_get_by_g_type (GType type, { dnd_type = GIMP_DND_TYPE_LAYER_MASK; } - else if (g_type_is_a (type, GIMP_TYPE_CHANNEL) && ! list) + else if (g_type_is_a (type, GIMP_TYPE_CHANNEL)) { - dnd_type = GIMP_DND_TYPE_CHANNEL; + dnd_type = list ? GIMP_DND_TYPE_CHANNEL_LIST : GIMP_DND_TYPE_CHANNEL; } else if (g_type_is_a (type, GIMP_TYPE_VECTORS) && ! list) { diff --git a/app/widgets/gimpdnd.h b/app/widgets/gimpdnd.h index ac31c7f80e..5b3f93c991 100644 --- a/app/widgets/gimpdnd.h +++ b/app/widgets/gimpdnd.h @@ -97,6 +97,8 @@ #define GIMP_TARGET_LAYER_LIST \ { "application/x-gimp-layer-list", GTK_TARGET_SAME_APP, GIMP_DND_TYPE_LAYER_LIST } +#define GIMP_TARGET_CHANNEL_LIST \ + { "application/x-gimp-channel-list", GTK_TARGET_SAME_APP, GIMP_DND_TYPE_CHANNEL_LIST } /* dnd initialization */ diff --git a/app/widgets/widgets-enums.h b/app/widgets/widgets-enums.h index e18a1c563d..9adfefa60b 100644 --- a/app/widgets/widgets-enums.h +++ b/app/widgets/widgets-enums.h @@ -168,8 +168,9 @@ typedef enum /*< skip >*/ GIMP_DND_TYPE_NOTEBOOK_TAB = 24, GIMP_DND_TYPE_LAYER_LIST = 25, + GIMP_DND_TYPE_CHANNEL_LIST = 26, - GIMP_DND_TYPE_LAST = GIMP_DND_TYPE_LAYER_LIST + GIMP_DND_TYPE_LAST = GIMP_DND_TYPE_CHANNEL_LIST } GimpDndType; typedef enum /*< skip >*/