From 346619aa36c38176c7431aa429174a6ebfdd178f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Fri, 11 Nov 2016 09:59:46 +0100 Subject: [PATCH] Remove KWin::display from kwinglobals Summary: And finally nothing inside libkwineffects, libkwinglutils, libkwinxrenderutils and kwineffect and kwin core uses KWin::display. We are finally XLib free! This change drops KWin::display and removes the include to QX11Info from kwinglobals.h. And the libraries no longer need to link X11Extras. Due to that removal a few seeming unrelated changes are required to add the include where needed and linkage to X11Extras. The biggest change is to x11 platform plugin which still needs the display and caches it in the Platform and passes it to various places in a way that the code doesn't need to be adjusted. Reviewers: #kwin, #plasma_on_wayland Subscribers: plasma-devel, kwin Tags: #plasma_on_wayland, #kwin Differential Revision: https://phabricator.kde.org/D3337 --- autotests/CMakeLists.txt | 3 +++ autotests/mock_effectshandler.h | 2 ++ autotests/test_client_machine.cpp | 1 + autotests/test_screen_edges.cpp | 1 + autotests/test_xcb_size_hints.cpp | 1 + autotests/test_xcb_window.cpp | 1 + autotests/test_xcb_wrapper.cpp | 1 + kcmkwin/kwinrules/main.cpp | 1 + libkwineffects/CMakeLists.txt | 3 +-- libkwineffects/kwinglobals.h | 11 ----------- main_x11.cpp | 3 ++- plugins/platforms/x11/common/eglonxbackend.cpp | 4 ++-- plugins/platforms/x11/common/eglonxbackend.h | 2 +- plugins/platforms/x11/standalone/glxbackend.cpp | 4 +++- plugins/platforms/x11/standalone/glxbackend.h | 9 ++++++++- plugins/platforms/x11/standalone/x11_platform.cpp | 7 ++++--- plugins/platforms/x11/standalone/x11_platform.h | 1 + .../platforms/x11/standalone/xinputintegration.cpp | 3 ++- plugins/platforms/x11/standalone/xinputintegration.h | 7 ++++++- tests/screenedgeshowtest.cpp | 1 + utils.cpp | 1 + 21 files changed, 43 insertions(+), 24 deletions(-) diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt index 2974d96648..25c059de90 100644 --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -134,6 +134,7 @@ add_executable( testBuiltInEffectLoader ${testBuiltInEffectLoader_SRCS}) target_link_libraries(testBuiltInEffectLoader Qt5::Concurrent Qt5::Test + Qt5::X11Extras KF5::Package kwineffects kwin4_effect_builtins @@ -160,6 +161,7 @@ target_link_libraries(testScriptedEffectLoader Qt5::Concurrent Qt5::Script Qt5::Test + Qt5::X11Extras KF5::ConfigGui KF5::GlobalAccel KF5::I18n @@ -184,6 +186,7 @@ add_executable( testPluginEffectLoader ${testPluginEffectLoader_SRCS}) target_link_libraries(testPluginEffectLoader Qt5::Concurrent Qt5::Test + Qt5::X11Extras KF5::Package kwineffects kwin4_effect_builtins diff --git a/autotests/mock_effectshandler.h b/autotests/mock_effectshandler.h index 38558928bd..86b259d983 100644 --- a/autotests/mock_effectshandler.h +++ b/autotests/mock_effectshandler.h @@ -21,6 +21,8 @@ along with this program. If not, see . #define MOCK_EFFECTS_HANDLER_H #include +#include + class MockEffectsHandler : public KWin::EffectsHandler { Q_OBJECT diff --git a/autotests/test_client_machine.cpp b/autotests/test_client_machine.cpp index e862473701..1d97f6d972 100644 --- a/autotests/test_client_machine.cpp +++ b/autotests/test_client_machine.cpp @@ -24,6 +24,7 @@ along with this program. If not, see . // Qt #include #include +#include // xcb #include // system diff --git a/autotests/test_screen_edges.cpp b/autotests/test_screen_edges.cpp index 87017bd717..0595f53c9a 100644 --- a/autotests/test_screen_edges.cpp +++ b/autotests/test_screen_edges.cpp @@ -35,6 +35,7 @@ along with this program. If not, see . #include // Qt #include +#include // xcb #include Q_DECLARE_METATYPE(KWin::ElectricBorder) diff --git a/autotests/test_xcb_size_hints.cpp b/autotests/test_xcb_size_hints.cpp index e759943a57..59b6bfc6cc 100644 --- a/autotests/test_xcb_size_hints.cpp +++ b/autotests/test_xcb_size_hints.cpp @@ -23,6 +23,7 @@ along with this program. If not, see . // Qt #include #include +#include #include // xcb #include diff --git a/autotests/test_xcb_window.cpp b/autotests/test_xcb_window.cpp index 339be675a4..ee703f3a89 100644 --- a/autotests/test_xcb_window.cpp +++ b/autotests/test_xcb_window.cpp @@ -23,6 +23,7 @@ along with this program. If not, see . // Qt #include #include +#include // xcb #include diff --git a/autotests/test_xcb_wrapper.cpp b/autotests/test_xcb_wrapper.cpp index a1e312c3fe..4a428c90f1 100644 --- a/autotests/test_xcb_wrapper.cpp +++ b/autotests/test_xcb_wrapper.cpp @@ -23,6 +23,7 @@ along with this program. If not, see . // Qt #include #include +#include #include // xcb #include diff --git a/kcmkwin/kwinrules/main.cpp b/kcmkwin/kwinrules/main.cpp index 885e7ab36d..ae66a0372b 100644 --- a/kcmkwin/kwinrules/main.cpp +++ b/kcmkwin/kwinrules/main.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include diff --git a/libkwineffects/CMakeLists.txt b/libkwineffects/CMakeLists.txt index 306e380a0e..165abc50ff 100644 --- a/libkwineffects/CMakeLists.txt +++ b/libkwineffects/CMakeLists.txt @@ -45,7 +45,6 @@ set(kwin_EFFECTSLIB_SRCS set(kwineffects_QT_LIBS Qt5::DBus Qt5::Widgets - Qt5::X11Extras ) set(kwineffects_KDE_LIBS @@ -91,7 +90,7 @@ macro( KWIN4_ADD_GLUTILS_BACKEND name glinclude ) include_directories(${glinclude}) add_library(${name} SHARED ${kwin_GLUTILSLIB_SRCS}) generate_export_header(${name} BASE_NAME kwinglutils EXPORT_FILE_NAME kwinglutils_export.h) - target_link_libraries(${name} PUBLIC Qt5::DBus Qt5::X11Extras XCB::XCB KF5::CoreAddons KF5::WindowSystem) + target_link_libraries(${name} PUBLIC Qt5::DBus XCB::XCB KF5::CoreAddons KF5::WindowSystem) set_target_properties(${name} PROPERTIES VERSION ${KWINEFFECTS_VERSION_STRING} SOVERSION ${KWINEFFECTS_SOVERSION} diff --git a/libkwineffects/kwinglobals.h b/libkwineffects/kwinglobals.h index e755da1e9c..ba57d2790e 100644 --- a/libkwineffects/kwinglobals.h +++ b/libkwineffects/kwinglobals.h @@ -25,7 +25,6 @@ along with this program. If not, see . #include #include #include -#include #include #include @@ -130,16 +129,6 @@ enum PointerAxisDirection { PointerAxisRight }; -inline -KWIN_EXPORT Display* display() -{ - static Display *s_display = nullptr; - if (!s_display && QX11Info::isPlatformX11()) { - s_display = QX11Info::display(); - } - return s_display; -} - inline KWIN_EXPORT xcb_connection_t *connection() { diff --git a/main_x11.cpp b/main_x11.cpp index e4db348bf6..da3c0452e7 100644 --- a/main_x11.cpp +++ b/main_x11.cpp @@ -43,6 +43,7 @@ along with this program. If not, see . #include #include #include +#include // system #ifdef HAVE_UNISTD_H @@ -439,7 +440,7 @@ KWIN_EXPORT int kdemain(int argc, char * argv[]) argv[0], qPrintable(a.platformName())); exit(1); } - if (!KWin::display()) { + if (!QX11Info::display()) { fprintf(stderr, "%s: FATAL ERROR KWin requires Xlib support in the xcb plugin. Do not configure Qt with -no-xcb-xlib\n", argv[0]); exit(1); diff --git a/plugins/platforms/x11/common/eglonxbackend.cpp b/plugins/platforms/x11/common/eglonxbackend.cpp index 78e0ce4de0..077d9b8310 100644 --- a/plugins/platforms/x11/common/eglonxbackend.cpp +++ b/plugins/platforms/x11/common/eglonxbackend.cpp @@ -38,14 +38,14 @@ Q_LOGGING_CATEGORY(KWIN_CORE, "kwin_core", QtCriticalMsg) namespace KWin { -EglOnXBackend::EglOnXBackend() +EglOnXBackend::EglOnXBackend(Display *display) : AbstractEglBackend() , m_overlayWindow(new OverlayWindow()) , surfaceHasSubPost(0) , m_bufferAge(0) , m_usesOverlayWindow(true) , m_connection(connection()) - , m_x11Display(display()) + , m_x11Display(display) , m_rootWindow(rootWindow()) , m_x11ScreenNumber(kwinApp()->x11ScreenNumber()) { diff --git a/plugins/platforms/x11/common/eglonxbackend.h b/plugins/platforms/x11/common/eglonxbackend.h index d123fee190..941f660d60 100644 --- a/plugins/platforms/x11/common/eglonxbackend.h +++ b/plugins/platforms/x11/common/eglonxbackend.h @@ -31,7 +31,7 @@ namespace KWin class KWIN_EXPORT EglOnXBackend : public AbstractEglBackend { public: - EglOnXBackend(); + EglOnXBackend(Display *display); explicit EglOnXBackend(xcb_connection_t *connection, Display *display, xcb_window_t rootWindow, int screenNumber, xcb_window_t renderingWindow); virtual ~EglOnXBackend(); virtual void screenGeometryChanged(const QSize &size); diff --git a/plugins/platforms/x11/standalone/glxbackend.cpp b/plugins/platforms/x11/standalone/glxbackend.cpp index d2dbada885..59599acd64 100644 --- a/plugins/platforms/x11/standalone/glxbackend.cpp +++ b/plugins/platforms/x11/standalone/glxbackend.cpp @@ -37,6 +37,7 @@ along with this program. If not, see . // Qt #include #include +#include // system #include @@ -105,7 +106,7 @@ bool SwapEventFilter::event(xcb_generic_event_t *event) -GlxBackend::GlxBackend() +GlxBackend::GlxBackend(Display *display) : OpenGLBackend() , m_overlayWindow(new OverlayWindow()) , window(None) @@ -114,6 +115,7 @@ GlxBackend::GlxBackend() , ctx(nullptr) , m_bufferAge(0) , haveSwapInterval(false) + , m_x11Display(display) { } diff --git a/plugins/platforms/x11/standalone/glxbackend.h b/plugins/platforms/x11/standalone/glxbackend.h index 1f801df7b9..59787419e0 100644 --- a/plugins/platforms/x11/standalone/glxbackend.h +++ b/plugins/platforms/x11/standalone/glxbackend.h @@ -65,7 +65,7 @@ private: class GlxBackend : public OpenGLBackend { public: - GlxBackend(); + GlxBackend(Display *display); virtual ~GlxBackend(); virtual void screenGeometryChanged(const QSize &size); virtual SceneOpenGL::TexturePrivate *createBackendTexture(SceneOpenGL::Texture *texture); @@ -89,6 +89,9 @@ private: bool initFbConfig(); void initVisualDepthHashTable(); void setSwapInterval(int interval); + Display *display() const { + return m_x11Display; + } int visualDepth(xcb_visualid_t visual) const; FBConfigInfo *infoForVisual(xcb_visualid_t visual); @@ -112,6 +115,7 @@ private: bool m_haveINTELSwapEvent = false; bool haveSwapInterval = false; bool haveWaitSync = false; + Display *m_x11Display; friend class GlxTexture; }; @@ -130,6 +134,9 @@ private: friend class GlxBackend; GlxTexture(SceneOpenGL::Texture *texture, GlxBackend *backend); bool loadTexture(xcb_pixmap_t pix, const QSize &size, xcb_visualid_t visual); + Display *display() const { + return m_backend->m_x11Display; + } SceneOpenGL::Texture *q; GlxBackend *m_backend; GLXPixmap m_glxpixmap; // the glx pixmap the texture is bound to diff --git a/plugins/platforms/x11/standalone/x11_platform.cpp b/plugins/platforms/x11/standalone/x11_platform.cpp index 0c1dc19454..73db0921f7 100644 --- a/plugins/platforms/x11/standalone/x11_platform.cpp +++ b/plugins/platforms/x11/standalone/x11_platform.cpp @@ -46,10 +46,11 @@ namespace KWin X11StandalonePlatform::X11StandalonePlatform(QObject *parent) : Platform(parent) + , m_x11Display(QX11Info::display()) { #if HAVE_X11_XINPUT if (!qEnvironmentVariableIsSet("KWIN_NO_XI2")) { - m_xinputIntegration = new XInputIntegration(this); + m_xinputIntegration = new XInputIntegration(m_x11Display, this); m_xinputIntegration->init(); if (!m_xinputIntegration->hasXinput()) { delete m_xinputIntegration; @@ -84,14 +85,14 @@ OpenGLBackend *X11StandalonePlatform::createOpenGLBackend() #if HAVE_EPOXY_GLX case GlxPlatformInterface: if (hasGlx()) { - return new GlxBackend(); + return new GlxBackend(m_x11Display); } else { qCWarning(KWIN_X11STANDALONE) << "Glx not available, trying EGL instead."; // no break, needs fall-through } #endif case EglPlatformInterface: - return new EglOnXBackend(); + return new EglOnXBackend(m_x11Display); default: // no backend available return nullptr; diff --git a/plugins/platforms/x11/standalone/x11_platform.h b/plugins/platforms/x11/standalone/x11_platform.h index 4a17f881f4..e4811f1ae1 100644 --- a/plugins/platforms/x11/standalone/x11_platform.h +++ b/plugins/platforms/x11/standalone/x11_platform.h @@ -70,6 +70,7 @@ private: XInputIntegration *m_xinputIntegration = nullptr; QThread *m_openGLFreezeProtectionThread = nullptr; QTimer *m_openGLFreezeProtection = nullptr; + Display *m_x11Display; }; diff --git a/plugins/platforms/x11/standalone/xinputintegration.cpp b/plugins/platforms/x11/standalone/xinputintegration.cpp index 490f150814..a944a55c17 100644 --- a/plugins/platforms/x11/standalone/xinputintegration.cpp +++ b/plugins/platforms/x11/standalone/xinputintegration.cpp @@ -162,8 +162,9 @@ private: Xkb *m_xkb = nullptr; }; -XInputIntegration::XInputIntegration(QObject *parent) +XInputIntegration::XInputIntegration(Display *display, QObject *parent) : QObject(parent) + , m_x11Display(display) { } diff --git a/plugins/platforms/x11/standalone/xinputintegration.h b/plugins/platforms/x11/standalone/xinputintegration.h index a818569172..ba1ff4b384 100644 --- a/plugins/platforms/x11/standalone/xinputintegration.h +++ b/plugins/platforms/x11/standalone/xinputintegration.h @@ -23,6 +23,7 @@ along with this program. If not, see . #include #include #include +typedef struct _XDisplay Display; namespace KWin { @@ -36,7 +37,7 @@ class XInputIntegration : public QObject { Q_OBJECT public: - explicit XInputIntegration(QObject *parent); + explicit XInputIntegration(Display *display, QObject *parent); virtual ~XInputIntegration(); void init(); @@ -49,6 +50,9 @@ public: void setXkb(Xkb *xkb); private: + Display *display() const { + return m_x11Display; + } bool m_hasXInput = false; int m_xiOpcode = 0; @@ -57,6 +61,7 @@ private: QPointer m_x11Cursor; // TODO: QPointer Xkb *m_xkb = nullptr; + Display *m_x11Display; QScopedPointer m_xiEventFilter; QScopedPointer m_keyPressFilter; diff --git a/tests/screenedgeshowtest.cpp b/tests/screenedgeshowtest.cpp index ec3f2de8fc..804fd366d1 100644 --- a/tests/screenedgeshowtest.cpp +++ b/tests/screenedgeshowtest.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include "../xcbutils.h" #include diff --git a/utils.cpp b/utils.cpp index ad45406e56..afa631c09d 100644 --- a/utils.cpp +++ b/utils.cpp @@ -35,6 +35,7 @@ along with this program. If not, see . #include #include +#include #include #include