summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@theqtcompany.com>2015-05-08 14:55:14 +0200
committerJørgen Lind <jorgen.lind@theqtcompany.com>2015-08-28 13:09:42 +0200
commitd1359f8b0c2b8fcffc2112d2e29d530ac1ab7c9a (patch)
tree0f7fdee380c657914065230d522f91a89563088e
parent85b1d4e6524504321fa769457eea5fb3b7e62e7e (diff)
Improve QWaylandExtension
By using curiously recurring template pattern we can generate a getter which is very convenient, and all QWaylandExtensions should have this casting operation Change-Id: Idb5a786655f2e106cf5388b11ed71e8b6ddddec0
-rw-r--r--examples/wayland/qwindow-compositor/qwindowcompositor.cpp2
-rw-r--r--src/compositor/compositor_api/qwaylandinputpanel.cpp9
-rw-r--r--src/compositor/compositor_api/qwaylandinputpanel.h5
-rw-r--r--src/compositor/compositor_api/qwaylandquicksurface.cpp5
-rw-r--r--src/compositor/compositor_api/qwaylandsurface.h4
-rw-r--r--src/compositor/extensions/qwaylandwindowmanagerextension.cpp18
-rw-r--r--src/compositor/extensions/qwaylandwindowmanagerextension.h5
-rw-r--r--src/compositor/extensions/qwaylandwindowmanagerextension_p.h2
-rw-r--r--src/compositor/extensions/qwlextendedsurface.cpp9
-rw-r--r--src/compositor/extensions/qwlextendedsurface_p.h10
-rw-r--r--src/compositor/extensions/qwlinputpanel.cpp15
-rw-r--r--src/compositor/extensions/qwlinputpanel_p.h4
-rw-r--r--src/compositor/extensions/qwlqtkey.cpp7
-rw-r--r--src/compositor/extensions/qwlqtkey_p.h5
-rw-r--r--src/compositor/extensions/qwlqttouch.cpp7
-rw-r--r--src/compositor/extensions/qwlqttouch_p.h5
-rw-r--r--src/compositor/extensions/qwlshellsurface.cpp14
-rw-r--r--src/compositor/extensions/qwlshellsurface_p.h11
-rw-r--r--src/compositor/extensions/qwlsubsurface.cpp4
-rw-r--r--src/compositor/extensions/qwlsubsurface_p.h7
-rw-r--r--src/compositor/extensions/qwltextinput.cpp2
-rw-r--r--src/compositor/extensions/qwltextinput_p.h3
-rw-r--r--src/compositor/extensions/qwltextinputmanager.cpp2
-rw-r--r--src/compositor/extensions/qwltextinputmanager_p.h3
-rw-r--r--src/compositor/global/qwaylandextension.cpp18
-rw-r--r--src/compositor/global/qwaylandextension.h54
-rw-r--r--src/compositor/global/qwaylandextension_p.h15
-rw-r--r--src/compositor/wayland_wrapper/qwltouch.cpp2
-rw-r--r--src/qtwaylandscanner/qtwaylandscanner.cpp2
29 files changed, 97 insertions, 152 deletions
diff --git a/examples/wayland/qwindow-compositor/qwindowcompositor.cpp b/examples/wayland/qwindow-compositor/qwindowcompositor.cpp
index b42855fd3..ca271ce60 100644
--- a/examples/wayland/qwindow-compositor/qwindowcompositor.cpp
+++ b/examples/wayland/qwindow-compositor/qwindowcompositor.cpp
@@ -199,7 +199,7 @@ void QWindowCompositor::surfaceMapped()
if (shellSurface && shellSurface->surfaceType() == QtWayland::ShellSurface::Popup) {
QWaylandSurfaceView *view = surface->views().first();
- view->setRequestedPosition(surface->transientParent()->views().first()->pos() + surface->transientOffset());
+ view->setRequestedPosition(shellSurface->transientParent()->views().first()->pos() + shellSurface->transientOffset());
}
m_surfaces.append(surface);
diff --git a/src/compositor/compositor_api/qwaylandinputpanel.cpp b/src/compositor/compositor_api/qwaylandinputpanel.cpp
index a7fa8214d..c0317c93a 100644
--- a/src/compositor/compositor_api/qwaylandinputpanel.cpp
+++ b/src/compositor/compositor_api/qwaylandinputpanel.cpp
@@ -74,9 +74,14 @@ QRect QWaylandInputPanel::cursorRectangle() const
return d->cursorRectangle();
}
-QWaylandInputPanel *QWaylandInputPanel::get(QWaylandExtensionContainer *container)
+const struct wl_interface *QWaylandInputPanel::interface()
{
- return static_cast<QWaylandInputPanel *>(container->extension(QtWaylandServer::wl_input_panel::name()));
+ return QWaylandInputPanelPrivate::interface();
+}
+
+QByteArray QWaylandInputPanel::interfaceName()
+{
+ return QWaylandInputPanelPrivate::interfaceName();
}
QT_END_NAMESPACE
diff --git a/src/compositor/compositor_api/qwaylandinputpanel.h b/src/compositor/compositor_api/qwaylandinputpanel.h
index 9336b7cad..1e5953360 100644
--- a/src/compositor/compositor_api/qwaylandinputpanel.h
+++ b/src/compositor/compositor_api/qwaylandinputpanel.h
@@ -53,7 +53,7 @@ namespace QtWayland {
class InputPanel;
}
-class Q_COMPOSITOR_EXPORT QWaylandInputPanel : public QWaylandExtensionTemplate
+class Q_COMPOSITOR_EXPORT QWaylandInputPanel : public QWaylandExtensionTemplate<QWaylandInputPanel>
{
Q_OBJECT
Q_DECLARE_PRIVATE(QWaylandInputPanel)
@@ -69,7 +69,8 @@ public:
bool visible() const;
QRect cursorRectangle() const;
- static QWaylandInputPanel *get(QWaylandExtensionContainer *container);
+ static const struct wl_interface *interface();
+ static QByteArray interfaceName();
Q_SIGNALS:
void focusChanged();
void visibleChanged();
diff --git a/src/compositor/compositor_api/qwaylandquicksurface.cpp b/src/compositor/compositor_api/qwaylandquicksurface.cpp
index ffa8f437f..8168147df 100644
--- a/src/compositor/compositor_api/qwaylandquicksurface.cpp
+++ b/src/compositor/compositor_api/qwaylandquicksurface.cpp
@@ -169,8 +169,9 @@ void QWaylandQuickSurface::setClientRenderingEnabled(bool enabled)
if (d->clientRenderingEnabled != enabled) {
d->clientRenderingEnabled = enabled;
- if (QWaylandExtension *extension = this->extension(QtWaylandServer::qt_extended_surface::name()))
- static_cast<QtWayland::ExtendedSurface*>(extension)->setVisibility(enabled ? QWindow::AutomaticVisibility : QWindow::Hidden);
+ if (QtWayland::ExtendedSurface *extSurface = QtWayland::ExtendedSurface::get(this))
+ extSurface->setVisibility(enabled ? QWindow::AutomaticVisibility : QWindow::Hidden);
+
emit clientRenderingEnabledChanged();
}
}
diff --git a/src/compositor/compositor_api/qwaylandsurface.h b/src/compositor/compositor_api/qwaylandsurface.h
index 6f80f32ed..8ed5db398 100644
--- a/src/compositor/compositor_api/qwaylandsurface.h
+++ b/src/compositor/compositor_api/qwaylandsurface.h
@@ -133,10 +133,6 @@ public:
Origin origin() const;
- QWaylandSurface *transientParent() const;
-
- QPointF transientOffset() const;
-
QtWayland::Surface *handle();
QByteArray authenticationToken() const;
diff --git a/src/compositor/extensions/qwaylandwindowmanagerextension.cpp b/src/compositor/extensions/qwaylandwindowmanagerextension.cpp
index 92b0d834a..80ccd02e1 100644
--- a/src/compositor/extensions/qwaylandwindowmanagerextension.cpp
+++ b/src/compositor/extensions/qwaylandwindowmanagerextension.cpp
@@ -50,7 +50,7 @@ QWaylandWindowManagerExtension::QWaylandWindowManagerExtension(QWaylandComposito
}
QWaylandWindowManagerExtensionPrivate::QWaylandWindowManagerExtensionPrivate(QWaylandCompositor *compositor)
- : QWaylandExtensionTemplatePrivateImpl(compositor)
+ : QWaylandExtensionTemplatePrivate(compositor)
, m_showIsFullScreen(false)
, m_compositor(compositor)
{
@@ -75,11 +75,6 @@ void QWaylandWindowManagerExtension::sendQuitMessage(wl_client *client)
d->send_quit(resource->handle);
}
-QWaylandWindowManagerExtension *QWaylandWindowManagerExtension::get(QWaylandExtensionContainer *container)
-{
- return static_cast<QWaylandWindowManagerExtension *>(container->extension(QtWaylandServer::qt_windowmanager::interface()));
-}
-
void QWaylandWindowManagerExtensionPrivate::windowmanager_bind_resource(Resource *resource)
{
send_hints(resource->handle, static_cast<int32_t>(m_showIsFullScreen));
@@ -105,4 +100,15 @@ void QWaylandWindowManagerExtensionPrivate::windowmanager_open_url(Resource *res
}
}
+const struct wl_interface *QWaylandWindowManagerExtension::interface()
+{
+ return QWaylandWindowManagerExtensionPrivate::interface();
+}
+
+QByteArray QWaylandWindowManagerExtension::interfaceName()
+{
+ return QWaylandWindowManagerExtensionPrivate::interfaceName();
+}
+
+
QT_END_NAMESPACE
diff --git a/src/compositor/extensions/qwaylandwindowmanagerextension.h b/src/compositor/extensions/qwaylandwindowmanagerextension.h
index 80f71dd51..681669387 100644
--- a/src/compositor/extensions/qwaylandwindowmanagerextension.h
+++ b/src/compositor/extensions/qwaylandwindowmanagerextension.h
@@ -52,7 +52,7 @@ class QWaylandCompositor;
class QWaylandWindowManagerExtensionPrivate;
-class Q_COMPOSITOR_EXPORT QWaylandWindowManagerExtension : public QWaylandExtensionTemplate
+class Q_COMPOSITOR_EXPORT QWaylandWindowManagerExtension : public QWaylandExtensionTemplate<QWaylandWindowManagerExtension>
{
Q_OBJECT
Q_DECLARE_PRIVATE(QWaylandWindowManagerExtension)
@@ -62,7 +62,8 @@ public:
void setShowIsFullScreen(bool value);
void sendQuitMessage(wl_client *client);
- static QWaylandWindowManagerExtension *get(QWaylandExtensionContainer *container);
+ static const struct wl_interface *interface();
+ static QByteArray interfaceName();
Q_SIGNALS:
void openUrl(QWaylandClient *client, const QUrl &url);
};
diff --git a/src/compositor/extensions/qwaylandwindowmanagerextension_p.h b/src/compositor/extensions/qwaylandwindowmanagerextension_p.h
index 94f389034..08638e5be 100644
--- a/src/compositor/extensions/qwaylandwindowmanagerextension_p.h
+++ b/src/compositor/extensions/qwaylandwindowmanagerextension_p.h
@@ -43,7 +43,7 @@
#include <QMap>
-class Q_COMPOSITOR_EXPORT QWaylandWindowManagerExtensionPrivate : public QWaylandExtensionTemplatePrivateImpl<QtWaylandServer::qt_windowmanager>
+class Q_COMPOSITOR_EXPORT QWaylandWindowManagerExtensionPrivate : public QWaylandExtensionTemplatePrivate, public QtWaylandServer::qt_windowmanager
{
Q_DECLARE_PUBLIC(QWaylandWindowManagerExtension)
public:
diff --git a/src/compositor/extensions/qwlextendedsurface.cpp b/src/compositor/extensions/qwlextendedsurface.cpp
index 42c100531..c9aae421a 100644
--- a/src/compositor/extensions/qwlextendedsurface.cpp
+++ b/src/compositor/extensions/qwlextendedsurface.cpp
@@ -44,7 +44,7 @@ QT_BEGIN_NAMESPACE
namespace QtWayland {
SurfaceExtensionGlobal::SurfaceExtensionGlobal(Compositor *compositor)
- : QWaylandExtension(compositor->waylandCompositor())
+ : QWaylandExtensionTemplate(compositor->waylandCompositor())
, QtWaylandServer::qt_surface_extension(compositor->wl_display(), 1)
{
}
@@ -57,13 +57,8 @@ void SurfaceExtensionGlobal::surface_extension_get_extended_surface(Resource *re
new ExtendedSurface(resource->client(),id, wl_resource_get_version(resource->handle), surface);
}
-ExtendedSurface *ExtendedSurface::get(QWaylandSurface *surface)
-{
- return static_cast<ExtendedSurface *>(surface->extension(qt_extended_surface::name()));
-}
-
ExtendedSurface::ExtendedSurface(struct wl_client *client, uint32_t id, int version, Surface *surface)
- : QWaylandExtension(surface->waylandSurface())
+ : QWaylandExtensionTemplate(surface->waylandSurface())
, QtWaylandServer::qt_extended_surface(client, id, version)
, m_surface(surface)
, m_windowFlags(0)
diff --git a/src/compositor/extensions/qwlextendedsurface_p.h b/src/compositor/extensions/qwlextendedsurface_p.h
index 09dee0246..f666c44a3 100644
--- a/src/compositor/extensions/qwlextendedsurface_p.h
+++ b/src/compositor/extensions/qwlextendedsurface_p.h
@@ -56,13 +56,11 @@ namespace QtWayland {
class Compositor;
-class SurfaceExtensionGlobal : public QWaylandExtension, public QtWaylandServer::qt_surface_extension
+class SurfaceExtensionGlobal : public QWaylandExtensionTemplate<SurfaceExtensionGlobal>, public QtWaylandServer::qt_surface_extension
{
public:
SurfaceExtensionGlobal(Compositor *compositor);
- const wl_interface *interface() const Q_DECL_OVERRIDE { return QtWaylandServer::qt_surface_extension::interface(); }
-
private:
void surface_extension_get_extended_surface(Resource *resource,
uint32_t id,
@@ -70,7 +68,7 @@ private:
};
-class Q_COMPOSITOR_EXPORT ExtendedSurface : public QWaylandExtension, public QtWaylandServer::qt_extended_surface
+class Q_COMPOSITOR_EXPORT ExtendedSurface : public QWaylandExtensionTemplate<ExtendedSurface>, public QtWaylandServer::qt_extended_surface
{
Q_OBJECT
Q_PROPERTY(Qt::ScreenOrientations contentOrientationMask READ contentOrientationMask NOTIFY contentOrientationMaskChanged)
@@ -84,8 +82,6 @@ public:
};
Q_DECLARE_FLAGS(WindowFlags, WindowFlag)
- static ExtendedSurface *get(QWaylandSurface *surface);
-
ExtendedSurface(struct wl_client *client, uint32_t id, int version, Surface *surface);
~ExtendedSurface();
@@ -109,8 +105,6 @@ public:
QVariant windowProperty(const QString &propertyName) const;
void setWindowProperty(const QString &name, const QVariant &value);
- const wl_interface *interface() const Q_DECL_OVERRIDE { return QtWaylandServer::qt_extended_surface::interface(); }
-
Q_SIGNALS:
void contentOrientationMaskChanged();
void windowFlagsChanged();
diff --git a/src/compositor/extensions/qwlinputpanel.cpp b/src/compositor/extensions/qwlinputpanel.cpp
index d1c6ab825..392a62baa 100644
--- a/src/compositor/extensions/qwlinputpanel.cpp
+++ b/src/compositor/extensions/qwlinputpanel.cpp
@@ -48,7 +48,8 @@
QT_BEGIN_NAMESPACE
QWaylandInputPanelPrivate::QWaylandInputPanelPrivate(QtWayland::Compositor *compositor)
- : QWaylandExtensionTemplatePrivateImpl(compositor->waylandCompositor())
+ : QWaylandExtensionTemplatePrivate(compositor->waylandCompositor())
+ , QtWaylandServer::wl_input_panel()
, m_compositor(compositor)
, m_focus()
, m_inputPanelVisible(false)
@@ -115,16 +116,16 @@ void QWaylandInputPanelPrivate::setCursorRectangle(const QRect &cursorRectangle)
Q_EMIT q->cursorRectangleChanged();
}
-QWaylandInputPanelPrivate *QWaylandInputPanelPrivate::get(QWaylandExtensionContainer *container)
+QWaylandInputPanelPrivate *QWaylandInputPanelPrivate::get(QWaylandInputPanel *panel)
{
- QWaylandInputPanel *panel = static_cast<QWaylandInputPanel *>(container->extension(wl_input_panel::name()));
- if (panel)
- return panel->d_func();
- return Q_NULLPTR;
+ return panel->d_func();
}
-QWaylandInputPanelPrivate *QWaylandInputPanelPrivate::get(QWaylandInputPanel *panel)
+QWaylandInputPanelPrivate *QWaylandInputPanelPrivate::get(QWaylandExtensionContainer *container)
{
+ QWaylandInputPanel *panel = QWaylandInputPanel::get(container);
+ if (!panel)
+ return Q_NULLPTR;
return panel->d_func();
}
diff --git a/src/compositor/extensions/qwlinputpanel_p.h b/src/compositor/extensions/qwlinputpanel_p.h
index 49a14e792..1add11e1a 100644
--- a/src/compositor/extensions/qwlinputpanel_p.h
+++ b/src/compositor/extensions/qwlinputpanel_p.h
@@ -55,7 +55,7 @@ class TextInput;
}
-class Q_COMPOSITOR_EXPORT QWaylandInputPanelPrivate : public QWaylandExtensionTemplatePrivateImpl<QtWaylandServer::wl_input_panel>
+class Q_COMPOSITOR_EXPORT QWaylandInputPanelPrivate : public QWaylandExtensionTemplatePrivate, public QtWaylandServer::wl_input_panel
{
Q_DECLARE_PUBLIC(QWaylandInputPanel)
public:
@@ -73,8 +73,8 @@ public:
QRect cursorRectangle() const;
void setCursorRectangle(const QRect &cursorRectangle);
- static QWaylandInputPanelPrivate *get(QWaylandExtensionContainer *container);
static QWaylandInputPanelPrivate *get(QWaylandInputPanel *panel);
+ static QWaylandInputPanelPrivate *get(QWaylandExtensionContainer *container);
protected:
void input_panel_get_input_panel_surface(Resource *resource, uint32_t id, struct ::wl_resource *surface) Q_DECL_OVERRIDE;
diff --git a/src/compositor/extensions/qwlqtkey.cpp b/src/compositor/extensions/qwlqtkey.cpp
index b7d567a0a..cc6bb7afd 100644
--- a/src/compositor/extensions/qwlqtkey.cpp
+++ b/src/compositor/extensions/qwlqtkey.cpp
@@ -44,7 +44,7 @@ QT_BEGIN_NAMESPACE
namespace QtWayland {
QtKeyExtensionGlobal::QtKeyExtensionGlobal(Compositor *compositor)
- : QWaylandExtension(compositor->waylandCompositor())
+ : QWaylandExtensionTemplate(compositor->waylandCompositor())
, QtWaylandServer::qt_key_extension(compositor->wl_display(), 2)
, m_compositor(compositor)
{
@@ -73,11 +73,6 @@ bool QtKeyExtensionGlobal::postQtKeyEvent(QKeyEvent *event, Surface *surface)
return false;
}
-QtKeyExtensionGlobal *QtKeyExtensionGlobal::get(QWaylandExtensionContainer *container)
-{
- return static_cast<QtKeyExtensionGlobal *>(container->extension(qt_key_extension::name()));
-}
-
}
QT_END_NAMESPACE
diff --git a/src/compositor/extensions/qwlqtkey_p.h b/src/compositor/extensions/qwlqtkey_p.h
index 542f6eae2..fa78037d3 100644
--- a/src/compositor/extensions/qwlqtkey_p.h
+++ b/src/compositor/extensions/qwlqtkey_p.h
@@ -51,7 +51,7 @@ class QKeyEvent;
namespace QtWayland {
-class QtKeyExtensionGlobal : public QWaylandExtension, public QtWaylandServer::qt_key_extension
+class QtKeyExtensionGlobal : public QWaylandExtensionTemplate<QtKeyExtensionGlobal>, public QtWaylandServer::qt_key_extension
{
Q_OBJECT
public:
@@ -59,9 +59,6 @@ public:
bool postQtKeyEvent(QKeyEvent *event, Surface *surface);
- const struct wl_interface *interface() const Q_DECL_OVERRIDE { return qt_key_extension::interface(); }
-
- static QtKeyExtensionGlobal *get(QWaylandExtensionContainer *container);
private:
Compositor *m_compositor;
};
diff --git a/src/compositor/extensions/qwlqttouch.cpp b/src/compositor/extensions/qwlqttouch.cpp
index 872bbdcb5..57de3965c 100644
--- a/src/compositor/extensions/qwlqttouch.cpp
+++ b/src/compositor/extensions/qwlqttouch.cpp
@@ -47,7 +47,7 @@ namespace QtWayland {
static const int maxRawPos = 24;
TouchExtensionGlobal::TouchExtensionGlobal(Compositor *compositor)
- : QWaylandExtension(compositor->waylandCompositor())
+ : QWaylandExtensionTemplate(compositor->waylandCompositor())
, QtWaylandServer::qt_touch_extension(compositor->wl_display(), 1)
, m_compositor(compositor)
, m_flags(0)
@@ -151,11 +151,6 @@ void TouchExtensionGlobal::setBehviorFlags(BehaviorFlags flags)
behaviorFlagsChanged();
}
-TouchExtensionGlobal *TouchExtensionGlobal::get(QWaylandExtensionContainer *container)
-{
- return static_cast<TouchExtensionGlobal *>(container->extension(qt_touch_extension::name()));
-}
-
void TouchExtensionGlobal::touch_extension_bind_resource(Resource *resource)
{
m_resources.append(resource);
diff --git a/src/compositor/extensions/qwlqttouch_p.h b/src/compositor/extensions/qwlqttouch_p.h
index 94c90949b..42d35433b 100644
--- a/src/compositor/extensions/qwlqttouch_p.h
+++ b/src/compositor/extensions/qwlqttouch_p.h
@@ -50,7 +50,7 @@ class QWaylandSurfaceView;
namespace QtWayland {
-class TouchExtensionGlobal : public QWaylandExtension, public QtWaylandServer::qt_touch_extension
+class TouchExtensionGlobal : public QWaylandExtensionTemplate<TouchExtensionGlobal>, public QtWaylandServer::qt_touch_extension
{
Q_OBJECT
Q_PROPERTY(BehaviorFlags behaviorFlags READ behaviorFlags WRITE setBehviorFlags NOTIFY behaviorFlagsChanged)
@@ -70,9 +70,6 @@ public:
void setBehviorFlags(BehaviorFlags flags);
BehaviorFlags behaviorFlags() const { return m_flags; }
- const struct wl_interface *interface() const Q_DECL_OVERRIDE { return QtWaylandServer::qt_touch_extension::interface(); }
-
- static TouchExtensionGlobal *get(QWaylandExtensionContainer *container);
Q_SIGNALS:
void behaviorFlagsChanged();
diff --git a/src/compositor/extensions/qwlshellsurface.cpp b/src/compositor/extensions/qwlshellsurface.cpp
index 2aea23ba4..da6f06622 100644
--- a/src/compositor/extensions/qwlshellsurface.cpp
+++ b/src/compositor/extensions/qwlshellsurface.cpp
@@ -56,16 +56,11 @@ QT_BEGIN_NAMESPACE
namespace QtWayland {
Shell::Shell(QWaylandCompositor *compositor)
- : QWaylandExtension(compositor)
+ : QWaylandExtensionTemplate(compositor)
, wl_shell(compositor->waylandDisplay(), 1)
{
}
-const wl_interface *Shell::interface() const
-{
- return &wl_shell_interface;
-}
-
ShellSurfacePopupGrabber *Shell::getPopupGrabber(QWaylandInputDevice *input)
{
if (!m_popupGrabber.contains(input))
@@ -80,13 +75,8 @@ void Shell::shell_get_shell_surface(Resource *resource, uint32_t id, struct ::wl
new ShellSurface(this, resource->client(), id, surface);
}
-ShellSurface *ShellSurface::get(QWaylandSurface *surface)
-{
- return static_cast<ShellSurface *>(surface->extension(wl_shell_surface::name()));
-}
-
ShellSurface::ShellSurface(Shell *shell, wl_client *client, uint32_t id, Surface *surface)
- : QWaylandExtension(surface->waylandSurface())
+ : QWaylandExtensionTemplate(surface->waylandSurface())
, wl_shell_surface(client, id, 1)
, m_shell(shell)
, m_surface(surface)
diff --git a/src/compositor/extensions/qwlshellsurface_p.h b/src/compositor/extensions/qwlshellsurface_p.h
index 8c1bfa710..3161fc6ef 100644
--- a/src/compositor/extensions/qwlshellsurface_p.h
+++ b/src/compositor/extensions/qwlshellsurface_p.h
@@ -62,14 +62,12 @@ class ShellSurfaceResizeGrabber;
class ShellSurfaceMoveGrabber;
class ShellSurfacePopupGrabber;
-class Shell : public QWaylandExtension, public QtWaylandServer::wl_shell
+class Shell : public QWaylandExtensionTemplate<Shell>, public QtWaylandServer::wl_shell
{
Q_OBJECT
public:
Shell(QWaylandCompositor *compositor);
- const wl_interface *interface() const Q_DECL_OVERRIDE;
-
ShellSurfacePopupGrabber* getPopupGrabber(QWaylandInputDevice *input);
private:
@@ -78,7 +76,7 @@ private:
QHash<QWaylandInputDevice *, ShellSurfacePopupGrabber*> m_popupGrabber;
};
-class Q_COMPOSITOR_EXPORT ShellSurface : public QWaylandExtension, public QtWaylandServer::wl_shell_surface
+class Q_COMPOSITOR_EXPORT ShellSurface : public QWaylandExtensionTemplate<ShellSurface>, public QtWaylandServer::wl_shell_surface
{
Q_OBJECT
Q_PROPERTY(SurfaceType surfaceType READ surfaceType WRITE setSurfaceType NOTIFY surfaceTypeChanged)
@@ -90,8 +88,6 @@ public:
Popup
};
- static ShellSurface *get(QWaylandSurface *surface);
-
ShellSurface(Shell *shell, struct wl_client *client, uint32_t id, Surface *surface);
~ShellSurface();
void sendConfigure(uint32_t edges, int32_t width, int32_t height);
@@ -111,8 +107,6 @@ public:
QWaylandSurfaceView *view() { return m_view; }
- const struct wl_interface *interface() const Q_DECL_OVERRIDE { return QtWaylandServer::wl_shell_surface::interface(); }
-
void setSurfaceType(SurfaceType type);
SurfaceType surfaceType() const;
@@ -122,6 +116,7 @@ public:
void setTransientParent(QWaylandSurface *parent) { m_transientParent = parent; }
void setTransientOffset(const QPointF &offset) { m_transientOffset = offset; }
+ QPointF transientOffset() const { return m_transientOffset; }
Q_SIGNALS:
void surfaceTypeChanged();
diff --git a/src/compositor/extensions/qwlsubsurface.cpp b/src/compositor/extensions/qwlsubsurface.cpp
index fb99fbe81..a9e6183c5 100644
--- a/src/compositor/extensions/qwlsubsurface.cpp
+++ b/src/compositor/extensions/qwlsubsurface.cpp
@@ -45,7 +45,7 @@ QT_BEGIN_NAMESPACE
namespace QtWayland {
SubSurfaceExtensionGlobal::SubSurfaceExtensionGlobal(QWaylandCompositor *compositor)
- : QWaylandExtension(compositor)
+ : QWaylandExtensionTemplate(compositor)
, qt_sub_surface_extension(compositor->waylandDisplay(), 1)
, m_compositor(compositor)
{
@@ -60,7 +60,7 @@ void SubSurfaceExtensionGlobal::sub_surface_extension_get_sub_surface_aware_surf
}
SubSurface::SubSurface(wl_client *client, uint32_t id, QWaylandSurface *surface)
- : QWaylandExtension(surface)
+ : QWaylandExtensionTemplate(surface)
, qt_sub_surface(client, id, 1)
, m_surface(surface)
, m_parent(0)
diff --git a/src/compositor/extensions/qwlsubsurface_p.h b/src/compositor/extensions/qwlsubsurface_p.h
index 255544f74..d86b6e7ea 100644
--- a/src/compositor/extensions/qwlsubsurface_p.h
+++ b/src/compositor/extensions/qwlsubsurface_p.h
@@ -50,20 +50,19 @@ class QWaylandSurface;
namespace QtWayland {
-class SubSurfaceExtensionGlobal : public QWaylandExtension, public QtWaylandServer::qt_sub_surface_extension
+class SubSurfaceExtensionGlobal : public QWaylandExtensionTemplate<SubSurfaceExtensionGlobal>, public QtWaylandServer::qt_sub_surface_extension
{
Q_OBJECT
public:
SubSurfaceExtensionGlobal(QWaylandCompositor *compositor);
- const struct wl_interface *interface() const { return qt_sub_surface_extension::interface(); }
private:
QWaylandCompositor *m_compositor;
void sub_surface_extension_get_sub_surface_aware_surface(Resource *resource, uint32_t id, struct ::wl_resource *surface) Q_DECL_OVERRIDE;
};
-class SubSurface : public QWaylandExtension, public QtWaylandServer::qt_sub_surface
+class SubSurface : public QWaylandExtensionTemplate<SubSurface>, public QtWaylandServer::qt_sub_surface
{
Q_OBJECT
Q_PROPERTY(SubSurface *parent READ parent WRITE setParent NOTIFY parentChanged)
@@ -81,8 +80,6 @@ public:
QWaylandSurface *surface() const;
- const struct wl_interface *interface() const { return qt_sub_surface::interface(); }
-
Q_SIGNALS:
void parentChanged(SubSurface *newParent, SubSurface *oldParent);
diff --git a/src/compositor/extensions/qwltextinput.cpp b/src/compositor/extensions/qwltextinput.cpp
index 5b5f8a6df..57dbff43f 100644
--- a/src/compositor/extensions/qwltextinput.cpp
+++ b/src/compositor/extensions/qwltextinput.cpp
@@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE
namespace QtWayland {
TextInput::TextInput(QWaylandExtensionContainer *container, Compositor *compositor, struct ::wl_client *client, int id)
- : QWaylandExtension(container)
+ : QWaylandExtensionTemplate(container)
, wl_text_input(client, id, 1)
, m_compositor(compositor)
, m_focus()
diff --git a/src/compositor/extensions/qwltextinput_p.h b/src/compositor/extensions/qwltextinput_p.h
index 60485d32d..7580c86f2 100644
--- a/src/compositor/extensions/qwltextinput_p.h
+++ b/src/compositor/extensions/qwltextinput_p.h
@@ -50,7 +50,7 @@ class Compositor;
class InputMethod;
class Surface;
-class TextInput : public QWaylandExtension, public QtWaylandServer::wl_text_input
+class TextInput : public QWaylandExtensionTemplate<TextInput>, public QtWaylandServer::wl_text_input
{
public:
explicit TextInput(QWaylandExtensionContainer *container, Compositor *compositor, struct ::wl_client *client, int id);
@@ -62,7 +62,6 @@ public:
void deactivate(InputMethod *inputMethod);
- const struct wl_interface *interface() const Q_DECL_OVERRIDE { return wl_text_input::interface(); }
protected:
void text_input_destroy_resource(Resource *resource) Q_DECL_OVERRIDE;
diff --git a/src/compositor/extensions/qwltextinputmanager.cpp b/src/compositor/extensions/qwltextinputmanager.cpp
index 738680151..b45a7e385 100644
--- a/src/compositor/extensions/qwltextinputmanager.cpp
+++ b/src/compositor/extensions/qwltextinputmanager.cpp
@@ -44,7 +44,7 @@ QT_BEGIN_NAMESPACE
namespace QtWayland {
TextInputManager::TextInputManager(Compositor *compositor)
- : QWaylandExtension(compositor->waylandCompositor())
+ : QWaylandExtensionTemplate(compositor->waylandCompositor())
, QtWaylandServer::wl_text_input_manager(compositor->wl_display(), 1)
, m_compositor(compositor)
{
diff --git a/src/compositor/extensions/qwltextinputmanager_p.h b/src/compositor/extensions/qwltextinputmanager_p.h
index b9f3a0ae5..234d4ab1e 100644
--- a/src/compositor/extensions/qwltextinputmanager_p.h
+++ b/src/compositor/extensions/qwltextinputmanager_p.h
@@ -46,14 +46,13 @@ namespace QtWayland {
class Compositor;
-class TextInputManager : public QWaylandExtension, public QtWaylandServer::wl_text_input_manager, public QWaylandExtensionContainer
+class TextInputManager : public QWaylandExtensionTemplate<TextInputManager>, public QtWaylandServer::wl_text_input_manager, public QWaylandExtensionContainer
{
Q_OBJECT
public:
TextInputManager(Compositor *compositor);
~TextInputManager();
- const struct wl_interface *interface() const Q_DECL_OVERRIDE { return wl_text_input_manager::interface(); }
protected:
void text_input_manager_create_text_input(Resource *resource, uint32_t id) Q_DECL_OVERRIDE;
diff --git a/src/compositor/global/qwaylandextension.cpp b/src/compositor/global/qwaylandextension.cpp
index 55fd994ee..e255aecc3 100644
--- a/src/compositor/global/qwaylandextension.cpp
+++ b/src/compositor/global/qwaylandextension.cpp
@@ -70,7 +70,7 @@ QWaylandExtensionContainer::~QWaylandExtensionContainer()
QWaylandExtension *QWaylandExtensionContainer::extension(const QByteArray &name)
{
for (int i = 0; i < extension_vector.size(); i++) {
- if (extension_vector.at(i)->name() == name)
+ if (extension_vector.at(i)->extensionInterface()->name == name)
return extension_vector.at(i);
}
return Q_NULLPTR;
@@ -79,7 +79,7 @@ QWaylandExtension *QWaylandExtensionContainer::extension(const QByteArray &name)
QWaylandExtension *QWaylandExtensionContainer::extension(const wl_interface *interface)
{
for (int i = 0; i < extension_vector.size(); i++) {
- if (extension_vector.at(i)->interface() == interface)
+ if (extension_vector.at(i)->extensionInterface() == interface)
return extension_vector.at(i);
}
return Q_NULLPTR;
@@ -101,18 +101,4 @@ void QWaylandExtensionContainer::removeExtension(QWaylandExtension *extension)
extension_vector.removeOne(extension);
}
-QWaylandExtensionTemplate::QWaylandExtensionTemplate(QWaylandExtensionContainer *container, QObject *parent)
- : QWaylandExtension(container, parent)
-{ }
-
-QWaylandExtensionTemplate::QWaylandExtensionTemplate(QWaylandExtensionTemplatePrivate &dd, QObject *parent)
- : QWaylandExtension(dd, parent)
-{ }
-
-const struct wl_interface *QWaylandExtensionTemplate::interface() const
-{
- Q_D(const QWaylandExtensionTemplate);
- return d->interface();
-}
-
QT_END_NAMESPACE
diff --git a/src/compositor/global/qwaylandextension.h b/src/compositor/global/qwaylandextension.h
index e31c6398d..dbb87a99b 100644
--- a/src/compositor/global/qwaylandextension.h
+++ b/src/compositor/global/qwaylandextension.h
@@ -46,27 +46,10 @@
QT_BEGIN_NAMESPACE
class QWaylandCompositor;
-class QWaylandExtensionContainer;
+class QWaylandExtension;
class QWaylandExtensionPrivate;
class QWaylandExtensionTemplatePrivate;
-class Q_COMPOSITOR_EXPORT QWaylandExtension : public QObject
-{
- Q_OBJECT
- Q_DECLARE_PRIVATE(QWaylandExtension)
-public:
- QWaylandExtension(QWaylandExtensionContainer *container, QObject *parent = 0);
- virtual ~QWaylandExtension();
-
- virtual const struct wl_interface *interface() const = 0;
-
- const QByteArray name() const { return interface()->name; }
- quint32 version() const { return interface()->version; }
-
-protected:
- QWaylandExtension(QWaylandExtensionPrivate &dd, QObject *parent = 0);
-};
-
class Q_COMPOSITOR_EXPORT QWaylandExtensionContainer
{
public:
@@ -82,17 +65,44 @@ protected:
QVector<QWaylandExtension *> extension_vector;
};
-class Q_COMPOSITOR_EXPORT QWaylandExtensionTemplate : public QWaylandExtension
+class Q_COMPOSITOR_EXPORT QWaylandExtension : public QObject
{
Q_OBJECT
+ Q_DECLARE_PRIVATE(QWaylandExtension)
+public:
+ QWaylandExtension(QWaylandExtensionContainer *container, QObject *parent = 0);
+ virtual ~QWaylandExtension();
+
+ virtual const struct wl_interface *extensionInterface() const = 0;
+
+protected:
+ QWaylandExtension(QWaylandExtensionPrivate &dd, QObject *parent = 0);
+};
+
+template <typename T>
+class Q_COMPOSITOR_EXPORT QWaylandExtensionTemplate : public QWaylandExtension
+{
Q_DECLARE_PRIVATE(QWaylandExtensionTemplate)
public:
- QWaylandExtensionTemplate(QWaylandExtensionContainer *container, QObject *parent = 0);
+ QWaylandExtensionTemplate(QWaylandExtensionContainer *container, QObject *parent = 0)
+ : QWaylandExtension(container, parent)
+ { }
+
+ const struct wl_interface *extensionInterface() const Q_DECL_OVERRIDE
+ {
+ return T::interface();
+ }
- const struct wl_interface *interface() const Q_DECL_OVERRIDE;
+ static T *get(QWaylandExtensionContainer *container)
+ {
+ if (!container) return Q_NULLPTR;
+ return qobject_cast<T *>(container->extension(T::interfaceName()));
+ }
protected:
- QWaylandExtensionTemplate(QWaylandExtensionTemplatePrivate &dd, QObject *parent = 0);
+ QWaylandExtensionTemplate(QWaylandExtensionTemplatePrivate &dd, QObject *parent = 0)
+ : QWaylandExtension(dd, parent)
+ { }
};
QT_END_NAMESPACE
diff --git a/src/compositor/global/qwaylandextension_p.h b/src/compositor/global/qwaylandextension_p.h
index b86943650..5ca5bd3cf 100644
--- a/src/compositor/global/qwaylandextension_p.h
+++ b/src/compositor/global/qwaylandextension_p.h
@@ -56,25 +56,10 @@ public:
class Q_COMPOSITOR_EXPORT QWaylandExtensionTemplatePrivate : public QWaylandExtensionPrivate
{
- Q_DECLARE_PUBLIC(QWaylandExtension)
-
public:
QWaylandExtensionTemplatePrivate(QWaylandExtensionContainer *container)
: QWaylandExtensionPrivate(container)
- {}
-
- virtual const struct wl_interface *interface() const = 0;
-};
-
-template <typename T>
-class Q_COMPOSITOR_EXPORT QWaylandExtensionTemplatePrivateImpl : public QWaylandExtensionTemplatePrivate, public T
-{
-public:
- QWaylandExtensionTemplatePrivateImpl(QWaylandExtensionContainer *container)
- : QWaylandExtensionTemplatePrivate(container)
{ }
-
- const struct wl_interface *interface() const Q_DECL_OVERRIDE { return T::interface(); }
};
#endif /*QWAYLANDEXTENSION_P_H*/
diff --git a/src/compositor/wayland_wrapper/qwltouch.cpp b/src/compositor/wayland_wrapper/qwltouch.cpp
index 11ed148a2..77464d81d 100644
--- a/src/compositor/wayland_wrapper/qwltouch.cpp
+++ b/src/compositor/wayland_wrapper/qwltouch.cpp
@@ -138,7 +138,7 @@ void QWaylandTouchPrivate::sendFullTouchEvent(QTouchEvent *event)
return;
}
- QtWayland::TouchExtensionGlobal *ext = qobject_cast<QtWayland::TouchExtensionGlobal *>(compositor()->extension(QtWaylandServer::qt_touch_extension::name()));
+ QtWayland::TouchExtensionGlobal *ext = QtWayland::TouchExtensionGlobal::get(compositor());
if (ext && ext->postTouchEvent(event, m_seat->mouseFocus()))
return;
diff --git a/src/qtwaylandscanner/qtwaylandscanner.cpp b/src/qtwaylandscanner/qtwaylandscanner.cpp
index 1945f64c8..78873c714 100644
--- a/src/qtwaylandscanner/qtwaylandscanner.cpp
+++ b/src/qtwaylandscanner/qtwaylandscanner.cpp
@@ -451,7 +451,7 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath, const QByteArr
printf(" bool isResource() const { return m_resource != 0; }\n");
printf("\n");
printf(" static const struct ::wl_interface *interface();\n");
- printf(" static QByteArray name() { return interface()->name; }\n");
+ printf(" static QByteArray interfaceName() { return interface()->name; }\n");
printf(" static int interfaceVersion() { return interface()->version; }\n");
printf("\n");