[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59863] trunk/blender/intern/ghost/intern/ GHOST_SystemSDL.cpp: fix for bug in GHOST/SDL, events dont always have a window (which ghost needs).
Campbell Barton
ideasman42 at gmail.com
Fri Sep 6 03:40:22 CEST 2013
Revision: 59863
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59863
Author: campbellbarton
Date: 2013-09-06 01:40:20 +0000 (Fri, 06 Sep 2013)
Log Message:
-----------
fix for bug in GHOST/SDL, events dont always have a window (which ghost needs).
fallback to the window with the active opengl context.
Modified Paths:
--------------
trunk/blender/intern/ghost/intern/GHOST_SystemSDL.cpp
Modified: trunk/blender/intern/ghost/intern/GHOST_SystemSDL.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemSDL.cpp 2013-09-05 23:09:14 UTC (rev 59862)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemSDL.cpp 2013-09-06 01:40:20 UTC (rev 59863)
@@ -276,6 +276,18 @@
}
#undef GXMAP
+/**
+ * Events don't always have valid windows,
+ * but GHOST needs a window _always_. fallback to the GL window.
+ */
+static SDL_Window *SDL_GetWindowFromID_fallback(Uint32 id)
+{
+ SDL_Window *sdl_win = SDL_GetWindowFromID(id);
+ if (sdl_win == NULL) {
+ sdl_win = SDL_GL_GetCurrentWindow();
+ }
+ return sdl_win;
+}
void
GHOST_SystemSDL::processEvent(SDL_Event *sdl_event)
@@ -286,7 +298,7 @@
case SDL_WINDOWEVENT:
{
SDL_WindowEvent &sdl_sub_evt = sdl_event->window;
- GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID(sdl_sub_evt.windowID));
+ GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID_fallback(sdl_sub_evt.windowID));
//assert(window != NULL); // can be NULL on close window.
switch (sdl_sub_evt.event) {
@@ -318,7 +330,7 @@
case SDL_MOUSEMOTION:
{
SDL_MouseMotionEvent &sdl_sub_evt = sdl_event->motion;
- SDL_Window *sdl_win = SDL_GetWindowFromID(sdl_sub_evt.windowID);
+ SDL_Window *sdl_win = SDL_GetWindowFromID_fallback(sdl_sub_evt.windowID);
GHOST_WindowSDL *window = findGhostWindow(sdl_win);
assert(window != NULL);
@@ -379,7 +391,7 @@
GHOST_TButtonMask gbmask = GHOST_kButtonMaskLeft;
GHOST_TEventType type = (sdl_sub_evt.state == SDL_PRESSED) ? GHOST_kEventButtonDown : GHOST_kEventButtonUp;
- GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID(sdl_sub_evt.windowID));
+ GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID_fallback(sdl_sub_evt.windowID));
assert(window != NULL);
/* process rest of normal mouse buttons */
@@ -403,7 +415,7 @@
case SDL_MOUSEWHEEL:
{
SDL_MouseWheelEvent &sdl_sub_evt = sdl_event->wheel;
- GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID(sdl_sub_evt.windowID));
+ GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID_fallback(sdl_sub_evt.windowID));
assert(window != NULL);
g_event = new GHOST_EventWheel(getMilliSeconds(), window, sdl_sub_evt.y);
}
@@ -415,7 +427,7 @@
SDL_Keycode sym = sdl_sub_evt.keysym.sym;
GHOST_TEventType type = (sdl_sub_evt.state == SDL_PRESSED) ? GHOST_kEventKeyDown : GHOST_kEventKeyUp;
- GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID(sdl_sub_evt.windowID));
+ GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID_fallback(sdl_sub_evt.windowID));
assert(window != NULL);
GHOST_TKey gkey = convertSDLKey(sdl_sub_evt.keysym.scancode);
More information about the Bf-blender-cvs
mailing list