[Bf-blender-cvs] [1e65db3c762] wm-drag-drop-rewrite: Painfully update patch to latest master
Julian Eisel
noreply at git.blender.org
Tue Nov 19 15:05:01 CET 2019
Commit: 1e65db3c76251a7e1a2307ee8e18e6be0e8e2697
Author: Julian Eisel
Date: Mon Nov 18 21:31:51 2019 +0100
Branches: wm-drag-drop-rewrite
https://developer.blender.org/rB1e65db3c76251a7e1a2307ee8e18e6be0e8e2697
Painfully update patch to latest master
===================================================================
M release/scripts/presets/keyconfig/keymap_data/blender_default.py
M release/scripts/startup/bl_operators/wm.py
M source/blender/blenkernel/BKE_screen.h
M source/blender/blenloader/intern/readfile.c
M source/blender/editors/include/UI_interface.h
M source/blender/editors/interface/interface_handlers.c
M source/blender/editors/interface/interface_intern.h
M source/blender/editors/interface/interface_ops.c
M source/blender/editors/screen/area.c
M source/blender/editors/screen/screen_ops.c
M source/blender/editors/space_api/spacetypes.c
M source/blender/editors/space_clip/space_clip.c
M source/blender/editors/space_console/space_console.c
M source/blender/editors/space_file/space_file.c
M source/blender/editors/space_image/space_image.c
M source/blender/editors/space_node/space_node.c
M source/blender/editors/space_outliner/outliner_dragdrop.c
M source/blender/editors/space_outliner/outliner_edit.c
M source/blender/editors/space_outliner/outliner_intern.h
M source/blender/editors/space_outliner/outliner_ops.c
M source/blender/editors/space_outliner/space_outliner.c
M source/blender/editors/space_sequencer/space_sequencer.c
M source/blender/editors/space_text/space_text.c
M source/blender/editors/space_view3d/space_view3d.c
M source/blender/makesdna/DNA_windowmanager_types.h
M source/blender/windowmanager/WM_api.h
M source/blender/windowmanager/WM_types.h
M source/blender/windowmanager/gizmo/intern/wm_gizmo_intern.h
M source/blender/windowmanager/intern/wm.c
M source/blender/windowmanager/intern/wm_dragdrop.c
M source/blender/windowmanager/intern/wm_draw.c
M source/blender/windowmanager/intern/wm_event_system.c
M source/blender/windowmanager/intern/wm_init_exit.c
M source/blender/windowmanager/intern/wm_window.c
M source/blender/windowmanager/wm_event_system.h
===================================================================
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index b2ce3c8e608..e7abadc7ab7 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -738,8 +738,8 @@ def km_outliner(params):
("outliner.item_openclose", {"type": 'EVT_TWEAK_L', "value": 'ANY'},
{"properties": [("all", False)]}),
("outliner.operation", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, None),
- ("outliner.item_drag_drop", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None),
- ("outliner.item_drag_drop", {"type": 'EVT_TWEAK_L', "value": 'ANY', "shift": True}, None),
+ ("outliner.drag_init", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None),
+ ("outliner.drag_init", {"type": 'EVT_TWEAK_L', "value": 'ANY', "shift": True}, None),
("outliner.show_hierarchy", {"type": 'HOME', "value": 'PRESS'}, None),
("outliner.show_active", {"type": 'PERIOD', "value": 'PRESS'}, None),
("outliner.show_active", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None),
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index 24670b2a37d..336081e7b4c 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -22,6 +22,7 @@ import bpy
from bpy.types import (
Menu,
Operator,
+ OperatorFileListElement,
)
from bpy.props import (
BoolProperty,
@@ -2526,6 +2527,32 @@ class WM_OT_drop_blend_file(Operator):
col.operator("wm.append", text="Append...", icon='APPEND_BLEND').filepath = self.filepath
+class WM_OT_drop_files(Operator):
+ bl_idname = "wm.drop_files"
+ bl_label = "Handle dropped files"
+ bl_options = {'INTERNAL'}
+
+ filepaths: CollectionProperty(type=OperatorFileListElement)
+
+ def invoke(self, context, event):
+ paths = [element.name for element in self.filepaths]
+
+ if len(paths) == 1:
+ if self.handle_single_file(paths[0]):
+ return {'FINISHED'}
+
+ self.handle_multiple_files(paths)
+ return {'FINISHED'}
+
+ def handle_single_file(self, path):
+ if path.lower().endswith(".blend"):
+ bpy.ops.wm.drop_blend_file('INVOKE_DEFAULT', filepath=path)
+ return True
+ return False
+
+ def handle_multiple_files(self, paths):
+ pass
+
classes = (
WM_OT_context_collection_boolean_set,
WM_OT_context_cycle_array,
@@ -2567,4 +2594,5 @@ classes = (
BatchRenameAction,
WM_OT_batch_rename,
WM_MT_splash,
+ WM_OT_drop_files,
)
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index a2ce522a895..9e5f4d67aa0 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -48,6 +48,10 @@ struct wmMsgBus;
struct wmNotifier;
struct wmWindow;
struct wmWindowManager;
+struct wmDragData;
+struct wmDropTarget;
+struct wmDropTargetFinder;
+struct wmEvent;
#include "BLI_compiler_attrs.h"
@@ -95,8 +99,6 @@ typedef struct SpaceType {
void (*operatortypes)(void);
/* add default items to WM keymap */
void (*keymap)(struct wmKeyConfig *keyconf);
- /* on startup, define dropboxes for spacetype+regions */
- void (*dropboxes)(void);
/* initialize gizmo-map-types and gizmo-group-types with the region */
void (*gizmos)(void);
@@ -111,6 +113,9 @@ typedef struct SpaceType {
void (*space_subtype_set)(struct ScrArea *sa, int value);
void (*space_subtype_item_extend)(struct bContext *C, EnumPropertyItem **item, int *totitem);
+ /* get drop target for data */
+ void (*drop_target_find)(struct bContext *C, struct wmDropTargetFinder *finder, struct wmDragData *drag_data, const struct wmEvent *event);
+
/* region type definitions */
ListBase regiontypes;
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 167917f7b6a..11087366eb3 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -7709,7 +7709,7 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
wm->message_bus = NULL;
BLI_listbase_clear(&wm->jobs);
- BLI_listbase_clear(&wm->drags);
+ memset(&wm->drag, 0, sizeof(wmDragOperation));
wm->windrawable = NULL;
wm->winactive = NULL;
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 8f205173011..3565a6a9cf7 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -57,8 +57,6 @@ struct uiFontStyle;
struct uiList;
struct uiStyle;
struct uiWidgetColors;
-struct wmDrag;
-struct wmDropBox;
struct wmEvent;
struct wmEvent;
struct wmGizmo;
@@ -69,6 +67,9 @@ struct wmMsgBus;
struct wmOperator;
struct wmOperatorType;
struct wmWindow;
+struct wmDragData;
+struct wmDropTarget;
+struct wmDropTargetFinder;
typedef struct uiBlock uiBlock;
typedef struct uiBut uiBut;
@@ -708,8 +709,6 @@ void UI_but_drag_set_value(uiBut *but);
void UI_but_drag_set_image(
uiBut *but, const char *path, int icon, struct ImBuf *ima, float scale, const bool use_free);
-bool UI_but_active_drop_name(struct bContext *C);
-bool UI_but_active_drop_color(struct bContext *C);
void UI_but_flag_enable(uiBut *but, int flag);
void UI_but_flag_disable(uiBut *but, int flag);
@@ -2326,11 +2325,7 @@ typedef struct uiDragColorHandle {
void ED_operatortypes_ui(void);
void ED_keymap_ui(struct wmKeyConfig *keyconf);
-void UI_drop_color_copy(struct wmDrag *drag, struct wmDropBox *drop);
-bool UI_drop_color_poll(struct bContext *C,
- struct wmDrag *drag,
- const struct wmEvent *event,
- const char **tooltip);
+void UI_drop_target_find(struct bContext *C, struct wmDropTargetFinder *finder, struct wmDragData *drag_data, const struct wmEvent *event);
bool UI_context_copy_to_selected_list(struct bContext *C,
struct PointerRNA *ptr,
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 806b5789df1..2a9edeed248 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -1891,44 +1891,56 @@ static bool ui_but_drag_init(bContext *C,
else
#endif
if (but->type == UI_BTYPE_COLOR) {
- bool valid = false;
- uiDragColorHandle *drag_info = MEM_callocN(sizeof(*drag_info), __func__);
-
- /* TODO support more button pointer types */
if (but->rnaprop && RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA) {
- ui_but_v3_get(but, drag_info->color);
- drag_info->gamma_corrected = true;
- valid = true;
+ float color[3];
+ ui_but_v3_get(but, color);
+ WM_drag_start_color(C, color, true);
}
else if (but->rnaprop && RNA_property_subtype(but->rnaprop) == PROP_COLOR) {
- ui_but_v3_get(but, drag_info->color);
- drag_info->gamma_corrected = false;
- valid = true;
+ float color[3];
+ ui_but_v3_get(but, color);
+ WM_drag_start_color(C, color, false);
}
else if (ELEM(but->pointype, UI_BUT_POIN_FLOAT, UI_BUT_POIN_CHAR)) {
- ui_but_v3_get(but, drag_info->color);
- copy_v3_v3(drag_info->color, (float *)but->poin);
- valid = true;
- }
-
- if (valid) {
- WM_event_start_drag(C, ICON_COLOR, WM_DRAG_COLOR, drag_info, 0.0, WM_DRAG_FREE_DATA);
+ float color[3];
+ copy_v3_v3(color, (float *)but->poin);
+ WM_drag_start_color(C, color, false);
}
else {
- MEM_freeN(drag_info);
- return false;
+ /* maybe more types are needed? */
+ BLI_assert(false);
}
+ WM_drag_display_set_color_derived(WM_drag_get_active(C));
}
else {
- wmDrag *drag = WM_event_start_drag(
- C, but->icon, but->dragtype, but->dragpoin, ui_but_value_get(but), WM_DRAG_NOP);
+ switch (but->dragtype) {
+ case WM_DRAG_ID:
+ WM_drag_start_id(C, but->dragpoin);
+ break;
+ case WM_DRAG_PATH:
+ WM_drag_start_filepath(C, but->dragpoin);
+ break;
+ case WM_DRAG_VALUE:
+ WM_drag_start_value(C, ui_but_value_get(but));
+ break;
+ case WM_DRAG_RNA:
+ WM_drag_start_rna(C, but->dragpoin);
+ break;
+ case WM_DRAG_NAME:
+ WM_drag_start_name(C, but->dragpoin);
+ break;
+ default:
+ /* maybe more types are needed? */
+ BLI_assert(false);
+ break;
+ }
if (but->imb) {
- WM_event_drag_image(drag,
- but->imb,
- but->imb_scale,
- BLI_rctf_size_x(&but->rect),
- BLI_rctf_size_y(&but->rect));
+ WM_drag_display_set_image(WM_drag_get_active(C),
+ but->imb,
+ but->imb_scale,
+ BLI_rctf_size_x(&but->rect),
+ BLI_rctf_size_y(&but->rect));
}
}
return true;
@@ -2151,39 +2163,6 @@ static void ui_apply_but(
/** \} */
-/* -------------------------------------------------------------------- */
-/** \name Button Drop Event
- * \{ */
-
-/* only call if event type is EVT_DROP */
-static void ui_but_drop(bContext *C, const wmEvent *event, uiBut *but, uiHandleButtonData *data)
-{
- wmDrag *wmd;
- ListBase *drags = event->customdata; /* drop event type has listbase customdata by default */
-
- for (wmd = drags->first; wmd; wmd = wmd->next) {
- if (wmd->type == WM_DRAG_ID) {
- /* align these types with UI_but_active_drop_name */
- if (ELEM(but->type, UI_BTYPE_TEXT, UI_BTYPE_SEARCH_MENU)) {
- ID *id = WM_drag_ID(wmd, 0);
-
- button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING);
-
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list