From a2251d1093bdbfb88c06fe7270edd4cafd521927 Mon Sep 17 00:00:00 2001
From: Alexandros Koutroulis <[EMAIL REDACTED]>
Date: Sat, 18 Feb 2023 02:17:27 +0200
Subject: [PATCH] SDL_SetWindowIcon now reports errors. (#7081)
---
src/video/SDL_sysvideo.h | 2 +-
src/video/SDL_video.c | 9 ++--
src/video/cocoa/SDL_cocoawindow.h | 2 +-
src/video/cocoa/SDL_cocoawindow.m | 6 ++-
src/video/haiku/SDL_bvideo.cc | 1 -
src/video/haiku/SDL_bwindow.cc | 4 --
src/video/haiku/SDL_bwindow.h | 1 -
src/video/kmsdrm/SDL_kmsdrmvideo.c | 24 ++++-----
src/video/kmsdrm/SDL_kmsdrmvideo.h | 1 -
src/video/psp/SDL_pspvideo.c | 4 --
src/video/psp/SDL_pspvideo.h | 1 -
src/video/raspberry/SDL_rpivideo.c | 4 --
src/video/raspberry/SDL_rpivideo.h | 1 -
src/video/vita/SDL_vitavideo.c | 4 --
src/video/vita/SDL_vitavideo.h | 1 -
src/video/windows/SDL_windowswindow.c | 11 +++-
src/video/windows/SDL_windowswindow.h | 2 +-
src/video/x11/SDL_x11window.c | 72 +++++++++++++++++----------
src/video/x11/SDL_x11window.h | 2 +-
19 files changed, 80 insertions(+), 72 deletions(-)
diff --git a/src/video/SDL_sysvideo.h b/src/video/SDL_sysvideo.h
index 50f4a2b73f84..37af3f999c2c 100644
--- a/src/video/SDL_sysvideo.h
+++ b/src/video/SDL_sysvideo.h
@@ -245,7 +245,7 @@ struct SDL_VideoDevice
int (*CreateSDLWindow)(_THIS, SDL_Window *window);
int (*CreateSDLWindowFrom)(_THIS, SDL_Window *window, const void *data);
void (*SetWindowTitle)(_THIS, SDL_Window *window);
- void (*SetWindowIcon)(_THIS, SDL_Window *window, SDL_Surface *icon);
+ int (*SetWindowIcon)(_THIS, SDL_Window *window, SDL_Surface *icon);
void (*SetWindowPosition)(_THIS, SDL_Window *window);
void (*SetWindowSize)(_THIS, SDL_Window *window);
void (*SetWindowMinimumSize)(_THIS, SDL_Window *window);
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c
index 82ce86dbb63e..2fafdf5a26bf 100644
--- a/src/video/SDL_video.c
+++ b/src/video/SDL_video.c
@@ -2060,7 +2060,7 @@ int SDL_SetWindowIcon(SDL_Window *window, SDL_Surface *icon)
CHECK_WINDOW_MAGIC(window, -1);
if (icon == NULL) {
- return 0;
+ return SDL_InvalidParamError("icon");
}
SDL_DestroySurface(window->icon);
@@ -2071,10 +2071,11 @@ int SDL_SetWindowIcon(SDL_Window *window, SDL_Surface *icon)
return -1;
}
- if (_this->SetWindowIcon) {
- _this->SetWindowIcon(_this, window, window->icon);
+ if (!_this->SetWindowIcon) {
+ return SDL_Unsupported();
}
- return 0;
+
+ return _this->SetWindowIcon(_this, window, window->icon);
}
void *SDL_SetWindowData(SDL_Window *window, const char *name, void *userdata)
diff --git a/src/video/cocoa/SDL_cocoawindow.h b/src/video/cocoa/SDL_cocoawindow.h
index 009229b2f6dd..ebc576ef2193 100644
--- a/src/video/cocoa/SDL_cocoawindow.h
+++ b/src/video/cocoa/SDL_cocoawindow.h
@@ -142,7 +142,7 @@ extern int Cocoa_CreateWindow(_THIS, SDL_Window *window);
extern int Cocoa_CreateWindowFrom(_THIS, SDL_Window *window,
const void *data);
extern void Cocoa_SetWindowTitle(_THIS, SDL_Window *window);
-extern void Cocoa_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon);
+extern int Cocoa_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon);
extern void Cocoa_SetWindowPosition(_THIS, SDL_Window *window);
extern void Cocoa_SetWindowSize(_THIS, SDL_Window *window);
extern void Cocoa_SetWindowMinimumSize(_THIS, SDL_Window *window);
diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m
index 6cd9af61a6c0..39a24ef84fa5 100644
--- a/src/video/cocoa/SDL_cocoawindow.m
+++ b/src/video/cocoa/SDL_cocoawindow.m
@@ -1874,14 +1874,18 @@ void Cocoa_SetWindowTitle(_THIS, SDL_Window *window)
}
}
-void Cocoa_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)
+int Cocoa_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)
{
@autoreleasepool {
NSImage *nsimage = Cocoa_CreateImage(icon);
if (nsimage) {
[NSApp setApplicationIconImage:nsimage];
+
+ return 0;
}
+
+ return SDL_SetError("Unable to set the window's icon");
}
}
diff --git a/src/video/haiku/SDL_bvideo.cc b/src/video/haiku/SDL_bvideo.cc
index d12fe2cc066b..a5a16fe9d42f 100644
--- a/src/video/haiku/SDL_bvideo.cc
+++ b/src/video/haiku/SDL_bvideo.cc
@@ -77,7 +77,6 @@ static SDL_VideoDevice * HAIKU_CreateDevice(void)
device->CreateSDLWindow = HAIKU_CreateWindow;
device->CreateSDLWindowFrom = HAIKU_CreateWindowFrom;
device->SetWindowTitle = HAIKU_SetWindowTitle;
- device->SetWindowIcon = HAIKU_SetWindowIcon;
device->SetWindowPosition = HAIKU_SetWindowPosition;
device->SetWindowSize = HAIKU_SetWindowSize;
device->ShowWindow = HAIKU_ShowWindow;
diff --git a/src/video/haiku/SDL_bwindow.cc b/src/video/haiku/SDL_bwindow.cc
index 852db3da85d1..82e9ca342019 100644
--- a/src/video/haiku/SDL_bwindow.cc
+++ b/src/video/haiku/SDL_bwindow.cc
@@ -127,10 +127,6 @@ void HAIKU_SetWindowTitle(_THIS, SDL_Window * window) {
_ToBeWin(window)->PostMessage(&msg);
}
-void HAIKU_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon) {
- /* FIXME: Icons not supported by Haiku */
-}
-
void HAIKU_SetWindowPosition(_THIS, SDL_Window * window) {
BMessage msg(BWIN_MOVE_WINDOW);
msg.AddInt32("window-x", window->x);
diff --git a/src/video/haiku/SDL_bwindow.h b/src/video/haiku/SDL_bwindow.h
index d42c3e580a14..a7943db3963c 100644
--- a/src/video/haiku/SDL_bwindow.h
+++ b/src/video/haiku/SDL_bwindow.h
@@ -27,7 +27,6 @@
extern int HAIKU_CreateWindow(_THIS, SDL_Window *window);
extern int HAIKU_CreateWindowFrom(_THIS, SDL_Window *window, const void *data);
extern void HAIKU_SetWindowTitle(_THIS, SDL_Window *window);
-extern void HAIKU_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon);
extern void HAIKU_SetWindowPosition(_THIS, SDL_Window *window);
extern void HAIKU_SetWindowSize(_THIS, SDL_Window *window);
extern void HAIKU_SetWindowMinimumSize(_THIS, SDL_Window *window);
diff --git a/src/video/kmsdrm/SDL_kmsdrmvideo.c b/src/video/kmsdrm/SDL_kmsdrmvideo.c
index ca4c3d0af2c4..632619da2233 100644
--- a/src/video/kmsdrm/SDL_kmsdrmvideo.c
+++ b/src/video/kmsdrm/SDL_kmsdrmvideo.c
@@ -24,10 +24,10 @@
#if SDL_VIDEO_DRIVER_KMSDRM
/* SDL internals */
-#include "../SDL_sysvideo.h"
#include "../../events/SDL_events_c.h"
-#include "../../events/SDL_mouse_c.h"
#include "../../events/SDL_keyboard_c.h"
+#include "../../events/SDL_mouse_c.h"
+#include "../SDL_sysvideo.h"
#ifdef SDL_INPUT_LINUXEV
#include "../../core/linux/SDL_evdev.h"
@@ -38,18 +38,18 @@
#include <SDL3/SDL_syswm.h>
/* KMS/DRM declarations */
-#include "SDL_kmsdrmvideo.h"
+#include "SDL_kmsdrmdyn.h"
#include "SDL_kmsdrmevents.h"
-#include "SDL_kmsdrmopengles.h"
#include "SDL_kmsdrmmouse.h"
-#include "SDL_kmsdrmdyn.h"
+#include "SDL_kmsdrmopengles.h"
+#include "SDL_kmsdrmvideo.h"
#include "SDL_kmsdrmvulkan.h"
-#include <sys/stat.h>
-#include <sys/param.h>
-#include <sys/utsname.h>
#include <dirent.h>
-#include <poll.h>
#include <errno.h>
+#include <poll.h>
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <sys/utsname.h>
#ifdef __OpenBSD__
static SDL_bool moderndri = SDL_FALSE;
@@ -285,7 +285,6 @@ static SDL_VideoDevice *KMSDRM_CreateDevice(void)
device->CreateSDLWindow = KMSDRM_CreateWindow;
device->CreateSDLWindowFrom = KMSDRM_CreateWindowFrom;
device->SetWindowTitle = KMSDRM_SetWindowTitle;
- device->SetWindowIcon = KMSDRM_SetWindowIcon;
device->SetWindowPosition = KMSDRM_SetWindowPosition;
device->SetWindowSize = KMSDRM_SetWindowSize;
device->SetWindowFullscreen = KMSDRM_SetWindowFullscreen;
@@ -323,7 +322,7 @@ static SDL_VideoDevice *KMSDRM_CreateDevice(void)
cleanup:
if (device) {
- SDL_free(device);
+ SDL_free(device);
}
if (viddata) {
@@ -1560,9 +1559,6 @@ int KMSDRM_CreateWindowFrom(_THIS, SDL_Window *window, const void *data)
void KMSDRM_SetWindowTitle(_THIS, SDL_Window *window)
{
}
-void KMSDRM_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)
-{
-}
void KMSDRM_SetWindowPosition(_THIS, SDL_Window *window)
{
}
diff --git a/src/video/kmsdrm/SDL_kmsdrmvideo.h b/src/video/kmsdrm/SDL_kmsdrmvideo.h
index 025a09c01831..f94d744f79c5 100644
--- a/src/video/kmsdrm/SDL_kmsdrmvideo.h
+++ b/src/video/kmsdrm/SDL_kmsdrmvideo.h
@@ -124,7 +124,6 @@ int KMSDRM_SetDisplayMode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mod
int KMSDRM_CreateWindow(_THIS, SDL_Window *window);
int KMSDRM_CreateWindowFrom(_THIS, SDL_Window *window, const void *data);
void KMSDRM_SetWindowTitle(_THIS, SDL_Window *window);
-void KMSDRM_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon);
void KMSDRM_SetWindowPosition(_THIS, SDL_Window *window);
void KMSDRM_SetWindowSize(_THIS, SDL_Window *window);
void KMSDRM_SetWindowFullscreen(_THIS, SDL_Window *window, SDL_VideoDisplay *_display, SDL_bool fullscreen);
diff --git a/src/video/psp/SDL_pspvideo.c b/src/video/psp/SDL_pspvideo.c
index 0d407522a05f..72a58e1121e1 100644
--- a/src/video/psp/SDL_pspvideo.c
+++ b/src/video/psp/SDL_pspvideo.c
@@ -93,7 +93,6 @@ static SDL_VideoDevice *PSP_Create()
device->CreateSDLWindow = PSP_CreateWindow;
device->CreateSDLWindowFrom = PSP_CreateWindowFrom;
device->SetWindowTitle = PSP_SetWindowTitle;
- device->SetWindowIcon = PSP_SetWindowIcon;
device->SetWindowPosition = PSP_SetWindowPosition;
device->SetWindowSize = PSP_SetWindowSize;
device->ShowWindow = PSP_ShowWindow;
@@ -216,9 +215,6 @@ int PSP_CreateWindowFrom(_THIS, SDL_Window *window, const void *data)
void PSP_SetWindowTitle(_THIS, SDL_Window *window)
{
}
-void PSP_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)
-{
-}
void PSP_SetWindowPosition(_THIS, SDL_Window *window)
{
}
diff --git a/src/video/psp/SDL_pspvideo.h b/src/video/psp/SDL_pspvideo.h
index 098d07979eb7..8dc6891d5b7f 100644
--- a/src/video/psp/SDL_pspvideo.h
+++ b/src/video/psp/SDL_pspvideo.h
@@ -52,7 +52,6 @@ int PSP_SetDisplayMode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode);
int PSP_CreateWindow(_THIS, SDL_Window *window);
int PSP_CreateWindowFrom(_THIS, SDL_Window *window, const void *data);
void PSP_SetWindowTitle(_THIS, SDL_Window *window);
-void PSP_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon);
void PSP_SetWindowPosition(_THIS, SDL_Window *window);
void PSP_SetWindowSize(_THIS, SDL_Window *window);
void PSP_ShowWindow(_THIS, SDL_Window *window);
diff --git a/src/video/raspberry/SDL_rpivideo.c b/src/video/raspberry/SDL_rpivideo.c
index 480084c04bbc..fe3b0cfb5df3 100644
--- a/src/video/raspberry/SDL_rpivideo.c
+++ b/src/video/raspberry/SDL_rpivideo.c
@@ -105,7 +105,6 @@ static SDL_VideoDevice *RPI_Create()
device->CreateSDLWindow = RPI_CreateWindow;
device->CreateSDLWindowFrom = RPI_CreateWindowFrom;
device->SetWindowTitle = RPI_SetWindowTitle;
- device->SetWindowIcon = RPI_SetWindowIcon;
device->SetWindowPosition = RPI_SetWindowPosition;
device->SetWindowSize = RPI_SetWindowSize;
device->ShowWindow = RPI_ShowWindow;
@@ -350,9 +349,6 @@ int RPI_CreateWindowFrom(_THIS, SDL_Window *window, const void *data)
void RPI_SetWindowTitle(_THIS, SDL_Window *window)
{
}
-void RPI_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)
-{
-}
void RPI_SetWindowPosition(_THIS, SDL_Window *window)
{
}
diff --git a/src/video/raspberry/SDL_rpivideo.h b/src/video/raspberry/SDL_rpivideo.h
index 629ba8b0964c..fa8cddf25f77 100644
--- a/src/video/raspberry/SDL_rpivideo.h
+++ b/src/video/raspberry/SDL_rpivideo.h
@@ -66,7 +66,6 @@ int RPI_SetDisplayMode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode);
int RPI_CreateWindow(_THIS, SDL_Window *window);
int RPI_CreateWindowFrom(_THIS, SDL_Window *window, const void *data);
void RPI_SetWindowTitle(_THIS, SDL_Window *window);
-void RPI_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon);
void RPI_SetWindowPosition(_THIS, SDL_Window *window);
void RPI_SetWindowSize(_THIS, SDL_Window *window);
void RPI_ShowWindow(_THIS, SDL_Window *window);
diff --git a/src/video/vita/SDL_vitavideo.c b/src/video/vita/SDL_vitavideo.c
index 7b806d815d7d..6712e2cde0e6 100644
--- a/src/video/vita/SDL_vitavideo.c
+++ b/src/video/vita/SDL_vitavideo.c
@@ -109,7 +109,6 @@ static SDL_VideoDevice *VITA_Create()
device->CreateSDLWindow = VITA_CreateWindow;
device->CreateSDLWindowFrom = VITA_CreateWindowFrom;
device->SetWindowTitle = VITA_SetWindowTitle;
- device->SetWindowIcon = VITA_SetWindowIcon;
device->SetWindowPosition = VITA_SetWindowPosition;
device->SetWindowSize = VITA_SetWindowSize;
device->ShowWindow = VITA_ShowWindow;
@@ -304,9 +303,6 @@ int VITA_CreateWindowFrom(_THIS, SDL_Window *window, const void *data)
void VITA_SetWindowTitle(_THIS, SDL_Window *window)
{
}
-void VITA_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)
-{
-}
void VITA_SetWindowPosition(_THIS, SDL_Window *window)
{
}
diff --git a/src/video/vita/SDL_vitavideo.h b/src/video/vita/SDL_vitavideo.h
index 0aba3ffb2bc2..00f7dc6baf1d 100644
--- a/src/video/vita/SDL_vitavideo.h
+++ b/src/video/vita/SDL_vitavideo.h
@@ -65,7 +65,6 @@ int VITA_SetDisplayMode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
int VITA_CreateWindow(_THIS, SDL_Window *window);
int VITA_CreateWindowFrom(_THIS, SDL_Window *window, const void *data);
void VITA_SetWindowTitle(_THIS, SDL_Window *window);
-void VITA_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon);
void VITA_SetWindowPosition(_THIS, SDL_Window *window);
void VITA_SetWindowSize(_THIS, SDL_Window *window);
void VITA_ShowWindow(_THIS, SDL_Window *window);
diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c
index 24230b3bbb20..29a78115d97c 100644
--- a/src/video/windows/SDL_windowswindow.c
+++ b/src/video/windows/SDL_windowswindow.c
@@ -628,8 +628,9 @@ void WIN_SetWindowTitle(_THIS, SDL_Window *window)
#endif
}
-void WIN_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)
+int WIN_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)
{
+ int retVal = 0;
#if !defined(__XBOXONE__) && !defined(__XBOXSERIES__)
HWND hwnd = window->driverdata->hwnd;
HICON hicon = NULL;
@@ -677,12 +678,20 @@ void WIN_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)
SDL_small_free(icon_bmp, isstack);
+ if (hicon == NULL) {
+ SDL_SetError("SetWindowIcon() failed, error %08X", (unsigned int)GetLastError());
+ retVal = -1;
+ }
+
/* Set the icon for the window */
SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)hicon);
/* Set the icon in the task manager (should we do this?) */
SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)hicon);
+#else
+ retVal = SDL_Unsupported();
#endif
+ return retVal;
}
void WIN_SetWindowPosition(_THIS, SDL_Window *window)
diff --git a/src/video/windows/SDL_windowswindow.h b/src/video/windows/SDL_windowswindow.h
index 9f263bed34ff..2aa59c93e775 100644
--- a/src/video/windows/SDL_windowswindow.h
+++ b/src/video/windows/SDL_windowswindow.h
@@ -77,7 +77,7 @@ struct SDL_WindowData
extern int WIN_CreateWindow(_THIS, SDL_Window *window);
extern int WIN_CreateWindowFrom(_THIS, SDL_Window *window, const void *data);
extern void WIN_SetWindowTitle(_THIS, SDL_Window *window);
-extern void WIN_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon);
+extern int WIN_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon);
extern void WIN_SetWindowPosition(_THIS, SDL_Window *window);
extern void WIN_SetWindowSize(_THIS, SDL_Window *window);
extern int WIN_GetWindowBordersSize(_THIS, SDL_Window *window, int *top, int *left, int *bottom, int *right);
diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c
index 2b7d0968fc1d..ed47474bae70 100644
--- a/src/video/x11/SDL_x11window.c
+++ b/src/video/x11/SDL_x11window.c
@@ -739,52 +739,72 @@ void X11_SetWindowTitle(_THIS, SDL_Window *window)
SDL_X11_SetWindowTitle(display, xwindow, title);
}
-void X11_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)
+static SDL_bool caught_x11_error = SDL_FALSE;
+static int X11_CatchAnyError(Display *d, XErrorEvent *e)
+{
+ /* this may happen during tumultuous times when we are polling anyhow,
+ so just note we had an error and return control. */
+ caught_x11_error = SDL_TRUE;
+ return 0;
+}
+
+int X11_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)
{
SDL_WindowData *data = window->driverdata;
Display *display = data->videodata->display;
Atom _NET_WM_ICON = data->videodata->_NET_WM_ICON;
+ int retVal = 0;
+ int (*prevHandler)(Display *, XErrorEvent *) = NULL;
if (icon) {
int propsize;
long *propdata;
+ int x, y;
+ Uint32 *src;
+ long *dst;
+
/* Set the _NET_WM_ICON property */
SDL_assert(icon->format->format == SDL_PIXELFORMAT_ARGB8888);
propsize = 2 + (icon->w * icon->h);
propdata = SDL_malloc(propsize * sizeof(long));
- if (propdata) {
- int x, y;
- Uint32 *src;
- long *dst;
-
- propdata[0] = icon->w;
- propdata[1] = icon->h;
- dst = &propdata[2];
- for (y = 0; y < icon->h; ++y) {
- src = (Uint32 *)((Uint8 *)icon->pixels + y * icon->pitch);
- for (x = 0; x < icon->w; ++x) {
- *dst++ = *src++;
- }
+
+ if (!propdata) {
+ return SDL_OutOfMemory();
+ }
+ X11_XSync(display, False);
+ prevHandler = X11_XSetErrorHandler(X11_CatchAnyError);
+
+ propdata[0] = icon->w;
+ propdata[1] = icon->h;
+ dst = &propdata[2];
+
+ for (y = 0; y < icon->h; ++y) {
+ src = (Uint32 *)((Uint8 *)icon->pixels + y * icon->pitch);
+ for (x = 0; x < icon->w; ++x) {
+ *dst++ = *src++;
}
- X11_XChangeProperty(display, data->xwindow, _NET_WM_ICON, XA_CARDINAL,
+ }
+
+ X11_XChangeProperty(display, data->xwindow, _NET_WM_ICON, XA_CARDINAL,
32, PropModeReplace, (unsigned char *)propdata,
propsize);
- }
SDL_free(propdata);
- } else {
- X11_XDeleteProperty(display, data->xwindow, _NET_WM_ICON);
+
+ if (caught_x11_error) {
+ retVal = SDL_SetError("An error occurred while trying to set the window's icon");
+ }
+
}
+
X11_XFlush(display);
-}
-static SDL_bool caught_x11_error = SDL_FALSE;
-static int X11_CatchAnyError(Display *d, XErrorEvent *e)
-{
- /* this may happen during tumultuous times when we are polling anyhow,
- so just note we had an error and return control. */
- caught_x11_error = SDL_TRUE;
- return 0;
+ if (prevHandler != NULL) {
+ X11_XSetErrorHandler(prevHandler);
+ caught_x11_error = SDL_FALSE;
+ }
+
+ return retVal;
}
void X11_SetWindowPosition(_THIS, SDL_Window *window)
diff --git a/src/video/x11/SDL_x11window.h b/src/video/x11/SDL_x11window.h
index 05a2636857a7..fe1321849f55 100644
--- a/src/video/x11/SDL_x11window.h
+++ b/src/video/x11/SDL_x11window.h
@@ -87,7 +87,7 @@ extern int X11_CreateWindow(_THIS, SDL_Window *window);
extern int X11_CreateWindowFrom(_THIS, SDL_Window *window, const void *data);
extern char *X11_GetWindowTitle(_THIS, Window xwindow);
extern void X11_SetWindowTitle(_THIS, SDL_Window *window);
-extern void X11_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon);
+extern int X11_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon);
extern void X11_SetWindowPosition(_THIS, SDL_Window *window);
extern void X11_SetWindowMinimumSize(_THIS, SDL_Window *window);
extern void X11_SetWindowMaximumSize(_THIS, SDL_Window *window);