diff options
Diffstat (limited to 'source/blender/windowmanager/intern/wm_window.c')
-rw-r--r-- | source/blender/windowmanager/intern/wm_window.c | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index 150e6db35cb..b4270aa9a94 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -739,21 +739,64 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private) } case GHOST_kEventDraggingDropDone: { - wmEvent event= *(win->eventstate); /* copy last state, like mouse coords */ + wmEvent event; + GHOST_TEventDragnDropData *ddd= GHOST_GetEventData(evt); + int cx, cy, wx, wy; + + + /* entering window, update mouse pos */ + GHOST_GetCursorPosition(g_system, &wx, &wy); + + GHOST_ScreenToClient(win->ghostwin, wx, wy, &cx, &cy); + win->eventstate->x= cx; + +#if defined(__APPLE__) && defined(GHOST_COCOA) + //Cocoa already uses coordinates with y=0 at bottom + win->eventstate->y= cy; +#else + win->eventstate->y= (win->sizey-1) - cy; +#endif + + event= *(win->eventstate); /* copy last state, like mouse coords */ + + // activate region + event.type= MOUSEMOVE; + event.prevx= event.x; + event.prevy= event.y; + + wm->winactive= win; /* no context change! c->wm->windrawable is drawable, or for area queues */ + win->active= 1; + + wm_event_add(win, &event); + /* make blender drop event with custom data pointing to wm drags */ event.type= EVT_DROP; + event.val= KM_RELEASE; event.custom= EVT_DATA_LISTBASE; event.customdata= &wm->drags; + event.customdatafree= 1; - printf("Drop detected\n"); + wm_event_add(win, &event); + + /* printf("Drop detected\n"); */ /* add drag data to wm for paths: */ /* need icon type, some dropboxes check for that... see filesel code for this */ - // WM_event_start_drag(C, icon, WM_DRAG_PATH, void *poin, 0.0); - /* void poin should point to string, it makes a copy */ - wm_event_add(win, &event); + if(ddd->dataType == GHOST_kDragnDropTypeFilenames) { + GHOST_TStringArray *stra= ddd->data; + int a; + + for(a=0; a<stra->count; a++) { + printf("drop file %s\n", stra->strings[a]); + WM_event_start_drag(C, 0, WM_DRAG_PATH, stra->strings[a], 0.0); + /* void poin should point to string, it makes a copy */ + break; // only one drop element supported now + } + } + + break; } |