diff options
Diffstat (limited to 'source/blender/windowmanager/intern/wm_window.c')
-rw-r--r-- | source/blender/windowmanager/intern/wm_window.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index ed593cb8dcd..71efdab1f59 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -34,6 +34,7 @@ #include "DNA_listBase.h" #include "DNA_screen_types.h" #include "DNA_windowmanager_types.h" +#include "RNA_access.h" #include "MEM_guardedalloc.h" @@ -714,6 +715,28 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private) } break; } + + case GHOST_kEventOpenMainFile: + { + PointerRNA props_ptr; + wmWindow *oldWindow; + char *path = GHOST_GetEventData(evt); + + if (path) { + /* operator needs a valid window in context, ensures + it is correctly set */ + oldWindow = CTX_wm_window(C); + CTX_wm_window_set(C, win); + + WM_operator_properties_create(&props_ptr, "WM_OT_open_mainfile"); + RNA_string_set(&props_ptr, "path", path); + WM_operator_name_call(C, "WM_OT_open_mainfile", WM_OP_EXEC_DEFAULT, &props_ptr); + WM_operator_properties_free(&props_ptr); + + CTX_wm_window_set(C, oldWindow); + } + break; + } case GHOST_kEventDraggingDropDone: { wmEvent event= *(win->eventstate); /* copy last state, like mouse coords */ |