Browse Source

Merge pull request #2091 from Areloch/DragNDrop

Enables SDL's ability to drag and drop files onto the game window
Areloch 8 years ago
parent
commit
73ad69c2f3
1 changed files with 40 additions and 0 deletions
  1. 40 0
      Engine/source/windowManager/sdl/sdlWindowMgr.cpp

+ 40 - 0
Engine/source/windowManager/sdl/sdlWindowMgr.cpp

@@ -230,6 +230,13 @@ PlatformWindow *PlatformWindowManagerSDL::createWindow(GFXDevice *device, const
       Con::warnf("PlatformWindowManagerSDL::createWindow - created a window with no device!");
    }
 
+   //Set it up for drag-n-drop events 
+#ifdef TORQUE_TOOLS
+   SDL_EventState(SDL_DROPBEGIN, SDL_ENABLE);
+   SDL_EventState(SDL_DROPFILE, SDL_ENABLE);
+   SDL_EventState(SDL_DROPCOMPLETE, SDL_ENABLE);
+#endif
+
    linkWindow(window);
 
    return window;
@@ -311,6 +318,39 @@ void PlatformWindowManagerSDL::_process()
             break;
          }
 
+         case(SDL_DROPBEGIN):
+         {
+            if (!Con::isFunction("onDropBegin"))
+               break;
+
+            Con::executef("onDropBegin");
+         }
+
+         case (SDL_DROPFILE):
+         {
+            // In case if dropped file
+            if (!Con::isFunction("onDropFile"))
+               break;
+
+            char* fileName = evt.drop.file;
+
+            if (!Platform::isFile(fileName))
+               break;
+
+            Con::executef("onDropFile", StringTable->insert(fileName));
+
+            SDL_free(fileName);    // Free dropped_filedir memory
+            break;
+         }
+
+         case(SDL_DROPCOMPLETE):
+         {
+            if (!Con::isFunction("onDropEnd"))
+               break;
+
+            Con::executef("onDropEnd");
+         }
+
          default:
          {
             //Con::printf("Event: %d", evt.type);