diff --git a/src/remotedesktop.cpp b/src/remotedesktop.cpp --- a/src/remotedesktop.cpp +++ b/src/remotedesktop.cpp @@ -140,6 +140,10 @@ } results.insert(QStringLiteral("streams"), streams); + } else { + qCWarning(XdgDesktopPortalKdeRemoteDesktop()) << "Only stream input"; + WaylandIntegration::startStreamingInput(); + WaylandIntegration::authenticate(); } results.insert(QStringLiteral("devices"), QVariant::fromValue(remoteDesktopDialog->deviceTypes())); diff --git a/src/waylandintegration.h b/src/waylandintegration.h --- a/src/waylandintegration.h +++ b/src/waylandintegration.h @@ -83,6 +83,7 @@ bool isEGLInitialized(); + void startStreamingInput(); bool startStreaming(quint32 outputName); void stopStreaming(); diff --git a/src/waylandintegration.cpp b/src/waylandintegration.cpp --- a/src/waylandintegration.cpp +++ b/src/waylandintegration.cpp @@ -66,6 +66,11 @@ return globalWaylandIntegration->isEGLInitialized(); } +void WaylandIntegration::startStreamingInput() +{ + globalWaylandIntegration->startStreamingInput(); +} + bool WaylandIntegration::startStreaming(quint32 outputName) { return globalWaylandIntegration->startStreaming(outputName); @@ -234,6 +239,11 @@ m_bindOutputs << output; } +void WaylandIntegration::WaylandIntegrationPrivate::startStreamingInput() +{ + m_streamInput = true; +} + bool WaylandIntegration::WaylandIntegrationPrivate::startStreaming(quint32 outputName) { WaylandOutput output = m_outputMap.value(outputName); @@ -244,6 +254,7 @@ connect(m_stream, &ScreenCastStream::startStreaming, this, [this, output] { m_streamingEnabled = true; + startStreamingInput(); bindOutput(output.waylandOutputName(), output.waylandOutputVersion()); }); @@ -300,6 +311,7 @@ void WaylandIntegration::WaylandIntegrationPrivate::stopStreaming() { + m_streamInput = false; if (m_streamingEnabled) { m_streamingEnabled = false; @@ -320,35 +332,35 @@ void WaylandIntegration::WaylandIntegrationPrivate::requestPointerButtonPress(quint32 linuxButton) { - if (m_streamingEnabled && m_fakeInput) { + if (m_streamInput && m_fakeInput) { m_fakeInput->requestPointerButtonPress(linuxButton); } } void WaylandIntegration::WaylandIntegrationPrivate::requestPointerButtonRelease(quint32 linuxButton) { - if (m_streamingEnabled && m_fakeInput) { + if (m_streamInput && m_fakeInput) { m_fakeInput->requestPointerButtonRelease(linuxButton); } } void WaylandIntegration::WaylandIntegrationPrivate::requestPointerMotion(const QSizeF &delta) { - if (m_streamingEnabled && m_fakeInput) { + if (m_streamInput && m_fakeInput) { m_fakeInput->requestPointerMove(delta); } } void WaylandIntegration::WaylandIntegrationPrivate::requestPointerMotionAbsolute(const QPointF &pos) { - if (m_streamingEnabled && m_fakeInput) { + if (m_streamInput && m_fakeInput) { m_fakeInput->requestPointerMoveAbsolute(pos + m_streamedScreenPosition); } } void WaylandIntegration::WaylandIntegrationPrivate::requestPointerAxisDiscrete(Qt::Orientation axis, qreal delta) { - if (m_streamingEnabled && m_fakeInput) { + if (m_streamInput && m_fakeInput) { m_fakeInput->requestPointerAxis(axis, delta); } } diff --git a/src/waylandintegration_p.h b/src/waylandintegration_p.h --- a/src/waylandintegration_p.h +++ b/src/waylandintegration_p.h @@ -69,6 +69,7 @@ bool isEGLInitialized() const; void bindOutput(int outputName, int outputVersion); + void startStreamingInput(); bool startStreaming(quint32 outputName); void stopStreaming(); @@ -90,6 +91,7 @@ private: bool m_eglInitialized; bool m_streamingEnabled; + bool m_streamInput = false; bool m_registryInitialized; bool m_waylandAuthenticationRequested;