[platforms/x11] Support output removal in nested setup
Summary: When closing a nested window kwin_wayland only terminates if the closed window is the last output window. In a simulated multi-screen setup closing a window results in the output being removed. Test Plan: Closed windows, verified with xrandr Reviewers: #kwin, #plasma_on_wayland Subscribers: plasma-devel, kwin Tags: #plasma_on_wayland, #kwin Differential Revision: https://phabricator.kde.org/D2234
This commit is contained in:
parent
e88a709f03
commit
a902ba8ea3
1 changed files with 20 additions and 2 deletions
|
@ -303,8 +303,26 @@ void X11WindowedBackend::handleClientMessage(xcb_client_message_event_t *event)
|
||||||
}
|
}
|
||||||
if (event->type == m_protocols && m_protocols != XCB_ATOM_NONE) {
|
if (event->type == m_protocols && m_protocols != XCB_ATOM_NONE) {
|
||||||
if (event->data.data32[0] == m_deleteWindowProtocol && m_deleteWindowProtocol != XCB_ATOM_NONE) {
|
if (event->data.data32[0] == m_deleteWindowProtocol && m_deleteWindowProtocol != XCB_ATOM_NONE) {
|
||||||
|
if (m_windows.count() == 1) {
|
||||||
qCDebug(KWIN_X11WINDOWED) << "Backend window is going to be closed, shutting down.";
|
qCDebug(KWIN_X11WINDOWED) << "Backend window is going to be closed, shutting down.";
|
||||||
QCoreApplication::quit();
|
QCoreApplication::quit();
|
||||||
|
} else {
|
||||||
|
// remove the window
|
||||||
|
qCDebug(KWIN_X11WINDOWED) << "Removing one output window.";
|
||||||
|
auto o = *it;
|
||||||
|
it = m_windows.erase(it);
|
||||||
|
xcb_unmap_window(m_connection, o.window);
|
||||||
|
xcb_destroy_window(m_connection, o.window);
|
||||||
|
delete o.winInfo;
|
||||||
|
|
||||||
|
// update the sizes
|
||||||
|
int x = o.internalPosition.x();
|
||||||
|
for (; it != m_windows.end(); ++it) {
|
||||||
|
(*it).internalPosition.setX(x);
|
||||||
|
x += (*it).size.width();
|
||||||
|
}
|
||||||
|
QMetaObject::invokeMethod(screens(), "updateCount");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue