client: Roundtrip in an own queue when exporting window instead of default queue
This way no other events will be dispatched which could cause calls into user code when delivering events synchronously. Change-Id: I5c195877388d178832067b5aba6b5f5abd26e099 Reviewed-by: David Edmundson <davidedmundson@kde.org>
This commit is contained in:
parent
610bcae568
commit
997b12fd56
@ -36,12 +36,6 @@ QWaylandXdgExporterV2::~QWaylandXdgExporterV2()
|
||||
{
|
||||
destroy();
|
||||
}
|
||||
|
||||
QtWaylandClient::QWaylandXdgExportedV2 *QWaylandXdgExporterV2::exportToplevel(wl_surface *surface)
|
||||
{
|
||||
return new QWaylandXdgExportedV2(export_toplevel(surface));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -40,7 +40,6 @@ class QWaylandXdgExporterV2 : public QtWayland::zxdg_exporter_v2
|
||||
public:
|
||||
QWaylandXdgExporterV2(wl_registry *registry, uint32_t id, int version);
|
||||
~QWaylandXdgExporterV2() override;
|
||||
QWaylandXdgExportedV2 *exportToplevel(wl_surface *surface);
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -711,9 +711,18 @@ QString QWaylandXdgSurface::externWindowHandle()
|
||||
return QString();
|
||||
}
|
||||
if (!m_toplevel->m_exported) {
|
||||
m_toplevel->m_exported.reset(m_shell->exporter()->exportToplevel(m_window->wlSurface()));
|
||||
auto *exporterWrapper = static_cast<zxdg_exporter_v2 *>(
|
||||
wl_proxy_create_wrapper(m_shell->exporter()->object()));
|
||||
auto exportQueue = wl_display_create_queue(m_shell->display()->wl_display());
|
||||
wl_proxy_set_queue(reinterpret_cast<wl_proxy *>(exporterWrapper), exportQueue);
|
||||
m_toplevel->m_exported.reset(new QWaylandXdgExportedV2(
|
||||
zxdg_exporter_v2_export_toplevel(exporterWrapper, m_window->wlSurface())));
|
||||
// handle events is sent immediately
|
||||
m_shell->display()->forceRoundTrip();
|
||||
wl_display_roundtrip_queue(m_shell->display()->wl_display(), exportQueue);
|
||||
|
||||
wl_proxy_set_queue(reinterpret_cast<wl_proxy *>(m_toplevel->m_exported->object()), nullptr);
|
||||
wl_proxy_wrapper_destroy(exporterWrapper);
|
||||
wl_event_queue_destroy(exportQueue);
|
||||
}
|
||||
return m_toplevel->m_exported->handle();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user