diff options
author | Johan Klokkhammer Helsing <johan.helsing@qt.io> | 2018-11-16 12:26:14 +0100 |
---|---|---|
committer | Johan Helsing <johan.helsing@qt.io> | 2018-11-21 12:18:12 +0000 |
commit | 792057b7124bfc9a9aa0b1110693d6f868a1de58 (patch) | |
tree | 37427524721f757a0ab202f6bd5c1e2a80c55438 /src/compositor | |
parent | 6b077d6cdb6f1131de47574c617360f44a0625e7 (diff) |
Add convenience for converting wl_resource * to wrapper types
Change-Id: Ieb2f9706ac707ff878165d3f9001e4a28b8ff1ce
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Diffstat (limited to 'src/compositor')
-rw-r--r-- | src/compositor/compositor_api/qwaylandoutput.cpp | 5 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandseat.cpp | 5 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandsurface.cpp | 7 | ||||
-rw-r--r-- | src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5_p.h | 3 | ||||
-rw-r--r-- | src/compositor/extensions/qwaylandivisurface.cpp | 9 | ||||
-rw-r--r-- | src/compositor/extensions/qwaylandwlshell.cpp | 6 | ||||
-rw-r--r-- | src/compositor/extensions/qwaylandxdgshell.cpp | 16 | ||||
-rw-r--r-- | src/compositor/extensions/qwaylandxdgshellv5.cpp | 15 | ||||
-rw-r--r-- | src/compositor/extensions/qwaylandxdgshellv6.cpp | 12 | ||||
-rw-r--r-- | src/compositor/global/global.pri | 1 | ||||
-rw-r--r-- | src/compositor/global/qwaylandutils_p.h | 73 | ||||
-rw-r--r-- | src/compositor/wayland_wrapper/qwldatasource.cpp | 3 | ||||
-rw-r--r-- | src/compositor/wayland_wrapper/qwlregion.cpp | 6 |
13 files changed, 119 insertions, 42 deletions
diff --git a/src/compositor/compositor_api/qwaylandoutput.cpp b/src/compositor/compositor_api/qwaylandoutput.cpp index 1f34f4eac..006edbe6a 100644 --- a/src/compositor/compositor_api/qwaylandoutput.cpp +++ b/src/compositor/compositor_api/qwaylandoutput.cpp @@ -47,6 +47,7 @@ #include <QtWaylandCompositor/private/qwaylandsurface_p.h> #include <QtWaylandCompositor/private/qwaylandcompositor_p.h> #include <QtWaylandCompositor/private/qwaylandview_p.h> +#include <QtWaylandCompositor/private/qwaylandutils_p.h> #include <QtCore/QCoreApplication> #include <QtCore/QtMath> @@ -350,8 +351,8 @@ void QWaylandOutput::initialize() */ QWaylandOutput *QWaylandOutput::fromResource(wl_resource *resource) { - if (auto *r = QWaylandOutputPrivate::Resource::fromResource(resource)) - return static_cast<QWaylandOutputPrivate *>(r->output_object)->q_func(); + if (auto p = QtWayland::fromResource<QWaylandOutputPrivate *>(resource)) + return p->q_func(); return nullptr; } diff --git a/src/compositor/compositor_api/qwaylandseat.cpp b/src/compositor/compositor_api/qwaylandseat.cpp index a7b01ef03..d135ad035 100644 --- a/src/compositor/compositor_api/qwaylandseat.cpp +++ b/src/compositor/compositor_api/qwaylandseat.cpp @@ -54,6 +54,7 @@ #if QT_CONFIG(wayland_datadevice) #include <QtWaylandCompositor/private/qwldatadevice_p.h> #endif +#include <QtWaylandCompositor/private/qwaylandutils_p.h> #include "extensions/qwlqtkey_p.h" #include "extensions/qwaylandtextinput.h" @@ -631,8 +632,8 @@ bool QWaylandSeat::isOwner(QInputEvent *inputEvent) const */ QWaylandSeat *QWaylandSeat::fromSeatResource(struct ::wl_resource *resource) { - if (auto *r = QWaylandSeatPrivate::Resource::fromResource(resource)) - return static_cast<QWaylandSeatPrivate *>(r->seat_object)->q_func(); + if (auto p = QtWayland::fromResource<QWaylandSeatPrivate *>(resource)) + return p->q_func(); return nullptr; } diff --git a/src/compositor/compositor_api/qwaylandsurface.cpp b/src/compositor/compositor_api/qwaylandsurface.cpp index 59e741c84..be08b17c7 100644 --- a/src/compositor/compositor_api/qwaylandsurface.cpp +++ b/src/compositor/compositor_api/qwaylandsurface.cpp @@ -59,6 +59,7 @@ #include <QtWaylandCompositor/private/qwaylandcompositor_p.h> #include <QtWaylandCompositor/private/qwaylandview_p.h> #include <QtWaylandCompositor/private/qwaylandseat_p.h> +#include <QtWaylandCompositor/private/qwaylandutils_p.h> #include <QtCore/private/qobject_p.h> @@ -793,10 +794,10 @@ QList<QWaylandView *> QWaylandSurface::views() const /*! * Returns the QWaylandSurface corresponding to the Wayland resource \a res. */ -QWaylandSurface *QWaylandSurface::fromResource(::wl_resource *res) +QWaylandSurface *QWaylandSurface::fromResource(::wl_resource *resource) { - if (auto *r = QWaylandSurfacePrivate::Resource::fromResource(res)) - return static_cast<QWaylandSurfacePrivate *>(r->surface_object)->q_func(); + if (auto p = QtWayland::fromResource<QWaylandSurfacePrivate *>(resource)) + return p->q_func(); return nullptr; } diff --git a/src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5_p.h b/src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5_p.h index 63817a5e3..8124860b9 100644 --- a/src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5_p.h +++ b/src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5_p.h @@ -71,6 +71,7 @@ namespace QtWaylandServer { virtual ~Resource() {} xdg_shell_v5 *xdg_shell_object; + xdg_shell_v5 *object() { return xdg_shell_object; } struct ::wl_resource *handle; struct ::wl_client *client() const { return wl_resource_get_client(handle); } @@ -191,6 +192,7 @@ namespace QtWaylandServer { virtual ~Resource() {} xdg_surface_v5 *xdg_surface_object; + xdg_surface_v5 *object() { return xdg_surface_object; } struct ::wl_resource *handle; struct ::wl_client *client() const { return wl_resource_get_client(handle); } @@ -364,6 +366,7 @@ namespace QtWaylandServer { virtual ~Resource() {} xdg_popup_v5 *xdg_popup_object; + xdg_popup_v5 *object() { return xdg_popup_object; } struct ::wl_resource *handle; struct ::wl_client *client() const { return wl_resource_get_client(handle); } diff --git a/src/compositor/extensions/qwaylandivisurface.cpp b/src/compositor/extensions/qwaylandivisurface.cpp index f6b87fb99..f0beef738 100644 --- a/src/compositor/extensions/qwaylandivisurface.cpp +++ b/src/compositor/extensions/qwaylandivisurface.cpp @@ -46,6 +46,8 @@ #include <QtWaylandCompositor/QWaylandResource> +#include <QtWaylandCompositor/private/qwaylandutils_p.h> + QT_BEGIN_NAMESPACE QWaylandSurfaceRole QWaylandIviSurfacePrivate::s_role("ivi_surface"); @@ -181,10 +183,9 @@ QWaylandSurfaceRole *QWaylandIviSurface::role() */ QWaylandIviSurface *QWaylandIviSurface::fromResource(wl_resource *resource) { - auto iviSurfaceResource = QWaylandIviSurfacePrivate::Resource::fromResource(resource); - if (!iviSurfaceResource) - return nullptr; - return static_cast<QWaylandIviSurfacePrivate *>(iviSurfaceResource->ivi_surface_object)->q_func(); + if (auto p = QtWayland::fromResource<QWaylandIviSurfacePrivate *>(resource)) + return p->q_func(); + return nullptr; } /*! diff --git a/src/compositor/extensions/qwaylandwlshell.cpp b/src/compositor/extensions/qwaylandwlshell.cpp index d932a06c9..3f6734632 100644 --- a/src/compositor/extensions/qwaylandwlshell.cpp +++ b/src/compositor/extensions/qwaylandwlshell.cpp @@ -44,6 +44,7 @@ #ifdef QT_WAYLAND_COMPOSITOR_QUICK #include "qwaylandwlshellintegration_p.h" #endif +#include <QtWaylandCompositor/private/qwaylandutils_p.h> #include <QtWaylandCompositor/QWaylandCompositor> #include <QtWaylandCompositor/QWaylandView> @@ -699,9 +700,8 @@ void QWaylandWlShellSurface::ping() */ QWaylandWlShellSurface *QWaylandWlShellSurface::fromResource(wl_resource *resource) { - QWaylandWlShellSurfacePrivate::Resource *res = QWaylandWlShellSurfacePrivate::Resource::fromResource(resource); - if (res) - return static_cast<QWaylandWlShellSurfacePrivate *>(res->shell_surface_object)->q_func(); + if (auto p = QtWayland::fromResource<QWaylandWlShellSurfacePrivate *>(resource)) + return p->q_func(); return nullptr; } diff --git a/src/compositor/extensions/qwaylandxdgshell.cpp b/src/compositor/extensions/qwaylandxdgshell.cpp index d0df8f066..6f0c83122 100644 --- a/src/compositor/extensions/qwaylandxdgshell.cpp +++ b/src/compositor/extensions/qwaylandxdgshell.cpp @@ -40,6 +40,7 @@ #ifdef QT_WAYLAND_COMPOSITOR_QUICK #include "qwaylandxdgshellintegration_p.h" #endif +#include <QtWaylandCompositor/private/qwaylandutils_p.h> #include <QtWaylandCompositor/QWaylandCompositor> #include <QtWaylandCompositor/QWaylandSeat> @@ -674,10 +675,9 @@ QByteArray QWaylandXdgSurface::interfaceName() */ QWaylandXdgSurface *QWaylandXdgSurface::fromResource(wl_resource *resource) { - auto xsResource = QWaylandXdgSurfacePrivate::Resource::fromResource(resource); - if (!xsResource) - return nullptr; - return static_cast<QWaylandXdgSurfacePrivate *>(xsResource->xdg_surface_object)->q_func(); + if (auto p = QtWayland::fromResource<QWaylandXdgSurfacePrivate *>(resource)) + return p->q_func(); + return nullptr; } #ifdef QT_WAYLAND_COMPOSITOR_QUICK @@ -1182,8 +1182,8 @@ QWaylandSurfaceRole *QWaylandXdgToplevel::role() */ QWaylandXdgToplevel *QWaylandXdgToplevel::fromResource(wl_resource *resource) { - if (auto *r = QWaylandXdgToplevelPrivate::Resource::fromResource(resource)) - return static_cast<QWaylandXdgToplevelPrivate *>(r->xdg_toplevel_object)->q_func(); + if (auto p = QtWayland::fromResource<QWaylandXdgToplevelPrivate *>(resource)) + return p->q_func(); return nullptr; } @@ -2064,9 +2064,7 @@ void QWaylandXdgPositioner::xdg_positioner_set_offset(QtWaylandServer::xdg_posit QWaylandXdgPositioner *QWaylandXdgPositioner::fromResource(wl_resource *resource) { - if (auto *r = Resource::fromResource(resource)) - return static_cast<QWaylandXdgPositioner *>(r->xdg_positioner_object); - return nullptr; + return QtWayland::fromResource<QWaylandXdgPositioner *>(resource); } Qt::Edges QWaylandXdgPositioner::convertToEdges(anchor anchor) diff --git a/src/compositor/extensions/qwaylandxdgshellv5.cpp b/src/compositor/extensions/qwaylandxdgshellv5.cpp index 2e3b76dc7..9e157a8a3 100644 --- a/src/compositor/extensions/qwaylandxdgshellv5.cpp +++ b/src/compositor/extensions/qwaylandxdgshellv5.cpp @@ -43,6 +43,7 @@ #ifdef QT_WAYLAND_COMPOSITOR_QUICK #include "qwaylandxdgshellv5integration_p.h" #endif +#include <QtWaylandCompositor/private/qwaylandutils_p.h> #include <QtWaylandCompositor/QWaylandCompositor> #include <QtWaylandCompositor/QWaylandSurface> @@ -1179,10 +1180,9 @@ QWaylandSurfaceRole *QWaylandXdgSurfaceV5::role() */ QWaylandXdgSurfaceV5 *QWaylandXdgSurfaceV5::fromResource(wl_resource *resource) { - auto xsResource = QWaylandXdgSurfaceV5Private::Resource::fromResource(resource); - if (!xsResource) - return nullptr; - return static_cast<QWaylandXdgSurfaceV5Private *>(xsResource->xdg_surface_object)->q_func(); + if (auto p = QtWayland::fromResource<QWaylandXdgSurfaceV5Private *>(resource)) + return p->q_func(); + return nullptr; } QSize QWaylandXdgSurfaceV5::sizeForResize(const QSizeF &size, const QPointF &delta, @@ -1497,10 +1497,9 @@ QWaylandSurfaceRole *QWaylandXdgPopupV5::role() QWaylandXdgPopupV5 *QWaylandXdgPopupV5::fromResource(wl_resource *resource) { - auto popupResource = QWaylandXdgPopupV5Private::Resource::fromResource(resource); - if (!popupResource) - return nullptr; - return static_cast<QWaylandXdgPopupV5Private *>(popupResource->xdg_popup_object)->q_func(); + if (auto p = QtWayland::fromResource<QWaylandXdgPopupV5Private *>(resource)) + return p->q_func(); + return nullptr; } void QWaylandXdgPopupV5::sendPopupDone() diff --git a/src/compositor/extensions/qwaylandxdgshellv6.cpp b/src/compositor/extensions/qwaylandxdgshellv6.cpp index e6741bfbc..9aab9b2b8 100644 --- a/src/compositor/extensions/qwaylandxdgshellv6.cpp +++ b/src/compositor/extensions/qwaylandxdgshellv6.cpp @@ -40,6 +40,7 @@ #ifdef QT_WAYLAND_COMPOSITOR_QUICK #include "qwaylandxdgshellv6integration_p.h" #endif +#include <QtWaylandCompositor/private/qwaylandutils_p.h> #include <QtWaylandCompositor/QWaylandCompositor> #include <QtWaylandCompositor/QWaylandSeat> @@ -679,10 +680,9 @@ QByteArray QWaylandXdgSurfaceV6::interfaceName() */ QWaylandXdgSurfaceV6 *QWaylandXdgSurfaceV6::fromResource(wl_resource *resource) { - auto xsResource = QWaylandXdgSurfaceV6Private::Resource::fromResource(resource); - if (!xsResource) - return nullptr; - return static_cast<QWaylandXdgSurfaceV6Private *>(xsResource->zxdg_surface_v6_object)->q_func(); + if (auto p = QtWayland::fromResource<QWaylandXdgSurfaceV6Private *>(resource)) + return p->q_func(); + return nullptr; } #ifdef QT_WAYLAND_COMPOSITOR_QUICK @@ -1995,9 +1995,7 @@ void QWaylandXdgPositionerV6::zxdg_positioner_v6_set_offset(QtWaylandServer::zxd QWaylandXdgPositionerV6 *QWaylandXdgPositionerV6::fromResource(wl_resource *resource) { - if (auto *r = Resource::fromResource(resource)) - return static_cast<QWaylandXdgPositionerV6 *>(r->zxdg_positioner_v6_object); - return nullptr; + return QtWayland::fromResource<QWaylandXdgPositionerV6 *>(resource); } QT_END_NAMESPACE diff --git a/src/compositor/global/global.pri b/src/compositor/global/global.pri index 29d4f4376..172f916bf 100644 --- a/src/compositor/global/global.pri +++ b/src/compositor/global/global.pri @@ -4,6 +4,7 @@ HEADERS += \ global/qtwaylandcompositorglobal.h \ global/qwaylandcompositorextension.h \ global/qwaylandcompositorextension_p.h \ + global/qwaylandutils_p.h \ global/qwaylandquickextension.h \ SOURCES += \ diff --git a/src/compositor/global/qwaylandutils_p.h b/src/compositor/global/qwaylandutils_p.h new file mode 100644 index 000000000..934e27617 --- /dev/null +++ b/src/compositor/global/qwaylandutils_p.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDUTILS_P_H +#define QWAYLANDUTILS_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtCore/qglobal.h> + +struct wl_resource; + +QT_BEGIN_NAMESPACE + +namespace QtWayland { + +template<typename return_type> +return_type fromResource(struct ::wl_resource *resource) { + if (auto *r = std::remove_pointer<return_type>::type::Resource::fromResource(resource)) + return static_cast<return_type>(r->object()); + return nullptr; +} + +} // namespace QtWayland + +QT_END_NAMESPACE + +#endif // QWAYLANDUTILS_P_H diff --git a/src/compositor/wayland_wrapper/qwldatasource.cpp b/src/compositor/wayland_wrapper/qwldatasource.cpp index baa47d6fc..f5f456790 100644 --- a/src/compositor/wayland_wrapper/qwldatasource.cpp +++ b/src/compositor/wayland_wrapper/qwldatasource.cpp @@ -41,6 +41,7 @@ #include "qwldataoffer_p.h" #include "qwldatadevice_p.h" #include "qwldatadevicemanager_p.h" +#include <QtWaylandCompositor/private/qwaylandutils_p.h> #include <unistd.h> #include <QtWaylandCompositor/private/wayland-wayland-server-protocol.h> @@ -101,7 +102,7 @@ void DataSource::setDevice(DataDevice *device) DataSource *DataSource::fromResource(struct ::wl_resource *resource) { - return static_cast<DataSource *>(Resource::fromResource(resource)->data_source_object); + return QtWayland::fromResource<DataSource *>(resource); } void DataSource::data_source_offer(Resource *, const QString &mime_type) diff --git a/src/compositor/wayland_wrapper/qwlregion.cpp b/src/compositor/wayland_wrapper/qwlregion.cpp index 52c19e946..4383474cb 100644 --- a/src/compositor/wayland_wrapper/qwlregion.cpp +++ b/src/compositor/wayland_wrapper/qwlregion.cpp @@ -39,6 +39,8 @@ #include "qwlregion_p.h" +#include <QtWaylandCompositor/private/qwaylandutils_p.h> + QT_BEGIN_NAMESPACE namespace QtWayland { @@ -54,9 +56,7 @@ Region::~Region() Region *Region::fromResource(struct ::wl_resource *resource) { - if (auto *r = Resource::fromResource(resource)) - return static_cast<Region *>(r->region_object); - return nullptr; + return QtWayland::fromResource<Region *>(resource); } void Region::region_destroy_resource(Resource *) |