If the video system has been initialized, only use that message box system.
authorSam Lantinga <slouken@libsdl.org>
Sun, 14 Jul 2013 11:11:42 -0700
changeset 7452 fae80e5464e2
parent 7451 2ce2d2c71156
child 7453 91c3bb321036
If the video system has been initialized, only use that message box system. Don't pass a window from one video driver to the messagebox function of another video driver. This makes bad things happen. :)
src/video/SDL_video.c
--- a/src/video/SDL_video.c	Sun Jul 14 19:56:22 2013 +0200
+++ b/src/video/SDL_video.c	Sun Jul 14 11:11:42 2013 -0700
@@ -3057,48 +3057,54 @@
 {
     int dummybutton;
     int retval = -1;
-    SDL_bool relative_mode = SDL_GetRelativeMouseMode();
-    int show_cursor_prev = SDL_ShowCursor( 1 );
-
-    SDL_SetRelativeMouseMode( SDL_FALSE );
+    SDL_bool relative_mode;
+    int show_cursor_prev;
+
+    if (!messageboxdata) {
+        return SDL_InvalidParamError("messageboxdata");
+    }
+
+    relative_mode = SDL_GetRelativeMouseMode();
+    SDL_SetRelativeMouseMode(SDL_FALSE);
+    show_cursor_prev = SDL_ShowCursor(1);
 
     if (!buttonid) {
         buttonid = &dummybutton;
     }
     if (_this && _this->ShowMessageBox) {
-        if (_this->ShowMessageBox(_this, messageboxdata, buttonid) == 0) {
-            retval = 0;
-        }
-    }
-
-    /* It's completely fine to call this function before video is initialized */
+        retval = _this->ShowMessageBox(_this, messageboxdata, buttonid);
+    } else {
+        /* It's completely fine to call this function before video is initialized */
+        if (messageboxdata->window == NULL) {
 #if SDL_VIDEO_DRIVER_WINDOWS
-    if ((retval == -1) && (WIN_ShowMessageBox(messageboxdata, buttonid) == 0)) {
-        retval = 0;
-    }
+            if ((retval == -1) && (WIN_ShowMessageBox(messageboxdata, buttonid) == 0)) {
+                retval = 0;
+            }
 #endif
 #if SDL_VIDEO_DRIVER_COCOA
-    if ((retval == -1) && (Cocoa_ShowMessageBox(messageboxdata, buttonid) == 0)) {
-        retval = 0;
-    }
+            if ((retval == -1) && (Cocoa_ShowMessageBox(messageboxdata, buttonid) == 0)) {
+                retval = 0;
+            }
 #endif
 #if SDL_VIDEO_DRIVER_UIKIT
-    if ((retval == -1) && (UIKit_ShowMessageBox(messageboxdata, buttonid) == 0)) {
-        retval = 0;
-    }
+            if ((retval == -1) && (UIKit_ShowMessageBox(messageboxdata, buttonid) == 0)) {
+                retval = 0;
+            }
 #endif
 #if SDL_VIDEO_DRIVER_X11
-    if ((retval == -1) && (X11_ShowMessageBox(messageboxdata, buttonid) == 0)) {
-        retval = 0;
-    }
+            if ((retval == -1) && (X11_ShowMessageBox(messageboxdata, buttonid) == 0)) {
+                retval = 0;
+            }
 #endif
-
-    SDL_ShowCursor( show_cursor_prev );
-    SDL_SetRelativeMouseMode( relative_mode );
-
-    if(retval == -1) {
-        SDL_SetError("No message system available");
+        }
+        if (retval == -1) {
+            SDL_SetError("No message system available");
+        }
     }
+
+    SDL_ShowCursor(show_cursor_prev);
+    SDL_SetRelativeMouseMode(relative_mode);
+
     return retval;
 }