Fixed bug 2007 - SDL_SetWindowMinimumSize() not implemented on X11 (thanks Rainer!)
This commit is contained in:
parent
bcee442188
commit
9444c11e99
3 changed files with 63 additions and 0 deletions
|
@ -362,6 +362,8 @@ X11_CreateDevice(int devindex)
|
||||||
device->SetWindowIcon = X11_SetWindowIcon;
|
device->SetWindowIcon = X11_SetWindowIcon;
|
||||||
device->SetWindowPosition = X11_SetWindowPosition;
|
device->SetWindowPosition = X11_SetWindowPosition;
|
||||||
device->SetWindowSize = X11_SetWindowSize;
|
device->SetWindowSize = X11_SetWindowSize;
|
||||||
|
device->SetWindowMinimumSize = X11_SetWindowMinimumSize;
|
||||||
|
device->SetWindowMaximumSize = X11_SetWindowMaximumSize;
|
||||||
device->ShowWindow = X11_ShowWindow;
|
device->ShowWindow = X11_ShowWindow;
|
||||||
device->HideWindow = X11_HideWindow;
|
device->HideWindow = X11_HideWindow;
|
||||||
device->RaiseWindow = X11_RaiseWindow;
|
device->RaiseWindow = X11_RaiseWindow;
|
||||||
|
|
|
@ -741,6 +741,64 @@ X11_SetWindowPosition(_THIS, SDL_Window * window)
|
||||||
XFlush(display);
|
XFlush(display);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
X11_SetWindowMinimumSize(_THIS, SDL_Window * window)
|
||||||
|
{
|
||||||
|
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
||||||
|
Display *display = data->videodata->display;
|
||||||
|
|
||||||
|
if (window->flags & SDL_WINDOW_RESIZABLE) {
|
||||||
|
XSizeHints *sizehints = XAllocSizeHints();
|
||||||
|
long userhints;
|
||||||
|
|
||||||
|
XGetWMNormalHints(display, data->xwindow, sizehints, &userhints);
|
||||||
|
|
||||||
|
sizehints->min_width = window->min_w;
|
||||||
|
sizehints->min_height = window->min_h;
|
||||||
|
sizehints->flags |= PMinSize;
|
||||||
|
|
||||||
|
XSetWMNormalHints(display, data->xwindow, sizehints);
|
||||||
|
|
||||||
|
XFree(sizehints);
|
||||||
|
|
||||||
|
/* See comment in X11_SetWindowSize. */
|
||||||
|
XResizeWindow(display, data->xwindow, window->w, window->h);
|
||||||
|
XMoveWindow(display, data->xwindow, window->x, window->y);
|
||||||
|
XRaiseWindow(display, data->xwindow);
|
||||||
|
}
|
||||||
|
|
||||||
|
XFlush(display);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
X11_SetWindowMaximumSize(_THIS, SDL_Window * window)
|
||||||
|
{
|
||||||
|
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
||||||
|
Display *display = data->videodata->display;
|
||||||
|
|
||||||
|
if (window->flags & SDL_WINDOW_RESIZABLE) {
|
||||||
|
XSizeHints *sizehints = XAllocSizeHints();
|
||||||
|
long userhints;
|
||||||
|
|
||||||
|
XGetWMNormalHints(display, data->xwindow, sizehints, &userhints);
|
||||||
|
|
||||||
|
sizehints->max_width = window->max_w;
|
||||||
|
sizehints->max_height = window->max_h;
|
||||||
|
sizehints->flags |= PMaxSize;
|
||||||
|
|
||||||
|
XSetWMNormalHints(display, data->xwindow, sizehints);
|
||||||
|
|
||||||
|
XFree(sizehints);
|
||||||
|
|
||||||
|
/* See comment in X11_SetWindowSize. */
|
||||||
|
XResizeWindow(display, data->xwindow, window->w, window->h);
|
||||||
|
XMoveWindow(display, data->xwindow, window->x, window->y);
|
||||||
|
XRaiseWindow(display, data->xwindow);
|
||||||
|
}
|
||||||
|
|
||||||
|
XFlush(display);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
X11_SetWindowSize(_THIS, SDL_Window * window)
|
X11_SetWindowSize(_THIS, SDL_Window * window)
|
||||||
{
|
{
|
||||||
|
@ -760,6 +818,7 @@ X11_SetWindowSize(_THIS, SDL_Window * window)
|
||||||
|
|
||||||
sizehints->min_width = sizehints->max_width = window->w;
|
sizehints->min_width = sizehints->max_width = window->w;
|
||||||
sizehints->min_height = sizehints->max_height = window->h;
|
sizehints->min_height = sizehints->max_height = window->h;
|
||||||
|
sizehints->flags |= PMinSize | PMaxSize;
|
||||||
|
|
||||||
XSetWMNormalHints(display, data->xwindow, sizehints);
|
XSetWMNormalHints(display, data->xwindow, sizehints);
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,8 @@ extern char *X11_GetWindowTitle(_THIS, Window xwindow);
|
||||||
extern void X11_SetWindowTitle(_THIS, SDL_Window * window);
|
extern void X11_SetWindowTitle(_THIS, SDL_Window * window);
|
||||||
extern void X11_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon);
|
extern void X11_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon);
|
||||||
extern void X11_SetWindowPosition(_THIS, SDL_Window * window);
|
extern void X11_SetWindowPosition(_THIS, SDL_Window * window);
|
||||||
|
extern void X11_SetWindowMinimumSize(_THIS, SDL_Window * window);
|
||||||
|
extern void X11_SetWindowMaximumSize(_THIS, SDL_Window * window);
|
||||||
extern void X11_SetWindowSize(_THIS, SDL_Window * window);
|
extern void X11_SetWindowSize(_THIS, SDL_Window * window);
|
||||||
extern void X11_ShowWindow(_THIS, SDL_Window * window);
|
extern void X11_ShowWindow(_THIS, SDL_Window * window);
|
||||||
extern void X11_HideWindow(_THIS, SDL_Window * window);
|
extern void X11_HideWindow(_THIS, SDL_Window * window);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue