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