Merge remote-tracking branch 'origin/5.11' into dev
Conflicts: src/client/qwaylandxdgsurface.cpp src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgsurfacev5.cpp src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h Done-with: Johan Klokkhammer Helsing <johan.helsing@qt.io> Change-Id: Ia39be6254a95af1c4efa831358cc06a697da3423
This commit is contained in:
commit
f6fd704557
@ -229,6 +229,7 @@ void QWaylandXdgSurfaceV5::xdg_surface_configure(int32_t width, int32_t height,
|
|||||||
|
|
||||||
void QWaylandXdgSurfaceV5::xdg_surface_close()
|
void QWaylandXdgSurfaceV5::xdg_surface_close()
|
||||||
{
|
{
|
||||||
|
m_window->window()->close();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -152,6 +152,7 @@ QWaylandXdgSurfaceV6::Popup::Popup(QWaylandXdgSurfaceV6 *xdgSurface, QWaylandXdg
|
|||||||
QtWayland::zxdg_positioner_v6 *positioner)
|
QtWayland::zxdg_positioner_v6 *positioner)
|
||||||
: zxdg_popup_v6(xdgSurface->get_popup(parent->object(), positioner->object()))
|
: zxdg_popup_v6(xdgSurface->get_popup(parent->object(), positioner->object()))
|
||||||
, m_xdgSurface(xdgSurface)
|
, m_xdgSurface(xdgSurface)
|
||||||
|
, m_parent(parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,6 +160,19 @@ QWaylandXdgSurfaceV6::Popup::~Popup()
|
|||||||
{
|
{
|
||||||
if (isInitialized())
|
if (isInitialized())
|
||||||
destroy();
|
destroy();
|
||||||
|
|
||||||
|
if (m_grabbing) {
|
||||||
|
auto *shell = m_xdgSurface->m_shell;
|
||||||
|
Q_ASSERT(shell->m_topmostPopup == this);
|
||||||
|
shell->m_topmostPopup = m_parent->m_popup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QWaylandXdgSurfaceV6::Popup::grab(QWaylandInputDevice *seat, uint serial)
|
||||||
|
{
|
||||||
|
m_xdgSurface->m_shell->m_topmostPopup = this;
|
||||||
|
zxdg_popup_v6::grab(seat->wl_seat(), serial);
|
||||||
|
m_grabbing = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWaylandXdgSurfaceV6::Popup::zxdg_popup_v6_popup_done()
|
void QWaylandXdgSurfaceV6::Popup::zxdg_popup_v6_popup_done()
|
||||||
@ -192,8 +206,10 @@ QWaylandXdgSurfaceV6::~QWaylandXdgSurfaceV6()
|
|||||||
{
|
{
|
||||||
if (m_toplevel)
|
if (m_toplevel)
|
||||||
zxdg_toplevel_v6_destroy(m_toplevel->object());
|
zxdg_toplevel_v6_destroy(m_toplevel->object());
|
||||||
if (m_popup)
|
if (m_popup) {
|
||||||
zxdg_popup_v6_destroy(m_popup->object());
|
delete m_popup;
|
||||||
|
m_popup = nullptr;
|
||||||
|
}
|
||||||
destroy();
|
destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,6 +293,14 @@ void QWaylandXdgSurfaceV6::setPopup(QWaylandWindow *parent, QWaylandInputDevice
|
|||||||
Q_ASSERT(!m_toplevel && !m_popup);
|
Q_ASSERT(!m_toplevel && !m_popup);
|
||||||
|
|
||||||
auto parentXdgSurface = static_cast<QWaylandXdgSurfaceV6 *>(parent->shellSurface());
|
auto parentXdgSurface = static_cast<QWaylandXdgSurfaceV6 *>(parent->shellSurface());
|
||||||
|
|
||||||
|
auto *top = m_shell->m_topmostPopup;
|
||||||
|
if (grab && top && top->m_xdgSurface != parentXdgSurface) {
|
||||||
|
qCWarning(lcQpaWayland) << "setPopup called for a surface that was not the topmost popup, positions might be off.";
|
||||||
|
parentXdgSurface = top->m_xdgSurface;
|
||||||
|
parent = top->m_xdgSurface->m_window;
|
||||||
|
}
|
||||||
|
|
||||||
auto positioner = new QtWayland::zxdg_positioner_v6(m_shell->create_positioner());
|
auto positioner = new QtWayland::zxdg_positioner_v6(m_shell->create_positioner());
|
||||||
// set_popup expects a position relative to the parent
|
// set_popup expects a position relative to the parent
|
||||||
QPoint transientPos = m_window->geometry().topLeft(); // this is absolute
|
QPoint transientPos = m_window->geometry().topLeft(); // this is absolute
|
||||||
@ -292,9 +316,8 @@ void QWaylandXdgSurfaceV6::setPopup(QWaylandWindow *parent, QWaylandInputDevice
|
|||||||
m_popup = new Popup(this, parentXdgSurface, positioner);
|
m_popup = new Popup(this, parentXdgSurface, positioner);
|
||||||
positioner->destroy();
|
positioner->destroy();
|
||||||
delete positioner;
|
delete positioner;
|
||||||
if (grab) {
|
if (grab)
|
||||||
m_popup->grab(device->wl_seat(), serial);
|
m_popup->grab(device, serial);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWaylandXdgSurfaceV6::zxdg_surface_v6_configure(uint32_t serial)
|
void QWaylandXdgSurfaceV6::zxdg_surface_v6_configure(uint32_t serial)
|
||||||
|
@ -122,9 +122,12 @@ private:
|
|||||||
Popup(QWaylandXdgSurfaceV6 *xdgSurface, QWaylandXdgSurfaceV6 *parent, QtWayland::zxdg_positioner_v6 *positioner);
|
Popup(QWaylandXdgSurfaceV6 *xdgSurface, QWaylandXdgSurfaceV6 *parent, QtWayland::zxdg_positioner_v6 *positioner);
|
||||||
~Popup() override;
|
~Popup() override;
|
||||||
|
|
||||||
|
void grab(QWaylandInputDevice *seat, uint serial);
|
||||||
void zxdg_popup_v6_popup_done() override;
|
void zxdg_popup_v6_popup_done() override;
|
||||||
|
|
||||||
QWaylandXdgSurfaceV6 *m_xdgSurface = nullptr;
|
QWaylandXdgSurfaceV6 *m_xdgSurface = nullptr;
|
||||||
|
QWaylandXdgSurfaceV6 *m_parent = nullptr;
|
||||||
|
bool m_grabbing = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
void setToplevel();
|
void setToplevel();
|
||||||
@ -137,6 +140,8 @@ private:
|
|||||||
bool m_configured = false;
|
bool m_configured = false;
|
||||||
QRegion m_exposeRegion;
|
QRegion m_exposeRegion;
|
||||||
uint m_pendingConfigureSerial = 0;
|
uint m_pendingConfigureSerial = 0;
|
||||||
|
|
||||||
|
friend class QWaylandXdgShellV6;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgShellV6 : public QtWayland::zxdg_shell_v6
|
class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgShellV6 : public QtWayland::zxdg_shell_v6
|
||||||
@ -150,6 +155,9 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void zxdg_shell_v6_ping(uint32_t serial) override;
|
void zxdg_shell_v6_ping(uint32_t serial) override;
|
||||||
|
QWaylandXdgSurfaceV6::Popup *m_topmostPopup = nullptr;
|
||||||
|
|
||||||
|
friend class QWaylandXdgSurfaceV6;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -506,6 +506,7 @@ void tst_WaylandClient::mouseDrag()
|
|||||||
|
|
||||||
void tst_WaylandClient::dontCrashOnMultipleCommits()
|
void tst_WaylandClient::dontCrashOnMultipleCommits()
|
||||||
{
|
{
|
||||||
|
QSKIP("This test is flaky. See QTBUG-68756.");
|
||||||
auto window = new TestWindow();
|
auto window = new TestWindow();
|
||||||
window->show();
|
window->show();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user