mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-18 03:55:19 -04:00
Fix leaving fullscreen resetting maximised state on linux
This commit is contained in:
parent
1f93a262f8
commit
13b6407b3d
18
src/Window.c
18
src/Window.c
@ -972,43 +972,31 @@ int Window_GetWindowState(void) {
|
|||||||
}
|
}
|
||||||
if (data) XFree(data);
|
if (data) XFree(data);
|
||||||
|
|
||||||
|
if (fullscreen) return WINDOW_STATE_FULLSCREEN;
|
||||||
if (minimised) return WINDOW_STATE_MINIMISED;
|
if (minimised) return WINDOW_STATE_MINIMISED;
|
||||||
if (maximised == 2) return WINDOW_STATE_MAXIMISED;
|
if (maximised == 2) return WINDOW_STATE_MAXIMISED;
|
||||||
if (fullscreen) return WINDOW_STATE_FULLSCREEN;
|
|
||||||
return WINDOW_STATE_NORMAL;
|
return WINDOW_STATE_NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Window_SendNetWMState(long op, Atom a1, Atom a2) {
|
static void Window_ToggleFullscreen(long op) {
|
||||||
XEvent ev = { 0 };
|
XEvent ev = { 0 };
|
||||||
ev.xclient.type = ClientMessage;
|
ev.xclient.type = ClientMessage;
|
||||||
ev.xclient.send_event = true;
|
|
||||||
ev.xclient.window = win_handle;
|
ev.xclient.window = win_handle;
|
||||||
ev.xclient.message_type = net_wm_state;
|
ev.xclient.message_type = net_wm_state;
|
||||||
ev.xclient.format = 32;
|
ev.xclient.format = 32;
|
||||||
ev.xclient.data.l[0] = op;
|
ev.xclient.data.l[0] = op;
|
||||||
ev.xclient.data.l[1] = a1;
|
ev.xclient.data.l[1] = net_wm_state_fullscreen;
|
||||||
ev.xclient.data.l[2] = a2;
|
|
||||||
|
|
||||||
XSendEvent(win_display, win_rootWin, false,
|
XSendEvent(win_display, win_rootWin, false,
|
||||||
SubstructureRedirectMask | SubstructureNotifyMask, &ev);
|
SubstructureRedirectMask | SubstructureNotifyMask, &ev);
|
||||||
}
|
|
||||||
|
|
||||||
static void Window_ToggleFullscreen(long op) {
|
|
||||||
Window_SendNetWMState(op, net_wm_state_fullscreen, 0);
|
|
||||||
XSync(win_display, false);
|
XSync(win_display, false);
|
||||||
XRaiseWindow(win_display, win_handle);
|
XRaiseWindow(win_display, win_handle);
|
||||||
Window_ProcessEvents();
|
Window_ProcessEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window_EnterFullscreen(void) {
|
void Window_EnterFullscreen(void) {
|
||||||
/* TODO: Do we actually need to remove maximised state? */
|
|
||||||
if (Window_GetWindowState() == WINDOW_STATE_MAXIMISED) {
|
|
||||||
Window_SendNetWMState(_NET_WM_STATE_TOGGLE, net_wm_state_maximized_horizontal,
|
|
||||||
net_wm_state_maximized_vertical);
|
|
||||||
}
|
|
||||||
Window_ToggleFullscreen(_NET_WM_STATE_ADD);
|
Window_ToggleFullscreen(_NET_WM_STATE_ADD);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window_ExitFullscreen(void) {
|
void Window_ExitFullscreen(void) {
|
||||||
Window_ToggleFullscreen(_NET_WM_STATE_REMOVE);
|
Window_ToggleFullscreen(_NET_WM_STATE_REMOVE);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user