xcb: unset old states and set new ones for window

This partly reverts a02959bb5b43a3f9d881e5213ceedf535202b6a1.

Fixes: QTBUG-87078
Change-Id: I69e18ad3c0a8d142b2e1f5ab87990addc97d9df1
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
(cherry picked from commit f61b140482d9578c07410a5979379e44e05352e5)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Liang Qi 2021-01-22 22:37:23 +01:00 committed by Qt Cherry-pick Bot
parent b427721f58
commit e41cb4db84

View File

@ -1172,9 +1172,19 @@ void QXcbWindow::setWindowState(Qt::WindowStates state)
if (state == m_windowState)
return;
if ((m_windowState & Qt::WindowMinimized) && !(state & Qt::WindowMinimized)) {
// unset old state
if (m_windowState & Qt::WindowMinimized)
xcb_map_window(xcb_connection(), m_window);
} else if (!(m_windowState & Qt::WindowMinimized) && (state & Qt::WindowMinimized)) {
if (m_windowState & Qt::WindowMaximized)
setNetWmState(false,
atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_HORZ),
atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_VERT));
if (m_windowState & Qt::WindowFullScreen)
setNetWmState(false, atom(QXcbAtom::_NET_WM_STATE_FULLSCREEN));
// set new state
if (state & Qt::WindowMinimized) {
{
xcb_client_message_event_t event;
event.response_type = XCB_CLIENT_MESSAGE;
@ -1191,8 +1201,15 @@ void QXcbWindow::setWindowState(Qt::WindowStates state)
xcb_send_event(xcb_connection(), 0, xcbScreen()->root(),
XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT,
(const char *)&event);
}
m_minimized = true;
}
if (state & Qt::WindowMaximized)
setNetWmState(true,
atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_HORZ),
atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_VERT));
if (state & Qt::WindowFullScreen)
setNetWmState(true, atom(QXcbAtom::_NET_WM_STATE_FULLSCREEN));
setNetWmState(state);