Quellcode durchsuchen

Fixed bug 3030 - SDL_RecreateWindow fails to restore title, icon, etc.

Adam M.

It loses the title and icon when window recreation fails. For instance, this may happen when trying to create an OpenGL ES window on a system that doesn't support it. But at that point, the title and icon have already been lost.
Sam Lantinga vor 10 Jahren
Ursprung
Commit
b7aa856c8f
1 geänderte Dateien mit 6 neuen und 10 gelöschten Zeilen
  1. 6 10
      src/video/SDL_video.c

+ 6 - 10
src/video/SDL_video.c

@@ -1388,8 +1388,6 @@ SDL_CreateWindowFrom(const void *data)
 int
 int
 SDL_RecreateWindow(SDL_Window * window, Uint32 flags)
 SDL_RecreateWindow(SDL_Window * window, Uint32 flags)
 {
 {
-    char *title = window->title;
-    SDL_Surface *icon = window->icon;
     SDL_bool loaded_opengl = SDL_FALSE;
     SDL_bool loaded_opengl = SDL_FALSE;
 
 
     if ((flags & SDL_WINDOW_OPENGL) && !_this->GL_CreateContext) {
     if ((flags & SDL_WINDOW_OPENGL) && !_this->GL_CreateContext) {
@@ -1429,8 +1427,6 @@ SDL_RecreateWindow(SDL_Window * window, Uint32 flags)
         }
         }
     }
     }
 
 
-    window->title = NULL;
-    window->icon = NULL;
     window->flags = ((flags & CREATE_FLAGS) | SDL_WINDOW_HIDDEN);
     window->flags = ((flags & CREATE_FLAGS) | SDL_WINDOW_HIDDEN);
     window->last_fullscreen_flags = window->flags;
     window->last_fullscreen_flags = window->flags;
     window->is_destroying = SDL_FALSE;
     window->is_destroying = SDL_FALSE;
@@ -1444,17 +1440,17 @@ SDL_RecreateWindow(SDL_Window * window, Uint32 flags)
             return -1;
             return -1;
         }
         }
     }
     }
+
     if (flags & SDL_WINDOW_FOREIGN) {
     if (flags & SDL_WINDOW_FOREIGN) {
         window->flags |= SDL_WINDOW_FOREIGN;
         window->flags |= SDL_WINDOW_FOREIGN;
     }
     }
 
 
-    if (title) {
-        SDL_SetWindowTitle(window, title);
-        SDL_free(title);
+    if (_this->SetWindowTitle && window->title) {
+        _this->SetWindowTitle(_this, window);
     }
     }
-    if (icon) {
-        SDL_SetWindowIcon(window, icon);
-        SDL_FreeSurface(icon);
+
+    if (_this->SetWindowIcon && window->icon) {
+        _this->SetWindowIcon(_this, window, window->icon);
     }
     }
 
 
     if (window->hit_test) {
     if (window->hit_test) {