summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorAndreas Haas <liu.gam3@gmail.com>2016-11-16 02:04:39 +0100
committerAndreas Haas <liu.gam3@gmail.com>2016-11-16 02:04:39 +0100
commit8d3efe2b7de494c0971d4b7f7af6ed0dc2f4613c (patch)
tree90264098396d9761fdd1daf40709bbb3220ab63b /platform
parent7d1230a266f4eab3262ebfcbf4a89148dfcb3c48 (diff)
X11: Fix maximized boot splash
When instructing the window manager to (un)maximize a window, the resulting resolution is recieved via an XEvent of type "ConfigureNotify". The problem here was that these events were only handled in the `OS_X11::process_xevents()` method, which is initially called on the first iteration of the main loop. Because of this, the VideoMode still hadn't been updated yet when doing the boot splash setup.
Diffstat (limited to 'platform')
-rwxr-xr-x[-rw-r--r--]platform/x11/os_x11.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp
index 0172dca4c4..65f546e2ee 100644..100755
--- a/platform/x11/os_x11.cpp
+++ b/platform/x11/os_x11.cpp
@@ -880,6 +880,9 @@ bool OS_X11::is_window_minimized() const {
}
void OS_X11::set_window_maximized(bool p_enabled) {
+
+ if (is_window_maximized() == p_enabled) return;
+
// Using EWMH -- Extended Window Manager Hints
XEvent xev;
Atom wm_state = XInternAtom(x11_display, "_NET_WM_STATE", False);
@@ -898,6 +901,23 @@ void OS_X11::set_window_maximized(bool p_enabled) {
XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
maximized = p_enabled;
+
+ //wait until the window has been resized and update video mode
+ while (true) {
+ XEvent ev;
+ XNextEvent(x11_display, &ev);
+ if (ev.type == ConfigureNotify) {
+ XConfigureEvent &xc = ev.xconfigure;
+ if (xc.send_event == 1 &&
+ (xc.width == get_screen_size(get_current_screen()).width || (!p_enabled && xc.width < current_videomode.width))) {
+
+ current_videomode.width=xc.width;
+ current_videomode.height=xc.height;
+ break;
+ };
+ }
+ };
+
}
bool OS_X11::is_window_maximized() const {
@@ -1990,6 +2010,7 @@ OS_X11::OS_X11() {
AudioDriverManagerSW::add_driver(&driver_alsa);
#endif
+ maximized = false;
minimized = false;
xim_style=0L;
mouse_mode=MOUSE_MODE_VISIBLE;