diff --git a/changelog/next.md b/changelog/next.md index ede8442d..564f6991 100644 --- a/changelog/next.md +++ b/changelog/next.md @@ -6,3 +6,4 @@ - Fixed missing/wrong change signals on various properties. - Fixed session lock crashes on sleep, wake, DPMS, and unlocking. - QsWindow.updatesEnabled makes sure windows are redrawn when set to true. +- Fixed a crash that could occur when a Toplevel was closed while still referenced, such as on monitor wakeup. diff --git a/src/wayland/toplevel/qml.cpp b/src/wayland/toplevel/qml.cpp index ea09e095..2ccbcef1 100644 --- a/src/wayland/toplevel/qml.cpp +++ b/src/wayland/toplevel/qml.cpp @@ -31,7 +31,7 @@ Toplevel::Toplevel(wlr::ToplevelHandle* handle, QObject* parent): QObject(parent void Toplevel::onClosed() { emit this->closed(); - delete this; + this->deleteLater(); } void Toplevel::activate() { this->handle->activate(); } diff --git a/src/wayland/toplevel/wlr_toplevel.cpp b/src/wayland/toplevel/wlr_toplevel.cpp index fe6f1b3e..d2f30c13 100644 --- a/src/wayland/toplevel/wlr_toplevel.cpp +++ b/src/wayland/toplevel/wlr_toplevel.cpp @@ -173,7 +173,7 @@ void ToplevelHandle::zwlr_foreign_toplevel_handle_v1_closed() { qCDebug(logToplevelManagement) << this << "closed"; this->destroy(); emit this->closed(); - delete this; + this->deleteLater(); } void ToplevelHandle::zwlr_foreign_toplevel_handle_v1_app_id(const QString& appId) { diff --git a/src/wayland/toplevel/wlr_toplevel.hpp b/src/wayland/toplevel/wlr_toplevel.hpp index 2c69fcdf..515ece76 100644 --- a/src/wayland/toplevel/wlr_toplevel.hpp +++ b/src/wayland/toplevel/wlr_toplevel.hpp @@ -45,7 +45,8 @@ class ToplevelHandle signals: // sent after the first done event. void ready(); - // sent right before delete this. + // sent right before this object is scheduled for deletion (via deleteLater) + // -- the wayland handle is already gone by this point. void closed(); void appIdChanged();