Introduce a method shouldUseWaylandForCompositing() in KWin::Application

Returns true if the OperationMode requires KWin to composite to a
Wayland surface. This replaces the checks for the WaylandBackend or env
variable used so far in the construction of the Scene.
master
Martin Gräßlin 11 years ago
parent 6eb104b32a
commit 1be3a7a9f0

@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "compositingprefs.h"
#include "main.h"
#include "xcbutils.h"
#include "kwinglplatform.h"
@ -62,6 +63,11 @@ bool CompositingPrefs::compositingPossible()
gl_workaround_group.readEntry(unsafeKey, false))
return false;
if (kwinApp()->shouldUseWaylandForCompositing()) {
// don't do X specific checks if we are not going to use X for compositing
return true;
}
if (!Xcb::Extensions::self()->isCompositeAvailable()) {
qDebug() << "No composite extension available";
return false;

@ -213,6 +213,11 @@ void Application::setOperationMode(OperationMode mode)
m_operationMode = mode;
}
bool Application::shouldUseWaylandForCompositing() const
{
return m_operationMode == OperationModeWaylandAndX11;
}
void Application::start()
{
setQuitOnLastWindowClosed(false);

@ -86,6 +86,7 @@ public:
*/
OperationMode operationMode() const;
void setOperationMode(OperationMode mode);
bool shouldUseWaylandForCompositing() const;
static void setCrashCount(int count);
static bool wasCrash();

@ -43,6 +43,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "deleted.h"
#include "effects.h"
#include "lanczosfilter.h"
#include "main.h"
#include "overlaywindow.h"
#include "paintredirector.h"
#include "screens.h"
@ -198,8 +199,8 @@ SceneOpenGL *SceneOpenGL::createScene()
OpenGLPlatformInterface platformInterface = NoOpenGLPlatformInterface;
// should we use glx?
#ifndef KWIN_HAVE_OPENGLES
// on OpenGL we default to glx
platformInterface = GlxPlatformInterface;
// on OpenGL we default to glx on X11 and to egl on Wayland
platformInterface = kwinApp()->shouldUseWaylandForCompositing() ? EglPlatformInterface : GlxPlatformInterface;
#endif
const QByteArray envOpenGLInterface(qgetenv("KWIN_OPENGL_INTERFACE"));
@ -209,8 +210,7 @@ SceneOpenGL *SceneOpenGL::createScene()
platformInterface = EglPlatformInterface;
#else
// check environment variable
if (qstrcmp(envOpenGLInterface, "egl") == 0 ||
qstrcmp(envOpenGLInterface, "egl_wayland") == 0) {
if (qstrcmp(envOpenGLInterface, "egl") == 0) {
qDebug() << "Forcing EGL native interface through environment variable";
platformInterface = EglPlatformInterface;
}
@ -226,7 +226,7 @@ SceneOpenGL *SceneOpenGL::createScene()
case EglPlatformInterface:
#ifdef KWIN_HAVE_EGL
#ifdef WAYLAND_FOUND
if (qstrcmp(envOpenGLInterface, "egl_wayland") == 0) {
if (kwinApp()->shouldUseWaylandForCompositing()) {
backend = new EglWaylandBackend();
} else {
backend = new EglOnXBackend();

@ -23,6 +23,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "composite.h"
#include "deleted.h"
#include "effects.h"
#include "main.h"
#include "paintredirector.h"
#include "toplevel.h"
#ifdef WAYLAND_FOUND
@ -209,7 +210,7 @@ SceneQPainter *SceneQPainter::createScene()
{
QScopedPointer<QPainterBackend> backend;
#ifdef WAYLAND_FOUND
if (Wayland::WaylandBackend::self()) {
if (kwinApp()->shouldUseWaylandForCompositing()) {
backend.reset(new WaylandQPainterBackend);
if (backend->isFailed()) {
return NULL;

@ -29,6 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "decorations.h"
#include "deleted.h"
#include "effects.h"
#include "main.h"
#include "overlaywindow.h"
#include "paintredirector.h"
#include "workspace.h"
@ -367,7 +368,7 @@ SceneXrender* SceneXrender::createScene()
{
QScopedPointer<XRenderBackend> backend;
#ifdef WAYLAND_FOUND
if (Wayland::WaylandBackend::self()) {
if (kwinApp()->shouldUseWaylandForCompositing()) {
backend.reset(new WaylandXRenderBackend);
if (backend->isFailed()) {
return NULL;

Loading…
Cancel
Save