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

Bug#1107722: marked as done (unblock: kde-spectacle/4:6.3.5-2)



Your message dated Fri, 13 Jun 2025 06:04:35 +0000
with message-id <E1uPxWl-00GY2F-1S@respighi.debian.org>
and subject line unblock kde-spectacle
has caused the Debian Bug report #1107722,
regarding unblock: kde-spectacle/4:6.3.5-2
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
1107722: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1107722
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: kde-spectacle@packages.debian.org, Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
Control: affects -1 + src:kde-spectacle
User: release.debian.org@packages.debian.org
Usertags: unblock

Dear Release Team,

please unblock package kde-spectacle.

[ Reason ]
It contains the following changes:
* New upstream release (6.3.5).
  - Translation fixes.
* Relax inter-plasma versioned dependency constraint so we can upload
  only 6.3.5 packages that have actual code changes.
* Backport upstream commits:
  - Fix spectacle freezing when finishing the rendering after the end of
  video capture sessions.
  - Set rendering message for system tray icon tooltip.
  - Fix export notifications keeping spectacle from closing. (kde#503838)
  - Fix crash related to setups with multiple displays. (kde#503682)
  - Fix rectangular region selecting on wrong screen with certain screen
  setups. (kde#502047)
* Point upstream source to invent git repo.

The fix for the freeze while finishing encoding is the second part of
the kpipewire fix and is a major usability improvment so I hope we can
get it into Trixie.

[ Tests ]
- Screenshots, screen recording, using fullscreen and rectangle areas.

[ Risks ]
Only backport of upstream commits that apply cleanly. Further fixes can
easily be backported or the changes reverted.

[ 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


Thanks!


unblock kde-spectacle/4:6.3.5-2
diff -Nru kde-spectacle-6.3.4/CMakeLists.txt kde-spectacle-6.3.5/CMakeLists.txt
--- kde-spectacle-6.3.4/CMakeLists.txt	2025-04-02 05:40:28.000000000 +0200
+++ kde-spectacle-6.3.5/CMakeLists.txt	2025-05-06 20:01:30.000000000 +0200
@@ -1,13 +1,13 @@
 cmake_minimum_required (VERSION 3.16 FATAL_ERROR)
 # Managed by release script
-set(PROJECT_VERSION "6.3.4")
+set(PROJECT_VERSION "6.3.5")
 set(SPECTACLE_VERSION ${PROJECT_VERSION})
 
 # Spectacle project
 project(Spectacle VERSION ${SPECTACLE_VERSION})
 
 # minimum requirements
-set(PROJECT_DEP_VERSION "6.3.4")
+set(PROJECT_DEP_VERSION "6.3.5")
 set(QT_MIN_VERSION "6.7.0")
 set(KF6_MIN_VERSION "6.10.0")
 
diff -Nru kde-spectacle-6.3.4/debian/changelog kde-spectacle-6.3.5/debian/changelog
--- kde-spectacle-6.3.4/debian/changelog	2025-04-03 01:01:17.000000000 +0200
+++ kde-spectacle-6.3.5/debian/changelog	2025-06-11 22:14:09.000000000 +0200
@@ -1,3 +1,28 @@
+kde-spectacle (4:6.3.5-2) unstable; urgency=medium
+
+  [ Aurélien COUDERC ]
+  * Backport upstream commits:
+    - Fix export notifications keeping spectacle from closing. (kde#503838)
+    - Fix crash related to setups with multiple displays. (kde#503682)
+    - Fix rectangular region selecting on wrong screen with certain screen
+    setups. (kde#502047)
+  * Point upstream source to invent git repo.
+
+ -- Aurélien COUDERC <coucouf@debian.org>  Wed, 11 Jun 2025 22:14:09 +0200
+
+kde-spectacle (4:6.3.5-1) unstable; urgency=medium
+
+  [ Aurélien COUDERC ]
+  * New upstream release (6.3.5).
+  * Relax inter-plasma versioned dependency constraint so we can upload
+    only 6.3.5 packages that have actual code changes.
+  * Backport upstream commits:
+    - Fix spectacle freezing when finishing the rendering after the end of
+    video capture sessions.
+    - Set rendering message for system tray icon tooltip.
+
+ -- Aurélien COUDERC <coucouf@debian.org>  Mon, 19 May 2025 00:58:40 +0200
+
 kde-spectacle (4:6.3.4-1) unstable; urgency=medium
 
   * Team upload.
diff -Nru kde-spectacle-6.3.4/debian/copyright kde-spectacle-6.3.5/debian/copyright
--- kde-spectacle-6.3.4/debian/copyright	2025-02-12 01:42:50.000000000 +0100
+++ kde-spectacle-6.3.5/debian/copyright	2025-06-11 22:13:31.000000000 +0200
@@ -1,7 +1,7 @@
 Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
 Upstream-Name: spectacle
 Upstream-Contact: kde-devel@kde.org
-Source: https://download.kde.org/
+Source: https://invent.kde.org/plasma/spectacle
 
 Files: *
 Copyright: 2021-2024, A S Alam <aalam@satluj.org>
diff -Nru kde-spectacle-6.3.4/debian/patches/relax-interplasma-versioned-deps.patch kde-spectacle-6.3.5/debian/patches/relax-interplasma-versioned-deps.patch
--- kde-spectacle-6.3.4/debian/patches/relax-interplasma-versioned-deps.patch	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/relax-interplasma-versioned-deps.patch	2025-05-08 00:28:01.000000000 +0200
@@ -0,0 +1,11 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -7,7 +7,7 @@
+ project(Spectacle VERSION ${SPECTACLE_VERSION})
+ 
+ # minimum requirements
+-set(PROJECT_DEP_VERSION "6.3.5")
++set(PROJECT_DEP_VERSION "6.3.4")
+ set(QT_MIN_VERSION "6.7.0")
+ set(KF6_MIN_VERSION "6.10.0")
+ 
diff -Nru kde-spectacle-6.3.4/debian/patches/series kde-spectacle-6.3.5/debian/patches/series
--- kde-spectacle-6.3.4/debian/patches/series	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/series	2025-06-11 22:12:06.000000000 +0200
@@ -0,0 +1,15 @@
+relax-interplasma-versioned-deps.patch
+# Fix spectacle freezing when finishing the rendering after the end of video capture sessions.
+upstream_b63c01d0_videoplatform-Add-RecordingState-property.patch
+upstream_dd1892d8_VideoPlatformWayland-Don-t-use-QtConcurrent-for-creating-KPipeWire-stream.patch
+upstream_f7e5e541_VideoPlatformWayland-Update-to-changed-KPipeWire-API.patch
+upstream_805ae503_SpectacleCore-Update-system-tray-based-on-VideoPlatform-recordingState.patch
+upstream_007c3bc8_VideoPlatformWayland-Clear-node-when-starting-a-new-recording.patch
+upstream_6d6d5875_Set-rendering-message-for-system-tray-icon-tooltip.patch
+upstream_1572f19b_Change-rendering-notification-icon-to-process-working-symbolic.patch
+upstream_7b731475_VideoPlatform-Remove-setRecording-store-recorded-time.patch
+upstream_29d52422_Fix-export-notifications-keeping-spectacle-from-closing.patch
+upstream_98eb3ba7_Use-transient-notifications-for-recording-rendering-notifications.patch
+upstream_d5541b1e_Close-recording-rendering-notifications-when-changing-recording-states.patch
+upstream_b437ca39_ImagePlatformKWin-Clip-sub-image-ROI-for-combined-image-to-prevent-OpenCV-assert-crash.patch
+upstream_64e46b80_Workaround-QWindow-screen-being-wrong-with-some-fractional-DPR-screen-layout-combinations.patch
diff -Nru kde-spectacle-6.3.4/debian/patches/upstream_007c3bc8_VideoPlatformWayland-Clear-node-when-starting-a-new-recording.patch kde-spectacle-6.3.5/debian/patches/upstream_007c3bc8_VideoPlatformWayland-Clear-node-when-starting-a-new-recording.patch
--- kde-spectacle-6.3.4/debian/patches/upstream_007c3bc8_VideoPlatformWayland-Clear-node-when-starting-a-new-recording.patch	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/upstream_007c3bc8_VideoPlatformWayland-Clear-node-when-starting-a-new-recording.patch	2025-05-16 17:13:47.000000000 +0200
@@ -0,0 +1,25 @@
+From 007c3bc87605e86e65714406c2696c5689be0134 Mon Sep 17 00:00:00 2001
+From: Noah Davis <noahadvs@gmail.com>
+Date: Fri, 18 Apr 2025 22:38:43 +0000
+Subject: [PATCH] VideoPlatformWayland: Clear node when starting a new
+ recording
+
+---
+ src/Platforms/VideoPlatformWayland.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/Platforms/VideoPlatformWayland.cpp b/src/Platforms/VideoPlatformWayland.cpp
+index 6b60fe24..c84547db 100644
+--- a/src/Platforms/VideoPlatformWayland.cpp
++++ b/src/Platforms/VideoPlatformWayland.cpp
+@@ -238,6 +238,7 @@ void VideoPlatformWayland::startRecording(const QUrl &fileUrl, RecordingMode rec
+     default: break; // This shouldn't happen
+     }
+     m_recorder->setMaxPendingFrames(availableFrames(m_frameBytes));
++    m_recorder->setNodeId(0);
+ 
+     Q_ASSERT(stream);
+     connect(stream, &ScreencastingStream::created, this, [this, stream] {
+-- 
+GitLab
+
diff -Nru kde-spectacle-6.3.4/debian/patches/upstream_1572f19b_Change-rendering-notification-icon-to-process-working-symbolic.patch kde-spectacle-6.3.5/debian/patches/upstream_1572f19b_Change-rendering-notification-icon-to-process-working-symbolic.patch
--- kde-spectacle-6.3.4/debian/patches/upstream_1572f19b_Change-rendering-notification-icon-to-process-working-symbolic.patch	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/upstream_1572f19b_Change-rendering-notification-icon-to-process-working-symbolic.patch	2025-05-19 23:51:23.000000000 +0200
@@ -0,0 +1,33 @@
+From 1572f19b25b44b77e66d38ecf45f5dd75c1a4db3 Mon Sep 17 00:00:00 2001
+From: Noah Davis <noahadvs@gmail.com>
+Date: Tue, 22 Apr 2025 10:56:07 +0200
+Subject: [PATCH] Change rendering notification icon to
+ process-working-symbolic
+
+---
+ src/SpectacleCore.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/SpectacleCore.cpp b/src/SpectacleCore.cpp
+index f8723eea..56b42c19 100644
+--- a/src/SpectacleCore.cpp
++++ b/src/SpectacleCore.cpp
+@@ -317,7 +317,6 @@ SpectacleCore::SpectacleCore(QObject *parent)
+         } else if (state == VideoPlatform::RecordingState::Rendering && s_systemTrayIcon) {
+             const auto messageTitle = i18nc("recording notification title", "Spectacle is Finishing the Recording");
+             const auto messageBody = i18nc("recording notification message", "Please wait");
+-            s_systemTrayIcon->showMessage(messageTitle, messageBody, u"media_record"_s);
+             s_systemTrayIcon->setToolTipTitle(i18nc("@info:tooltip title for rendering tray icon", //
+                                                     "Spectacle is Finishing the Recording"));
+             auto subtitle = i18nc("@info:tooltip subtitle for rendering tray icon", //
+@@ -325,6 +324,7 @@ SpectacleCore::SpectacleCore(QObject *parent)
+                                   "Click to stop rendering early (this will lose data)",
+                                   recordedTime());
+             s_systemTrayIcon->setToolTipSubTitle(subtitle);
++            s_systemTrayIcon->showMessage(messageTitle, messageBody, u"process-working-symbolic"_s);
+         } else {
+             s_systemTrayIcon.reset();
+             m_captureWindows.clear();
+-- 
+GitLab
+
diff -Nru kde-spectacle-6.3.4/debian/patches/upstream_29d52422_Fix-export-notifications-keeping-spectacle-from-closing.patch kde-spectacle-6.3.5/debian/patches/upstream_29d52422_Fix-export-notifications-keeping-spectacle-from-closing.patch
--- kde-spectacle-6.3.4/debian/patches/upstream_29d52422_Fix-export-notifications-keeping-spectacle-from-closing.patch	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/upstream_29d52422_Fix-export-notifications-keeping-spectacle-from-closing.patch	2025-06-11 22:09:36.000000000 +0200
@@ -0,0 +1,42 @@
+From 29d52422bd8153be721b08b83cbcb48e382a88ca Mon Sep 17 00:00:00 2001
+From: Noah Davis <noahadvs@gmail.com>
+Date: Tue, 6 May 2025 08:58:14 -0400
+Subject: [PATCH] Fix export notifications keeping spectacle from closing
+
+They won't emit KNotification::closed to let spectacle exit if they just expire, but calling KNotification::close removes them from history.
+Neither are desirable. I found out that letting spectacle close anyway when the last notification should have expired keeps the notifications in history. We use a QTimer as an additional way to let spectacle exit now.
+---
+ src/SpectacleCore.cpp | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/src/SpectacleCore.cpp b/src/SpectacleCore.cpp
+index 56b42c193..f9370cce8 100644
+--- a/src/SpectacleCore.cpp
++++ b/src/SpectacleCore.cpp
+@@ -1038,15 +1038,20 @@ void SpectacleCore::doNotify(ScreenCapture type, const ExportManager::Actions &a
+         }
+     }
+ 
+-    connect(notification, &QObject::destroyed, this, [this](QObject *notification) {
++    auto onExpired = [this, notification] {
+         notifications.removeOne(static_cast<KNotification *>(notification));
+         // When there are no more notifications running, we can remove the loop locker.
+-        if (notifications.empty()) {
++        if (notifications.empty() && m_eventLoopLocker) {
+             QTimer::singleShot(250, this, [this] {
+                 m_eventLoopLocker.reset();
+             });
+         }
+-    });
++    };
++    connect(notification, &QObject::destroyed, this, onExpired);
++    // BUG: https://bugs.kde.org/show_bug.cgi?id=503838
++    // We can't call KNotification::close or else the notifications will be removed from history.
++    // 10 seconds is roughly the expected default duration.
++    QTimer::singleShot(10000, notification, onExpired);
+ 
+     notification->sendEvent();
+ }
+-- 
+GitLab
+
diff -Nru kde-spectacle-6.3.4/debian/patches/upstream_64e46b80_Workaround-QWindow-screen-being-wrong-with-some-fractional-DPR-screen-layout-combinations.patch kde-spectacle-6.3.5/debian/patches/upstream_64e46b80_Workaround-QWindow-screen-being-wrong-with-some-fractional-DPR-screen-layout-combinations.patch
--- kde-spectacle-6.3.4/debian/patches/upstream_64e46b80_Workaround-QWindow-screen-being-wrong-with-some-fractional-DPR-screen-layout-combinations.patch	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/upstream_64e46b80_Workaround-QWindow-screen-being-wrong-with-some-fractional-DPR-screen-layout-combinations.patch	2025-06-11 22:12:06.000000000 +0200
@@ -0,0 +1,37 @@
+From 64e46b80e621e48f6e7fc9eff555c320d327457b Mon Sep 17 00:00:00 2001
+From: Noah Davis <noahadvs@gmail.com>
+Date: Fri, 30 May 2025 15:13:57 -0400
+Subject: [PATCH] Workaround QWindow::screen being wrong with some fractional
+ DPR screen layout combinations
+
+Caused the selection editor to select on the wrong screen.
+
+BUG: 502047
+
+
+(cherry picked from commit f407154111eb6fd3f8c0cc3d80eb3e6c0a241be7)
+
+Co-authored-by: Noah Davis <noahadvs@gmail.com>
+---
+ src/Gui/CaptureWindow.cpp | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/Gui/CaptureWindow.cpp b/src/Gui/CaptureWindow.cpp
+index f5178ca55..fc4509cf3 100644
+--- a/src/Gui/CaptureWindow.cpp
++++ b/src/Gui/CaptureWindow.cpp
+@@ -50,6 +50,11 @@ CaptureWindow::CaptureWindow(Mode mode, QScreen *screen, QQmlEngine *engine, QWi
+             this, &CaptureWindow::syncGeometryWithScreen);
+     syncGeometryWithScreen();
+     Q_EMIT screenToFollowChanged();
++    // BUG: https://bugs.kde.org/show_bug.cgi?id=502047
++    // Workaround window choosing wrong screen with some fractional DPR screen layout combinations.
++    connect(this, &QWindow::screenChanged, this, [this] {
++        syncGeometryWithScreen();
++    });
+ 
+     // sync visibility
+     connect(this, &QWindow::visibilityChanged, this, [this](QWindow::Visibility visibility){
+-- 
+GitLab
+
diff -Nru kde-spectacle-6.3.4/debian/patches/upstream_6d6d5875_Set-rendering-message-for-system-tray-icon-tooltip.patch kde-spectacle-6.3.5/debian/patches/upstream_6d6d5875_Set-rendering-message-for-system-tray-icon-tooltip.patch
--- kde-spectacle-6.3.4/debian/patches/upstream_6d6d5875_Set-rendering-message-for-system-tray-icon-tooltip.patch	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/upstream_6d6d5875_Set-rendering-message-for-system-tray-icon-tooltip.patch	2025-05-19 23:51:07.000000000 +0200
@@ -0,0 +1,45 @@
+From 6d6d58755af622d8b1dcbd522702e93c0405c748 Mon Sep 17 00:00:00 2001
+From: Noah Davis <noahadvs@gmail.com>
+Date: Tue, 22 Apr 2025 10:55:36 +0200
+Subject: [PATCH] Set rendering message for system tray icon tooltip
+
+---
+ src/SpectacleCore.cpp | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/src/SpectacleCore.cpp b/src/SpectacleCore.cpp
+index 76491af9..f8723eea 100644
+--- a/src/SpectacleCore.cpp
++++ b/src/SpectacleCore.cpp
+@@ -314,18 +314,25 @@ SpectacleCore::SpectacleCore(QObject *parent)
+                 initPulseAnimation();
+             });
+             startedAnimation->start();
+-        } else if (state == VideoPlatform::RecordingState::Rendering) {
++        } else if (state == VideoPlatform::RecordingState::Rendering && s_systemTrayIcon) {
+             const auto messageTitle = i18nc("recording notification title", "Spectacle is Finishing the Recording");
+             const auto messageBody = i18nc("recording notification message", "Please wait");
+             s_systemTrayIcon->showMessage(messageTitle, messageBody, u"media_record"_s);
++            s_systemTrayIcon->setToolTipTitle(i18nc("@info:tooltip title for rendering tray icon", //
++                                                    "Spectacle is Finishing the Recording"));
++            auto subtitle = i18nc("@info:tooltip subtitle for rendering tray icon", //
++                                  "Time recorded: %1\n" //
++                                  "Click to stop rendering early (this will lose data)",
++                                  recordedTime());
++            s_systemTrayIcon->setToolTipSubTitle(subtitle);
+         } else {
+             s_systemTrayIcon.reset();
+             m_captureWindows.clear();
+         }
+     });
+-    connect(videoPlatform, &VideoPlatform::recordedTimeChanged, this, [this] {
++    connect(videoPlatform, &VideoPlatform::recordedTimeChanged, this, [this, videoPlatform] {
+         Q_EMIT recordedTimeChanged();
+-        if (!s_systemTrayIcon) {
++        if (!s_systemTrayIcon || videoPlatform->recordingState() != VideoPlatform::RecordingState::Recording) {
+             return;
+         }
+         auto subtitle = i18nc("@info:tooltip subtitle for recording tray icon", //
+-- 
+GitLab
+
diff -Nru kde-spectacle-6.3.4/debian/patches/upstream_7b731475_VideoPlatform-Remove-setRecording-store-recorded-time.patch kde-spectacle-6.3.5/debian/patches/upstream_7b731475_VideoPlatform-Remove-setRecording-store-recorded-time.patch
--- kde-spectacle-6.3.4/debian/patches/upstream_7b731475_VideoPlatform-Remove-setRecording-store-recorded-time.patch	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/upstream_7b731475_VideoPlatform-Remove-setRecording-store-recorded-time.patch	2025-05-19 23:51:36.000000000 +0200
@@ -0,0 +1,198 @@
+From 7b7314751cb467e5fb8cf124b8bad69409f66006 Mon Sep 17 00:00:00 2001
+From: Noah Davis <noahadvs@gmail.com>
+Date: Tue, 22 Apr 2025 10:59:04 +0200
+Subject: [PATCH] VideoPlatform: Remove setRecording, store recorded time
+
+setRecording is obsolete now that we have setRecordingState.
+
+We store the recorded time now since we may want to access the recorded time while rendering or finished.
+---
+ src/Platforms/PlatformNull.cpp         |  1 -
+ src/Platforms/VideoPlatform.cpp        | 41 +++++++++++++-------------
+ src/Platforms/VideoPlatform.h          |  5 ++--
+ src/Platforms/VideoPlatformWayland.cpp | 22 +++++++++-----
+ 4 files changed, 36 insertions(+), 33 deletions(-)
+
+diff --git a/src/Platforms/PlatformNull.cpp b/src/Platforms/PlatformNull.cpp
+index 86a003cb..0bad71ad 100644
+--- a/src/Platforms/PlatformNull.cpp
++++ b/src/Platforms/PlatformNull.cpp
+@@ -64,7 +64,6 @@ void VideoPlatformNull::startRecording(const QUrl &fileUrl, RecordingMode mode,
+ 
+ void VideoPlatformNull::finishRecording()
+ {
+-    setRecording(false);
+ }
+ 
+ #include "moc_PlatformNull.cpp"
+diff --git a/src/Platforms/VideoPlatform.cpp b/src/Platforms/VideoPlatform.cpp
+index 0d3b9e81..59253904 100644
+--- a/src/Platforms/VideoPlatform.cpp
++++ b/src/Platforms/VideoPlatform.cpp
+@@ -16,36 +16,18 @@ VideoPlatform::VideoPlatform(QObject *parent)
+ 
+ bool VideoPlatform::isRecording() const
+ {
+-    return m_basicTimer.isActive();
+-}
+-
+-void VideoPlatform::setRecording(bool recording)
+-{
+-    if (m_basicTimer.isActive() == recording) {
+-        return;
+-    }
+-
+-    if (recording) {
+-        setRecordingState(RecordingState::Recording);
+-        m_elapsedTimer.start();
+-        m_basicTimer.start(1000, Qt::PreciseTimer, this);
+-    } else {
+-        setRecordingState(RecordingState::Finished);
+-        m_elapsedTimer.invalidate();
+-        m_basicTimer.stop();
+-    }
+-    Q_EMIT recordingChanged(recording);
+-    Q_EMIT recordedTimeChanged();
++    return m_recordingState == RecordingState::Recording;
+ }
+ 
+ qint64 VideoPlatform::recordedTime() const
+ {
+-    return m_elapsedTimer.isValid() ? m_elapsedTimer.elapsed() : 0;
++    return m_recordedTime;
+ }
+ 
+ void VideoPlatform::timerEvent(QTimerEvent *event)
+ {
+     if (event->timerId() == m_basicTimer.timerId()) {
++        m_recordedTime = m_elapsedTimer.isValid() ? m_elapsedTimer.elapsed() : 0;
+         Q_EMIT recordedTimeChanged();
+     }
+ }
+@@ -93,8 +75,25 @@ void VideoPlatform::setRecordingState(RecordingState state)
+         return;
+     }
+ 
++    m_recordingState = state;
++    if (state == RecordingState::NotRecording) {
++        m_recordedTime = 0;
++        m_elapsedTimer.invalidate();
++        m_basicTimer.stop();
++    } else if (state == RecordingState::Recording) {
++        m_recordedTime = 0;
++        m_elapsedTimer.start();
++        m_basicTimer.start(1000, Qt::PreciseTimer, this);
++    } else {
++        if (m_elapsedTimer.isValid()) {
++            m_recordedTime = m_elapsedTimer.elapsed();
++        }
++        m_elapsedTimer.invalidate();
++        m_basicTimer.stop();
++    }
+     m_recordingState = state;
+     Q_EMIT recordingStateChanged(state);
++    Q_EMIT recordedTimeChanged();
+ }
+ 
+ #include "moc_VideoPlatform.cpp"
+diff --git a/src/Platforms/VideoPlatform.h b/src/Platforms/VideoPlatform.h
+index 533e52ad..1abac3f4 100644
+--- a/src/Platforms/VideoPlatform.h
++++ b/src/Platforms/VideoPlatform.h
+@@ -25,8 +25,8 @@ class VideoPlatform : public QObject
+ 
+     Q_PROPERTY(RecordingModes supportedRecordingModes READ supportedRecordingModes NOTIFY supportedRecordingModesChanged)
+     Q_PROPERTY(Formats supportedFormats READ supportedFormats NOTIFY supportedFormatsChanged)
+-    Q_PROPERTY(bool isRecording READ isRecording NOTIFY recordingChanged)
+     Q_PROPERTY(qint64 recordedTime READ recordedTime NOTIFY recordedTimeChanged)
++    Q_PROPERTY(bool isRecording READ isRecording NOTIFY recordingStateChanged)
+     Q_PROPERTY(RecordingState recordingState READ recordingState NOTIFY recordingStateChanged)
+ 
+ public:
+@@ -130,7 +130,6 @@ public:
+     RecordingState recordingState() const;
+ 
+ protected:
+-    void setRecording(bool recording);
+     void setRecordingState(RecordingState state);
+     void timerEvent(QTimerEvent *event) override;
+ 
+@@ -144,7 +143,6 @@ public Q_SLOTS:
+ Q_SIGNALS:
+     void supportedRecordingModesChanged();
+     void supportedFormatsChanged();
+-    void recordingChanged(bool isRecording);
+     void recordingSaved(const QUrl &fileUrl);
+     void recordingFailed(const QString &message);
+     void recordingCanceled(const QString &message);
+@@ -157,6 +155,7 @@ Q_SIGNALS:
+ private:
+     QElapsedTimer m_elapsedTimer;
+     QBasicTimer m_basicTimer;
++    qint64 m_recordedTime = 0;
+     RecordingState m_recordingState = RecordingState::NotRecording;
+ };
+ 
+diff --git a/src/Platforms/VideoPlatformWayland.cpp b/src/Platforms/VideoPlatformWayland.cpp
+index c84547db..99ee04fa 100644
+--- a/src/Platforms/VideoPlatformWayland.cpp
++++ b/src/Platforms/VideoPlatformWayland.cpp
+@@ -161,10 +161,14 @@ void VideoPlatformWayland::startRecording(const QUrl &fileUrl, RecordingMode rec
+         return;
+     }
+     m_recorderFuture.waitForFinished();
+-    if (isRecording()) {
++    if (recordingState() == RecordingState::Recording) {
+         qWarning() << "Warning: Tried to start recording while already recording.";
+         return;
+     }
++    if (recordingState() == RecordingState::Rendering) {
++        qWarning() << "Warning: Tried to start recording while already rendering.";
++        return;
++    }
+     if (!fileUrl.isEmpty() && !fileUrl.isLocalFile()) {
+         Q_EMIT recordingFailed(i18nc("@info:shell", "Failed to record: File URL is not a local file"));
+         return;
+@@ -246,15 +250,15 @@ void VideoPlatformWayland::startRecording(const QUrl &fileUrl, RecordingMode rec
+         if (!m_recorder->output().isEmpty()) {
+             m_recorder->start();
+         }
+-        setRecording(true);
++        setRecordingState(VideoPlatform::RecordingState::Recording);
+     });
+     connect(stream, &ScreencastingStream::failed, this, [this](const QString &error) {
+-        setRecording(false);
++        setRecordingState(VideoPlatform::RecordingState::NotRecording);
+         Q_EMIT recordingFailed(error);
+     });
+     connect(stream, &ScreencastingStream::closed, this, [this, recordingMode]() {
+         finishRecording();
+-        setRecording(false);
++        setRecordingState(VideoPlatform::RecordingState::Finished);
+         if (recordingMode == Screen) {
+             Q_EMIT recordingFailed(i18nc("@info", "The stream closed because the target screen changed in a way that disrupted the recording."));
+         } else if (recordingMode == Window) {
+@@ -301,14 +305,16 @@ void VideoPlatformWayland::startRecording(const QUrl &fileUrl, RecordingMode rec
+     connect(m_recorder.get(), &PipeWireRecord::stateChanged, this, [this] {
+         if (m_recorder->state() == PipeWireRecord::Idle) {
+             m_memoryTimer.stop();
+-            if (isRecording()) {
+-                setRecording(false);
++            if (recordingState() != RecordingState::NotRecording) {
++                setRecordingState(VideoPlatform::RecordingState::Finished);
+                 Q_EMIT recordingSaved(QUrl::fromLocalFile(m_recorder->output()));
+             }
++        } else if (m_recorder->state() == PipeWireRecord::Recording) {
++            m_memoryTimer.start(5000, Qt::CoarseTimer, this);
++            setRecordingState(VideoPlatform::RecordingState::Recording);
+         } else if (m_recorder->state() == PipeWireRecord::Rendering) {
++            m_memoryTimer.stop();
+             setRecordingState(VideoPlatform::RecordingState::Rendering);
+-        } else {
+-            m_memoryTimer.start(5000, Qt::CoarseTimer, this);
+         }
+     });
+ }
+-- 
+GitLab
+
diff -Nru kde-spectacle-6.3.4/debian/patches/upstream_805ae503_SpectacleCore-Update-system-tray-based-on-VideoPlatform-recordingState.patch kde-spectacle-6.3.5/debian/patches/upstream_805ae503_SpectacleCore-Update-system-tray-based-on-VideoPlatform-recordingState.patch
--- kde-spectacle-6.3.4/debian/patches/upstream_805ae503_SpectacleCore-Update-system-tray-based-on-VideoPlatform-recordingState.patch	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/upstream_805ae503_SpectacleCore-Update-system-tray-based-on-VideoPlatform-recordingState.patch	2025-05-16 17:13:47.000000000 +0200
@@ -0,0 +1,41 @@
+From 805ae503ae3deb3a6a827deece6da936eeade49b Mon Sep 17 00:00:00 2001
+From: Arjen Hiemstra <ahiemstra@heimr.nl>
+Date: Tue, 8 Oct 2024 14:59:53 +0200
+Subject: [PATCH] SpectacleCore: Update system tray based on
+ VideoPlatform::recordingState
+
+Rather than the binary "recording", use the new recordingState property
+and also handle the "rendering" state.
+---
+ src/SpectacleCore.cpp | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/src/SpectacleCore.cpp b/src/SpectacleCore.cpp
+index 55986d95..76491af9 100644
+--- a/src/SpectacleCore.cpp
++++ b/src/SpectacleCore.cpp
+@@ -260,8 +260,8 @@ SpectacleCore::SpectacleCore(QObject *parent)
+     });
+ 
+     auto videoPlatform = m_videoPlatform.get();
+-    connect(videoPlatform, &VideoPlatform::recordingChanged, this, [this](bool isRecording) {
+-        if (isRecording) {
++    connect(videoPlatform, &VideoPlatform::recordingStateChanged, this, [this](VideoPlatform::RecordingState state) {
++        if (state == VideoPlatform::RecordingState::Recording) {
+             static const auto recordingIcon = u":/icons/256-status-media-recording.webp"_s;
+             static const auto recordingStartedIcon = u":/icons/256-status-media-recording-started.webp"_s;
+             static const auto recordingPulseIcon = u":/icons/256-status-media-recording-pulse.webp"_s;
+@@ -314,6 +314,10 @@ SpectacleCore::SpectacleCore(QObject *parent)
+                 initPulseAnimation();
+             });
+             startedAnimation->start();
++        } else if (state == VideoPlatform::RecordingState::Rendering) {
++            const auto messageTitle = i18nc("recording notification title", "Spectacle is Finishing the Recording");
++            const auto messageBody = i18nc("recording notification message", "Please wait");
++            s_systemTrayIcon->showMessage(messageTitle, messageBody, u"media_record"_s);
+         } else {
+             s_systemTrayIcon.reset();
+             m_captureWindows.clear();
+-- 
+GitLab
+
diff -Nru kde-spectacle-6.3.4/debian/patches/upstream_98eb3ba7_Use-transient-notifications-for-recording-rendering-notifications.patch kde-spectacle-6.3.5/debian/patches/upstream_98eb3ba7_Use-transient-notifications-for-recording-rendering-notifications.patch
--- kde-spectacle-6.3.4/debian/patches/upstream_98eb3ba7_Use-transient-notifications-for-recording-rendering-notifications.patch	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/upstream_98eb3ba7_Use-transient-notifications-for-recording-rendering-notifications.patch	2025-06-11 22:11:10.000000000 +0200
@@ -0,0 +1,51 @@
+From 98eb3ba73783cb270b17d532e3452e71e50fd29f Mon Sep 17 00:00:00 2001
+From: Noah Davis <noahadvs@gmail.com>
+Date: Tue, 6 May 2025 09:01:39 -0400
+Subject: [PATCH] Use transient notifications for recording/rendering
+ notifications
+
+Transient notifications are supposed to be kept out of history.
+---
+ src/SpectacleCore.cpp | 18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
+
+diff --git a/src/SpectacleCore.cpp b/src/SpectacleCore.cpp
+index f9370cce8..850d1045f 100644
+--- a/src/SpectacleCore.cpp
++++ b/src/SpectacleCore.cpp
+@@ -276,7 +276,16 @@ SpectacleCore::SpectacleCore(QObject *parent)
+             });
+             const auto messageTitle = i18nc("recording notification title", "Spectacle is Recording");
+             const auto messageBody = i18nc("recording notification message", "Click the system tray icon to finish recording");
+-            s_systemTrayIcon->showMessage(messageTitle, messageBody, u"media-record"_s, 4000);
++            auto notification = new KNotification(u"notification"_s, KNotification::CloseOnTimeout | KNotification::DefaultEvent, this);
++            notification->setTitle(messageTitle);
++            notification->setText(messageBody);
++            notification->setIconName(u"media-record"_s);
++            // Whether the notification is transient and should not be kept in history.
++            notification->setHint(u"transient"_s, true);
++            // Can't set notification duration with KNotification directly.
++            // Also see https://bugs.kde.org/show_bug.cgi?id=503838
++            QTimer::singleShot(4000, notification, &KNotification::close);
++            notification->sendEvent();
+             if (!QMovie::supportedFormats().contains("webp"_ba)) {
+                 const auto messageTitle = i18nc("missing webp support notification title", "WebP support is missing.");
+                 const auto messageBody = i18nc("missing webp support notification message", "Please install Qt Image Formats to get animated system tray icons for Spectacle, and then report this packaging issue to your distributor.");
+@@ -323,8 +332,13 @@ SpectacleCore::SpectacleCore(QObject *parent)
+                                   "Time recorded: %1\n" //
+                                   "Click to stop rendering early (this will lose data)",
+                                   recordedTime());
++            auto notification = new KNotification(u"notification"_s, KNotification::CloseOnTimeout | KNotification::DefaultEvent, this);
++            notification->setTitle(messageTitle);
++            notification->setText(messageBody);
++            notification->setIconName(u"process-working-symbolic"_s);
++            notification->setHint(u"transient"_s, true);
++            notification->sendEvent();
+             s_systemTrayIcon->setToolTipSubTitle(subtitle);
+-            s_systemTrayIcon->showMessage(messageTitle, messageBody, u"process-working-symbolic"_s);
+         } else {
+             s_systemTrayIcon.reset();
+             m_captureWindows.clear();
+-- 
+GitLab
+
diff -Nru kde-spectacle-6.3.4/debian/patches/upstream_b437ca39_ImagePlatformKWin-Clip-sub-image-ROI-for-combined-image-to-prevent-OpenCV-assert-crash.patch kde-spectacle-6.3.5/debian/patches/upstream_b437ca39_ImagePlatformKWin-Clip-sub-image-ROI-for-combined-image-to-prevent-OpenCV-assert-crash.patch
--- kde-spectacle-6.3.4/debian/patches/upstream_b437ca39_ImagePlatformKWin-Clip-sub-image-ROI-for-combined-image-to-prevent-OpenCV-assert-crash.patch	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/upstream_b437ca39_ImagePlatformKWin-Clip-sub-image-ROI-for-combined-image-to-prevent-OpenCV-assert-crash.patch	2025-06-11 22:11:31.000000000 +0200
@@ -0,0 +1,47 @@
+From b437ca399a7a8df92fa8829b114732dc2ddf4b34 Mon Sep 17 00:00:00 2001
+From: Noah Davis <noahadvs@gmail.com>
+Date: Fri, 9 May 2025 18:09:36 -0400
+Subject: [PATCH] ImagePlatformKWin: Clip sub image ROI for combined image to
+ prevent OpenCV assert crash
+
+The possibility should be completely prevented now.
+
+BUG: 503682
+---
+ src/Platforms/ImagePlatformKWin.cpp | 16 ++++++++++------
+ 1 file changed, 10 insertions(+), 6 deletions(-)
+
+diff --git a/src/Platforms/ImagePlatformKWin.cpp b/src/Platforms/ImagePlatformKWin.cpp
+index 67fc7375a..4105aaef0 100644
+--- a/src/Platforms/ImagePlatformKWin.cpp
++++ b/src/Platforms/ImagePlatformKWin.cpp
+@@ -109,16 +109,20 @@ QImage combinedImage(const QList<QImage> &images)
+     finalImage.fill(Qt::transparent);
+     auto mainMat = QtCV::qImageToMat(finalImage);
+     for (auto &image : images) {
+-        auto rgbaImage = image.format() == finalImage.format() ? image : image.convertedTo(finalFormat);
+-        const auto mat = QtCV::qImageToMat(rgbaImage);
+         // Region Of Interest to put the image in the main image.
+-        const auto pos = ImageMetaData::logicalXY(rgbaImage) * finalDpr;
+-        const auto size = rgbaImage.deviceIndependentSize() * finalDpr;
+-        // Truncate to ints instead of rounding to prevent ROI from going out of bounds.
+-        const cv::Rect rect(pos.x(), pos.y(), size.width(), size.height());
++        // Prevent ROI from going out of bounds or having negative size.
++        const auto rect = [finalDpr, &image, &finalImage] {
++            auto pos = ImageMetaData::logicalXY(image) * finalDpr;
++            auto size = image.deviceIndependentSize() * finalDpr;
++            auto rect = Geometry::rectClipped(QRectF(pos, size).toRect(), //
++                                              finalImage.rect());
++            return cv::Rect(rect.x(), rect.y(), rect.width(), rect.height());
++        }();
+         const auto imageDpr = image.devicePixelRatio();
+         const bool hasIntDpr = static_cast<int>(imageDpr) == imageDpr;
+         const auto interpolation = hasIntDpr ? cv::INTER_AREA : cv::INTER_LANCZOS4;
++        auto rgbaImage = image.format() == finalImage.format() ? image : image.convertedTo(finalFormat);
++        const auto mat = QtCV::qImageToMat(rgbaImage);
+         // Will just copy if there's no difference in size
+         cv::resize(mat, mainMat(rect), rect.size(), 0, 0, interpolation);
+     }
+-- 
+GitLab
+
diff -Nru kde-spectacle-6.3.4/debian/patches/upstream_b63c01d0_videoplatform-Add-RecordingState-property.patch kde-spectacle-6.3.5/debian/patches/upstream_b63c01d0_videoplatform-Add-RecordingState-property.patch
--- kde-spectacle-6.3.4/debian/patches/upstream_b63c01d0_videoplatform-Add-RecordingState-property.patch	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/upstream_b63c01d0_videoplatform-Add-RecordingState-property.patch	2025-05-16 17:10:02.000000000 +0200
@@ -0,0 +1,122 @@
+From b63c01d08fe870e876ac9425083093bcc6d78ff1 Mon Sep 17 00:00:00 2001
+From: Arjen Hiemstra <ahiemstra@heimr.nl>
+Date: Tue, 8 Oct 2024 14:53:51 +0200
+Subject: [PATCH] videoplatform: Add RecordingState property
+
+This indicates what state the video platform is in currently and allows
+other bits of the UI to react accordingly.
+
+Most importantly this adds a "Rendering" state that corresponds to
+KPipeWire's Rendering state, which indicates we're finishing the
+recording process but haven't fully finished yet.
+---
+ src/Platforms/VideoPlatform.cpp | 17 +++++++++++++++++
+ src/Platforms/VideoPlatform.h   | 14 ++++++++++++++
+ 2 files changed, 31 insertions(+)
+
+--- a/src/Platforms/VideoPlatform.cpp
++++ b/src/Platforms/VideoPlatform.cpp
+@@ -26,9 +26,11 @@
+     }
+ 
+     if (recording) {
++        setRecordingState(RecordingState::Recording);
+         m_elapsedTimer.start();
+         m_basicTimer.start(1000, Qt::PreciseTimer, this);
+     } else {
++        setRecordingState(RecordingState::Finished);
+         m_elapsedTimer.invalidate();
+         m_basicTimer.stop();
+     }
+@@ -80,4 +82,19 @@
+     return formatForExtension(path.mid(path.lastIndexOf(u'.') + 1));
+ }
+ 
++VideoPlatform::RecordingState VideoPlatform::recordingState() const
++{
++    return m_recordingState;
++}
++
++void VideoPlatform::setRecordingState(RecordingState state)
++{
++    if (state == m_recordingState) {
++        return;
++    }
++
++    m_recordingState = state;
++    Q_EMIT recordingStateChanged(state);
++}
++
+ #include "moc_VideoPlatform.cpp"
+--- a/src/Platforms/VideoPlatform.h
++++ b/src/Platforms/VideoPlatform.h
+@@ -27,6 +27,7 @@
+     Q_PROPERTY(Formats supportedFormats READ supportedFormats NOTIFY supportedFormatsChanged)
+     Q_PROPERTY(bool isRecording READ isRecording NOTIFY recordingChanged)
+     Q_PROPERTY(qint64 recordedTime READ recordedTime NOTIFY recordedTimeChanged)
++    Q_PROPERTY(RecordingState recordingState READ recordingState NOTIFY recordingStateChanged)
+ 
+ public:
+     explicit VideoPlatform(QObject *parent = nullptr);
+@@ -41,6 +42,14 @@
+     Q_FLAG(RecordingMode)
+     Q_DECLARE_FLAGS(RecordingModes, RecordingMode)
+ 
++    enum class RecordingState : char {
++        NotRecording, //< Not recording anything
++        Recording, //< Actively recording
++        Rendering, //< Finishing the recording, no longer actively receiving frames but still processing to do.
++        Finished //< Recording finished completely.
++    };
++    Q_ENUM(RecordingState)
++
+     /**
+      * Video formats supported by this class's APIs.
+      *
+@@ -118,8 +127,11 @@
+     bool isRecording() const;
+     qint64 recordedTime() const;
+ 
++    RecordingState recordingState() const;
++
+ protected:
+     void setRecording(bool recording);
++    void setRecordingState(RecordingState state);
+     void timerEvent(QTimerEvent *event) override;
+ 
+ public Q_SLOTS:
+@@ -137,6 +149,7 @@
+     void recordingFailed(const QString &message);
+     void recordingCanceled(const QString &message);
+     void recordedTimeChanged();
++    void recordingStateChanged(RecordingState state);
+ 
+     /// Request a region from the platform agnostic selection editor
+     void regionRequested();
+@@ -144,6 +157,7 @@
+ private:
+     QElapsedTimer m_elapsedTimer;
+     QBasicTimer m_basicTimer;
++    RecordingState m_recordingState = RecordingState::NotRecording;
+ };
+ 
+ Q_DECLARE_OPERATORS_FOR_FLAGS(VideoPlatform::RecordingModes)
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -8,6 +8,7 @@
+ 
+ # minimum requirements
+ set(PROJECT_DEP_VERSION "6.3.4")
++set(KPIPEWIRE_DEP_VERSION "6.3.5")
+ set(QT_MIN_VERSION "6.7.0")
+ set(KF6_MIN_VERSION "6.10.0")
+ 
+@@ -83,7 +84,7 @@
+ find_package(Wayland REQUIRED COMPONENTS Client)
+ find_package(PlasmaWaylandProtocols REQUIRED)
+ find_package(LayerShellQt REQUIRED)
+-find_package(KPipeWire)
++find_package(KPipeWire ${KPIPEWIRE_DEP_VERSION})
+ find_package(OpenCV REQUIRED core imgproc)
+ 
+ set_package_properties(KPipeWire PROPERTIES DESCRIPTION
diff -Nru kde-spectacle-6.3.4/debian/patches/upstream_d5541b1e_Close-recording-rendering-notifications-when-changing-recording-states.patch kde-spectacle-6.3.5/debian/patches/upstream_d5541b1e_Close-recording-rendering-notifications-when-changing-recording-states.patch
--- kde-spectacle-6.3.4/debian/patches/upstream_d5541b1e_Close-recording-rendering-notifications-when-changing-recording-states.patch	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/upstream_d5541b1e_Close-recording-rendering-notifications-when-changing-recording-states.patch	2025-06-11 22:11:23.000000000 +0200
@@ -0,0 +1,41 @@
+From d5541b1e2959bd20d0178b6cf0c8b21e87328691 Mon Sep 17 00:00:00 2001
+From: Noah Davis <noahadvs@gmail.com>
+Date: Tue, 6 May 2025 09:02:17 -0400
+Subject: [PATCH] Close recording/rendering notifications when changing
+ recording states
+
+---
+ src/SpectacleCore.cpp | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/src/SpectacleCore.cpp b/src/SpectacleCore.cpp
+index 850d1045f..efa37029b 100644
+--- a/src/SpectacleCore.cpp
++++ b/src/SpectacleCore.cpp
+@@ -285,6 +285,11 @@ SpectacleCore::SpectacleCore(QObject *parent)
+             // Can't set notification duration with KNotification directly.
+             // Also see https://bugs.kde.org/show_bug.cgi?id=503838
+             QTimer::singleShot(4000, notification, &KNotification::close);
++            connect(m_videoPlatform.get(), &VideoPlatform::recordingStateChanged, notification, [notification](VideoPlatform::RecordingState state) {
++                if (state != VideoPlatform::RecordingState::Recording) {
++                    notification->close();
++                }
++            });
+             notification->sendEvent();
+             if (!QMovie::supportedFormats().contains("webp"_ba)) {
+                 const auto messageTitle = i18nc("missing webp support notification title", "WebP support is missing.");
+@@ -337,6 +342,11 @@ SpectacleCore::SpectacleCore(QObject *parent)
+             notification->setText(messageBody);
+             notification->setIconName(u"process-working-symbolic"_s);
+             notification->setHint(u"transient"_s, true);
++            connect(m_videoPlatform.get(), &VideoPlatform::recordingStateChanged, notification, [notification](VideoPlatform::RecordingState state) {
++                if (state != VideoPlatform::RecordingState::Rendering) {
++                    notification->close();
++                }
++            });
+             notification->sendEvent();
+             s_systemTrayIcon->setToolTipSubTitle(subtitle);
+         } else {
+-- 
+GitLab
+
diff -Nru kde-spectacle-6.3.4/debian/patches/upstream_dd1892d8_VideoPlatformWayland-Don-t-use-QtConcurrent-for-creating-KPipeWire-stream.patch kde-spectacle-6.3.5/debian/patches/upstream_dd1892d8_VideoPlatformWayland-Don-t-use-QtConcurrent-for-creating-KPipeWire-stream.patch
--- kde-spectacle-6.3.4/debian/patches/upstream_dd1892d8_VideoPlatformWayland-Don-t-use-QtConcurrent-for-creating-KPipeWire-stream.patch	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/upstream_dd1892d8_VideoPlatformWayland-Don-t-use-QtConcurrent-for-creating-KPipeWire-stream.patch	2025-05-16 17:13:47.000000000 +0200
@@ -0,0 +1,59 @@
+From dd1892d8325217269647fb463307ad4a8379704a Mon Sep 17 00:00:00 2001
+From: Arjen Hiemstra <ahiemstra@heimr.nl>
+Date: Tue, 8 Oct 2024 14:55:59 +0200
+Subject: [PATCH] VideoPlatformWayland: Don't use QtConcurrent for creating
+ KPipeWire stream
+
+This was done to hide the latency of querying VAAPI, but means that the
+KPipeWire stream lives in the QtConcurrent thread which lacks an event
+loop, meaning any event processing the KPipeWire stream does breaks.
+
+Since the KPipeWire stream no longer queries VAAPI on creation, we can
+now safely do this on the same thread as the VideoPlatform.
+---
+ src/Platforms/VideoPlatformWayland.cpp | 16 ++++++++--------
+ src/Platforms/VideoPlatformWayland.h   |  1 +
+ 2 files changed, 9 insertions(+), 8 deletions(-)
+
+diff --git a/src/Platforms/VideoPlatformWayland.cpp b/src/Platforms/VideoPlatformWayland.cpp
+index d2a53475..62375c93 100644
+--- a/src/Platforms/VideoPlatformWayland.cpp
++++ b/src/Platforms/VideoPlatformWayland.cpp
+@@ -118,14 +118,14 @@ VideoPlatformWayland::VideoPlatformWayland(QObject *parent)
+     : VideoPlatform(parent)
+     , m_screencasting(new Screencasting(this))
+ {
+-    m_recorderFuture = QtConcurrent::run([] {
+-        return new PipeWireRecord();
+-    }).then([this](PipeWireRecord *result) {
+-        m_recorder.reset(result);
+-        m_recorder->setActive(false);
+-        Q_EMIT supportedRecordingModesChanged();
+-        Q_EMIT supportedFormatsChanged();
+-    });
++    QMetaObject::invokeMethod(this, &VideoPlatformWayland::initialize, Qt::QueuedConnection);
++}
++
++void VideoPlatformWayland::initialize()
++{
++    m_recorder = std::make_unique<PipeWireRecord>();
++    Q_EMIT supportedRecordingModesChanged();
++    Q_EMIT supportedFormatsChanged();
+ }
+ 
+ VideoPlatform::RecordingModes VideoPlatformWayland::supportedRecordingModes() const
+diff --git a/src/Platforms/VideoPlatformWayland.h b/src/Platforms/VideoPlatformWayland.h
+index 0f2e4b8e..e12f1f5c 100644
+--- a/src/Platforms/VideoPlatformWayland.h
++++ b/src/Platforms/VideoPlatformWayland.h
+@@ -36,6 +36,7 @@ protected:
+     void timerEvent(QTimerEvent *event) override;
+ 
+ private:
++    void initialize();
+     bool mkDirPath(const QUrl &fileUrl);
+     void selectAndRecord(const QUrl &fileUrl, RecordingMode recordingMode, bool includePointer);
+ 
+-- 
+GitLab
+
diff -Nru kde-spectacle-6.3.4/debian/patches/upstream_f7e5e541_VideoPlatformWayland-Update-to-changed-KPipeWire-API.patch kde-spectacle-6.3.5/debian/patches/upstream_f7e5e541_VideoPlatformWayland-Update-to-changed-KPipeWire-API.patch
--- kde-spectacle-6.3.4/debian/patches/upstream_f7e5e541_VideoPlatformWayland-Update-to-changed-KPipeWire-API.patch	1970-01-01 01:00:00.000000000 +0100
+++ kde-spectacle-6.3.5/debian/patches/upstream_f7e5e541_VideoPlatformWayland-Update-to-changed-KPipeWire-API.patch	2025-05-16 17:13:47.000000000 +0200
@@ -0,0 +1,72 @@
+From f7e5e541fb4229a2b34e0b4c936d569e907977dd Mon Sep 17 00:00:00 2001
+From: Arjen Hiemstra <ahiemstra@heimr.nl>
+Date: Tue, 8 Oct 2024 14:58:53 +0200
+Subject: [PATCH] VideoPlatformWayland: Update to changed KPipeWire API
+
+setActive() has been replaced with a more explicit start()/stop() API,
+so use that. In addition, forward the Rendering state to VideoPlatform.
+---
+ src/Platforms/VideoPlatformWayland.cpp | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/src/Platforms/VideoPlatformWayland.cpp b/src/Platforms/VideoPlatformWayland.cpp
+index 62375c93..6b60fe24 100644
+--- a/src/Platforms/VideoPlatformWayland.cpp
++++ b/src/Platforms/VideoPlatformWayland.cpp
+@@ -170,7 +170,6 @@ void VideoPlatformWayland::startRecording(const QUrl &fileUrl, RecordingMode rec
+         return;
+     }
+ 
+-    m_recorder->setActive(false);
+     Screencasting::CursorMode mode = includePointer ? Screencasting::CursorMode::Embedded : Screencasting::Hidden;
+     ScreencastingStream *stream = nullptr;
+     switch (recordingMode) {
+@@ -244,7 +243,7 @@ void VideoPlatformWayland::startRecording(const QUrl &fileUrl, RecordingMode rec
+     connect(stream, &ScreencastingStream::created, this, [this, stream] {
+         m_recorder->setNodeId(stream->nodeId());
+         if (!m_recorder->output().isEmpty()) {
+-            m_recorder->setActive(true);
++            m_recorder->start();
+         }
+         setRecording(true);
+     });
+@@ -282,7 +281,6 @@ void VideoPlatformWayland::startRecording(const QUrl &fileUrl, RecordingMode rec
+         }
+         m_recorder->setEncoder(encoderForFormat(format));
+         m_recorder->setOutput(tempUrl.toLocalFile());
+-        m_recorder->setActive(m_recorder->nodeId() != 0);
+     } else {
+         if (!fileUrl.isLocalFile()) {
+             Q_EMIT recordingFailed(i18nc("@info:shell", "Failed to record: Output file URL is not a local file (%1)", fileUrl.toString()));
+@@ -295,6 +293,9 @@ void VideoPlatformWayland::startRecording(const QUrl &fileUrl, RecordingMode rec
+         m_recorder->setEncoder(encoderForFormat(formatForPath(localFile)));
+         m_recorder->setOutput(localFile);
+     }
++    if (m_recorder->nodeId() != 0) {
++        m_recorder->start();
++    }
+ 
+     connect(m_recorder.get(), &PipeWireRecord::stateChanged, this, [this] {
+         if (m_recorder->state() == PipeWireRecord::Idle) {
+@@ -303,6 +304,8 @@ void VideoPlatformWayland::startRecording(const QUrl &fileUrl, RecordingMode rec
+                 setRecording(false);
+                 Q_EMIT recordingSaved(QUrl::fromLocalFile(m_recorder->output()));
+             }
++        } else if (m_recorder->state() == PipeWireRecord::Rendering) {
++            setRecordingState(VideoPlatform::RecordingState::Rendering);
+         } else {
+             m_memoryTimer.start(5000, Qt::CoarseTimer, this);
+         }
+@@ -314,8 +317,7 @@ void VideoPlatformWayland::finishRecording()
+     if (!m_recorder) {
+         return;
+     }
+-    m_recorder->setActive(false);
+-    m_recorder->setNodeId(0);
++    m_recorder->stop();
+ }
+ 
+ void VideoPlatformWayland::timerEvent(QTimerEvent *event)
+-- 
+GitLab
+
diff -Nru kde-spectacle-6.3.4/desktop/org.kde.spectacle.appdata.xml kde-spectacle-6.3.5/desktop/org.kde.spectacle.appdata.xml
--- kde-spectacle-6.3.4/desktop/org.kde.spectacle.appdata.xml	2025-04-02 05:40:28.000000000 +0200
+++ kde-spectacle-6.3.5/desktop/org.kde.spectacle.appdata.xml	2025-05-06 20:01:30.000000000 +0200
@@ -530,10 +530,10 @@
   </provides>
   <launchable type="desktop-id">org.kde.spectacle.desktop</launchable>
   <releases>
+    <release version="6.3.5" date="2025-05-06"/>
     <release version="6.3.4" date="2025-04-01"/>
     <release version="6.3.3" date="2025-03-11"/>
     <release version="6.3.2" date="2025-02-25"/>
-    <release version="6.3.1" date="2025-02-18"/>
   </releases>
   <custom>
     <value key="KDE::supporters">[DomiStyle](https://github.com/DomiStyle);Nithanim;JB;Thibault Molleman;Daniel Schulte</value>
diff -Nru kde-spectacle-6.3.4/po/ar/spectacle.po kde-spectacle-6.3.5/po/ar/spectacle.po
--- kde-spectacle-6.3.4/po/ar/spectacle.po	2025-04-02 05:40:28.000000000 +0200
+++ kde-spectacle-6.3.5/po/ar/spectacle.po	2025-05-06 20:01:30.000000000 +0200
@@ -9,7 +9,7 @@
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n";
 "POT-Creation-Date: 2025-03-22 02:30+0000\n"
-"PO-Revision-Date: 2024-12-12 08:24+0400\n"
+"PO-Revision-Date: 2025-04-23 21:22+0400\n"
 "Last-Translator: Zayed Al-Saidi <zayed.alsaidi@gmail.com>\n"
 "Language-Team: ar\n"
 "Language: ar\n"
@@ -751,7 +751,7 @@
 #: src/Gui/QRCodeScannedMessage.qml:30
 #, kde-format
 msgid "Found QR code with binary content."
-msgstr "عثر على رمز QR بمحتوى ثنائي."
+msgstr "عثر على رمز استجابة سريعة QR بمحتوى ثنائي."
 
 #: src/Gui/RecordingSettingsColumn.qml:17
 #, kde-format
diff -Nru kde-spectacle-6.3.4/po/de/spectacle.po kde-spectacle-6.3.5/po/de/spectacle.po
--- kde-spectacle-6.3.4/po/de/spectacle.po	2025-04-02 05:40:28.000000000 +0200
+++ kde-spectacle-6.3.5/po/de/spectacle.po	2025-05-06 20:01:30.000000000 +0200
@@ -3,13 +3,13 @@
 # Frederik Schwarzer <schwarzer@kde.org>, 2015, 2016, 2018, 2020, 2022, 2023.
 # Alois Spitzbart <spitz234@hotmail.com>, 2022.
 # Frank Steinmetzger <dev-kde@felsenfleischer.de>, 2022.
-# SPDX-FileCopyrightText: 2024 Flori G <Renner03@protonmail.com>
+# SPDX-FileCopyrightText: 2024, 2025 Flori G <Renner03@protonmail.com>
 msgid ""
 msgstr ""
 "Project-Id-Version: spectacle\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n";
 "POT-Creation-Date: 2025-03-22 02:30+0000\n"
-"PO-Revision-Date: 2024-10-09 20:36+0200\n"
+"PO-Revision-Date: 2025-03-26 16:39+0100\n"
 "Last-Translator: Flori G <Renner03@protonmail.com>\n"
 "Language-Team: German <kde-i18n-de@kde.org>\n"
 "Language: de\n"
@@ -17,60 +17,52 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 24.08.1\n"
+"X-Generator: Lokalize 24.12.3\n"
 
 #: src/CaptureModeModel.cpp:152
-#, fuzzy, kde-format
-#| msgid "Rectangular Region"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "Rectangular Region"
 msgstr "Rechteckiger Bereich"
 
 #: src/CaptureModeModel.cpp:154
-#, fuzzy, kde-format
-#| msgid "All Screens (Scaled to same size)"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "All Screens (Scaled to same size)"
 msgstr "Alle Bildschirme (auf dieselbe Größe skaliert)"
 
 #: src/CaptureModeModel.cpp:156
-#, fuzzy, kde-format
-#| msgid "Current Screen"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "Current Screen"
 msgstr "Aktueller Bildschirm"
 
 #: src/CaptureModeModel.cpp:158
-#, fuzzy, kde-format
-#| msgid "Active Window"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "Active Window"
 msgstr "Aktives Fenster"
 
 #: src/CaptureModeModel.cpp:161
-#, fuzzy, kde-format
-#| msgid "Selected Window"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "Select Window"
-msgstr "Ausgewähltes Fenster"
+msgstr "Fenster auswählen"
 
 #: src/CaptureModeModel.cpp:161
-#, fuzzy, kde-format
-#| msgid "Window Under Cursor"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "Window Under Cursor"
 msgstr "Fenster unter dem Mauszeiger"
 
 #: src/CaptureModeModel.cpp:164
-#, fuzzy, kde-format
-#| msgid "All Screens"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "All Screens"
 msgstr "Alle Bildschirme"
 
 #: src/CaptureModeModel.cpp:166
-#, fuzzy, kde-format
-#| msgid "Full Screen"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "Full Screen"
 msgstr "Vollbild"
@@ -1917,78 +1909,67 @@
 msgstr "Vollbild"
 
 #: src/ShortcutActions.cpp:38
-#, fuzzy, kde-format
-#| msgid "Launch Spectacle"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Launch Spectacle"
 msgstr "Spectacle starten"
 
 #: src/ShortcutActions.cpp:44
-#, fuzzy, kde-format
-#| msgid "Capture Entire Desktop"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Capture Entire Desktop"
 msgstr "Gesamte Arbeitsfläche aufnehmen"
 
 #: src/ShortcutActions.cpp:50
-#, fuzzy, kde-format
-#| msgid "Capture Current Monitor"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Capture Current Monitor"
 msgstr "Aktuellen Bildschirm aufnehmen"
 
 #: src/ShortcutActions.cpp:56
-#, fuzzy, kde-format
-#| msgid "Capture Active Window"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Capture Active Window"
 msgstr "Aktives Fenster aufnehmen"
 
 #: src/ShortcutActions.cpp:62
-#, fuzzy, kde-format
-#| msgid "Capture Rectangular Region"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Capture Rectangular Region"
 msgstr "Rechteckigen Bereich aufnehmen"
 
 #: src/ShortcutActions.cpp:69
-#, fuzzy, kde-format
-#| msgid "Capture Active Window"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Capture Selected Window"
-msgstr "Aktives Fenster aufnehmen"
+msgstr "Ausgewähltes Fenster aufnehmen"
 
 #: src/ShortcutActions.cpp:69
-#, fuzzy, kde-format
-#| msgid "Capture Window Under Cursor"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Capture Window Under Cursor"
 msgstr "Fenster unter dem Mauszeiger aufnehmen"
 
 #: src/ShortcutActions.cpp:76
-#, fuzzy, kde-format
-#| msgid "Record Screen"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Record Screen"
 msgstr "Bildschirm aufnehmen"
 
 #: src/ShortcutActions.cpp:82
-#, fuzzy, kde-format
-#| msgid "Record Window"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Record Window"
 msgstr "Fenster aufnehmen"
 
 #: src/ShortcutActions.cpp:88
-#, fuzzy, kde-format
-#| msgid "Record Rectangular Region"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Record Rectangular Region"
 msgstr "Rechteckigen Bereich aufnehmen"
 
 #: src/ShortcutActions.cpp:94
-#, fuzzy, kde-format
-#| msgid "Launch Spectacle without capturing"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Launch Spectacle without capturing"
 msgstr "Spectacle ohne Aufnahme starten"
@@ -2023,7 +2004,7 @@
 #, kde-format
 msgctxt "missing webp support notification title"
 msgid "WebP support is missing."
-msgstr ""
+msgstr "WebP-Unterstützung fehlt."
 
 #: src/SpectacleCore.cpp:261
 #, kde-format
@@ -2032,6 +2013,9 @@
 "Please install Qt Image Formats to get animated system tray icons for "
 "Spectacle, and then report this packaging issue to your distributor."
 msgstr ""
+"Bitte installieren Sie „Qt Image Formats“, um animierte Symbole im "
+"Systemabschnitt der Konstrollleiste zu bekommen und melden Sie dieses "
+"Paketierungsproblem Ihrer Distribution."
 
 #: src/SpectacleCore.cpp:307
 #, kde-format
@@ -2127,13 +2111,13 @@
 #, kde-format
 msgctxt "@item:inlistbox Container/encoder"
 msgid "Animated WebP (better than GIF)"
-msgstr ""
+msgstr "Animiertes WebP (besser als GIF)"
 
 #: src/VideoFormatModel.cpp:52
 #, kde-format
 msgctxt "@item:inlistbox Container/encoder"
 msgid "GIF (compatible, but inefficient)"
-msgstr ""
+msgstr "GIF (kompatibel, aber ineffizient)"
 
 #, fuzzy
 #~| msgid "Screenshot"
diff -Nru kde-spectacle-6.3.4/po/gl/spectacle.po kde-spectacle-6.3.5/po/gl/spectacle.po
--- kde-spectacle-6.3.4/po/gl/spectacle.po	2025-04-02 05:40:28.000000000 +0200
+++ kde-spectacle-6.3.5/po/gl/spectacle.po	2025-05-06 20:01:30.000000000 +0200
@@ -1685,7 +1685,7 @@
 #, kde-format
 msgctxt "NAME OF TRANSLATORS"
 msgid "Your names"
-msgstr "Adrián Chaves Fernández"
+msgstr "Adrián Chaves"
 
 #: src/Main.cpp:52
 #, kde-format
diff -Nru kde-spectacle-6.3.4/po/it/spectacle.po kde-spectacle-6.3.5/po/it/spectacle.po
--- kde-spectacle-6.3.4/po/it/spectacle.po	2025-04-02 05:40:28.000000000 +0200
+++ kde-spectacle-6.3.5/po/it/spectacle.po	2025-05-06 20:01:30.000000000 +0200
@@ -16,7 +16,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 25.03.70\n"
+"X-Generator: Lokalize 24.12.0\n"
 
 #: src/CaptureModeModel.cpp:152
 #, kde-format
diff -Nru kde-spectacle-6.3.4/po/ko/spectacle.po kde-spectacle-6.3.5/po/ko/spectacle.po
--- kde-spectacle-6.3.4/po/ko/spectacle.po	2025-04-02 05:40:28.000000000 +0200
+++ kde-spectacle-6.3.5/po/ko/spectacle.po	2025-05-06 20:01:30.000000000 +0200
@@ -1,6 +1,6 @@
 # Copyright (C) YEAR This_file_is_part_of_KDE
 # This file is distributed under the same license as the PACKAGE package.
-# SPDX-FileCopyrightText: 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 Shinjo Park <kde@peremen.name>
+# SPDX-FileCopyrightText: 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 Shinjo Park <kde@peremen.name>
 #
 msgid ""
 msgstr ""
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Lokalize 23.08.5\n"
+"X-Generator: Lokalize 24.12.3\n"
 
 #: src/CaptureModeModel.cpp:152
 #, kde-format
diff -Nru kde-spectacle-6.3.4/po/ru/spectacle.po kde-spectacle-6.3.5/po/ru/spectacle.po
--- kde-spectacle-6.3.4/po/ru/spectacle.po	2025-04-02 05:40:28.000000000 +0200
+++ kde-spectacle-6.3.5/po/ru/spectacle.po	2025-05-06 20:01:30.000000000 +0200
@@ -6,7 +6,7 @@
 # Translators listed below for year 2013 and earlier worked on translation of
 # KSnapshot.
 #
-# SPDX-FileCopyrightText: 2018, 2019, 2020, 2021, 2022, 2023, 2024 Alexander Yavorsky <kekcuha@gmail.com>
+# SPDX-FileCopyrightText: 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 Alexander Yavorsky <kekcuha@gmail.com>
 # Denis Pershin <dyp@perchine.com>, 1998, 1999.
 # Andrey Cherepanov <sibskull@mail.ru>, 2001-2005.
 # Nickolai Shaforostoff <shafff@ukr.net>, 2004.
@@ -32,7 +32,7 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 23.08.5\n"
+"X-Generator: Lokalize 24.12.3\n"
 "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
 "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
 "X-Environment: kde\n"
@@ -1681,7 +1681,7 @@
 #, kde-format
 msgctxt "@title:window Unsaved Screenshot"
 msgid "Unsaved"
-msgstr "Несохраненный снимок экрана"
+msgstr "Несохранённый снимок экрана"
 
 #: src/Gui/UndoRedoGroup.qml:31
 #, kde-format
diff -Nru kde-spectacle-6.3.4/po/sk/spectacle.po kde-spectacle-6.3.5/po/sk/spectacle.po
--- kde-spectacle-6.3.4/po/sk/spectacle.po	2025-04-02 05:40:28.000000000 +0200
+++ kde-spectacle-6.3.5/po/sk/spectacle.po	2025-05-06 20:01:30.000000000 +0200
@@ -2,45 +2,42 @@
 # SPDX-FileCopyrightText: 2015, 2016, 2017, 2022, 2023 Roman Paholik <wizzardsk@gmail.com>
 # SPDX-FileCopyrightText: 2019, 2020, 2021, 2023, 2024 Matej Mrenica <matejm98mthw@gmail.com>
 # Dusan Kazik <prescott66@gmail.com>, 2020.
+# SPDX-FileCopyrightText: 2025 Lucia Mrenica <lucia.mrenica@gmail.com>
 msgid ""
 msgstr ""
 "Project-Id-Version: kscreengenie\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n";
 "POT-Creation-Date: 2025-03-22 02:30+0000\n"
-"PO-Revision-Date: 2024-03-24 11:39+0100\n"
-"Last-Translator: Matej Mrenica <matejm98mthw@gmail.com>\n"
+"PO-Revision-Date: 2025-05-03 13:04+0200\n"
+"Last-Translator: Lucia Mrenica <lucia.mrenica@gmail.com>\n"
 "Language-Team: Slovak <kde-i18n-doc@kde.org>\n"
 "Language: sk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 24.02.1\n"
+"X-Generator: Lokalize 25.04.0\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
 #: src/CaptureModeModel.cpp:152
-#, fuzzy, kde-format
-#| msgid "Rectangular Region"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "Rectangular Region"
 msgstr "Pravouhlá oblasť"
 
 #: src/CaptureModeModel.cpp:154
-#, fuzzy, kde-format
-#| msgid "All Screens (Scaled to same size)"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "All Screens (Scaled to same size)"
 msgstr "Všetky obrazovky (zmenšené na rovnakú veľkosť)"
 
 #: src/CaptureModeModel.cpp:156
-#, fuzzy, kde-format
-#| msgid "Current Screen"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "Current Screen"
 msgstr "Aktuálna obrazovka"
 
 #: src/CaptureModeModel.cpp:158
-#, fuzzy, kde-format
-#| msgid "Active Window"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "Active Window"
 msgstr "Aktívne okno"
@@ -53,22 +50,19 @@
 msgstr "Aktívne okno"
 
 #: src/CaptureModeModel.cpp:161
-#, fuzzy, kde-format
-#| msgid "Window Under Cursor"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "Window Under Cursor"
 msgstr "Okno pod kurzorom"
 
 #: src/CaptureModeModel.cpp:164
-#, fuzzy, kde-format
-#| msgid "All Screens"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "All Screens"
 msgstr "Všetky obrazovky"
 
 #: src/CaptureModeModel.cpp:166
-#, fuzzy, kde-format
-#| msgid "Full Screen"
+#, kde-format
 msgctxt "@action in capture mode section"
 msgid "Full Screen"
 msgstr "Celá obrazovka"
@@ -302,9 +296,9 @@
 msgctxt "px: pixels"
 msgid "%1px"
 msgid_plural "%1px"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "%1px"
+msgstr[1] "%1px"
+msgstr[2] "%1px"
 
 #: src/Gui/AnnotationOptionsToolBarContents.qml:98
 #, kde-format
@@ -330,13 +324,13 @@
 #, kde-format
 msgctxt "@label:slider strength of effect"
 msgid "Strength:"
-msgstr ""
+msgstr "Sila:"
 
 #: src/Gui/AnnotationOptionsToolBarContents.qml:234
 #, kde-format
 msgctxt "@info:tooltip"
 msgid "The strength of the effect."
-msgstr ""
+msgstr "Sila efektu."
 
 #: src/Gui/AnnotationOptionsToolBarContents.qml:261
 #, kde-format
@@ -348,18 +342,18 @@
 msgctxt "%2 font family, %3 font style name, %1 font point size"
 msgid "%2 %3 %1pt"
 msgid_plural "%2 %3 %1pts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "%2 %3 %1bod"
+msgstr[1] "%2 %3 %1body"
+msgstr[2] "%2 %3 %1bodov"
 
 #: src/Gui/AnnotationOptionsToolBarContents.qml:276
 #, kde-format
 msgctxt "%2 font family %1 font point size"
 msgid "%2 %1pt"
 msgid_plural "%2 %1pts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "%2 %1bod"
+msgstr[1] "%2 %1body"
+msgstr[2] "%2 %1bodov"
 
 #: src/Gui/AnnotationOptionsToolBarContents.qml:288
 #, kde-format
@@ -389,7 +383,7 @@
 #: src/Gui/AnnotationsToolBarContents.qml:110
 #, kde-format
 msgid "Crop"
-msgstr ""
+msgstr "Orezať"
 
 #: src/Gui/AnnotationsToolBarContents.qml:120
 #, kde-format
@@ -460,12 +454,10 @@
 msgstr "Zachytiť novú snímku obrazovky"
 
 #: src/Gui/CaptureOptions.qml:39
-#, fuzzy, kde-format
-#| msgctxt "translatable folder name"
-#| msgid "Screenshots"
+#, kde-format
 msgctxt "@title:group"
 msgid "Screenshot Settings"
-msgstr "Snímky obrazovky"
+msgstr "Nastavenia snímky obrazovky"
 
 #: src/Gui/CaptureSettingsColumn.qml:16 src/Gui/OptionsMenu.cpp:72
 #: src/Gui/RecordingSettingsColumn.qml:16
@@ -553,16 +545,13 @@
 msgstr "Bez oneskorenia"
 
 #: src/Gui/DelaySpinBox.qml:24
-#, fuzzy, kde-format
-#| msgctxt "@title:window"
-#| msgid "%1 second"
-#| msgid_plural "%1 seconds"
+#, kde-format
 msgctxt "Integer number of seconds"
 msgid "%2 second"
 msgid_plural "%2 seconds"
-msgstr[0] "%1 sekunda"
-msgstr[1] "%1 sekundy"
-msgstr[2] "%1 sekúnd"
+msgstr[0] "%2 sekunda"
+msgstr[1] "%2 sekundy"
+msgstr[2] "%2 sekúnd"
 
 #: src/Gui/DelaySpinBox.qml:26
 #, kde-format
@@ -581,25 +570,22 @@
 msgstr "Pomocník"
 
 #: src/Gui/DialogPage.qml:87
-#, fuzzy, kde-format
-#| msgid "Take Screenshot:"
+#, kde-format
 msgctxt "@title:group"
 msgid "Take a Screenshot:"
-msgstr "Zachytenie snímky obrazovky:"
+msgstr "Zachytiť novú snímku obrazovky:"
 
 #: src/Gui/DialogPage.qml:102 src/Gui/DialogPage.qml:143
-#, fuzzy, kde-format
-#| msgid "Options"
+#, kde-format
 msgctxt "@title:group"
 msgid "Options"
 msgstr "Možnosti"
 
 #: src/Gui/DialogPage.qml:128
-#, fuzzy, kde-format
-#| msgid "Recording"
+#, kde-format
 msgctxt "@title:group"
 msgid "Make a Recording:"
-msgstr "Nahrávka"
+msgstr "Nahrať obrazovku:"
 
 #: src/Gui/DialogPage.qml:170
 #, kde-format
@@ -663,7 +649,7 @@
 #: src/Gui/MainToolBarContents.qml:56
 #, kde-format
 msgid "Save"
-msgstr "Uloženie"
+msgstr "Uložiť"
 
 #: src/Gui/MainToolBarContents.qml:62
 #, kde-format
@@ -689,7 +675,7 @@
 #, kde-format
 msgctxt "@action:button edit screenshot"
 msgid "Edit…"
-msgstr ""
+msgstr "Upraviť..."
 
 #: src/Gui/MainToolBarContents.qml:122
 #, kde-format
@@ -764,7 +750,7 @@
 #: src/Gui/QRCodeScannedMessage.qml:30
 #, kde-format
 msgid "QR Code found: %1"
-msgstr ""
+msgstr "QR kód nájdený: %1"
 
 #: src/Gui/QRCodeScannedMessage.qml:30
 #, kde-format
@@ -971,10 +957,9 @@
 
 #. i18n: ectx: property (text), widget (QLabel, label)
 #: src/Gui/SettingsDialog/GeneralOptions.ui:195
-#, fuzzy, kde-format
-#| msgid "Show magnifier"
+#, kde-format
 msgid "Show magnifier:"
-msgstr "Zobraziť lupu"
+msgstr "Zobraziť lupu:"
 
 #. i18n: ectx: property (text), item, widget (QComboBox, kcfg_showMagnifier)
 #. i18n: ectx: property (text), item, widget (QComboBox, kcfg_rememberSelectionRect)
@@ -1879,36 +1864,31 @@
 msgstr "Celá obrazovka"
 
 #: src/ShortcutActions.cpp:38
-#, fuzzy, kde-format
-#| msgid "Launch Spectacle"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Launch Spectacle"
 msgstr "Spustiť aplikáciu Spectacle"
 
 #: src/ShortcutActions.cpp:44
-#, fuzzy, kde-format
-#| msgid "Capture Entire Desktop"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Capture Entire Desktop"
 msgstr "Zachytiť celú plochu"
 
 #: src/ShortcutActions.cpp:50
-#, fuzzy, kde-format
-#| msgid "Capture Current Monitor"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Capture Current Monitor"
 msgstr "Zachytiť aktuálny monitor"
 
 #: src/ShortcutActions.cpp:56
-#, fuzzy, kde-format
-#| msgid "Capture Active Window"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Capture Active Window"
 msgstr "Zachytiť aktívne okno"
 
 #: src/ShortcutActions.cpp:62
-#, fuzzy, kde-format
-#| msgid "Capture Rectangular Region"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Capture Rectangular Region"
 msgstr "Zachytiť pravouhlú oblasť"
@@ -1921,36 +1901,31 @@
 msgstr "Zachytiť aktívne okno"
 
 #: src/ShortcutActions.cpp:69
-#, fuzzy, kde-format
-#| msgid "Capture Window Under Cursor"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Capture Window Under Cursor"
 msgstr "Zaznamenať okno pod kurzorom"
 
 #: src/ShortcutActions.cpp:76
-#, fuzzy, kde-format
-#| msgid "Record Screen"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Record Screen"
-msgstr "Nahrať obrazovku"
+msgstr "Nahrávať obrazovku"
 
 #: src/ShortcutActions.cpp:82
-#, fuzzy, kde-format
-#| msgid "Record Window"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Record Window"
-msgstr "Nahrať obrazovku"
+msgstr "Nahrávať okno"
 
 #: src/ShortcutActions.cpp:88
-#, fuzzy, kde-format
-#| msgid "Record Rectangular Region"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Record Rectangular Region"
 msgstr "Nahrať pravouhlú oblasť"
 
 #: src/ShortcutActions.cpp:94
-#, fuzzy, kde-format
-#| msgid "Launch Spectacle without capturing"
+#, kde-format
 msgctxt "@action global shortcut"
 msgid "Launch Spectacle without capturing"
 msgstr "Spustiť aplikáciu Spectacle bez zachytenia"
diff -Nru kde-spectacle-6.3.4/po/zh_TW/spectacle.po kde-spectacle-6.3.5/po/zh_TW/spectacle.po
--- kde-spectacle-6.3.4/po/zh_TW/spectacle.po	2025-04-02 05:40:28.000000000 +0200
+++ kde-spectacle-6.3.5/po/zh_TW/spectacle.po	2025-05-06 20:01:30.000000000 +0200
@@ -3,13 +3,13 @@
 #
 # Jeff Huang <s8321414@gmail.com>, 2016, 2017.
 # pan93412 <pan93412@gmail.com>, 2018, 2019, 2020.
-# SPDX-FileCopyrightText: 2023, 2024 Kisaragi Hiu <mail@kisaragi-hiu.com>
+# SPDX-FileCopyrightText: 2023, 2024, 2025 Kisaragi Hiu <mail@kisaragi-hiu.com>
 msgid ""
 msgstr ""
 "Project-Id-Version: spectacle\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n";
 "POT-Creation-Date: 2025-03-22 02:30+0000\n"
-"PO-Revision-Date: 2024-12-19 17:41+0900\n"
+"PO-Revision-Date: 2025-04-07 13:25+0900\n"
 "Last-Translator: Kisaragi Hiu <mail@kisaragi-hiu.com>\n"
 "Language-Team: Traditional Chinese <zh-l10n@lists.slat.org>\n"
 "Language: zh_TW\n"
@@ -17,7 +17,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Lokalize 24.12.0\n"
+"X-Generator: Lokalize 24.12.3\n"
 
 #: src/CaptureModeModel.cpp:152
 #, kde-format
@@ -648,7 +648,7 @@
 #: src/Gui/MainToolBarContents.qml:122
 #, kde-format
 msgid "New Screenshot"
-msgstr "新的螢幕擷取"
+msgstr "新的螢幕截圖"
 
 #: src/Gui/MainToolBarContents.qml:133
 #, kde-format
@@ -1013,7 +1013,7 @@
 #: src/Gui/SettingsDialog/SaveOptionsUtils.h:87
 #, kde-format
 msgid "To save to a sub-folder"
-msgstr "若要儲存到子資料夾"
+msgstr "來儲存到子資料夾"
 
 #: src/Gui/SettingsDialog/SaveOptionsUtils.h:90
 #, kde-format

--- End Message ---
--- Begin Message ---
Unblocked.

--- End Message ---

Reply to: