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 ""

Reply via email to