[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