Bug#1110539: unblock: qtmir/0.8.0~git20250407.ea2f477-2
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: qtmir@packages.debian.org
Control: affects -1 + src:qtmir
User: release.debian.org@packages.debian.org
Usertags: unblock
Please unblock package qtmir
This unblock requests comes very late in the deep home that it can still
get accepted. It goes together with #1110538 for lomiri 0.5.0-4.
[ Reason ]
+ * debian/patches:
+ + Add 0001_mirserver-cursor-take-Shell-s-rotation-into-account.patch. Fix
+ cursor positioning if display is rotated.
-> This patch caused my to hesitate for maybe too long. It brings in a
regression and this patch needs to be removed from the package again for
the first point release.
+ + Add 0009_src-modules-Add-header-for-getpid.patch. Add include for getpid()
+ function.
-> Compiler warning fix. Trivial.
+ + Add 0002_src-modules-Re-introduce-lost-workaround-for-font-re.patch.
+ Regression fix, fix arbitrary font rendering glitches. (LP:#1583088).
-> This one is important: From time to time the fonts in a Lomiri
session become totally unreadable. It can immediately after login or in
the course of the session.
+ + Add 0011_src-platforms-Wrap-window-activity-change-in-a-try-c.patch.
+ Selecting the active window can lead to a range exception, so avoid a
+ crash by wrapping this in a try-catch.
-> Stabilize Lomiri, avoid session crashes when selecting the active window.
+ + Add 0012_src-modules-Partial-revert-of-e73ef71622ad3202b77bf6.patch. Drop
+ overzealous code when removing a window.
-> Removes overzealous code causing instability.
+ + Add 0013_src-modules-Address-review-comments-for-MirSurface.patch,
+ 0014_src-modules-Set-MirSurface-live-to-false-when-tearin.patch, 0015_src-
+ modules-Use-explicit-signal-to-signify-a-teardow.patch, 0016_src-modules-
+ Drop-references-before-teardown.patch. Address crash-on-close issue for
+ windows with the same APP_ID (causing Lomiri shell to crash). This goes
+ together with a changeset in lomiri src:pkg.
-> This goes together with a fix in Lomiri for handling closing of
multi-window-capable apps (such as lomiri-terminal-app) well when
closing one of its windows. (Without this one, closing terminal app can
tear down the whole Lomiri session).
Similar to what I wrote for this problem in lomiri 0.5.0-4's unblock
request: Upstream has now provided a better fix for this and we will
replace this patch in a follow-up upload for the 1st point release of
trixie.
+ + Trivial rebase of 2003_disable-benchmarks.patch.
-> trivial patch rebasing
[ Impact ]
Stability issues in Lomiri session. (Arbitrary session crashes, loss of unsaved user data).
[ Tests ]
Manual tests on notebooks and tablets.
[ Risks ]
For Lomiri users.
[ Checklist ]
[x] all changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in testing
[ Other info ]
Relevant for Lomiri on Debian.
unblock qtmir/0.8.0~git20250407.ea2f477-2
diff -Nru qtmir-0.8.0~git20250407.ea2f477/debian/changelog qtmir-0.8.0~git20250407.ea2f477/debian/changelog
--- qtmir-0.8.0~git20250407.ea2f477/debian/changelog 2025-04-17 21:25:11.000000000 +0200
+++ qtmir-0.8.0~git20250407.ea2f477/debian/changelog 2025-07-30 15:21:45.000000000 +0200
@@ -1,3 +1,27 @@
+qtmir (0.8.0~git20250407.ea2f477-2) unstable; urgency=medium
+
+ * debian/patches:
+ + Add 0001_mirserver-cursor-take-Shell-s-rotation-into-account.patch. Fix
+ cursor positioning if display is rotated.
+ + Add 0009_src-modules-Add-header-for-getpid.patch. Add include for getpid()
+ function.
+ + Add 0002_src-modules-Re-introduce-lost-workaround-for-font-re.patch.
+ Regression fix, fix arbitrary font rendering glitches. (LP:#1583088).
+ + Add 0011_src-platforms-Wrap-window-activity-change-in-a-try-c.patch.
+ Selecting the active window can lead to a range exception, so avoid a
+ crash by wrapping this in a try-catch.
+ + Add 0012_src-modules-Partial-revert-of-e73ef71622ad3202b77bf6.patch. Drop
+ overzealous code when removing a window.
+ + Add 0013_src-modules-Address-review-comments-for-MirSurface.patch,
+ 0014_src-modules-Set-MirSurface-live-to-false-when-tearin.patch, 0015_src-
+ modules-Use-explicit-signal-to-signify-a-teardow.patch, 0016_src-modules-
+ Drop-references-before-teardown.patch. Address crash-on-close issue for
+ windows with the same APP_ID (causing Lomiri shell to crash). This goes
+ together with a changeset in lomiri src:pkg.
+ + Trivial rebase of 2003_disable-benchmarks.patch.
+
+ -- Mike Gabriel <sunweaver@debian.org> Wed, 30 Jul 2025 15:21:45 +0200
+
qtmir (0.8.0~git20250407.ea2f477-1) unstable; urgency=medium
* New upstream Git snapshot.
diff -Nru qtmir-0.8.0~git20250407.ea2f477/debian/patches/0001_mirserver-cursor-take-Shell-s-rotation-into-account.patch qtmir-0.8.0~git20250407.ea2f477/debian/patches/0001_mirserver-cursor-take-Shell-s-rotation-into-account.patch
--- qtmir-0.8.0~git20250407.ea2f477/debian/patches/0001_mirserver-cursor-take-Shell-s-rotation-into-account.patch 1970-01-01 01:00:00.000000000 +0100
+++ qtmir-0.8.0~git20250407.ea2f477/debian/patches/0001_mirserver-cursor-take-Shell-s-rotation-into-account.patch 2025-05-15 09:58:10.000000000 +0200
@@ -0,0 +1,34 @@
+From 9e93db5bdbd54e3ae495762ae47c795cab920bbd Mon Sep 17 00:00:00 2001
+From: Ratchanan Srirattanamet <ratchanan@ubports.com>
+Date: Mon, 12 May 2025 22:30:24 +0700
+Subject: [PATCH] mirserver/cursor: take Shell's rotation into account
+
+It's incorrect to simply subtract the screen's top left from global
+cursor position to turn it into a local position; one must use
+QQuickItem::mapFromGlobal() to let QtQuick take rotation (among others)
+into account. Since the position is relative to the item's parent, call
+to its parent for this.
+
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ src/platforms/mirserver/cursor.cpp | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/platforms/mirserver/cursor.cpp b/src/platforms/mirserver/cursor.cpp
+index 3ded65ef..31bf7dbc 100644
+--- a/src/platforms/mirserver/cursor.cpp
++++ b/src/platforms/mirserver/cursor.cpp
+@@ -148,8 +148,9 @@ void Cursor::registerMousePointer(MirMousePointerInterface *mousePointer)
+ auto updatePositionFunction = [mousePointer](const QPoint& screenPos) {
+ if (!mousePointer->window()) return;
+ if (!mousePointer->isEnabled()) return;
++ if (!mousePointer->parentItem()) return;
+
+- QPoint localPos = screenPos - mousePointer->window()->geometry().topLeft();
++ QPoint localPos = mousePointer->parentItem()->mapFromGlobal(screenPos).toPoint();
+ mousePointer->moveTo(localPos);
+ };
+
+--
+2.47.2
+
diff -Nru qtmir-0.8.0~git20250407.ea2f477/debian/patches/0002_src-modules-Re-introduce-lost-workaround-for-font-re.patch qtmir-0.8.0~git20250407.ea2f477/debian/patches/0002_src-modules-Re-introduce-lost-workaround-for-font-re.patch
--- qtmir-0.8.0~git20250407.ea2f477/debian/patches/0002_src-modules-Re-introduce-lost-workaround-for-font-re.patch 1970-01-01 01:00:00.000000000 +0100
+++ qtmir-0.8.0~git20250407.ea2f477/debian/patches/0002_src-modules-Re-introduce-lost-workaround-for-font-re.patch 2025-07-29 10:49:48.000000000 +0200
@@ -0,0 +1,33 @@
+From b7333e0a00c2d7169c48e16b6e08c32803823fb4 Mon Sep 17 00:00:00 2001
+From: Alfred <dev.beidl@gmail.com>
+Date: Thu, 11 Jul 2024 18:54:41 +0200
+Subject: [PATCH 02/14] src/modules: Re-introduce lost workaround for font
+ render issue
+
+Lost in commit b27b44772de3be476a05831c0f14a63f56d79378, pulled from
+revision 15fcc65039b19a598eda76e18260ea9824a13048 and placed in a
+similar place around buffer bindings happen.
+
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ src/modules/QtMir/Application/mirbuffersgtexture.cpp | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/modules/QtMir/Application/mirbuffersgtexture.cpp b/src/modules/QtMir/Application/mirbuffersgtexture.cpp
+index 47d9f03a..6397b528 100644
+--- a/src/modules/QtMir/Application/mirbuffersgtexture.cpp
++++ b/src/modules/QtMir/Application/mirbuffersgtexture.cpp
+@@ -135,6 +135,10 @@ public:
+ f->glBindTexture(GL_TEXTURE_2D, m_textureId);
+
+ m_texSourceBuf->bind();
++
++ // Fix for lp:1583088 - For non-GL clients, Mir uploads the client pixel buffer to a GL texture.
++ // But as it does so, it changes some GL state and neglects to restore it, which breaks Qt's rendering.
++ f->glPixelStorei(GL_UNPACK_ALIGNMENT, 4); // 4 is the default which Qt uses
+ }
+
+ private:
+--
+2.47.2
+
diff -Nru qtmir-0.8.0~git20250407.ea2f477/debian/patches/0009_src-modules-Add-header-for-getpid.patch qtmir-0.8.0~git20250407.ea2f477/debian/patches/0009_src-modules-Add-header-for-getpid.patch
--- qtmir-0.8.0~git20250407.ea2f477/debian/patches/0009_src-modules-Add-header-for-getpid.patch 1970-01-01 01:00:00.000000000 +0100
+++ qtmir-0.8.0~git20250407.ea2f477/debian/patches/0009_src-modules-Add-header-for-getpid.patch 2025-07-29 10:49:48.000000000 +0200
@@ -0,0 +1,27 @@
+From e2af137c0e778e6e3c1440d0b782456793a9b5e3 Mon Sep 17 00:00:00 2001
+From: Alfred Neumayer <dev.beidl@gmail.com>
+Date: Thu, 8 Aug 2024 22:04:41 +0200
+Subject: [PATCH 09/14] src/modules: Add header for getpid()
+
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ src/modules/QtMir/Application/application.cpp | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/modules/QtMir/Application/application.cpp b/src/modules/QtMir/Application/application.cpp
+index ef9e15cd..07d1aa92 100644
+--- a/src/modules/QtMir/Application/application.cpp
++++ b/src/modules/QtMir/Application/application.cpp
+@@ -36,6 +36,9 @@
+ // std
+ #include <csignal>
+
++// Linux
++#include <unistd.h>
++
+ namespace shellapp = lomiri::shell::application;
+
+ #define DEBUG_MSG qCDebug(QTMIR_APPLICATIONS).nospace() << "Application[" << appId() <<"]::" << __func__
+--
+2.47.2
+
diff -Nru qtmir-0.8.0~git20250407.ea2f477/debian/patches/0011_src-platforms-Wrap-window-activity-change-in-a-try-c.patch qtmir-0.8.0~git20250407.ea2f477/debian/patches/0011_src-platforms-Wrap-window-activity-change-in-a-try-c.patch
--- qtmir-0.8.0~git20250407.ea2f477/debian/patches/0011_src-platforms-Wrap-window-activity-change-in-a-try-c.patch 1970-01-01 01:00:00.000000000 +0100
+++ qtmir-0.8.0~git20250407.ea2f477/debian/patches/0011_src-platforms-Wrap-window-activity-change-in-a-try-c.patch 2025-07-29 10:49:48.000000000 +0200
@@ -0,0 +1,54 @@
+From ca5e7399ca86280afcedf14f8ee5e09689c94abc Mon Sep 17 00:00:00 2001
+From: Alfred Neumayer <dev.beidl@gmail.com>
+Date: Fri, 4 Jul 2025 10:49:52 +0200
+Subject: [PATCH 11/14] src/platforms: Wrap window activity change in a
+ try-catch
+
+Selecting the active window can lead to a range exception,
+so avoid a crash by wrapping this in a try-catch.
+
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ .../mirserver/wrappedwindowmanagementpolicy.cpp | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/src/platforms/mirserver/wrappedwindowmanagementpolicy.cpp b/src/platforms/mirserver/wrappedwindowmanagementpolicy.cpp
+index b303b39f..d04813d3 100644
+--- a/src/platforms/mirserver/wrappedwindowmanagementpolicy.cpp
++++ b/src/platforms/mirserver/wrappedwindowmanagementpolicy.cpp
+@@ -619,7 +619,9 @@ void WrappedWindowManagementPolicy::deliver_keyboard_event(const MirKeyboardEven
+ if (mir_keyboard_event_action(event) == mir_keyboard_action_down) {
+ tools.invoke_under_lock([&]() {
+ if (tools.active_window() != window) {
+- tools.select_active_window(window);
++ try {
++ tools.select_active_window(window);
++ } catch (const std::exception& e) { }
+ }
+ });
+ }
+@@ -631,7 +633,9 @@ void WrappedWindowManagementPolicy::deliver_touch_event(const MirTouchEvent *eve
+ {
+ tools.invoke_under_lock([&]() {
+ if (tools.active_window() != window) {
+- tools.select_active_window(window);
++ try {
++ tools.select_active_window(window);
++ } catch (const std::exception& e) { }
+ }
+ });
+
+@@ -644,7 +648,9 @@ void WrappedWindowManagementPolicy::deliver_pointer_event(const MirPointerEvent
+ if (mir_pointer_event_action(event) == mir_pointer_action_button_down) {
+ tools.invoke_under_lock([&]() {
+ if (tools.active_window() != window) {
+- tools.select_active_window(window);
++ try {
++ tools.select_active_window(window);
++ } catch (const std::exception& e) { }
+ }
+ });
+ }
+--
+2.47.2
+
diff -Nru qtmir-0.8.0~git20250407.ea2f477/debian/patches/0012_src-modules-Partial-revert-of-e73ef71622ad3202b77bf6.patch qtmir-0.8.0~git20250407.ea2f477/debian/patches/0012_src-modules-Partial-revert-of-e73ef71622ad3202b77bf6.patch
--- qtmir-0.8.0~git20250407.ea2f477/debian/patches/0012_src-modules-Partial-revert-of-e73ef71622ad3202b77bf6.patch 1970-01-01 01:00:00.000000000 +0100
+++ qtmir-0.8.0~git20250407.ea2f477/debian/patches/0012_src-modules-Partial-revert-of-e73ef71622ad3202b77bf6.patch 2025-07-29 10:49:48.000000000 +0200
@@ -0,0 +1,38 @@
+From c6bee71ba608570ca8417399f32f5f5cf7796f0a Mon Sep 17 00:00:00 2001
+From: Alfred Neumayer <dev.beidl@gmail.com>
+Date: Tue, 22 Jul 2025 12:47:38 +0200
+Subject: [PATCH 12/14] src/modules: Partial revert of
+ e73ef71622ad3202b77bf6005f73134726d6394a
+
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ src/modules/QtMir/Application/windowmodel.cpp | 11 ++---------
+ 1 file changed, 2 insertions(+), 9 deletions(-)
+
+diff --git a/src/modules/QtMir/Application/windowmodel.cpp b/src/modules/QtMir/Application/windowmodel.cpp
+index c95adc73..0d65d7f5 100644
+--- a/src/modules/QtMir/Application/windowmodel.cpp
++++ b/src/modules/QtMir/Application/windowmodel.cpp
+@@ -81,17 +81,10 @@ void WindowModel::onWindowAdded(const NewWindow &window)
+ beginInsertRows(QModelIndex(), index, index);
+
+ #if MIR_SERVER_VERSION >= MIR_VERSION_NUMBER(2, 20, 0)
+- auto mirSurface = new MirSurface(window, m_windowController, *m_glProvider);
++ m_windowModel.append(new MirSurface(window, m_windowController, *m_glProvider));
+ #else
+- auto mirSurface = new MirSurface(window, m_windowController);
++ m_windowModel.append(new MirSurface(window, m_windowController));
+ #endif
+- connect(mirSurface, &MirSurface::isBeingDisplayedChanged, this, [=, this](){
+- if (mirSurface->isBeingDisplayed())
+- return;
+- onWindowRemoved(window.windowInfo);
+- });
+-
+- m_windowModel.append(mirSurface);
+ endInsertRows();
+ Q_EMIT countChanged();
+ }
+--
+2.47.2
+
diff -Nru qtmir-0.8.0~git20250407.ea2f477/debian/patches/0013_src-modules-Address-review-comments-for-MirSurface.patch qtmir-0.8.0~git20250407.ea2f477/debian/patches/0013_src-modules-Address-review-comments-for-MirSurface.patch
--- qtmir-0.8.0~git20250407.ea2f477/debian/patches/0013_src-modules-Address-review-comments-for-MirSurface.patch 1970-01-01 01:00:00.000000000 +0100
+++ qtmir-0.8.0~git20250407.ea2f477/debian/patches/0013_src-modules-Address-review-comments-for-MirSurface.patch 2025-07-29 10:49:48.000000000 +0200
@@ -0,0 +1,34 @@
+From ca9e9a2635bc817438ea0028b63a58db3940d0b0 Mon Sep 17 00:00:00 2001
+From: Alfred Neumayer <dev.beidl@gmail.com>
+Date: Tue, 22 Jul 2025 12:48:17 +0200
+Subject: [PATCH 13/14] src/modules: Address review comments for MirSurface
+
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ src/modules/QtMir/Application/mirsurface.cpp | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/src/modules/QtMir/Application/mirsurface.cpp b/src/modules/QtMir/Application/mirsurface.cpp
+index d892f207..b37bae31 100644
+--- a/src/modules/QtMir/Application/mirsurface.cpp
++++ b/src/modules/QtMir/Application/mirsurface.cpp
+@@ -138,7 +138,7 @@ public:
+ #else
+ void attrib_changed(MirWindowAttrib, int) override;
+ void resized_to(mir::geometry::Size const&) override;
+- void moved_to(mir::geometry::Point const&) override {};
++ void moved_to(mir::geometry::Point const&) override {}
+ void hidden_set_to(bool) override;
+
+ // Get new frame notifications from Mir, called from a Mir thread.
+@@ -681,7 +681,6 @@ void MirSurface::teardown()
+ for (const auto& id : m_views.keys()) {
+ unregisterView(id);
+ }
+- deleteLater();
+ }
+
+ void MirSurface::resize(int width, int height)
+--
+2.47.2
+
diff -Nru qtmir-0.8.0~git20250407.ea2f477/debian/patches/0014_src-modules-Set-MirSurface-live-to-false-when-tearin.patch qtmir-0.8.0~git20250407.ea2f477/debian/patches/0014_src-modules-Set-MirSurface-live-to-false-when-tearin.patch
--- qtmir-0.8.0~git20250407.ea2f477/debian/patches/0014_src-modules-Set-MirSurface-live-to-false-when-tearin.patch 1970-01-01 01:00:00.000000000 +0100
+++ qtmir-0.8.0~git20250407.ea2f477/debian/patches/0014_src-modules-Set-MirSurface-live-to-false-when-tearin.patch 2025-07-29 10:49:48.000000000 +0200
@@ -0,0 +1,39 @@
+From 81f25c97fb80f56302cd754dd5973bdf705e014a Mon Sep 17 00:00:00 2001
+From: Alfred Neumayer <dev.beidl@gmail.com>
+Date: Sat, 26 Jul 2025 16:47:18 +0200
+Subject: [PATCH 14/14] src/modules: Set MirSurface live to false when tearing
+ down
+
+Cause a natural removal of the surface from the SurfaceManager through
+signals & slots. This will remove associated surfaces from the window.
+Window removal can be done in QML from the window model later on.
+
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ src/modules/QtMir/Application/mirsurface.cpp | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/modules/QtMir/Application/mirsurface.cpp b/src/modules/QtMir/Application/mirsurface.cpp
+index b37bae31..f20b4b23 100644
+--- a/src/modules/QtMir/Application/mirsurface.cpp
++++ b/src/modules/QtMir/Application/mirsurface.cpp
+@@ -678,6 +678,7 @@ void MirSurface::forceClose()
+
+ void MirSurface::teardown()
+ {
++ setLive(false);
+ for (const auto& id : m_views.keys()) {
+ unregisterView(id);
+ }
+@@ -1215,7 +1216,7 @@ void MirSurface::onCloseTimedOut()
+ m_controller->forceClose(m_window);
+ }
+ } else {
+- WARNING_MSG << "Surface not live anymore, tearing down.";
++ WARNING_MSG << "(), Surface not live anymore, tearing down.";
+ teardown();
+ }
+ }
+--
+2.47.2
+
diff -Nru qtmir-0.8.0~git20250407.ea2f477/debian/patches/0015_src-modules-Use-explicit-signal-to-signify-a-teardow.patch qtmir-0.8.0~git20250407.ea2f477/debian/patches/0015_src-modules-Use-explicit-signal-to-signify-a-teardow.patch
--- qtmir-0.8.0~git20250407.ea2f477/debian/patches/0015_src-modules-Use-explicit-signal-to-signify-a-teardow.patch 1970-01-01 01:00:00.000000000 +0100
+++ qtmir-0.8.0~git20250407.ea2f477/debian/patches/0015_src-modules-Use-explicit-signal-to-signify-a-teardow.patch 2025-07-30 14:10:03.000000000 +0200
@@ -0,0 +1,53 @@
+From 948cb3593c5947b511087ff4640be38e09008aec Mon Sep 17 00:00:00 2001
+From: Alfred Neumayer <dev.beidl@gmail.com>
+Date: Tue, 29 Jul 2025 08:57:11 +0200
+Subject: [PATCH 1/2] src/modules: Use explicit signal to signify a teardown
+
+This signal is consumed both by the SurfaceManager as well as QML
+to determine whether to keep or remove old windows in the window model.
+
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ src/modules/QtMir/Application/mirsurface.cpp | 5 +----
+ src/modules/QtMir/Application/mirsurfaceinterface.h | 1 +
+ src/modules/QtMir/Application/surfacemanager.cpp | 5 +++++
+ 3 files changed, 7 insertions(+), 4 deletions(-)
+
+--- a/src/modules/QtMir/Application/mirsurface.cpp
++++ b/src/modules/QtMir/Application/mirsurface.cpp
+@@ -678,10 +678,7 @@
+
+ void MirSurface::teardown()
+ {
+- setLive(false);
+- for (const auto& id : m_views.keys()) {
+- unregisterView(id);
+- }
++ Q_EMIT teardownRequested();
+ }
+
+ void MirSurface::resize(int width, int height)
+--- a/src/modules/QtMir/Application/mirsurfaceinterface.h
++++ b/src/modules/QtMir/Application/mirsurfaceinterface.h
+@@ -134,6 +134,7 @@
+ void isBeingDisplayedChanged();
+ void frameDropped();
+ void closeRequested();
++ void teardownRequested();
+ };
+
+ } // namespace qtmir
+--- a/src/modules/QtMir/Application/surfacemanager.cpp
++++ b/src/modules/QtMir/Application/surfacemanager.cpp
+@@ -204,6 +204,11 @@
+ }
+ });
+
++ connect(surface, &MirSurface::teardownRequested, this, [this, surface](){
++ forgetMirSurface(static_cast<MirSurface*>(surface)->window());
++ surface->deleteLater();
++ });
++
+ if (parentSurface) {
+ static_cast<MirSurfaceListModel*>(parentSurface->childSurfaceList())->prependSurface(surface);
+ }
diff -Nru qtmir-0.8.0~git20250407.ea2f477/debian/patches/0016_src-modules-Drop-references-before-teardown.patch qtmir-0.8.0~git20250407.ea2f477/debian/patches/0016_src-modules-Drop-references-before-teardown.patch
--- qtmir-0.8.0~git20250407.ea2f477/debian/patches/0016_src-modules-Drop-references-before-teardown.patch 1970-01-01 01:00:00.000000000 +0100
+++ qtmir-0.8.0~git20250407.ea2f477/debian/patches/0016_src-modules-Drop-references-before-teardown.patch 2025-07-30 14:09:54.000000000 +0200
@@ -0,0 +1,39 @@
+From 36c26bbafa1612e4e7bdacb28f605def19f4938a Mon Sep 17 00:00:00 2001
+From: Alfred Neumayer <dev.beidl@gmail.com>
+Date: Tue, 29 Jul 2025 13:27:22 +0200
+Subject: [PATCH 2/2] src/modules: Drop references before teardown
+
+Make sure we have no MirSurfaceItem referencing this surface when it goes EOL.
+Also add missing tracepoint call while we're at it.
+
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ src/modules/QtMir/Application/mirsurface.cpp | 6 ++++++
+ src/modules/QtMir/Application/surfacemanager.cpp | 1 +
+ 2 files changed, 7 insertions(+)
+
+--- a/src/modules/QtMir/Application/mirsurface.cpp
++++ b/src/modules/QtMir/Application/mirsurface.cpp
+@@ -678,6 +678,12 @@
+
+ void MirSurface::teardown()
+ {
++ DEBUG_MSG << "()";
++
++ for (const auto& id : m_views.keys()) {
++ unregisterView(id);
++ }
++
+ Q_EMIT teardownRequested();
+ }
+
+--- a/src/modules/QtMir/Application/surfacemanager.cpp
++++ b/src/modules/QtMir/Application/surfacemanager.cpp
+@@ -207,6 +207,7 @@
+ connect(surface, &MirSurface::teardownRequested, this, [this, surface](){
+ forgetMirSurface(static_cast<MirSurface*>(surface)->window());
+ surface->deleteLater();
++ tracepoint(qtmir, surfaceDestroyed);
+ });
+
+ if (parentSurface) {
diff -Nru qtmir-0.8.0~git20250407.ea2f477/debian/patches/2003_disable-benchmarks.patch qtmir-0.8.0~git20250407.ea2f477/debian/patches/2003_disable-benchmarks.patch
--- qtmir-0.8.0~git20250407.ea2f477/debian/patches/2003_disable-benchmarks.patch 2024-02-14 10:33:36.000000000 +0100
+++ qtmir-0.8.0~git20250407.ea2f477/debian/patches/2003_disable-benchmarks.patch 2025-07-30 14:18:39.000000000 +0200
@@ -3,7 +3,7 @@
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
-@@ -184,5 +184,5 @@
+@@ -185,5 +185,5 @@
# add subdirectories to build
add_subdirectory(src)
add_subdirectory(demos)
diff -Nru qtmir-0.8.0~git20250407.ea2f477/debian/patches/series qtmir-0.8.0~git20250407.ea2f477/debian/patches/series
--- qtmir-0.8.0~git20250407.ea2f477/debian/patches/series 2025-02-28 14:46:20.000000000 +0100
+++ qtmir-0.8.0~git20250407.ea2f477/debian/patches/series 2025-07-30 14:09:48.000000000 +0200
@@ -1,2 +1,11 @@
2002_no-requires-provides-check.patch
2003_disable-benchmarks.patch
+0001_mirserver-cursor-take-Shell-s-rotation-into-account.patch
+0002_src-modules-Re-introduce-lost-workaround-for-font-re.patch
+0009_src-modules-Add-header-for-getpid.patch
+0011_src-platforms-Wrap-window-activity-change-in-a-try-c.patch
+0012_src-modules-Partial-revert-of-e73ef71622ad3202b77bf6.patch
+0013_src-modules-Address-review-comments-for-MirSurface.patch
+0014_src-modules-Set-MirSurface-live-to-false-when-tearin.patch
+0015_src-modules-Use-explicit-signal-to-signify-a-teardow.patch
+0016_src-modules-Drop-references-before-teardown.patch
Reply to: