Possible fix for #4081 and #2707 (#4087)

* detect openbox automatically

* format code

* copyright update

* free prop at the end of the function
This commit is contained in:
Kai 2017-08-14 10:10:53 +02:00 committed by akallabeth
parent b34b32bea7
commit 6b7b602370
1 changed files with 20 additions and 8 deletions

View File

@ -6,6 +6,7 @@
* Copyright 2012 HP Development Company, LLC
* Copyright 2016 Thincast Technologies GmbH
* Copyright 2016 Armin Novak <armin.novak@thincast.com>
* Copyright 2017 Kai Harms <kharms@rangee.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -145,6 +146,9 @@ void xf_SetWindowFullscreen(xfContext* xfc, xfWindow* window, BOOL fullscreen)
UINT32 height = window->height;
window->decorations = xfc->decorations;
xf_SetWindowDecorations(xfc, window->handle, window->decorations);
unsigned long nitems, bytes;
BYTE* prop;
BOOL status;
if (fullscreen)
{
@ -203,16 +207,24 @@ void xf_SetWindowFullscreen(xfContext* xfc, xfWindow* window, BOOL fullscreen)
XMoveWindow(xfc->display, window->handle, startX, startY);
}
/* Set the fullscreen state */
xf_SendClientEvent(xfc, window->handle, xfc->_NET_WM_STATE, 4,
fullscreen ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE,
xfc->_NET_WM_STATE_FULLSCREEN, 0, 0);
status = xf_GetWindowProperty(xfc, DefaultRootWindow(xfc->display),
xfc->_NET_WM_FULLSCREEN_MONITORS, 1, &nitems, &bytes, &prop);
if (status)
{
/* Set the fullscreen state */
xf_SendClientEvent(xfc, window->handle, xfc->_NET_WM_STATE, 4,
fullscreen ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE,
xfc->_NET_WM_STATE_FULLSCREEN, 0, 0);
}
if (!fullscreen)
{
/* leave full screen: move the window after removing NET_WM_STATE_FULLSCREEN */
XMoveWindow(xfc->display, window->handle, startX, startY);
}
free(prop);
}
/* http://tronche.com/gui/x/xlib/window-information/XGetWindowProperty.html */
@ -336,13 +348,13 @@ static const char* get_shm_id()
return shm_id;
}
Window xf_CreateDummyWindow(xfContext *xfc)
Window xf_CreateDummyWindow(xfContext* xfc)
{
return XCreateSimpleWindow(xfc->display, DefaultRootWindow(xfc->display),
0, 0, 1, 1, 0, 0, 0);
0, 0, 1, 1, 0, 0, 0);
}
void xf_DestroyDummyWindow(xfContext *xfc, Window window)
void xf_DestroyDummyWindow(xfContext* xfc, Window window)
{
if (window)
XDestroyWindow(xfc->display, window);
@ -958,7 +970,7 @@ void xf_UpdateWindowArea(xfContext* xfc, xfAppWindow* appWindow, int x, int y,
{
int ax, ay;
if (appWindow == NULL)
if (appWindow == NULL)
return;
ax = x + appWindow->windowOffsetX;