diff --git a/composite.cpp b/composite.cpp --- a/composite.cpp +++ b/composite.cpp @@ -252,7 +252,7 @@ cm_selection->owning = false; cm_selection->release(); } - if (kwinApp()->requiresCompositing()) { + if (kwinApp()->platform()->requiresCompositing()) { qCCritical(KWIN_CORE) << "The used windowing system requires compositing"; qCCritical(KWIN_CORE) << "We are going to quit KWin now as it is broken"; qApp->quit(); @@ -268,7 +268,7 @@ cm_selection->owning = false; cm_selection->release(); } - if (kwinApp()->requiresCompositing()) { + if (kwinApp()->platform()->requiresCompositing()) { qCCritical(KWIN_CORE) << "The used windowing system requires compositing"; qCCritical(KWIN_CORE) << "We are going to quit KWin now as it is broken"; qApp->quit(); @@ -497,7 +497,7 @@ // for the shortcut void Compositor::slotToggleCompositing() { - if (kwinApp()->requiresCompositing()) { + if (kwinApp()->platform()->requiresCompositing()) { // we are not allowed to turn on/off compositing return; } @@ -515,7 +515,7 @@ void Compositor::updateCompositeBlocking(Client *c) { - if (kwinApp()->requiresCompositing()) { + if (kwinApp()->platform()->requiresCompositing()) { return; } if (c) { // if c == 0 we just check if we can resume @@ -540,7 +540,7 @@ void Compositor::suspend(Compositor::SuspendReason reason) { - if (kwinApp()->requiresCompositing()) { + if (kwinApp()->platform()->requiresCompositing()) { return; } Q_ASSERT(reason != NoReasonSuspend); diff --git a/main.h b/main.h --- a/main.h +++ b/main.h @@ -96,7 +96,6 @@ OperationMode operationMode() const; void setOperationMode(OperationMode mode); bool shouldUseWaylandForCompositing() const; - bool requiresCompositing() const; void setupTranslator(); void setupCommandLine(QCommandLineParser *parser); diff --git a/main.cpp b/main.cpp --- a/main.cpp +++ b/main.cpp @@ -123,11 +123,6 @@ return m_operationMode == OperationModeWaylandAndX11 || m_operationMode == OperationModeXwayland; } -bool Application::requiresCompositing() const -{ - return shouldUseWaylandForCompositing(); -} - void Application::start() { setQuitOnLastWindowClosed(false); diff --git a/options.h b/options.h --- a/options.h +++ b/options.h @@ -542,20 +542,16 @@ m_compositingMode = mode; } // Separate to mode so the user can toggle - bool isUseCompositing() const { - return m_useCompositing || kwinApp()->requiresCompositing(); - } + bool isUseCompositing() const; bool isCompositingInitialized() const { return m_compositingInitialized; } // General preferences HiddenPreviews hiddenPreviews() const { return m_hiddenPreviews; } - bool isUnredirectFullscreen() const { - return m_unredirectFullscreen && !kwinApp()->requiresCompositing(); - } + bool isUnredirectFullscreen() const; // OpenGL // 0 = no, 1 = yes when transformed, // 2 = try trilinear when transformed; else 1, diff --git a/options.cpp b/options.cpp --- a/options.cpp +++ b/options.cpp @@ -23,6 +23,7 @@ #include "options.h" #include "config-kwin.h" #include "utils.h" +#include "platform.h" #ifndef KCMRULES @@ -1157,4 +1158,15 @@ return m_modifierOnlyShortcuts.value(mod); } +bool Options::isUseCompositing() const +{ + return m_useCompositing || kwinApp()->platform()->requiresCompositing(); +} + + +bool Options::isUnredirectFullscreen() const +{ + return m_unredirectFullscreen && !kwinApp()->platform()->requiresCompositing(); +} + } // namespace diff --git a/platform.h b/platform.h --- a/platform.h +++ b/platform.h @@ -94,6 +94,13 @@ */ virtual void configurationChangeRequested(KWayland::Server::OutputConfigurationInterface *config); + /** + * Whether the Platform requires compositing for rendering. + * Default implementation returns @c true. If the implementing Platform allows to be used + * without compositing (e.g. rendering is done by the windowing system), re-implement this method. + **/ + virtual bool requiresCompositing() const; + bool usesSoftwareCursor() const { return m_softWareCursor; } diff --git a/platform.cpp b/platform.cpp --- a/platform.cpp +++ b/platform.cpp @@ -281,4 +281,9 @@ return QVector({QRect(QPoint(0, 0), screenSize())}); } +bool Platform::requiresCompositing() const +{ + return true; +} + } diff --git a/plugins/platforms/x11/standalone/x11_platform.h b/plugins/platforms/x11/standalone/x11_platform.h --- a/plugins/platforms/x11/standalone/x11_platform.h +++ b/plugins/platforms/x11/standalone/x11_platform.h @@ -41,6 +41,7 @@ Screens *createScreens(QObject *parent = nullptr) override; OpenGLBackend *createOpenGLBackend() override; Edge *createScreenEdge(ScreenEdges *parent) override; + bool requiresCompositing() const override; }; diff --git a/plugins/platforms/x11/standalone/x11_platform.cpp b/plugins/platforms/x11/standalone/x11_platform.cpp --- a/plugins/platforms/x11/standalone/x11_platform.cpp +++ b/plugins/platforms/x11/standalone/x11_platform.cpp @@ -74,4 +74,10 @@ return new WindowBasedEdge(edges); } +bool X11StandalonePlatform::requiresCompositing() const +{ + return false; +} + + }