diff --git a/src/remotedesktop.cpp b/src/remotedesktop.cpp --- a/src/remotedesktop.cpp +++ b/src/remotedesktop.cpp @@ -268,6 +268,20 @@ int keycode, uint state) { + qCDebug(XdgDesktopPortalKdeRemoteDesktop) << "NotifyKeyboardKeycode called with parameters:"; + qCDebug(XdgDesktopPortalKdeRemoteDesktop) << " session_handle: " << session_handle.path(); + qCDebug(XdgDesktopPortalKdeRemoteDesktop) << " options: " << options; + qCDebug(XdgDesktopPortalKdeRemoteDesktop) << " keycode: " << keycode; + qCDebug(XdgDesktopPortalKdeRemoteDesktop) << " state: " << state; + + RemoteDesktopSession *session = qobject_cast(Session::getSession(session_handle.path())); + + if (!session) { + qCWarning(XdgDesktopPortalKdeRemoteDesktop) << "Tried to call NotifyKeyboardKeycode on non-existing session " << session_handle.path(); + return; + } + + WaylandIntegration::requestKeyboardKeycode(keycode, state != 0); } void RemoteDesktopPortal::NotifyTouchDown(const QDBusObjectPath &session_handle, diff --git a/src/waylandintegration.h b/src/waylandintegration.h --- a/src/waylandintegration.h +++ b/src/waylandintegration.h @@ -94,6 +94,8 @@ void requestPointerMotionAbsolute(const QPointF &pos); void requestPointerAxisDiscrete(Qt::Orientation axis, qreal delta); + void requestKeyboardKeycode(int keycode, bool state); + QMap screens(); QVariant streams(); diff --git a/src/waylandintegration.cpp b/src/waylandintegration.cpp --- a/src/waylandintegration.cpp +++ b/src/waylandintegration.cpp @@ -111,6 +111,11 @@ globalWaylandIntegration->requestPointerAxisDiscrete(axis, delta); } +void WaylandIntegration::requestKeyboardKeycode(int keycode, bool state) +{ + globalWaylandIntegration->requestKeyboardKeycode(keycode, state); +} + QMap WaylandIntegration::screens() { return globalWaylandIntegration->screens(); @@ -375,6 +380,16 @@ } } +void WaylandIntegration::WaylandIntegrationPrivate::requestKeyboardKeycode(int keycode, bool state) +{ + if (m_streamInput && m_fakeInput) { + if (state) + m_fakeInput->requestKeyboardKeyPress(keycode); + else + m_fakeInput->requestKeyboardKeyRelease(keycode); + } +} + QMap WaylandIntegration::WaylandIntegrationPrivate::screens() { return m_outputMap; diff --git a/src/waylandintegration_p.h b/src/waylandintegration_p.h --- a/src/waylandintegration_p.h +++ b/src/waylandintegration_p.h @@ -79,6 +79,7 @@ void requestPointerMotion(const QSizeF &delta); void requestPointerMotionAbsolute(const QPointF &pos); void requestPointerAxisDiscrete(Qt::Orientation axis, qreal delta); + void requestKeyboardKeycode(int keycode, bool state); QMap screens(); QVariant streams();