borderless fullscreen window support for x11
move disable resize x11 code from context_gl to os_x11
This commit is contained in:
parent
89fa70706f
commit
dbae857b29
3 changed files with 42 additions and 11 deletions
|
@ -129,17 +129,6 @@ Error ContextGL_X11::initialize() {
|
||||||
}
|
}
|
||||||
//};
|
//};
|
||||||
|
|
||||||
if (!OS::get_singleton()->get_video_mode().resizable) {
|
|
||||||
XSizeHints *xsh;
|
|
||||||
xsh = XAllocSizeHints();
|
|
||||||
xsh->flags = PMinSize | PMaxSize;
|
|
||||||
xsh->min_width = OS::get_singleton()->get_video_mode().width;
|
|
||||||
xsh->max_width = OS::get_singleton()->get_video_mode().width;
|
|
||||||
xsh->min_height = OS::get_singleton()->get_video_mode().height;
|
|
||||||
xsh->max_height = OS::get_singleton()->get_video_mode().height;
|
|
||||||
XSetWMNormalHints(x11_display, x11_window, xsh);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (!opengl_3_context) {
|
if (!opengl_3_context) {
|
||||||
//oldstyle context:
|
//oldstyle context:
|
||||||
|
|
|
@ -168,6 +168,39 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
|
||||||
visual_server =memnew(VisualServerWrapMT(visual_server,get_render_thread_mode()==RENDER_SEPARATE_THREAD));
|
visual_server =memnew(VisualServerWrapMT(visual_server,get_render_thread_mode()==RENDER_SEPARATE_THREAD));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// borderless fullscreen window mode
|
||||||
|
if (current_videomode.fullscreen) {
|
||||||
|
Hints hints;
|
||||||
|
Atom property;
|
||||||
|
hints.flags = 2;
|
||||||
|
hints.decorations = 0;
|
||||||
|
property = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True);
|
||||||
|
XChangeProperty(x11_display, x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
|
||||||
|
XMapRaised(x11_display, x11_window);
|
||||||
|
// get the window root, then the res for the root
|
||||||
|
XWindowAttributes xwa;
|
||||||
|
XGetWindowAttributes(x11_display,x11_window,&xwa);
|
||||||
|
XGetWindowAttributes(x11_display,xwa.root,&xwa);
|
||||||
|
XMoveResizeWindow(x11_display, x11_window ,0 ,0 , xwa.width, xwa.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
// disable resizeable window
|
||||||
|
if (!current_videomode.resizable) {
|
||||||
|
XSizeHints *xsh;
|
||||||
|
xsh = XAllocSizeHints();
|
||||||
|
xsh->flags = PMinSize | PMaxSize;
|
||||||
|
XWindowAttributes xwa;
|
||||||
|
XGetWindowAttributes(x11_display,x11_window,&xwa);
|
||||||
|
if (current_videomode.fullscreen) {
|
||||||
|
XGetWindowAttributes(x11_display,xwa.root,&xwa);
|
||||||
|
}
|
||||||
|
xsh->min_width = xwa.width;
|
||||||
|
xsh->max_width = xwa.width;
|
||||||
|
xsh->min_height = xwa.height;
|
||||||
|
xsh->max_height = xwa.height;
|
||||||
|
XSetWMNormalHints(x11_display, x11_window, xsh);
|
||||||
|
}
|
||||||
|
|
||||||
AudioDriverManagerSW::get_driver(p_audio_driver)->set_singleton();
|
AudioDriverManagerSW::get_driver(p_audio_driver)->set_singleton();
|
||||||
|
|
||||||
if (AudioDriverManagerSW::get_driver(p_audio_driver)->init()!=OK) {
|
if (AudioDriverManagerSW::get_driver(p_audio_driver)->init()!=OK) {
|
||||||
|
|
|
@ -49,6 +49,15 @@
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include <X11/Xcursor/Xcursor.h>
|
#include <X11/Xcursor/Xcursor.h>
|
||||||
|
|
||||||
|
// Hints for X11 fullscreen
|
||||||
|
typedef struct {
|
||||||
|
unsigned long flags;
|
||||||
|
unsigned long functions;
|
||||||
|
unsigned long decorations;
|
||||||
|
long inputMode;
|
||||||
|
unsigned long status;
|
||||||
|
} Hints;
|
||||||
|
|
||||||
//bitch
|
//bitch
|
||||||
#undef CursorShape
|
#undef CursorShape
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue