Revision: 28622
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28622
Author:   billrey
Date:     2010-05-06 19:45:02 +0200 (Thu, 06 May 2010)

Log Message:
-----------
Make drop images work from external desktop into Blender image window.
Still has work todo, like detecting filetype on drop event itself. Ton will 
continue...

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_image/space_image.c
    trunk/blender/source/blender/windowmanager/intern/wm_window.c

Modified: trunk/blender/source/blender/editors/space_image/space_image.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/space_image.c      
2010-05-06 17:12:44 UTC (rev 28621)
+++ trunk/blender/source/blender/editors/space_image/space_image.c      
2010-05-06 17:45:02 UTC (rev 28622)
@@ -537,7 +537,7 @@
 static int image_drop_poll(bContext *C, wmDrag *drag, wmEvent *event)
 {
        if(drag->type==WM_DRAG_PATH)
-               if(ELEM(drag->icon, ICON_FILE_IMAGE, ICON_FILE_BLANK))  /* rule 
might not work? */
+               if(ELEM3(drag->icon, 0, ICON_FILE_IMAGE, ICON_FILE_BLANK))      
/* rule might not work? */
                        return 1;
        return 0;
 }

Modified: trunk/blender/source/blender/windowmanager/intern/wm_window.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_window.c       
2010-05-06 17:12:44 UTC (rev 28621)
+++ trunk/blender/source/blender/windowmanager/intern/wm_window.c       
2010-05-06 17:45:02 UTC (rev 28622)
@@ -739,16 +739,48 @@
                        }
                        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 */
                                
@@ -760,11 +792,12 @@
                                                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 
                                        }
                                }
                                
-                               wm_event_add(win, &event);
                                
+                               
                                break;
                        }
                        


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to