diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py index 4e2cea5e4db..5ba430ab9f5 100644 --- a/release/scripts/startup/bl_operators/wm.py +++ b/release/scripts/startup/bl_operators/wm.py @@ -2677,6 +2677,30 @@ class WM_MT_splash(Menu): layout.separator() +class WM_OT_drop_blend_file(Operator): + bl_idname = "wm.drop_blend_file" + bl_label = "Handle dropped .blend file" + bl_options = {'INTERNAL'} + + filepath: StringProperty() + + def invoke(self, context, event): + context.window_manager.popup_menu(self.draw_menu, title=bpy.path.basename(self.filepath), icon='QUESTION') + return {"FINISHED"} + + def draw_menu(self, menu, context): + layout = menu.layout + + col = layout.column() + col.operator_context = 'EXEC_DEFAULT' + col.operator("wm.open_mainfile", text="Open", icon='FILE_FOLDER').filepath = self.filepath + + layout.separator() + col = layout.column() + col.operator_context = 'INVOKE_DEFAULT' + col.operator("wm.link", text="Link...", icon='LINK_BLEND').filepath = self.filepath + col.operator("wm.append", text="Append...", icon='APPEND_BLEND').filepath = self.filepath + classes = ( BRUSH_OT_active_index_set, WM_OT_addon_disable, @@ -2710,6 +2734,7 @@ classes = ( WM_OT_copy_prev_settings, WM_OT_doc_view, WM_OT_doc_view_manual, + WM_OT_drop_blend_file, WM_OT_keyconfig_activate, WM_OT_keyconfig_export, WM_OT_keyconfig_import, diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 27c9f522c54..150e1b1f5a5 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -4855,7 +4855,7 @@ static void keymap_modal_set(wmKeyConfig *keyconf) } -static bool open_file_drop_poll(bContext *UNUSED(C), wmDrag *drag, const wmEvent *UNUSED(event), const char **UNUSED(tooltip)) +static bool blend_file_drop_poll(bContext *UNUSED(C), wmDrag *drag, const wmEvent *UNUSED(event), const char **UNUSED(tooltip)) { if (drag->type == WM_DRAG_PATH) { if (drag->icon == ICON_FILE_BLEND) @@ -4864,11 +4864,10 @@ static bool open_file_drop_poll(bContext *UNUSED(C), wmDrag *drag, const wmEvent return 0; } -static void open_file_drop_copy(wmDrag *drag, wmDropBox *drop) +static void blend_file_drop_copy(wmDrag *drag, wmDropBox *drop) { /* copy drag path to properties */ RNA_string_set(drop->ptr, "filepath", drag->path); - drop->opcontext = WM_OP_EXEC_DEFAULT; } @@ -5055,7 +5054,7 @@ void ED_keymap_screen(wmKeyConfig *keyconf) /* dropbox for entire window */ lb = WM_dropboxmap_find("Window", 0, 0); - WM_dropbox_add(lb, "WM_OT_open_mainfile", open_file_drop_poll, open_file_drop_copy); + WM_dropbox_add(lb, "WM_OT_drop_blend_file", blend_file_drop_poll, blend_file_drop_copy); WM_dropbox_add(lb, "UI_OT_drop_color", UI_drop_color_poll, UI_drop_color_copy); keymap_modal_set(keyconf); diff --git a/source/blender/windowmanager/intern/wm_files_link.c b/source/blender/windowmanager/intern/wm_files_link.c index f8beb2ef80b..a1e298b91d0 100644 --- a/source/blender/windowmanager/intern/wm_files_link.c +++ b/source/blender/windowmanager/intern/wm_files_link.c @@ -106,11 +106,7 @@ static bool wm_link_append_poll(bContext *C) static int wm_link_append_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)) { - if (RNA_struct_property_is_set(op->ptr, "filepath")) { - return WM_operator_call_notest(C, op); - } - else { - /* XXX TODO solve where to get last linked library from */ + if (!RNA_struct_property_is_set(op->ptr, "filepath")) { if (G.lib[0] != '\0') { RNA_string_set(op->ptr, "filepath", G.lib); } @@ -120,9 +116,10 @@ static int wm_link_append_invoke(bContext *C, wmOperator *op, const wmEvent *UNU BLI_parent_dir(path); RNA_string_set(op->ptr, "filepath", path); } - WM_event_add_fileselect(C, op); - return OPERATOR_RUNNING_MODAL; } + + WM_event_add_fileselect(C, op); + return OPERATOR_RUNNING_MODAL; } static short wm_link_append_flag(wmOperator *op)