[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: