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
icc-effect-5.14.5
Martin Gräßlin 2016-05-09 16:41:37 +02:00
parent 73fae5e63d
commit c45942a70c
9 changed files with 38 additions and 17 deletions

View File

@ -252,7 +252,7 @@ void Compositor::slotCompositingOptionsInitialized()
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 @@ void Compositor::slotCompositingOptionsInitialized()
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 @@ 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 == 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 != NoReasonSuspend);

View File

@ -123,11 +123,6 @@ bool Application::shouldUseWaylandForCompositing() const
return m_operationMode == OperationModeWaylandAndX11 || m_operationMode == OperationModeXwayland;
}
bool Application::requiresCompositing() const
{
return shouldUseWaylandForCompositing();
}
void Application::start()
{
setQuitOnLastWindowClosed(false);

1
main.h
View File

@ -96,7 +96,6 @@ public:
OperationMode operationMode() const;
void setOperationMode(OperationMode mode);
bool shouldUseWaylandForCompositing() const;
bool requiresCompositing() const;
void setupTranslator();
void setupCommandLine(QCommandLineParser *parser);

View File

@ -23,6 +23,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "options.h"
#include "config-kwin.h"
#include "utils.h"
#include "platform.h"
#ifndef KCMRULES
@ -1157,4 +1158,15 @@ QStringList Options::modifierOnlyDBusShortcut(Qt::KeyboardModifier 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()->requiresCompositing();
}
} // namespace

View File

@ -542,9 +542,7 @@ public:
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;
}
@ -553,9 +551,7 @@ public:
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,

View File

@ -281,4 +281,9 @@ QVector<QRect> Platform::screenGeometries() const
return QVector<QRect>({QRect(QPoint(0, 0), screenSize())});
}
bool Platform::requiresCompositing() const
{
return true;
}
}

View File

@ -94,6 +94,13 @@ public:
*/
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;
}

View File

@ -74,4 +74,10 @@ Edge *X11StandalonePlatform::createScreenEdge(ScreenEdges *edges)
return new WindowBasedEdge(edges);
}
bool X11StandalonePlatform::requiresCompositing() const
{
return false;
}
}

View File

@ -41,6 +41,7 @@ public:
Screens *createScreens(QObject *parent = nullptr) override;
OpenGLBackend *createOpenGLBackend() override;
Edge *createScreenEdge(ScreenEdges *parent) override;
bool requiresCompositing() const override;
};