Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Plisson <damien.plisson@yahoo.fr>2010-02-01 12:11:18 +0300
committerDamien Plisson <damien.plisson@yahoo.fr>2010-02-01 12:11:18 +0300
commit0e6b88f993e034f1e3083bf26f08bc1dfd5ccf2e (patch)
tree0827f28eb94a8c89a66ed99d5f376b9ea5576f27 /source/blender/windowmanager
parentc3e96bf0fc364106c96a0e9105c091484a335753 (diff)
Cocoa : implement opening .blend file by double-clicking on it in OSX Finder
When the user double-clicks on a document file in the Finder, OSX doesn't simply give the filename as a command-line argument when calling Blender, as it is done in other OSes. Instead, it launches the app if needed, and then sends an "openFile" event. The user can also open a document file by dropping its icon on the app dock icon. But as this is not real Drag'n'drop, I've renamed the Ghost event to a less confusing "GHOST_kEventOpenMainFile" name. DND Ghost wiki page updated : http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DragnDrop
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/intern/wm_window.c23
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 */