Bug#1107669: unblock: krdp/6.3.5-1
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: krdp@packages.debian.org, Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
Control: affects -1 + src:krdp
User: release.debian.org@packages.debian.org
Usertags: unblock
Dear Release Team,
please unblock package krdp.
[ Reason ]
It contains the following changes:
* New upstream release (6.3.5).
- Translation fixes.
* Backport upstream commits:
- Fix mouse wheel scroll triggering screen hot corners when using xfreerdp
under Wayland.
- Increase default video stream quality to make it readable.
- Use new kpipewire asynchronous methods, tentative fix for issues when
restoring sessions.
- Support horizontal wheel event. (kde#496747)
[ Tests ]
Tested that basic remote connection feature works.
[ 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 krdp/6.3.5-1
diff -Nru krdp-6.3.4/CMakeLists.txt krdp-6.3.5/CMakeLists.txt
--- krdp-6.3.4/CMakeLists.txt 2025-04-02 05:36:18.000000000 +0200
+++ krdp-6.3.5/CMakeLists.txt 2025-05-06 19:57:09.000000000 +0200
@@ -1,7 +1,7 @@
# SPDX-FileCopyrightText: 2023 Arjen Hiemstra <ahiemstra@heimr.nl>
# SPDX-License-Identifier: BSD-2-Clause
-set(PROJECT_VERSION "6.3.4")
+set(PROJECT_VERSION "6.3.5")
cmake_minimum_required(VERSION 3.16)
diff -Nru krdp-6.3.4/debian/changelog krdp-6.3.5/debian/changelog
--- krdp-6.3.4/debian/changelog 2025-04-03 01:01:20.000000000 +0200
+++ krdp-6.3.5/debian/changelog 2025-05-19 23:39:08.000000000 +0200
@@ -1,3 +1,17 @@
+krdp (6.3.5-1) unstable; urgency=medium
+
+ [ Aurélien COUDERC ]
+ * New upstream release (6.3.5).
+ * Backport upstream commits:
+ - Fix mouse wheel scroll triggering screen hot corners when using xfreerdp
+ under Wayland.
+ - Increase default video stream quality to make it readable.
+ - Use new kpipewire asynchronous methods, tentative fix for issues when
+ restoring sessions.
+ - Support horizontal wheel event. (kde#496747)
+
+ -- Aurélien COUDERC <coucouf@debian.org> Mon, 19 May 2025 23:39:08 +0200
+
krdp (6.3.4-1) unstable; urgency=medium
[ Patrick Franz ]
diff -Nru krdp-6.3.4/debian/patches/series krdp-6.3.5/debian/patches/series
--- krdp-6.3.4/debian/patches/series 2025-02-12 01:38:00.000000000 +0100
+++ krdp-6.3.5/debian/patches/series 2025-05-19 23:39:08.000000000 +0200
@@ -1 +1,6 @@
upstream_mr_69_add-support-for-freerdp3.patch
+upstream_18539a15_Fix-mouse-wheel-scrolling-issue.patch
+upstream_f3b3199f_kcm-Set-new-quality-default-to-75-minimum-quality-to-50.patch
+upstream_2a193038_AbstractSession-Fix-deprecated-setActive-calls.patch
+upstream_31faf21d_SessionController-Start-the-initialization-session.patch
+upstream_e2b88aaa_Support-horizontal-wheel-event.patch
diff -Nru krdp-6.3.4/debian/patches/upstream_18539a15_Fix-mouse-wheel-scrolling-issue.patch krdp-6.3.5/debian/patches/upstream_18539a15_Fix-mouse-wheel-scrolling-issue.patch
--- krdp-6.3.4/debian/patches/upstream_18539a15_Fix-mouse-wheel-scrolling-issue.patch 1970-01-01 01:00:00.000000000 +0100
+++ krdp-6.3.5/debian/patches/upstream_18539a15_Fix-mouse-wheel-scrolling-issue.patch 2025-05-13 17:59:27.000000000 +0200
@@ -0,0 +1,81 @@
+From 18539a157a51e7e71552c328ca45766a3dedc907 Mon Sep 17 00:00:00 2001
+From: Jack Xu <jackyzy823@gmail.com>
+Date: Mon, 14 Apr 2025 09:38:08 +0000
+Subject: [PATCH] Fix mouse wheel scrolling issue
+
+Currently, mouse wheel scrolling via KRDP triggers screen corners when using xfreerdp under Wayland environment.
+---
+ src/InputHandler.cpp | 12 ++++++------
+ src/PlasmaScreencastV1Session.cpp | 2 +-
+ src/PortalSession.cpp | 2 +-
+ 3 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/src/InputHandler.cpp b/src/InputHandler.cpp
+index d829295..12b8d7e 100644
+--- a/src/InputHandler.cpp
++++ b/src/InputHandler.cpp
+@@ -124,18 +124,18 @@ bool InputHandler::mouseEvent(uint16_t x, uint16_t y, uint16_t flags)
+ }
+ axis *= flags & PTR_FLAGS_WHEEL_NEGATIVE ? 1 : -1;
+ auto event =
+- std::make_shared<QWheelEvent>(QPointF{}, position, QPoint{}, QPoint{0, axis}, Qt::NoButton, Qt::KeyboardModifiers{}, Qt::NoScrollPhase, false);
++ std::make_shared<QWheelEvent>(position, QPointF{}, QPoint{}, QPoint{0, axis}, Qt::NoButton, Qt::KeyboardModifiers{}, Qt::NoScrollPhase, false);
+ Q_EMIT inputEvent(event);
+ return true;
+ }
+
+ std::shared_ptr<QMouseEvent> event;
+ if (flags & PTR_FLAGS_DOWN) {
+- event = std::make_shared<QMouseEvent>(QEvent::MouseButtonPress, QPointF{}, position, button, button, Qt::NoModifier);
++ event = std::make_shared<QMouseEvent>(QEvent::MouseButtonPress, position, QPointF{}, button, button, Qt::NoModifier);
+ } else if (flags & PTR_FLAGS_MOVE) {
+- event = std::make_shared<QMouseEvent>(QEvent::MouseMove, QPointF{}, position, button, button, Qt::NoModifier);
++ event = std::make_shared<QMouseEvent>(QEvent::MouseMove, position, QPointF{}, button, button, Qt::NoModifier);
+ } else {
+- event = std::make_shared<QMouseEvent>(QEvent::MouseButtonRelease, QPointF{}, position, button, button, Qt::NoModifier);
++ event = std::make_shared<QMouseEvent>(QEvent::MouseButtonRelease, position, QPointF{}, button, button, Qt::NoModifier);
+ }
+ Q_EMIT inputEvent(event);
+
+@@ -159,10 +159,10 @@ bool InputHandler::extendedMouseEvent(uint16_t x, uint16_t y, uint16_t flags)
+
+ std::shared_ptr<QMouseEvent> event;
+ if (flags & PTR_XFLAGS_DOWN) {
+- event = std::make_shared<QMouseEvent>(QEvent::MouseButtonPress, QPointF{}, QPointF(x, y), button, button, Qt::KeyboardModifiers{});
++ event = std::make_shared<QMouseEvent>(QEvent::MouseButtonPress, QPointF(x, y), QPointF{}, button, button, Qt::KeyboardModifiers{});
+
+ } else {
+- event = std::make_shared<QMouseEvent>(QEvent::MouseButtonRelease, QPointF{}, QPointF(x, y), button, button, Qt::KeyboardModifiers{});
++ event = std::make_shared<QMouseEvent>(QEvent::MouseButtonRelease, QPointF(x, y), QPointF{}, button, button, Qt::KeyboardModifiers{});
+ }
+ Q_EMIT inputEvent(event);
+
+diff --git a/src/PlasmaScreencastV1Session.cpp b/src/PlasmaScreencastV1Session.cpp
+index c6b8f4c..f13934f 100644
+--- a/src/PlasmaScreencastV1Session.cpp
++++ b/src/PlasmaScreencastV1Session.cpp
+@@ -221,7 +221,7 @@ void PlasmaScreencastV1Session::sendEvent(const std::shared_ptr<QEvent> &event)
+ }
+ case QEvent::MouseMove: {
+ auto me = std::static_pointer_cast<QMouseEvent>(event);
+- auto position = me->globalPosition();
++ auto position = me->position();
+ auto logicalPosition = QPointF{(position.x() / size().width()) * logicalSize().width(), (position.y() / size().height()) * logicalSize().height()};
+ d->remoteInterface->pointer_motion_absolute(logicalPosition.x(), logicalPosition.y());
+ break;
+diff --git a/src/PortalSession.cpp b/src/PortalSession.cpp
+index 19501cb..4a329a0 100644
+--- a/src/PortalSession.cpp
++++ b/src/PortalSession.cpp
+@@ -152,7 +152,7 @@ void PortalSession::sendEvent(const std::shared_ptr<QEvent> &event)
+ }
+ case QEvent::MouseMove: {
+ auto me = std::static_pointer_cast<QMouseEvent>(event);
+- auto position = me->globalPosition();
++ auto position = me->position();
+ auto logicalPosition = QPointF{(position.x() / size().width()) * logicalSize().width(), (position.y() / size().height()) * logicalSize().height()};
+ d->remoteInterface->NotifyPointerMotionAbsolute(d->sessionPath, QVariantMap{}, encodedStream->nodeId(), logicalPosition.x(), logicalPosition.y());
+ break;
+--
+GitLab
+
diff -Nru krdp-6.3.4/debian/patches/upstream_2a193038_AbstractSession-Fix-deprecated-setActive-calls.patch krdp-6.3.5/debian/patches/upstream_2a193038_AbstractSession-Fix-deprecated-setActive-calls.patch
--- krdp-6.3.4/debian/patches/upstream_2a193038_AbstractSession-Fix-deprecated-setActive-calls.patch 1970-01-01 01:00:00.000000000 +0100
+++ krdp-6.3.5/debian/patches/upstream_2a193038_AbstractSession-Fix-deprecated-setActive-calls.patch 2025-05-19 23:39:08.000000000 +0200
@@ -0,0 +1,54 @@
+From 2a19303854603370ab13b8969943995108d93da1 Mon Sep 17 00:00:00 2001
+From: Akseli Lahtinen <akselmo@akselmo.dev>
+Date: Thu, 1 May 2025 18:04:26 +0300
+Subject: [PATCH] AbstractSession: Fix deprecated setActive calls
+
+setActive is deprecated and seems to have caused issues with restoring
+sessions. Use start and stop here instead.
+
+Also move the Q_EMIT started() after the start method.
+---
+ src/AbstractSession.cpp | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/src/AbstractSession.cpp b/src/AbstractSession.cpp
+index 2b58025..22aa596 100644
+--- a/src/AbstractSession.cpp
++++ b/src/AbstractSession.cpp
+@@ -38,7 +38,7 @@ AbstractSession::AbstractSession(Server *server)
+ AbstractSession::~AbstractSession()
+ {
+ if (d->encodedStream) {
+- d->encodedStream->setActive(false);
++ d->encodedStream->stop();
+ }
+ }
+
+@@ -89,7 +89,11 @@ void AbstractSession::setStreamingEnabled(bool enable)
+ {
+ d->enabled = enable;
+ if (d->encodedStream) {
+- d->encodedStream->setActive(enable && d->started);
++ if (enable && d->started) {
++ d->encodedStream->start();
++ } else {
++ d->encodedStream->stop();
++ }
+ }
+ }
+
+@@ -136,8 +140,10 @@ void AbstractSession::setStarted(bool s)
+ {
+ d->started = s;
+ if (s) {
++ if (d->enabled) {
++ d->encodedStream->start();
++ }
+ Q_EMIT started();
+- d->encodedStream->setActive(d->enabled);
+ }
+ }
+
+--
+GitLab
+
diff -Nru krdp-6.3.4/debian/patches/upstream_31faf21d_SessionController-Start-the-initialization-session.patch krdp-6.3.5/debian/patches/upstream_31faf21d_SessionController-Start-the-initialization-session.patch
--- krdp-6.3.4/debian/patches/upstream_31faf21d_SessionController-Start-the-initialization-session.patch 1970-01-01 01:00:00.000000000 +0100
+++ krdp-6.3.5/debian/patches/upstream_31faf21d_SessionController-Start-the-initialization-session.patch 2025-05-19 23:39:08.000000000 +0200
@@ -0,0 +1,25 @@
+From 31faf21dfada9adddd31231b12fae32dc9d23707 Mon Sep 17 00:00:00 2001
+From: Akseli Lahtinen <akselmo@akselmo.dev>
+Date: Thu, 1 May 2025 18:13:06 +0300
+Subject: [PATCH] SessionController: Start the initialization session
+
+The initialization session was never ran here
+---
+ server/SessionController.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/server/SessionController.cpp b/server/SessionController.cpp
+index f0a4b00..91fd1ba 100644
+--- a/server/SessionController.cpp
++++ b/server/SessionController.cpp
+@@ -110,6 +110,7 @@ SessionController::SessionController(KRdp::Server *server, SessionType sessionTy
+ // reconnection.
+ connect(m_initializationSession.get(), &KRdp::AbstractSession::started, this, cleanup);
+ connect(m_initializationSession.get(), &KRdp::AbstractSession::error, this, cleanup);
++ m_initializationSession->start();
+ }
+ }
+
+--
+GitLab
+
diff -Nru krdp-6.3.4/debian/patches/upstream_e2b88aaa_Support-horizontal-wheel-event.patch krdp-6.3.5/debian/patches/upstream_e2b88aaa_Support-horizontal-wheel-event.patch
--- krdp-6.3.4/debian/patches/upstream_e2b88aaa_Support-horizontal-wheel-event.patch 1970-01-01 01:00:00.000000000 +0100
+++ krdp-6.3.5/debian/patches/upstream_e2b88aaa_Support-horizontal-wheel-event.patch 2025-05-19 23:39:08.000000000 +0200
@@ -0,0 +1,83 @@
+From e2b88aaa6f9cb8c69890e7cf61d1e231eb105b41 Mon Sep 17 00:00:00 2001
+From: Jack Xu <jackyzy823@gmail.com>
+Date: Sun, 1 Dec 2024 17:46:47 +0800
+Subject: [PATCH] Support horizontal wheel event
+
+---
+ src/InputHandler.cpp | 15 +++++++++++----
+ src/PlasmaScreencastV1Session.cpp | 8 +++++++-
+ src/PortalSession.cpp | 8 +++++++-
+ 3 files changed, 25 insertions(+), 6 deletions(-)
+
+diff --git a/src/InputHandler.cpp b/src/InputHandler.cpp
+index 12b8d7e..e387e55 100644
+--- a/src/InputHandler.cpp
++++ b/src/InputHandler.cpp
+@@ -117,15 +117,22 @@ bool InputHandler::mouseEvent(uint16_t x, uint16_t y, uint16_t flags)
+ button = Qt::MiddleButton;
+ }
+
+- if (flags & PTR_FLAGS_WHEEL || flags & PTR_FLAGS_WHEEL_NEGATIVE) {
++ if (flags & PTR_FLAGS_WHEEL || flags & PTR_FLAGS_HWHEEL) {
+ auto axis = flags & WheelRotationMask;
+ if (axis & PTR_FLAGS_WHEEL_NEGATIVE) {
+ axis = (~axis & WheelRotationMask) + 1;
+ }
+ axis *= flags & PTR_FLAGS_WHEEL_NEGATIVE ? 1 : -1;
+- auto event =
+- std::make_shared<QWheelEvent>(position, QPointF{}, QPoint{}, QPoint{0, axis}, Qt::NoButton, Qt::KeyboardModifiers{}, Qt::NoScrollPhase, false);
+- Q_EMIT inputEvent(event);
++ if (flags & PTR_FLAGS_WHEEL) {
++ auto event =
++ std::make_shared<QWheelEvent>(position, QPointF{}, QPoint{}, QPoint{0, axis}, Qt::NoButton, Qt::KeyboardModifiers{}, Qt::NoScrollPhase, false);
++ Q_EMIT inputEvent(event);
++ }
++ if (flags & PTR_FLAGS_HWHEEL) {
++ auto event =
++ std::make_shared<QWheelEvent>(position, QPointF{}, QPoint{}, QPoint{-axis, 0}, Qt::NoButton, Qt::KeyboardModifiers{}, Qt::NoScrollPhase, false);
++ Q_EMIT inputEvent(event);
++ }
+ return true;
+ }
+
+diff --git a/src/PlasmaScreencastV1Session.cpp b/src/PlasmaScreencastV1Session.cpp
+index 835bb87..2267f2b 100644
+--- a/src/PlasmaScreencastV1Session.cpp
++++ b/src/PlasmaScreencastV1Session.cpp
+@@ -228,7 +228,13 @@ void PlasmaScreencastV1Session::sendEvent(const std::shared_ptr<QEvent> &event)
+ }
+ case QEvent::Wheel: {
+ auto we = std::static_pointer_cast<QWheelEvent>(event);
+- d->remoteInterface->axis(0, we->angleDelta().y() / 120);
++ auto delta = we->angleDelta();
++ if (delta.y() != 0) {
++ d->remoteInterface->axis(WL_POINTER_AXIS_VERTICAL_SCROLL, delta.y() / 120);
++ }
++ if (delta.x() != 0) {
++ d->remoteInterface->axis(WL_POINTER_AXIS_HORIZONTAL_SCROLL, delta.x() / 120);
++ }
+ break;
+ }
+ case QEvent::KeyPress:
+diff --git a/src/PortalSession.cpp b/src/PortalSession.cpp
+index 5218572..cbe4ff0 100644
+--- a/src/PortalSession.cpp
++++ b/src/PortalSession.cpp
+@@ -157,7 +157,13 @@ void PortalSession::sendEvent(const std::shared_ptr<QEvent> &event)
+ }
+ case QEvent::Wheel: {
+ auto we = std::static_pointer_cast<QWheelEvent>(event);
+- d->remoteInterface->NotifyPointerAxisDiscrete(d->sessionPath, QVariantMap{}, 0, we->angleDelta().y() / 120);
++ auto delta = we->angleDelta();
++ if (delta.y() != 0) {
++ d->remoteInterface->NotifyPointerAxisDiscrete(d->sessionPath, QVariantMap{}, 0 /* Vertical */, delta.y() / 120);
++ }
++ if (delta.x() != 0) {
++ d->remoteInterface->NotifyPointerAxisDiscrete(d->sessionPath, QVariantMap{}, 1 /* Horizontal */, delta.x() / 120);
++ }
+ break;
+ }
+ case QEvent::KeyPress:
+--
+GitLab
+
diff -Nru krdp-6.3.4/debian/patches/upstream_f3b3199f_kcm-Set-new-quality-default-to-75-minimum-quality-to-50.patch krdp-6.3.5/debian/patches/upstream_f3b3199f_kcm-Set-new-quality-default-to-75-minimum-quality-to-50.patch
--- krdp-6.3.4/debian/patches/upstream_f3b3199f_kcm-Set-new-quality-default-to-75-minimum-quality-to-50.patch 1970-01-01 01:00:00.000000000 +0100
+++ krdp-6.3.5/debian/patches/upstream_f3b3199f_kcm-Set-new-quality-default-to-75-minimum-quality-to-50.patch 2025-05-19 23:39:08.000000000 +0200
@@ -0,0 +1,48 @@
+From f3b3199fd49136e742d92654e550740e1eea7556 Mon Sep 17 00:00:00 2001
+From: Akseli Lahtinen <akselmo@akselmo.dev>
+Date: Tue, 29 Apr 2025 16:39:14 +0300
+Subject: [PATCH] kcm: Set new quality default to 75, minimum quality to 50
+
+The qualities below 50 are rather poor and any gained responsiviness
+does not really help when you can't see what you're doing.
+
+Instead, set the minimum quality value to 50, where it's still legible.
+Set default quality to 75, which is around middle of the slider, and
+should work well for most cases.
+---
+ src/kcm/krdpserversettings.kcfg | 2 +-
+ src/kcm/ui/main.qml | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/kcm/krdpserversettings.kcfg b/src/kcm/krdpserversettings.kcfg
+index 8d840ba..1961290 100644
+--- a/src/kcm/krdpserversettings.kcfg
++++ b/src/kcm/krdpserversettings.kcfg
+@@ -26,7 +26,7 @@ SPDX-License-Identifier: BSD-2-Clause
+ </entry>
+ <entry name="Quality" type="Int">
+ <label>The quality of the video stream</label>
+- <default>50</default>
++ <default>75</default>
+ </entry>
+ <entry name="Users" type="StringList">
+ <label>Users allowed to login, passwords are stored in KWallet</label>
+diff --git a/src/kcm/ui/main.qml b/src/kcm/ui/main.qml
+index 39d82f9..1ee0312 100644
+--- a/src/kcm/ui/main.qml
++++ b/src/kcm/ui/main.qml
+@@ -221,9 +221,9 @@ KCM.ScrollViewKCM {
+ QQC2.Slider {
+ id: qualitySlider
+ Layout.fillWidth: true
+- from: 0
++ from: 50
+ to: 100
+- stepSize: 1
++ stepSize: 5
+ value: settings.quality
+ onMoved: {
+ settings.quality = value;
+--
+GitLab
+
diff -Nru krdp-6.3.4/po/fi/kcm_krdpserver.po krdp-6.3.5/po/fi/kcm_krdpserver.po
--- krdp-6.3.4/po/fi/kcm_krdpserver.po 2025-04-02 05:36:18.000000000 +0200
+++ krdp-6.3.5/po/fi/kcm_krdpserver.po 2025-05-06 19:57:09.000000000 +0200
@@ -1,6 +1,6 @@
# Copyright (C) 2024 This file is copyright:
# This file is distributed under the same license as the krdp package.
-# SPDX-FileCopyrightText: 2024 Tommi Nieminen <translator@legisign.org>
+# SPDX-FileCopyrightText: 2024, 2025 Tommi Nieminen <translator@legisign.org>
#
msgid ""
msgstr ""
@@ -15,7 +15,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 24.08.2\n"
+"X-Generator: Lokalize 23.08.5\n"
#. i18n: ectx: label, entry (ListenPort), group (General)
#: krdpserversettings.kcfg:14
diff -Nru krdp-6.3.4/po/ko/kcm_krdpserver.po krdp-6.3.5/po/ko/kcm_krdpserver.po
--- krdp-6.3.4/po/ko/kcm_krdpserver.po 2025-04-02 05:36:18.000000000 +0200
+++ krdp-6.3.5/po/ko/kcm_krdpserver.po 2025-05-06 19:57:09.000000000 +0200
@@ -1,6 +1,6 @@
# Copyright (C) 2024 This file is copyright:
# This file is distributed under the same license as the krdp package.
-# SPDX-FileCopyrightText: 2024 Shinjo Park <kde@peremen.name>
+# SPDX-FileCopyrightText: 2024, 2025 Shinjo Park <kde@peremen.name>
#
msgid ""
msgstr ""
Reply to: