diff --git a/src/video/x11/SDL_x11messagebox.c b/src/video/x11/SDL_x11messagebox.c index 05a3f84418..f1b6fd4a02 100644 --- a/src/video/x11/SDL_x11messagebox.c +++ b/src/video/x11/SDL_x11messagebox.c @@ -196,7 +196,11 @@ static bool X11_ShowMessageBoxImpl(const SDL_MessageBoxData *messageboxdata, int } /* Create window */ - controls.window = X11Toolkit_CreateWindowStruct(messageboxdata->window, NULL, SDL_TOOLKIT_WINDOW_MODE_X11_DIALOG, colorhints); +#if SDL_FORK_MESSAGEBOX + controls.window = X11Toolkit_CreateWindowStruct(messageboxdata->window, NULL, SDL_TOOLKIT_WINDOW_MODE_X11_DIALOG, colorhints, true); +#else + controls.window = X11Toolkit_CreateWindowStruct(messageboxdata->window, NULL, SDL_TOOLKIT_WINDOW_MODE_X11_DIALOG, colorhints, false); +#endif controls.window->cb_data = &controls; controls.window->cb_on_scale_change = X11_OnMessageBoxScaleChange; if (!controls.window) { diff --git a/src/video/x11/SDL_x11toolkit.c b/src/video/x11/SDL_x11toolkit.c index 1e1d50e663..2674f4cf98 100644 --- a/src/video/x11/SDL_x11toolkit.c +++ b/src/video/x11/SDL_x11toolkit.c @@ -420,7 +420,7 @@ static void X11Toolkit_GetTextWidthHeight(SDL_ToolkitWindowX11 *data, const char } } -SDL_ToolkitWindowX11 *X11Toolkit_CreateWindowStruct(SDL_Window *parent, SDL_ToolkitWindowX11 *tkparent, SDL_ToolkitWindowModeX11 mode, const SDL_MessageBoxColor *colorhints) +SDL_ToolkitWindowX11 *X11Toolkit_CreateWindowStruct(SDL_Window *parent, SDL_ToolkitWindowX11 *tkparent, SDL_ToolkitWindowModeX11 mode, const SDL_MessageBoxColor *colorhints, bool create_new_display) { SDL_ToolkitWindowX11 *window; int i; @@ -456,20 +456,29 @@ SDL_ToolkitWindowX11 *X11Toolkit_CreateWindowStruct(SDL_Window *parent, SDL_Tool } #endif - if (parent) { - SDL_VideoData *videodata = SDL_GetVideoDevice()->internal; - window->display = videodata->display; - window->display_close = false; - } else if (tkparent) { - window->display = tkparent->display; - window->display_close = false; - } else { - window->display = X11_XOpenDisplay(NULL); - window->display_close = true; - if (!window->display) { - ErrorFreeRetNull("Couldn't open X11 display", window); - } - } + window->parent_device = NULL; + if (create_new_display) { + window->display = X11_XOpenDisplay(NULL); + window->display_close = true; + if (!window->display) { + ErrorFreeRetNull("Couldn't open X11 display", window); + } + } else { + if (parent) { + window->parent_device = SDL_GetVideoDevice(); + window->display = window->parent_device->internal->display; + window->display_close = false; + } else if (tkparent) { + window->display = tkparent->display; + window->display_close = false; + } else { + window->display = X11_XOpenDisplay(NULL); + window->display_close = true; + if (!window->display) { + ErrorFreeRetNull("Couldn't open X11 display", window); + } + } + } #ifdef SDL_VIDEO_DRIVER_X11_XRANDR int xrandr_event_base, xrandr_error_base; diff --git a/src/video/x11/SDL_x11toolkit.h b/src/video/x11/SDL_x11toolkit.h index 5e0170c1da..29b1d9a23d 100644 --- a/src/video/x11/SDL_x11toolkit.h +++ b/src/video/x11/SDL_x11toolkit.h @@ -61,6 +61,7 @@ typedef struct SDL_ToolkitWindowX11 bool display_close; /* Parent */ + SDL_VideoDevice *parent_device; SDL_Window *parent; struct SDL_ToolkitWindowX11 *tk_parent; @@ -198,7 +199,7 @@ typedef struct SDL_ToolkitMenuItemX11 } SDL_ToolkitMenuItemX11; /* WINDOW FUNCTIONS */ -extern SDL_ToolkitWindowX11 *X11Toolkit_CreateWindowStruct(SDL_Window *parent, SDL_ToolkitWindowX11 *tkparent, SDL_ToolkitWindowModeX11 mode, const SDL_MessageBoxColor *colorhints); +extern SDL_ToolkitWindowX11 *X11Toolkit_CreateWindowStruct(SDL_Window *parent, SDL_ToolkitWindowX11 *tkparent, SDL_ToolkitWindowModeX11 mode, const SDL_MessageBoxColor *colorhints, bool create_new_display); extern bool X11Toolkit_CreateWindowRes(SDL_ToolkitWindowX11 *data, int w, int h, int cx, int cy, char *title); extern void X11Toolkit_DoWindowEventLoop(SDL_ToolkitWindowX11 *data); extern void X11Toolkit_ResizeWindow(SDL_ToolkitWindowX11 *data, int w, int h);