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

Bug#1109928: marked as done (unblock: krdc/4:25.04.3-1)



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

Attachment: krdc_25.04.2-1.dsc_krdc_25.04.3-1.dsc.debdiff.gz
Description: application/gzip

diff -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 ---
Unblocked krdc.

--- End Message ---

Reply to: