diff options
author | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-08-20 12:26:39 +0200 |
---|---|---|
committer | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-08-28 13:10:33 +0200 |
commit | 88f821e189bd1d4d4550c1864f622ca7df2a7c34 (patch) | |
tree | 291fd0a8155c448ea13df57a6b1f6f7966894ed0 /src | |
parent | 9c88f97492959025f7433c9a379b474095efc0dd (diff) |
Remove automatic initialisation of extensions
It is the specific compositor application responsibillity to create the
specific extensions. Some of the extensions are picked up with the
QWaylandExtension::findIn(QWaylandExtensionContainer *) function to work
around missing events/apis. It should be a goal not to have these calles
in the base implementation of QWayland[Compositor|Surface|Input..].
Change-Id: Iacd576f2e8a79ca0165b858b1e8f44cddad48d93
Diffstat (limited to 'src')
18 files changed, 30 insertions, 97 deletions
diff --git a/src/compositor/compositor_api/qwaylandcompositor.cpp b/src/compositor/compositor_api/qwaylandcompositor.cpp index 655faed11..16724a40e 100644 --- a/src/compositor/compositor_api/qwaylandcompositor.cpp +++ b/src/compositor/compositor_api/qwaylandcompositor.cpp @@ -53,20 +53,13 @@ #include "wayland_wrapper/qwldatadevice_p.h" #include "wayland_wrapper/qwldatadevicemanager_p.h" -#include "extensions/qwlinputpanel_p.h" -#include "extensions/qwlshellsurface_p.h" -#include "extensions/qwlextendedsurface_p.h" -#include "extensions/qwlqttouch_p.h" -#include "extensions/qwlqtkey_p.h" -#include "extensions/qwltextinputmanager_p.h" -#include "extensions/qwaylandwindowmanagerextension.h" - #include "hardware_integration/qwlhwintegration_p.h" #include "hardware_integration/qwlclientbufferintegration_p.h" #include "hardware_integration/qwlclientbufferintegrationfactory_p.h" #include "hardware_integration/qwlserverbufferintegration_p.h" #include "hardware_integration/qwlserverbufferintegrationfactory_p.h" +#include "extensions/qwaylandwindowmanagerextension.h" #include "qwaylandxkb.h" #include "qwaylandshmformathelper.h" @@ -135,8 +128,7 @@ public: } // namespace QWaylandCompositorPrivate::QWaylandCompositorPrivate(QWaylandCompositor *compositor) - : extensions(QWaylandCompositor::DefaultExtensions) - , display(wl_display_create()) + : display(wl_display_create()) #if defined (QT_COMPOSITOR_WAYLAND_GL) , hw_integration(0) , client_buffer_integration(0) @@ -194,7 +186,6 @@ void QWaylandCompositorPrivate::init() //initialize distancefieldglyphcache here initializeHardwareIntegration(); - initializeExtensions(); initializeDefaultInputDevice(); initialized = true; @@ -253,9 +244,6 @@ void QWaylandCompositorPrivate::initializeHardwareIntegration() { #ifdef QT_COMPOSITOR_WAYLAND_GL Q_Q(QWaylandCompositor); - if (extensions & QWaylandCompositor::HardwareIntegrationExtension) - hw_integration.reset(new QtWayland::HardwareIntegration(q)); - loadClientBufferIntegration(); loadServerBufferIntegration(); @@ -266,23 +254,6 @@ void QWaylandCompositorPrivate::initializeHardwareIntegration() #endif } -void QWaylandCompositorPrivate::initializeExtensions() -{ - Q_Q(QWaylandCompositor); - if (extensions & QWaylandCompositor::SurfaceExtension) - new QtWayland::SurfaceExtensionGlobal(q); - if (extensions & QWaylandCompositor::TouchExtension) - new QtWayland::TouchExtensionGlobal(q); - if (extensions & QWaylandCompositor::QtKeyExtension) - new QtWayland::QtKeyExtensionGlobal(q); - if (extensions & QWaylandCompositor::TextInputExtension) { - new QtWayland::TextInputManager(q); - new QWaylandInputPanel(q); - } - if (extensions & QWaylandCompositor::WindowManagerExtension) - new QWaylandWindowManagerExtension(q); -} - void QWaylandCompositorPrivate::initializeDefaultInputDevice() { Q_Q(QWaylandCompositor); @@ -372,22 +343,6 @@ QByteArray QWaylandCompositor::socketName() const return d->socket_name; } -void QWaylandCompositor::setExtensionFlags(QWaylandCompositor::ExtensionFlags flags) -{ - Q_D(QWaylandCompositor); - if (d->initialized) { - qWarning("%s: It is not supported to alter the extension flags after the compositor is initialized\n", Q_FUNC_INFO); - return; - } - d->extensions = flags; -} - -QWaylandCompositor::ExtensionFlags QWaylandCompositor::extensionFlags() const -{ - Q_D(const QWaylandCompositor); - return d->extensions; -} - struct wl_display *QWaylandCompositor::display() const { Q_D(const QWaylandCompositor); diff --git a/src/compositor/compositor_api/qwaylandcompositor.h b/src/compositor/compositor_api/qwaylandcompositor.h index 954422e57..ddc6db11f 100644 --- a/src/compositor/compositor_api/qwaylandcompositor.h +++ b/src/compositor/compositor_api/qwaylandcompositor.h @@ -71,25 +71,11 @@ class Q_COMPOSITOR_EXPORT QWaylandCompositor : public QObject, public QWaylandEx Q_OBJECT Q_DECLARE_PRIVATE(QWaylandCompositor) Q_PROPERTY(QByteArray socketName READ socketName WRITE setSocketName) - Q_PROPERTY(QWaylandCompositor::ExtensionFlags extensionFlags READ extensionFlags WRITE setExtensionFlags) Q_PROPERTY(bool retainedSelection READ retainedSelectionEnabled WRITE setRetainedSelectionEnabled) Q_PROPERTY(QWaylandOutputSpace *primaryOutputSpace READ primaryOutputSpace WRITE setPrimaryOutputSpace NOTIFY primaryOutputSpaceChanged) Q_PROPERTY(QWaylandOutput *primaryOutput READ primaryOutput NOTIFY primaryOutputChanged) public: - enum ExtensionFlag { - WindowManagerExtension = 0x01, - SurfaceExtension = 0x02, - QtKeyExtension = 0x04, - TouchExtension = 0x08, - SubSurfaceExtension = 0x10, - TextInputExtension = 0x20, - HardwareIntegrationExtension = 0x40, - - DefaultExtensions = WindowManagerExtension | SurfaceExtension | QtKeyExtension | TouchExtension | HardwareIntegrationExtension - }; - Q_DECLARE_FLAGS(ExtensionFlags, ExtensionFlag) - QWaylandCompositor(QObject *parent = 0); virtual ~QWaylandCompositor(); @@ -99,9 +85,6 @@ public: void setSocketName(const QByteArray &name); QByteArray socketName() const; - void setExtensionFlags(ExtensionFlags flags); - ExtensionFlags extensionFlags() const; - ::wl_display *display() const; uint32_t nextSerial(); @@ -167,8 +150,6 @@ protected: QWaylandCompositor(QWaylandCompositorPrivate *dptr); }; -Q_DECLARE_OPERATORS_FOR_FLAGS(QWaylandCompositor::ExtensionFlags) - QT_END_NAMESPACE #endif // QWAYLANDCOMPOSITOR_H diff --git a/src/compositor/compositor_api/qwaylandcompositor_p.h b/src/compositor/compositor_api/qwaylandcompositor_p.h index a0462c796..8bc5a5000 100644 --- a/src/compositor/compositor_api/qwaylandcompositor_p.h +++ b/src/compositor/compositor_api/qwaylandcompositor_p.h @@ -107,8 +107,6 @@ protected: void loadClientBufferIntegration(); void loadServerBufferIntegration(); - QWaylandCompositor::ExtensionFlags extensions; - QByteArray socket_name; struct wl_display *display; diff --git a/src/compositor/compositor_api/qwaylandinput.cpp b/src/compositor/compositor_api/qwaylandinput.cpp index c1a9a9149..a562db748 100644 --- a/src/compositor/compositor_api/qwaylandinput.cpp +++ b/src/compositor/compositor_api/qwaylandinput.cpp @@ -57,7 +57,6 @@ QWaylandInputDevicePrivate::QWaylandInputDevicePrivate(QWaylandInputDevice *inpu , outputSpace(compositor->primaryOutputSpace()) , mouseFocus(Q_NULLPTR) , capabilities() - , input_method(compositor->extensionFlags() & QWaylandCompositor::TextInputExtension ? new QtWayland::InputMethod(compositor, inputdevice) : 0) , data_device() , drag_handle(new QWaylandDrag(inputdevice)) { diff --git a/src/compositor/compositor_api/qwaylandinput_p.h b/src/compositor/compositor_api/qwaylandinput_p.h index 2c3a8f4b8..162a52ee8 100644 --- a/src/compositor/compositor_api/qwaylandinput_p.h +++ b/src/compositor/compositor_api/qwaylandinput_p.h @@ -88,7 +88,6 @@ public: static QWaylandInputDevicePrivate *get(QWaylandInputDevice *device) { return device->d_func(); } QtWayland::DataDevice *dataDevice() const { return data_device.data(); } - QtWayland::InputMethod *inputMethod() const { return input_method.data(); } protected: void seat_bind_resource(wl_seat::Resource *resource) Q_DECL_OVERRIDE; @@ -111,7 +110,6 @@ private: QScopedPointer<QWaylandPointer> pointer; QScopedPointer<QWaylandKeyboard> keyboard; QScopedPointer<QWaylandTouch> touch; - QScopedPointer<QtWayland::InputMethod> input_method; QScopedPointer<QtWayland::DataDevice> data_device; QScopedPointer<QWaylandDrag> drag_handle; diff --git a/src/compositor/extensions/extensions.pri b/src/compositor/extensions/extensions.pri index decb142c6..14b435ff7 100644 --- a/src/compositor/extensions/extensions.pri +++ b/src/compositor/extensions/extensions.pri @@ -4,6 +4,9 @@ WAYLANDSERVERSOURCES += \ ../extensions/touch-extension.xml \ ../extensions/qtkey-extension.xml \ ../extensions/windowmanager.xml \ + ../3rdparty/protocol/input-method.xml \ + ../3rdparty/protocol/text.xml \ + ../extensions/hardware-integration.xml \ HEADERS += \ extensions/qwlextendedsurface_p.h \ @@ -16,6 +19,9 @@ HEADERS += \ extensions/qwltextinputmanager_p.h \ extensions/qwlinputpanel_p.h \ extensions/qwlinputpanelsurface_p.h \ + extensions/qwlinputmethod_p.h \ + extensions/qwlinputmethodcontext_p.h \ + extensions/qwlhwintegration_p.h \ SOURCES += \ extensions/qwlextendedsurface.cpp \ @@ -27,5 +33,8 @@ SOURCES += \ extensions/qwltextinputmanager.cpp \ extensions/qwlinputpanel.cpp \ extensions/qwlinputpanelsurface.cpp \ + extensions/qwlinputmethod.cpp \ + extensions/qwlinputmethodcontext.cpp \ + extensions/qwlhwintegration.cpp \ INCLUDEPATH += extensions diff --git a/src/compositor/hardware_integration/qwlhwintegration.cpp b/src/compositor/extensions/qwlhwintegration.cpp index 68ab0d890..68ab0d890 100644 --- a/src/compositor/hardware_integration/qwlhwintegration.cpp +++ b/src/compositor/extensions/qwlhwintegration.cpp diff --git a/src/compositor/hardware_integration/qwlhwintegration_p.h b/src/compositor/extensions/qwlhwintegration_p.h index 42c6e685a..42c6e685a 100644 --- a/src/compositor/hardware_integration/qwlhwintegration_p.h +++ b/src/compositor/extensions/qwlhwintegration_p.h diff --git a/src/compositor/wayland_wrapper/qwlinputmethod.cpp b/src/compositor/extensions/qwlinputmethod.cpp index febb47a1e..6029112f5 100644 --- a/src/compositor/wayland_wrapper/qwlinputmethod.cpp +++ b/src/compositor/extensions/qwlinputmethod.cpp @@ -47,9 +47,9 @@ QT_BEGIN_NAMESPACE namespace QtWayland { -InputMethod::InputMethod(QWaylandCompositor *compositor, QWaylandInputDevice *seat) - : QtWaylandServer::wl_input_method(compositor->display(), 1) - , m_compositor(compositor) +InputMethod::InputMethod(QWaylandInputDevice *seat) + : QWaylandExtensionTemplate<InputMethod>(seat) + , QtWaylandServer::wl_input_method(seat->compositor()->display(), 1) , m_seat(seat) , m_resource(0) , m_textInput() @@ -78,7 +78,7 @@ void InputMethod::activate(TextInput *textInput) send_activate(m_resource->handle, m_context->resource()->handle); - QWaylandInputPanelPrivate *panel = QWaylandInputPanelPrivate::findIn(m_compositor); + QWaylandInputPanelPrivate *panel = QWaylandInputPanelPrivate::findIn(compositor()); if (panel) { panel->setFocus(textInput->focus()); panel->setCursorRectangle(textInput->cursorRectangle()); @@ -97,7 +97,7 @@ void InputMethod::deactivate() m_textInput = 0; m_context = 0; - QWaylandInputPanelPrivate *panel = QWaylandInputPanelPrivate::findIn(m_compositor); + QWaylandInputPanelPrivate *panel = QWaylandInputPanelPrivate::findIn(compositor()); if (panel) { panel->setFocus(0); panel->setCursorRectangle(QRect()); diff --git a/src/compositor/wayland_wrapper/qwlinputmethod_p.h b/src/compositor/extensions/qwlinputmethod_p.h index b49a6668a..4d8ab78a0 100644 --- a/src/compositor/wayland_wrapper/qwlinputmethod_p.h +++ b/src/compositor/extensions/qwlinputmethod_p.h @@ -38,6 +38,8 @@ #define QTWAYLAND_QWLINPUTMETHOD_H #include <QtCompositor/private/qwayland-server-input-method.h> +#include <QtCompositor/QWaylandExtension> +#include <QtCompositor/QWaylandInputDevice> #include <QObject> #include <QScopedPointer> @@ -54,14 +56,15 @@ namespace QtWayland { class InputMethodContext; class TextInput; -class InputMethod : public QObject, public QtWaylandServer::wl_input_method +class InputMethod : public QWaylandExtensionTemplate<InputMethod> , public QtWaylandServer::wl_input_method { Q_OBJECT - public: - explicit InputMethod(QWaylandCompositor *compositor, QWaylandInputDevice *seat); + explicit InputMethod(QWaylandInputDevice *seat); ~InputMethod(); + QWaylandCompositor *compositor() const { return m_seat->compositor(); } + void activate(TextInput *textInput); void deactivate(); @@ -78,7 +81,6 @@ private Q_SLOTS: void focusChanged(QWaylandSurface *surface); private: - QWaylandCompositor *m_compositor; QWaylandInputDevice *m_seat; Resource *m_resource; TextInput *m_textInput; diff --git a/src/compositor/wayland_wrapper/qwlinputmethodcontext.cpp b/src/compositor/extensions/qwlinputmethodcontext.cpp index 6421d5e76..6421d5e76 100644 --- a/src/compositor/wayland_wrapper/qwlinputmethodcontext.cpp +++ b/src/compositor/extensions/qwlinputmethodcontext.cpp diff --git a/src/compositor/wayland_wrapper/qwlinputmethodcontext_p.h b/src/compositor/extensions/qwlinputmethodcontext_p.h index 8853d40bb..8853d40bb 100644 --- a/src/compositor/wayland_wrapper/qwlinputmethodcontext_p.h +++ b/src/compositor/extensions/qwlinputmethodcontext_p.h diff --git a/src/compositor/extensions/qwltextinput.cpp b/src/compositor/extensions/qwltextinput.cpp index 1a29f23b4..03c67bbdc 100644 --- a/src/compositor/extensions/qwltextinput.cpp +++ b/src/compositor/extensions/qwltextinput.cpp @@ -102,9 +102,9 @@ void TextInput::text_input_activate(Resource *, wl_resource *seat, wl_resource * bool wasEmpty = m_activeInputMethods.isEmpty(); - InputMethod *inputMethod = QWaylandInputDevicePrivate::get(QWaylandInputDevice::fromSeatResource(seat))->inputMethod(); + InputMethod *inputMethod = InputMethod::findIn(QWaylandInputDevice::fromSeatResource(seat)); - if (!m_activeInputMethods.contains(inputMethod)) { + if (inputMethod && !m_activeInputMethods.contains(inputMethod)) { m_activeInputMethods.append(inputMethod); inputMethod->activate(this); } @@ -115,9 +115,10 @@ void TextInput::text_input_activate(Resource *, wl_resource *seat, wl_resource * void TextInput::text_input_deactivate(Resource *, wl_resource *seat) { - InputMethod *inputMethod = QWaylandInputDevicePrivate::get(QWaylandInputDevice::fromSeatResource(seat))->inputMethod(); + InputMethod *inputMethod = InputMethod::findIn(QWaylandInputDevice::fromSeatResource(seat)); - deactivate(inputMethod); + if (inputMethod) + deactivate(inputMethod); } static bool isInputMethodBound(InputMethod *inputMethod) diff --git a/src/compositor/global/qwaylandextension.cpp b/src/compositor/global/qwaylandextension.cpp index e255aecc3..915d6379d 100644 --- a/src/compositor/global/qwaylandextension.cpp +++ b/src/compositor/global/qwaylandextension.cpp @@ -85,7 +85,7 @@ QWaylandExtension *QWaylandExtensionContainer::extension(const wl_interface *int return Q_NULLPTR; } -QVector<QWaylandExtension *> QWaylandExtensionContainer::extensions() const +QList<QWaylandExtension *> QWaylandExtensionContainer::extensions() const { return extension_vector; } diff --git a/src/compositor/global/qwaylandextension.h b/src/compositor/global/qwaylandextension.h index a25667331..00523ba4d 100644 --- a/src/compositor/global/qwaylandextension.h +++ b/src/compositor/global/qwaylandextension.h @@ -57,12 +57,12 @@ public: QWaylandExtension *extension(const QByteArray &name); QWaylandExtension *extension(const wl_interface *interface); - QVector<QWaylandExtension *> extensions() const; + QList<QWaylandExtension *> extensions() const; void addExtension(QWaylandExtension *extension); void removeExtension(QWaylandExtension *extension); protected: - QVector<QWaylandExtension *> extension_vector; + QList<QWaylandExtension *> extension_vector; }; class Q_COMPOSITOR_EXPORT QWaylandExtension : public QObject diff --git a/src/compositor/hardware_integration/hardware_integration.pri b/src/compositor/hardware_integration/hardware_integration.pri index 39843b3f5..68cbd4c52 100644 --- a/src/compositor/hardware_integration/hardware_integration.pri +++ b/src/compositor/hardware_integration/hardware_integration.pri @@ -4,7 +4,6 @@ isEmpty(QT_WAYLAND_GL_CONFIG):QT_WAYLAND_GL_CONFIG = $$(QT_WAYLAND_GL_CONFIG) CONFIG += wayland-scanner WAYLANDSERVERSOURCES += \ ../extensions/server-buffer-extension.xml \ - ../extensions/hardware-integration.xml HEADERS += \ hardware_integration/qwlclientbufferintegration_p.h \ @@ -13,7 +12,6 @@ isEmpty(QT_WAYLAND_GL_CONFIG):QT_WAYLAND_GL_CONFIG = $$(QT_WAYLAND_GL_CONFIG) hardware_integration/qwlserverbufferintegration_p.h \ hardware_integration/qwlserverbufferintegrationfactory_p.h \ hardware_integration/qwlserverbufferintegrationplugin_p.h \ - hardware_integration/qwlhwintegration_p.h SOURCES += \ hardware_integration/qwlclientbufferintegration.cpp \ @@ -22,7 +20,6 @@ isEmpty(QT_WAYLAND_GL_CONFIG):QT_WAYLAND_GL_CONFIG = $$(QT_WAYLAND_GL_CONFIG) hardware_integration/qwlserverbufferintegration.cpp \ hardware_integration/qwlserverbufferintegrationfactory.cpp \ hardware_integration/qwlserverbufferintegrationplugin.cpp \ - hardware_integration/qwlhwintegration.cpp DEFINES += QT_COMPOSITOR_WAYLAND_GL } else { diff --git a/src/compositor/wayland_wrapper/qwldatadevice.cpp b/src/compositor/wayland_wrapper/qwldatadevice.cpp index b2eb25684..59f6dabbb 100644 --- a/src/compositor/wayland_wrapper/qwldatadevice.cpp +++ b/src/compositor/wayland_wrapper/qwldatadevice.cpp @@ -39,7 +39,6 @@ #include "qwldatasource_p.h" #include "qwldataoffer_p.h" #include "qwaylandsurface_p.h" -#include "qwltouch_p.h" #include "qwldatadevicemanager_p.h" #include "qwaylanddrag.h" diff --git a/src/compositor/wayland_wrapper/wayland_wrapper.pri b/src/compositor/wayland_wrapper/wayland_wrapper.pri index 0de06a94a..91ccbe1f8 100644 --- a/src/compositor/wayland_wrapper/wayland_wrapper.pri +++ b/src/compositor/wayland_wrapper/wayland_wrapper.pri @@ -1,16 +1,12 @@ CONFIG += wayland-scanner WAYLANDSERVERSOURCES += \ ../3rdparty/protocol/wayland.xml \ - ../3rdparty/protocol/input-method.xml \ - ../3rdparty/protocol/text.xml HEADERS += \ wayland_wrapper/qwldatadevice_p.h \ wayland_wrapper/qwldatadevicemanager_p.h \ wayland_wrapper/qwldataoffer_p.h \ wayland_wrapper/qwldatasource_p.h \ - wayland_wrapper/qwlinputmethod_p.h \ - wayland_wrapper/qwlinputmethodcontext_p.h \ wayland_wrapper/qwlregion_p.h \ wayland_wrapper/qwlsurfacebuffer_p.h \ ../shared/qwaylandxkb.h \ @@ -20,8 +16,6 @@ SOURCES += \ wayland_wrapper/qwldatadevicemanager.cpp \ wayland_wrapper/qwldataoffer.cpp \ wayland_wrapper/qwldatasource.cpp \ - wayland_wrapper/qwlinputmethod.cpp \ - wayland_wrapper/qwlinputmethodcontext.cpp \ wayland_wrapper/qwlregion.cpp \ wayland_wrapper/qwlsurfacebuffer.cpp \ ../shared/qwaylandxkb.cpp \ |