Your message dated Sat, 26 Jul 2025 12:39:18 +0000 with message-id <E1ufeBK-00Fywg-07@respighi.debian.org> and subject line unblock krdc has caused the Debian Bug report #1109928, regarding unblock: krdc/4:25.04.3-1 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.) -- 1109928: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1109928 Debian Bug Tracking System Contact owner@bugs.debian.org with problems
--- Begin Message ---
- To: Debian Bug Tracking System <submit@bugs.debian.org>
- Subject: unblock: krdc/4:25.04.3-1
- From: Aurélien COUDERC <coucouf@debian.org>
- Date: Sat, 26 Jul 2025 14:07:35 +0200
- Message-id: <[🔎] 175353165526.737925.13262923366780738238.reportbug@Grummly>
Package: release.debian.org Severity: normal X-Debbugs-Cc: krdc@packages.debian.org, Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Control: affects -1 + src:krdc User: release.debian.org@packages.debian.org Usertags: unblock Dear Release Team, please unblock package krdc. [ Reason ] It contains the following changes: * New upstream release (25.04.3). - Show system tray icon at startup if enabled in settings. (kde#505744) - VncView: focus the view on successful connection. (kde#503115) - Rdp: rework handling for some error messages. - Let Mainwindow publish error messages from views. - Rdp host preferences: correctly load sound preferences. (kde#493602) - Avoid crash when the main window is outside of any screen. * Backport upstream commits: - Fix invisible mouse cursor after toggling off "view only". [8b8dce4c] - Fix remote modifier keys state not synced with local state. [1b11b2e3] (kde#349813) The complete debdiff is absolutely huge with translation fixes so I’m attaching a simple diff trimmed of these for your convenience : diff -ur --exclude=po krdc-25.04.[23] [ Tests ] - Successfully tested remote connections with VNC and RDP protocols. [ Risks ] Only contains the latest upstream point release for the 25.04 Gear branch and backported commits. 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 krdc/4:25.04.3-1Attachment: krdc_25.04.2-1.dsc_krdc_25.04.3-1.dsc.debdiff.gz
Description: application/gzipdiff -ur '--exclude=po' krdc-25.04.2/CMakeLists.txt krdc-25.04.3/CMakeLists.txt --- krdc-25.04.2/CMakeLists.txt 2025-06-02 23:26:25.000000000 +0200 +++ krdc-25.04.3/CMakeLists.txt 2025-07-26 13:37:39.000000000 +0200 @@ -2,7 +2,7 @@ set (RELEASE_SERVICE_VERSION_MAJOR "25") set (RELEASE_SERVICE_VERSION_MINOR "04") -set (RELEASE_SERVICE_VERSION_MICRO "2") +set (RELEASE_SERVICE_VERSION_MICRO "3") set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}") @@ -51,6 +51,7 @@ I18n KIO Crash + GuiAddons ) find_package(KF6StatusNotifierItem ${KF_MIN_VERSION} REQUIRED) @@ -221,7 +222,9 @@ endif() install(TARGETS krdc ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) -install(PROGRAMS org.kde.krdc.desktop DESTINATION ${KDE_INSTALL_APPDIR}) +configure_file(org.kde.krdc.desktop.cmake ${CMAKE_CURRENT_BINARY_DIR}/org.kde.krdc.desktop @ONLY) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.kde.krdc.desktop DESTINATION ${KDE_INSTALL_APPDIR}) install(FILES org.kde.krdc.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) ecm_install_icons( diff -ur '--exclude=po' krdc-25.04.2/core/CMakeLists.txt krdc-25.04.3/core/CMakeLists.txt --- krdc-25.04.2/core/CMakeLists.txt 2025-06-02 23:26:25.000000000 +0200 +++ krdc-25.04.3/core/CMakeLists.txt 2025-07-26 13:37:39.000000000 +0200 @@ -31,6 +31,7 @@ KF6::I18n KF6::ConfigGui KF6::Completion + KF6::GuiAddons Qt::Gui Qt::Widgets) diff -ur '--exclude=po' krdc-25.04.2/core/remoteview.cpp krdc-25.04.3/core/remoteview.cpp --- krdc-25.04.2/core/remoteview.cpp 2025-06-02 23:26:25.000000000 +0200 +++ krdc-25.04.3/core/remoteview.cpp 2025-07-26 13:37:39.000000000 +0200 @@ -9,6 +9,9 @@ #include "remoteview.h" #include "krdc_debug.h" +#ifndef QTONLY +#include <KModifierKeyInfo> +#endif #include <QApplication> #include <QBitmap> #include <QEvent> @@ -45,6 +48,10 @@ m_clipboard = QApplication::clipboard(); connect(m_clipboard, &QClipboard::dataChanged, this, &RemoteView::localClipboardChanged); +#ifndef QTONLY + m_modifierKeyInfo = new KModifierKeyInfo(this); +#endif + #ifdef HAVE_WAYLAND if (qGuiApp->platformName() == QLatin1String("wayland")) { m_inhibition.reset(new WaylandInhibition(window()->windowHandle())); @@ -159,10 +166,11 @@ { m_viewOnly = viewOnly; - if (viewOnly) - setCursor(Qt::ArrowCursor); - else - setCursor(m_localCursorState == CursorOn ? localDefaultCursor() : Qt::BlankCursor); + if (viewOnly) { + setCursor(localDefaultCursor()); + } else { + showLocalCursor(m_localCursorState); + } } bool RemoteView::grabAllKeys() @@ -450,4 +458,31 @@ QWidget::releaseKeyboard(); } +bool RemoteView::isCapsLockEnabled() +{ +#ifdef QTONLY + return false; +#else + return m_modifierKeyInfo->isKeyLatched(Qt::Key_CapsLock) || m_modifierKeyInfo->isKeyLocked(Qt::Key_CapsLock); +#endif +} + +bool RemoteView::isNumLockEnabled() +{ +#ifdef QTONLY + return false; +#else + return m_modifierKeyInfo->isKeyLatched(Qt::Key_NumLock) || m_modifierKeyInfo->isKeyLocked(Qt::Key_NumLock); +#endif +} + +bool RemoteView::isScrollLockEnabled() +{ +#ifdef QTONLY + return false; +#else + return m_modifierKeyInfo->isKeyLatched(Qt::Key_ScrollLock) || m_modifierKeyInfo->isKeyLocked(Qt::Key_ScrollLock); +#endif +} + #include "moc_remoteview.cpp" diff -ur '--exclude=po' krdc-25.04.2/core/remoteview.h krdc-25.04.3/core/remoteview.h --- krdc-25.04.2/core/remoteview.h 2025-06-02 23:26:25.000000000 +0200 +++ krdc-25.04.3/core/remoteview.h 2025-07-26 13:37:39.000000000 +0200 @@ -31,6 +31,7 @@ }; class HostPreferences; +class KModifierKeyInfo; /** * Generic widget that displays a remote framebuffer. @@ -248,6 +249,19 @@ */ virtual QPixmap takeScreenshot(); + /** + * @return status of the caps lock key + */ + bool isCapsLockEnabled(); + /** + * @return status of the num lock key + */ + bool isNumLockEnabled(); + /** + * @return status of the scroll lock key + */ + bool isScrollLockEnabled(); + #ifndef QTONLY /** * Returns the current host preferences of this view. @@ -438,6 +452,8 @@ qreal m_factor; QClipboard *m_clipboard; QMap<int, ModifierKey> m_modifiers; + KModifierKeyInfo *m_modifierKeyInfo; + #ifdef HAVE_WAYLAND std::unique_ptr<ShortcutInhibition> m_inhibition; #endif diff -ur '--exclude=po' krdc-25.04.2/debian/changelog krdc-25.04.3/debian/changelog --- krdc-25.04.2/debian/changelog 2025-06-09 22:43:43.000000000 +0200 +++ krdc-25.04.3/debian/changelog 2025-07-24 09:00:16.000000000 +0200 @@ -1,3 +1,20 @@ +krdc (4:25.04.3-1) unstable; urgency=medium + + [ Aurélien COUDERC ] + * New upstream release (25.04.3). + - Show system tray icon at startup if enabled in settings. (kde#505744) + - VncView: focus the view on successful connection. (kde#503115) + - Rdp: rework handling for some error messages. + - Let Mainwindow publish error messages from views. + - Rdp host preferences: correctly load sound preferences. (kde#493602) + - Avoid crash when the main window is outside of any screen. + * Backport upstream commits: + - Fix invisible mouse cursor after toggling off "view only". [8b8dce4c] + - Fix remote modifier keys state not synced with local state. [1b11b2e3] + (kde#349813) + + -- Aurélien COUDERC <coucouf@debian.org> Thu, 24 Jul 2025 09:00:16 +0200 + krdc (4:25.04.2-1) unstable; urgency=medium [ Aurélien COUDERC ] Seulement dans krdc-25.04.3/debian: patches diff -ur '--exclude=po' krdc-25.04.2/mainwindow.cpp krdc-25.04.3/mainwindow.cpp --- krdc-25.04.2/mainwindow.cpp 2025-06-02 23:26:25.000000000 +0200 +++ krdc-25.04.3/mainwindow.cpp 2025-06-30 18:39:30.000000000 +0200 @@ -115,6 +115,10 @@ if (Settings::rememberSessions()) // give some time to create and show the window first QTimer::singleShot(100, this, SLOT(restoreOpenSessions())); + + if (Settings::systemTrayIcon()) { + m_systemTrayIcon = new SystemTrayIcon(this); + } } MainWindow::~MainWindow() @@ -305,6 +309,7 @@ connect(view, SIGNAL(framebufferSizeChanged(int, int)), this, SLOT(resizeTabWidget(int, int))); connect(view, SIGNAL(statusChanged(RemoteView::RemoteStatus)), this, SLOT(statusChanged(RemoteView::RemoteStatus))); connect(view, SIGNAL(disconnected()), this, SLOT(disconnectHost())); + connect(view, SIGNAL(errorMessage(const QString &, const QString &)), this, SLOT(handleViewError(const QString &, const QString &))); QScrollArea *scrollArea = createScrollArea(m_tabWidget, view); @@ -372,6 +377,9 @@ const QSize viewSize = QSize(w, h); QScreen *currentScreen = QGuiApplication::screenAt(geometry().center()); + if (!currentScreen) { + return; + } if (Settings::fullscreenOnConnect()) { const QSize screenSize = currentScreen->availableGeometry().size(); @@ -1224,3 +1232,8 @@ m_remoteDesktopsDockWidget->setWidget(remoteDesktopsDockLayoutWidget); addDockWidget(Qt::LeftDockWidgetArea, m_remoteDesktopsDockWidget); } + +void MainWindow::handleViewError(const QString &title, const QString &message) +{ + KMessageBox::error(this, message, title); +} diff -ur '--exclude=po' krdc-25.04.2/mainwindow.h krdc-25.04.3/mainwindow.h --- krdc-25.04.2/mainwindow.h 2025-06-02 23:26:25.000000000 +0200 +++ krdc-25.04.3/mainwindow.h 2025-06-30 18:39:30.000000000 +0200 @@ -82,6 +82,7 @@ void createDockWidget(); void showConnectionContextMenu(const QPoint &pos); void saveConnectionListSort(const int logicalindex, const Qt::SortOrder order); + void handleViewError(const QString &title, const QString &message); private: void setupActions(); diff -ur '--exclude=po' krdc-25.04.2/org.kde.krdc.appdata.xml krdc-25.04.3/org.kde.krdc.appdata.xml --- krdc-25.04.2/org.kde.krdc.appdata.xml 2025-06-02 23:26:25.000000000 +0200 +++ krdc-25.04.3/org.kde.krdc.appdata.xml 2025-06-30 18:39:30.000000000 +0200 @@ -149,6 +149,7 @@ <mediatype>application/x-krdc</mediatype> </provides> <releases> + <release version="25.04.3" date="2025-07-03"/> <release version="25.04.2" date="2025-06-05"/> <release version="25.04.1" date="2025-05-08"/> <release version="25.04.0" date="2025-04-17"/> Seulement dans krdc-25.04.2: org.kde.krdc.desktop Seulement dans krdc-25.04.3: org.kde.krdc.desktop.cmake diff -ur '--exclude=po' krdc-25.04.2/.pc/applied-patches krdc-25.04.3/.pc/applied-patches --- krdc-25.04.2/.pc/applied-patches 2025-07-26 13:37:39.502144586 +0200 +++ krdc-25.04.3/.pc/applied-patches 2025-07-26 13:37:39.646141480 +0200 @@ -0,0 +1,2 @@ +upstream_8b8dce4c_Fix-invisible-mouse-cursor-after-toggling-off-view-only-.patch +upstream_1b11b2e3_Use-KModifierKeyInfo-to-detect-lock-modifiers-status.patch Seulement dans krdc-25.04.3/.pc: upstream_1b11b2e3_Use-KModifierKeyInfo-to-detect-lock-modifiers-status.patch Seulement dans krdc-25.04.3/.pc: upstream_8b8dce4c_Fix-invisible-mouse-cursor-after-toggling-off-view-only-.patch diff -ur '--exclude=po' krdc-25.04.2/rdp/rdphostpreferences.cpp krdc-25.04.3/rdp/rdphostpreferences.cpp --- krdc-25.04.2/rdp/rdphostpreferences.cpp 2025-06-02 23:26:25.000000000 +0200 +++ krdc-25.04.3/rdp/rdphostpreferences.cpp 2025-06-30 18:39:30.000000000 +0200 @@ -137,6 +137,7 @@ rdpUi.kcfg_DesktopScaleFactorCustom->setValue(desktopScaleFactorCustom()); rdpUi.kcfg_DeviceScaleFactor->setCurrentIndex(int(deviceScaleFactor())); rdpUi.kcfg_KeyboardLayout->setCurrentIndex(keymap2int(keyboardLayout())); + rdpUi.kcfg_Sound->setCurrentIndex(int(sound())); rdpUi.kcfg_ShareMedia->setText(shareMedia()); rdpUi.kcfg_TlsSecLevel->setCurrentIndex(int(tlsSecLevel())); rdpUi.kcfg_ProxyProtocol->setCurrentIndex(int(proxyProtocol())); diff -ur '--exclude=po' krdc-25.04.2/rdp/rdpsession.cpp krdc-25.04.3/rdp/rdpsession.cpp --- krdc-25.04.2/rdp/rdpsession.cpp 2025-06-02 23:26:25.000000000 +0200 +++ krdc-25.04.3/rdp/rdpsession.cpp 2025-07-26 13:37:39.000000000 +0200 @@ -984,6 +984,10 @@ switch (event->type()) { case QEvent::KeyPress: case QEvent::KeyRelease: { + if (m_needKeyStateSync) { + m_needKeyStateSync = false; + syncKeyState(); + } auto keyEvent = static_cast<QKeyEvent *>(event); const DWORD vc = GetVirtualKeyCodeFromKeycode(keyEvent->nativeScanCode(), WINPR_KEYCODE_TYPE_XKB); const DWORD code = GetVirtualScanCodeFromVirtualKeyCode(vc, WINPR_KBD_TYPE_IBM_ENHANCED); @@ -1087,6 +1091,26 @@ return QObject::event(event); } +bool RdpSession::syncKeyState() +{ + auto input = m_context.rdp->input; + if (!input) { + return false; + } + + UINT16 flags = 0; + + if (m_view->isCapsLockEnabled()) + flags |= KBD_SYNC_CAPS_LOCK; + if (m_view->isNumLockEnabled()) + flags |= KBD_SYNC_NUM_LOCK; + if (m_view->isScrollLockEnabled()) + flags |= KBD_SYNC_SCROLL_LOCK; + + qCDebug(KRDC) << "Sync key state: " << flags; + return freerdp_input_send_synchronize_event(input, flags); +} + void RdpSession::setState(RdpSession::State newState) { if (newState == m_state) { diff -ur '--exclude=po' krdc-25.04.2/rdp/rdpsession.h krdc-25.04.3/rdp/rdpsession.h --- krdc-25.04.2/rdp/rdpsession.h 2025-06-02 23:26:25.000000000 +0200 +++ krdc-25.04.3/rdp/rdpsession.h 2025-07-26 13:37:39.000000000 +0200 @@ -103,6 +103,7 @@ void stop(); bool sendEvent(QEvent *event, QWidget *source); + bool syncKeyState(); void initializeClipboard(RdpContext *krdp, CliprdrClientContext *cliprdr); void initializeDisplay(RdpContext *krdp, DispClientContext *disp); @@ -201,6 +202,7 @@ int m_port = -1; QSize m_size; bool m_firstPasswordTry; + bool m_needKeyStateSync = true; std::thread m_thread; diff -ur '--exclude=po' krdc-25.04.2/rdp/rdpview.cpp krdc-25.04.3/rdp/rdpview.cpp --- krdc-25.04.2/rdp/rdpview.cpp 2025-06-02 23:26:25.000000000 +0200 +++ krdc-25.04.3/rdp/rdpview.cpp 2025-07-26 13:37:39.000000000 +0200 @@ -11,7 +11,6 @@ #include "krdc_debug.h" #include "rdphostpreferences.h" -#include <KMessageBox> #include <KMessageDialog> #include <KPasswordDialog> #include <KShell> @@ -289,10 +288,9 @@ QString title; QString message; - if (m_quitting) - return; - switch (error) { + case FREERDP_ERROR_BASE: + return; // no error, no need to show an error message case FREERDP_ERROR_CONNECT_CANCELLED: return; // user canceled connection, no need to show an error message case FREERDP_ERROR_AUTHENTICATION_FAILED: @@ -318,8 +316,15 @@ message = i18nc("@label", "Unable to login with the provided password. Please contact your system administrator to change it."); break; case FREERDP_ERROR_CONNECT_FAILED: - title = i18nc("@title:dialog", "Connection Lost"); - message = i18nc("@label", "Lost connection to the server."); + case FREERDP_ERROR_TLS_CONNECT_FAILED: + case FREERDP_ERROR_CONNECT_TRANSPORT_FAILED: + if (status() == Connected) { + title = i18nc("@title:dialog", "Connection Lost"); + message = i18nc("@label", "Lost connection to the server."); + } else { + title = i18nc("@title:dialog", "Could not Connect"); + message = i18nc("@label", "Could not connect to the server."); + } break; case FREERDP_ERROR_DNS_ERROR: case FREERDP_ERROR_DNS_NAME_NOT_FOUND: @@ -331,11 +336,6 @@ message = i18nc("@label", "The server refused the connection request."); break; - case FREERDP_ERROR_TLS_CONNECT_FAILED: - case FREERDP_ERROR_CONNECT_TRANSPORT_FAILED: - title = i18nc("@title:dialog", "Could not Connect"); - message = i18nc("@label", "Could not connect to the server."); - break; case FREERDP_ERROR_RPC_INITIATED_DISCONNECT: case FREERDP_ERROR_RPC_INITIATED_LOGOFF: case FREERDP_ERROR_RPC_INITIATED_DISCONNECT_BY_USER: @@ -344,11 +344,7 @@ return; case FREERDP_ERROR_DISCONNECTED_BY_OTHER_CONNECTION: title = i18nc("@title:dialog", "Connection Closed"); - message = QStringLiteral("Diconnected by other sesion"); - break; - case FREERDP_ERROR_BASE: - title = i18nc("@title:dialog", "Connection Closed"); - message = i18nc("@label", "The connection to the server was closed."); + message = QStringLiteral("Disconnected by other session"); break; default: qCDebug(KRDC) << "Unhandled error" << error; @@ -359,12 +355,12 @@ qCDebug(KRDC) << "error message" << title << message; // TODO offer reconnect if approriate - KMessageBox::error(this, message, title); + Q_EMIT errorMessage(title, message); } void RdpView::onLogonError(const QString &error) { - KMessageBox::error(this, error, i18nc("@title:dialog", "Logon Error")); + Q_EMIT errorMessage(i18nc("@title:dialog", "Logon Error"), error); } HostPreferences *RdpView::hostPreferences() @@ -507,4 +503,13 @@ if (m_session) { m_session->sendClipboard(data); } -} \ Pas de fin de ligne à la fin du fichier +} + +void RdpView::focusInEvent(QFocusEvent *event) +{ + if (m_session) { + m_session->syncKeyState(); + } + + RemoteView::focusInEvent(event); +} diff -ur '--exclude=po' krdc-25.04.2/rdp/rdpview.h krdc-25.04.3/rdp/rdpview.h --- krdc-25.04.2/rdp/rdpview.h 2025-06-02 23:26:25.000000000 +0200 +++ krdc-25.04.3/rdp/rdpview.h 2025-07-26 13:37:39.000000000 +0200 @@ -74,6 +74,7 @@ void handleWheelEvent(QWheelEvent *event) override; void handleMouseEvent(QMouseEvent *event) override; void handleLocalClipboardChanged(const QMimeData *data) override; + void focusInEvent(QFocusEvent *event) override; private: void onRectangleUpdated(const QRect &rect); diff -ur '--exclude=po' krdc-25.04.2/vnc/vncview.cpp krdc-25.04.3/vnc/vncview.cpp --- krdc-25.04.2/vnc/vncview.cpp 2025-06-02 23:26:25.000000000 +0200 +++ krdc-25.04.3/vnc/vncview.cpp 2025-06-30 18:39:30.000000000 +0200 @@ -17,14 +17,11 @@ #ifdef QTONLY #include <QInputDialog> -#include <QMessageBox> -#define KMessageBox QMessageBox #define error(parent, message, caption) critical(parent, caption, message) #else #include "settings.h" #include <KActionCollection> #include <KMainWindow> -#include <KMessageBox> #include <KPasswordDialog> #include <KXMLGUIClient> #endif @@ -380,8 +377,6 @@ startQuitting(); - KMessageBox::error(this, message, i18n("VNC failure")); - Q_EMIT errorMessage(i18n("VNC failure"), message); } @@ -391,8 +386,6 @@ startQuitting(); - KMessageBox::error(this, message, i18n("SSH Tunnel failure")); - Q_EMIT errorMessage(i18n("SSH Tunnel failure"), message); } @@ -419,6 +412,7 @@ setCursor(((m_localCursorState == CursorOn) || m_forceLocalCursor) ? localDefaultCursor() : Qt::BlankCursor); setFocusPolicy(Qt::WheelFocus); + setFocus(); setStatus(Connected); Q_EMIT connected();
--- End Message ---
--- Begin Message ---
- To: 1109928-done@bugs.debian.org
- Subject: unblock krdc
- From: Ivo De Decker <ivodd@respighi.debian.org>
- Date: Sat, 26 Jul 2025 12:39:18 +0000
- Message-id: <E1ufeBK-00Fywg-07@respighi.debian.org>
Unblocked krdc.
--- End Message ---