QWaylandXdgSurface: Always clean up xdg_activation_token in more places

If the token arrives after the surface has already been destroyed,
the lambda containing the deleteLater would never be called.

Amends 638c9bd2595704606b53ba319c67568b479f9fc0

Pick-to: 6.9 6.8
Change-Id: Ibebeb441d9c115b0203703b8042a58e986ccff47
Reviewed-by: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Reviewed-by: Kai Uwe Broulik <kde@privat.broulik.de>
This commit is contained in:
Ilya Fedin 2024-12-21 11:48:46 +04:00
parent f646c1b30b
commit c1a18d3edf

View File

@ -603,11 +603,8 @@ void QWaylandXdgSurface::requestXdgActivationToken(quint32 serial)
if (auto *activation = m_shell->activation()) { if (auto *activation = m_shell->activation()) {
auto tokenProvider = activation->requestXdgActivationToken( auto tokenProvider = activation->requestXdgActivationToken(
m_shell->m_display, m_window->wlSurface(), serial, m_appId); m_shell->m_display, m_window->wlSurface(), serial, m_appId);
connect(tokenProvider, &QWaylandXdgActivationTokenV1::done, this, connect(tokenProvider, &QWaylandXdgActivationTokenV1::done, m_window, &QWaylandWindow::xdgActivationTokenCreated);
[this, tokenProvider](const QString &token) { connect(tokenProvider, &QWaylandXdgActivationTokenV1::done, tokenProvider, &QObject::deleteLater);
Q_EMIT m_window->xdgActivationTokenCreated(token);
tokenProvider->deleteLater();
});
} else { } else {
QWaylandShellSurface::requestXdgActivationToken(serial); QWaylandShellSurface::requestXdgActivationToken(serial);
} }
@ -639,10 +636,10 @@ void QWaylandXdgSurface::setAlertState(bool enabled)
const auto tokenProvider = activation->requestXdgActivationToken( const auto tokenProvider = activation->requestXdgActivationToken(
m_shell->m_display, m_window->wlSurface(), std::nullopt, m_appId); m_shell->m_display, m_window->wlSurface(), std::nullopt, m_appId);
connect(tokenProvider, &QWaylandXdgActivationTokenV1::done, this, connect(tokenProvider, &QWaylandXdgActivationTokenV1::done, this,
[this, tokenProvider](const QString &token) { [this](const QString &token) {
m_shell->activation()->activate(token, m_window->wlSurface()); m_shell->activation()->activate(token, m_window->wlSurface());
tokenProvider->deleteLater();
}); });
connect(tokenProvider, &QWaylandXdgActivationTokenV1::done, tokenProvider, &QObject::deleteLater);
} }
QString QWaylandXdgSurface::externWindowHandle() QString QWaylandXdgSurface::externWindowHandle()