Package: release.debian.org Severity: normal X-Debbugs-Cc: k...@packages.debian.org, Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Control: affects -1 + src:krdp User: release.debian....@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 <ahiems...@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 <couc...@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 <jackyzy...@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 <akse...@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 <akse...@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 <jackyzy...@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 <akse...@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 <transla...@legisign.org> +# SPDX-FileCopyrightText: 2024, 2025 Tommi Nieminen <transla...@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 <k...@peremen.name> +# SPDX-FileCopyrightText: 2024, 2025 Shinjo Park <k...@peremen.name> # msgid "" msgstr ""