Client: Don't allow decorations for frameless windows
This only fixes it for when Qt::FramelessWindowHint is set appropriately before the window is shown. [ChangeLog][QPA plugin] Windows with Qt::FramelessWindowHint no longer create zxdg_toplevel_decoration_v1, as that allowed compositors to force server-side decorations. Fixes: QTBUG-80702 Change-Id: I47a582a59f6682a57128c0c9d4e4b9a6181925a4 Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
This commit is contained in:
parent
84209cf53b
commit
b74257332f
@ -56,10 +56,11 @@ QWaylandXdgSurface::Toplevel::Toplevel(QWaylandXdgSurface *xdgSurface)
|
||||
: QtWayland::xdg_toplevel(xdgSurface->get_toplevel())
|
||||
, m_xdgSurface(xdgSurface)
|
||||
{
|
||||
if (auto *decorationManager = m_xdgSurface->m_shell->decorationManager())
|
||||
m_decoration = decorationManager->createToplevelDecoration(object());
|
||||
|
||||
QWindow *window = xdgSurface->window()->window();
|
||||
if (auto *decorationManager = m_xdgSurface->m_shell->decorationManager()) {
|
||||
if (!(window->flags() & Qt::FramelessWindowHint))
|
||||
m_decoration = decorationManager->createToplevelDecoration(object());
|
||||
}
|
||||
requestWindowStates(window->windowStates());
|
||||
requestWindowFlags(window->flags());
|
||||
}
|
||||
|
@ -153,6 +153,7 @@ private slots:
|
||||
void initTestCase();
|
||||
void cleanup() { QTRY_VERIFY2(isClean(), qPrintable(dirtyMessage())); }
|
||||
void clientSidePreferredByCompositor();
|
||||
void initialFramelessWindowHint();
|
||||
};
|
||||
|
||||
void tst_xdgdecorationv1::initTestCase()
|
||||
@ -182,5 +183,22 @@ void tst_xdgdecorationv1::clientSidePreferredByCompositor()
|
||||
QTRY_VERIFY(!window.frameMargins().isNull());
|
||||
}
|
||||
|
||||
void tst_xdgdecorationv1::initialFramelessWindowHint()
|
||||
{
|
||||
QRasterWindow window;
|
||||
window.setFlag(Qt::FramelessWindowHint, true);
|
||||
window.show();
|
||||
QCOMPOSITOR_TRY_COMPARE(get<XdgDecorationManagerV1>()->resourceMap().size(), 1);
|
||||
QCOMPOSITOR_TRY_VERIFY(xdgToplevel());
|
||||
exec([=]{
|
||||
xdgToplevel()->sendCompleteConfigure();
|
||||
});
|
||||
QCOMPOSITOR_TRY_VERIFY(xdgSurface()->m_committedConfigureSerial);
|
||||
|
||||
// The client should not have create a decoration object, because that allows the compositor
|
||||
// to override our decision and add server side decorations to our window.
|
||||
QCOMPOSITOR_TRY_VERIFY(!toplevelDecoration());
|
||||
}
|
||||
|
||||
QCOMPOSITOR_TEST_MAIN(tst_xdgdecorationv1)
|
||||
#include "tst_xdgdecorationv1.moc"
|
||||
|
Loading…
x
Reference in New Issue
Block a user