Git commit c45942a70c6ab90a0260164b69f5ed8876e63c3e by Martin Gr=C3=A4=C3= =9Flin. Committed on 17/05/2016 at 11:59. Pushed by graesslin into branch 'master'. Move requiresCompositing from Application to Platform Summary: This change reduces the windowing system specific code pathes. Instead of checking whether we are on X11 or Wayland to decide whether compositing is required, we just ask the Platform. The default is true, only x11 standalone allows to not require compositing. Reviewers: #plasma Subscribers: plasma-devel Projects: #plasma Differential Revision: https://phabricator.kde.org/D1575 M +5 -5 composite.cpp M +0 -5 main.cpp M +0 -1 main.h M +12 -0 options.cpp M +2 -6 options.h M +5 -0 platform.cpp M +7 -0 platform.h M +6 -0 plugins/platforms/x11/standalone/x11_platform.cpp M +1 -0 plugins/platforms/x11/standalone/x11_platform.h http://commits.kde.org/kwin/c45942a70c6ab90a0260164b69f5ed8876e63c3e diff --git a/composite.cpp b/composite.cpp index c3df6b5..7b0a166 100644 --- a/composite.cpp +++ b/composite.cpp @@ -252,7 +252,7 @@ void Compositor::slotCompositingOptionsInitialized() cm_selection->owning =3D false; cm_selection->release(); } - if (kwinApp()->requiresCompositing()) { + if (kwinApp()->platform()->requiresCompositing()) { qCCritical(KWIN_CORE) << "The used windowing system requires c= ompositing"; qCCritical(KWIN_CORE) << "We are going to quit KWin now as it = is broken"; qApp->quit(); @@ -268,7 +268,7 @@ void Compositor::slotCompositingOptionsInitialized() cm_selection->owning =3D false; cm_selection->release(); } - if (kwinApp()->requiresCompositing()) { + if (kwinApp()->platform()->requiresCompositing()) { qCCritical(KWIN_CORE) << "The used windowing system requires c= ompositing"; qCCritical(KWIN_CORE) << "We are going to quit KWin now as it = is broken"; qApp->quit(); @@ -497,7 +497,7 @@ void Compositor::slotReinitialize() // 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() = void Compositor::updateCompositeBlocking(Client *c) { - if (kwinApp()->requiresCompositing()) { + if (kwinApp()->platform()->requiresCompositing()) { return; } if (c) { // if c =3D=3D 0 we just check if we can resume @@ -540,7 +540,7 @@ void Compositor::updateCompositeBlocking(Client *c) = void Compositor::suspend(Compositor::SuspendReason reason) { - if (kwinApp()->requiresCompositing()) { + if (kwinApp()->platform()->requiresCompositing()) { return; } Q_ASSERT(reason !=3D NoReasonSuspend); diff --git a/main.cpp b/main.cpp index d99aedb..67cfc8e 100644 --- a/main.cpp +++ b/main.cpp @@ -123,11 +123,6 @@ bool Application::shouldUseWaylandForCompositing() con= st return m_operationMode =3D=3D OperationModeWaylandAndX11 || m_operatio= nMode =3D=3D OperationModeXwayland; } = -bool Application::requiresCompositing() const -{ - return shouldUseWaylandForCompositing(); -} - void Application::start() { setQuitOnLastWindowClosed(false); diff --git a/main.h b/main.h index a0c6e76..a7dd47d 100644 --- a/main.h +++ b/main.h @@ -96,7 +96,6 @@ public: OperationMode operationMode() const; void setOperationMode(OperationMode mode); bool shouldUseWaylandForCompositing() const; - bool requiresCompositing() const; = void setupTranslator(); void setupCommandLine(QCommandLineParser *parser); diff --git a/options.cpp b/options.cpp index 0a59508..9054cff 100644 --- a/options.cpp +++ b/options.cpp @@ -23,6 +23,7 @@ along with this program. If not, see . #include "options.h" #include "config-kwin.h" #include "utils.h" +#include "platform.h" = #ifndef KCMRULES = @@ -1157,4 +1158,15 @@ QStringList Options::modifierOnlyDBusShortcut(Qt::Ke= yboardModifier mod) const return m_modifierOnlyShortcuts.value(mod); } = +bool Options::isUseCompositing() const +{ + return m_useCompositing || kwinApp()->platform()->requiresCompositing(= ); +} + + +bool Options::isUnredirectFullscreen() const +{ + return m_unredirectFullscreen && !kwinApp()->platform()->requiresCompo= siting(); +} + } // namespace diff --git a/options.h b/options.h index 4c09b9e..30c3899 100644 --- a/options.h +++ b/options.h @@ -542,9 +542,7 @@ public: m_compositingMode =3D 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; } @@ -553,9 +551,7 @@ public: HiddenPreviews hiddenPreviews() const { return m_hiddenPreviews; } - bool isUnredirectFullscreen() const { - return m_unredirectFullscreen && !kwinApp()->requiresCompositing(); - } + bool isUnredirectFullscreen() const; // OpenGL // 0 =3D no, 1 =3D yes when transformed, // 2 =3D try trilinear when transformed; else 1, diff --git a/platform.cpp b/platform.cpp index 8a7e255..1273df8 100644 --- a/platform.cpp +++ b/platform.cpp @@ -281,4 +281,9 @@ QVector Platform::screenGeometries() const return QVector({QRect(QPoint(0, 0), screenSize())}); } = +bool Platform::requiresCompositing() const +{ + return true; +} + } diff --git a/platform.h b/platform.h index f7c2a52..0368742 100644 --- a/platform.h +++ b/platform.h @@ -94,6 +94,13 @@ public: */ virtual void configurationChangeRequested(KWayland::Server::OutputConf= igurationInterface *config); = + /** + * Whether the Platform requires compositing for rendering. + * Default implementation returns @c true. If the implementing Platfor= m 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/plugins/platforms/x11/standalone/x11_platform.cpp b/plugins/pl= atforms/x11/standalone/x11_platform.cpp index 8b13518..fa090a8 100644 --- a/plugins/platforms/x11/standalone/x11_platform.cpp +++ b/plugins/platforms/x11/standalone/x11_platform.cpp @@ -74,4 +74,10 @@ Edge *X11StandalonePlatform::createScreenEdge(ScreenEdge= s *edges) return new WindowBasedEdge(edges); } = +bool X11StandalonePlatform::requiresCompositing() const +{ + return false; +} + + } diff --git a/plugins/platforms/x11/standalone/x11_platform.h b/plugins/plat= forms/x11/standalone/x11_platform.h index e57d6e4..949f804 100644 --- a/plugins/platforms/x11/standalone/x11_platform.h +++ b/plugins/platforms/x11/standalone/x11_platform.h @@ -41,6 +41,7 @@ public: Screens *createScreens(QObject *parent =3D nullptr) override; OpenGLBackend *createOpenGLBackend() override; Edge *createScreenEdge(ScreenEdges *parent) override; + bool requiresCompositing() const override; = }; =