update sdl Merge commit '4d48f9d23713d94b861da7b5d41baf2a41334994'
This commit is contained in:
@ -467,8 +467,8 @@ static int X11_MessageBoxCreateWindow(SDL_MessageBoxDataX11 *data)
|
||||
X11_XTranslateCoordinates(display, windowdata->xwindow, RootWindow(display, data->screen), x, y, &x, &y, &dummy);
|
||||
} else {
|
||||
const SDL_VideoDevice *dev = SDL_GetVideoDevice();
|
||||
if ((dev) && (dev->displays) && (dev->num_displays > 0)) {
|
||||
const SDL_VideoDisplay *dpy = &dev->displays[0];
|
||||
if (dev && dev->displays && dev->num_displays > 0) {
|
||||
const SDL_VideoDisplay *dpy = dev->displays[0];
|
||||
const SDL_DisplayData *dpydata = dpy->driverdata;
|
||||
x = dpydata->x + ((dpy->current_mode->w - data->dialog_width) / 2);
|
||||
y = dpydata->y + ((dpy->current_mode->h - data->dialog_height) / 3);
|
||||
|
@ -99,7 +99,7 @@ static void UpdateDisplayContentScale(float scale)
|
||||
|
||||
if (viddevice) {
|
||||
for (i = 0; i < viddevice->num_displays; ++i) {
|
||||
SDL_SetDisplayContentScale(&viddevice->displays[i], scale);
|
||||
SDL_SetDisplayContentScale(viddevice->displays[i], scale);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -821,8 +821,9 @@ int X11_InitModes(SDL_VideoDevice *_this)
|
||||
int xrandr_major, xrandr_minor;
|
||||
/* require at least XRandR v1.3 */
|
||||
if (CheckXRandR(data->display, &xrandr_major, &xrandr_minor) &&
|
||||
(xrandr_major >= 2 || (xrandr_major == 1 && xrandr_minor >= 3))) {
|
||||
return X11_InitModes_XRandR(_this);
|
||||
(xrandr_major >= 2 || (xrandr_major == 1 && xrandr_minor >= 3)) &&
|
||||
X11_InitModes_XRandR(_this) == 0) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */
|
||||
|
@ -84,7 +84,7 @@ static int X11_SafetyNetErrHandler(Display *d, XErrorEvent *e)
|
||||
if (device != NULL) {
|
||||
int i;
|
||||
for (i = 0; i < device->num_displays; i++) {
|
||||
SDL_VideoDisplay *display = &device->displays[i];
|
||||
SDL_VideoDisplay *display = device->displays[i];
|
||||
if (SDL_GetCurrentDisplayMode(display->id) != SDL_GetDesktopDisplayMode(display->id)) {
|
||||
X11_SetDisplayMode(device, display, &display->desktop_mode);
|
||||
}
|
||||
@ -213,6 +213,7 @@ static SDL_VideoDevice *X11_CreateDevice(void)
|
||||
device->SetWindowHitTest = X11_SetWindowHitTest;
|
||||
device->AcceptDragAndDrop = X11_AcceptDragAndDrop;
|
||||
device->FlashWindow = X11_FlashWindow;
|
||||
device->ShowWindowSystemMenu = X11_ShowWindowSystemMenu;
|
||||
|
||||
#ifdef SDL_VIDEO_DRIVER_X11_XFIXES
|
||||
device->SetWindowMouseRect = X11_SetWindowMouseRect;
|
||||
|
27
external/sdl/SDL/src/video/x11/SDL_x11window.c
vendored
27
external/sdl/SDL/src/video/x11/SDL_x11window.c
vendored
@ -423,7 +423,6 @@ int X11_CreateWindow(SDL_VideoDevice *_this, SDL_Window *window)
|
||||
SDL_WindowData *windowdata;
|
||||
Display *display = data->display;
|
||||
int screen = displaydata->screen;
|
||||
const int transparent = (window->flags & SDL_WINDOW_TRANSPARENT) ? SDL_TRUE : SDL_FALSE;
|
||||
Visual *visual;
|
||||
int depth;
|
||||
XSetWindowAttributes xattr;
|
||||
@ -443,6 +442,7 @@ int X11_CreateWindow(SDL_VideoDevice *_this, SDL_Window *window)
|
||||
SDL_bool undefined_position = SDL_FALSE;
|
||||
|
||||
#if defined(SDL_VIDEO_OPENGL_GLX) || defined(SDL_VIDEO_OPENGL_EGL)
|
||||
const int transparent = (window->flags & SDL_WINDOW_TRANSPARENT) ? SDL_TRUE : SDL_FALSE;
|
||||
const char *forced_visual_id = SDL_GetHint(SDL_HINT_VIDEO_X11_WINDOW_VISUALID);
|
||||
|
||||
if (forced_visual_id != NULL && forced_visual_id[0] != '\0') {
|
||||
@ -1957,4 +1957,29 @@ int SDL_X11_SetWindowTitle(Display *display, Window xwindow, char *title)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void X11_ShowWindowSystemMenu(SDL_Window *window, int x, int y)
|
||||
{
|
||||
SDL_WindowData *data = window->driverdata;
|
||||
SDL_DisplayData *displaydata = SDL_GetDisplayDriverDataForWindow(window);
|
||||
Display *display = data->videodata->display;
|
||||
Window root = RootWindow(display, displaydata->screen);
|
||||
XClientMessageEvent e;
|
||||
Window childReturn;
|
||||
int wx, wy;
|
||||
|
||||
SDL_zero(e);
|
||||
X11_XTranslateCoordinates(display, data->xwindow, root, x, y, &wx, &wy, &childReturn);
|
||||
|
||||
e.type = ClientMessage;
|
||||
e.window = data->xwindow;
|
||||
e.message_type = X11_XInternAtom(display, "_GTK_SHOW_WINDOW_MENU", 0);
|
||||
e.data.l[0] = 0; /* GTK device ID (unused) */
|
||||
e.data.l[1] = wx; /* X coordinate relative to root */
|
||||
e.data.l[2] = wy; /* Y coordinate relative to root */
|
||||
e.format = 32;
|
||||
|
||||
X11_XSendEvent(display, root, False, SubstructureRedirectMask | SubstructureNotifyMask, (XEvent *)&e);
|
||||
X11_XFlush(display);
|
||||
}
|
||||
|
||||
#endif /* SDL_VIDEO_DRIVER_X11 */
|
||||
|
@ -115,6 +115,7 @@ extern int X11_GetWindowWMInfo(SDL_VideoDevice *_this, SDL_Window *window, struc
|
||||
extern int X11_SetWindowHitTest(SDL_Window *window, SDL_bool enabled);
|
||||
extern void X11_AcceptDragAndDrop(SDL_Window *window, SDL_bool accept);
|
||||
extern int X11_FlashWindow(SDL_VideoDevice *_this, SDL_Window *window, SDL_FlashOperation operation);
|
||||
extern void X11_ShowWindowSystemMenu(SDL_Window *window, int x, int y);
|
||||
|
||||
int SDL_X11_SetWindowTitle(Display *display, Window xwindow, char *title);
|
||||
void X11_UpdateWindowPosition(SDL_Window *window);
|
||||
|
Reference in New Issue
Block a user