diff options
Diffstat (limited to 'src/plugins/shellintegration/ivi-shell')
7 files changed, 74 insertions, 253 deletions
diff --git a/src/plugins/shellintegration/ivi-shell/CMakeLists.txt b/src/plugins/shellintegration/ivi-shell/CMakeLists.txt new file mode 100644 index 000000000..4aed85dc6 --- /dev/null +++ b/src/plugins/shellintegration/ivi-shell/CMakeLists.txt @@ -0,0 +1,40 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +# Generated from ivi-shell.pro. + +##################################################################### +## QWaylandIviShellIntegrationPlugin Plugin: +##################################################################### + +qt_internal_add_plugin(QWaylandIviShellIntegrationPlugin + OUTPUT_NAME ivi-shell + PLUGIN_TYPE wayland-shell-integration + SOURCES + main.cpp + qwaylandivishellintegration.cpp qwaylandivishellintegration.h + qwaylandivisurface.cpp qwaylandivisurface_p.h + LIBRARIES + Qt::Core + Qt::Gui + Qt::GuiPrivate + Qt::WaylandClientPrivate + Wayland::Client +) + +qt6_generate_wayland_protocol_client_sources(QWaylandIviShellIntegrationPlugin + FILES + ${CMAKE_CURRENT_SOURCE_DIR}/../../../3rdparty/protocol/ivi-application.xml + ${CMAKE_CURRENT_SOURCE_DIR}/../../../3rdparty/protocol/ivi-controller.xml +) + +#### Keys ignored in scope 1:.:.:ivi-shell.pro:<TRUE>: +# OTHER_FILES = "ivi-shell.json" + +## Scopes: +##################################################################### + +qt_internal_extend_target(QWaylandIviShellIntegrationPlugin CONDITION QT_FEATURE_xkbcommon + LIBRARIES + XKB::XKB +) diff --git a/src/plugins/shellintegration/ivi-shell/ivi-shell.pro b/src/plugins/shellintegration/ivi-shell/ivi-shell.pro deleted file mode 100644 index 67e659ab0..000000000 --- a/src/plugins/shellintegration/ivi-shell/ivi-shell.pro +++ /dev/null @@ -1,27 +0,0 @@ -QT += gui-private waylandclient-private -CONFIG += wayland-scanner - -QMAKE_USE += wayland-client - -qtConfig(xkbcommon): \ - QMAKE_USE += xkbcommon - -WAYLANDCLIENTSOURCES += \ - ../../../3rdparty/protocol/ivi-application.xml \ - ../../../3rdparty/protocol/ivi-controller.xml - -HEADERS += \ - qwaylandivishellintegration.h \ - qwaylandivisurface_p.h - -SOURCES += \ - main.cpp \ - qwaylandivishellintegration.cpp \ - qwaylandivisurface.cpp - -OTHER_FILES += \ - ivi-shell.json - -PLUGIN_TYPE = wayland-shell-integration -PLUGIN_CLASS_NAME = QWaylandIviShellIntegrationPlugin -load(qt_plugin) diff --git a/src/plugins/shellintegration/ivi-shell/main.cpp b/src/plugins/shellintegration/ivi-shell/main.cpp index 14a33066b..2b48ea7f0 100644 --- a/src/plugins/shellintegration/ivi-shell/main.cpp +++ b/src/plugins/shellintegration/ivi-shell/main.cpp @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2017 ITAGE Corporation, author: <yusuke.binsaki@itage.co.jp> -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins 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$ -** -****************************************************************************/ +// Copyright (C) 2017 ITAGE Corporation, author: <yusuke.binsaki@itage.co.jp> +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include <QtWaylandClient/private/qwaylandshellintegrationplugin_p.h> #include "qwaylandivishellintegration.h" diff --git a/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.cpp b/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.cpp index ea725ac31..8bf9a0301 100644 --- a/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.cpp +++ b/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.cpp @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2017 ITAGE Corporation, author: <yusuke.binsaki@itage.co.jp> -** Contact: http://www.qt-project.org/legal -** -** This file is part of the plugins 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$ -** -****************************************************************************/ +// Copyright (C) 2017 ITAGE Corporation, author: <yusuke.binsaki@itage.co.jp> +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include "qwaylandivishellintegration.h" @@ -56,25 +20,24 @@ QT_BEGIN_NAMESPACE namespace QtWaylandClient { +class QWaylandIviController : public QWaylandClientExtensionTemplate<QWaylandIviController>, + public QtWayland::ivi_controller +{ +public: + QWaylandIviController() : QWaylandClientExtensionTemplate(1) { } + void initialize() { QWaylandClientExtensionTemplate::initialize(); } +}; + QWaylandIviShellIntegration::QWaylandIviShellIntegration() + : QWaylandShellIntegrationTemplate(1), m_iviController(new QWaylandIviController) { } bool QWaylandIviShellIntegration::initialize(QWaylandDisplay *display) { - for (QWaylandDisplay::RegistryGlobal global : display->globals()) { - if (global.interface == QLatin1String("ivi_application") && !m_iviApplication) - m_iviApplication.reset(new QtWayland::ivi_application(display->wl_registry(), global.id, global.version)); - if (global.interface == QLatin1String("ivi_controller") && !m_iviController) - m_iviController.reset(new QtWayland::ivi_controller(display->wl_registry(), global.id, global.version)); - } - - if (!m_iviApplication) { - qCDebug(lcQpaWayland) << "Couldn't find global ivi_application for ivi-shell"; - return false; - } - - return QWaylandShellIntegration::initialize(display); + QWaylandShellIntegrationTemplate::initialize(display); + m_iviController->initialize(); + return isActive(); } /* get unique id @@ -127,15 +90,15 @@ uint32_t QWaylandIviShellIntegration::getNextUniqueSurfaceId() QWaylandShellSurface *QWaylandIviShellIntegration::createShellSurface(QWaylandWindow *window) { - if (!m_iviApplication) + if (!isActive()) return nullptr; uint32_t surfaceId = getNextUniqueSurfaceId(); if (surfaceId == 0) return nullptr; - struct ivi_surface *surface = m_iviApplication->surface_create(surfaceId, window->wlSurface()); - if (!m_iviController) + struct ivi_surface *surface = surface_create(surfaceId, window->wlSurface()); + if (!m_iviController->isActive()) return new QWaylandIviSurface(surface, window); struct ::ivi_controller_surface *controller = m_iviController->ivi_controller::surface_create(surfaceId); @@ -149,7 +112,7 @@ QWaylandShellSurface *QWaylandIviShellIntegration::createShellSurface(QWaylandWi transientPos.setX(transientPos.x() + parent->decoration()->margins().left()); transientPos.setY(transientPos.y() + parent->decoration()->margins().top()); } - QSize size = window->window()->geometry().size(); + QSize size = window->windowGeometry().size(); iviSurface->ivi_controller_surface::set_destination_rectangle(transientPos.x(), transientPos.y(), size.width(), diff --git a/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.h b/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.h index 13282e438..14d9770a8 100644 --- a/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.h +++ b/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.h @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2017 ITAGE Corporation, author: <yusuke.binsaki@itage.co.jp> -** Contact: http://www.qt-project.org/legal -** -** This file is part of the plugins 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$ -** -****************************************************************************/ +// Copyright (C) 2017 ITAGE Corporation, author: <yusuke.binsaki@itage.co.jp> +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QWAYLANDIVIINTEGRATION_H #define QWAYLANDIVIINTEGRATION_H @@ -52,9 +16,11 @@ namespace QtWaylandClient { class QWaylandWindow; class QWaylandDisplay; -class QWaylandIviControllerSurface; +class QWaylandIviController; -class Q_WAYLAND_CLIENT_EXPORT QWaylandIviShellIntegration : public QWaylandShellIntegration +class Q_WAYLANDCLIENT_EXPORT QWaylandIviShellIntegration + : public QWaylandShellIntegrationTemplate<QWaylandIviShellIntegration>, + public QtWayland::ivi_application { public: QWaylandIviShellIntegration(); @@ -66,8 +32,7 @@ private: uint32_t getNextUniqueSurfaceId(); private: - QScopedPointer<QtWayland::ivi_application> m_iviApplication; - QScopedPointer<QtWayland::ivi_controller> m_iviController; + QScopedPointer<QWaylandIviController> m_iviController; uint32_t m_lastSurfaceId = 0; uint32_t m_surfaceNumber = 0; bool m_useEnvSurfaceId = false; diff --git a/src/plugins/shellintegration/ivi-shell/qwaylandivisurface.cpp b/src/plugins/shellintegration/ivi-shell/qwaylandivisurface.cpp index 10d308ba4..ebdf3e800 100644 --- a/src/plugins/shellintegration/ivi-shell/qwaylandivisurface.cpp +++ b/src/plugins/shellintegration/ivi-shell/qwaylandivisurface.cpp @@ -1,48 +1,11 @@ -/**************************************************************************** -** -** Copyright (C) 2017 ITAGE Corporation, author: <yusuke.binsaki@itage.co.jp> -** Contact: http://www.qt-project.org/legal -** -** This file is part of the plugins 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$ -** -****************************************************************************/ +// Copyright (C) 2017 ITAGE Corporation, author: <yusuke.binsaki@itage.co.jp> +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include "qwaylandivisurface_p.h" #include <QtWaylandClient/private/qwaylanddisplay_p.h> #include <QtWaylandClient/private/qwaylandwindow_p.h> #include <QtWaylandClient/private/qwaylandscreen_p.h> -#include <QtWaylandClient/private/qwaylandextendedsurface_p.h> QT_BEGIN_NAMESPACE @@ -53,7 +16,6 @@ QWaylandIviSurface::QWaylandIviSurface(struct ::ivi_surface *ivi_surface, QWayla , QWaylandShellSurface(window) , m_window(window) { - createExtendedSurface(window); } QWaylandIviSurface::QWaylandIviSurface(struct ::ivi_surface *ivi_surface, QWaylandWindow *window, @@ -63,7 +25,6 @@ QWaylandIviSurface::QWaylandIviSurface(struct ::ivi_surface *ivi_surface, QWayla , QtWayland::ivi_controller_surface(iviControllerSurface) , m_window(window) { - createExtendedSurface(window); } QWaylandIviSurface::~QWaylandIviSurface() @@ -71,8 +32,6 @@ QWaylandIviSurface::~QWaylandIviSurface() ivi_surface::destroy(); if (QtWayland::ivi_controller_surface::object()) QtWayland::ivi_controller_surface::destroy(0); - - delete m_extendedWindow; } void QWaylandIviSurface::applyConfigure() @@ -80,12 +39,6 @@ void QWaylandIviSurface::applyConfigure() m_window->resizeFromApplyConfigure(m_pendingSize); } -void QWaylandIviSurface::createExtendedSurface(QWaylandWindow *window) -{ - if (window->display()->windowExtension()) - m_extendedWindow = new QWaylandExtendedSurface(window); -} - void QWaylandIviSurface::ivi_surface_configure(int32_t width, int32_t height) { m_pendingSize = {width, height}; diff --git a/src/plugins/shellintegration/ivi-shell/qwaylandivisurface_p.h b/src/plugins/shellintegration/ivi-shell/qwaylandivisurface_p.h index f207f0584..9747fc7c9 100644 --- a/src/plugins/shellintegration/ivi-shell/qwaylandivisurface_p.h +++ b/src/plugins/shellintegration/ivi-shell/qwaylandivisurface_p.h @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2017 ITAGE Corporation, author: <yusuke.binsaki@itage.co.jp> -** Contact: http://www.qt-project.org/legal -** -** This file is part of the plugins 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$ -** -****************************************************************************/ +// Copyright (C) 2017 ITAGE Corporation, author: <yusuke.binsaki@itage.co.jp> +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QWAYLANDIVISURFACE_H #define QWAYLANDIVISURFACE_H @@ -50,10 +14,8 @@ namespace QtWaylandClient { class QWaylandWindow; class QWaylandInputDevice; -class QWindow; -class QWaylandExtendedSurface; -class Q_WAYLAND_CLIENT_EXPORT QWaylandIviSurface : public QtWayland::ivi_surface +class Q_WAYLANDCLIENT_EXPORT QWaylandIviSurface : public QtWayland::ivi_surface , public QWaylandShellSurface, public QtWayland::ivi_controller_surface { public: @@ -64,13 +26,14 @@ public: void applyConfigure() override; + std::any surfaceRole() const override { return ivi_surface::object(); }; + private: void createExtendedSurface(QWaylandWindow *window); void ivi_surface_configure(int32_t width, int32_t height) override; void ivi_controller_surface_visibility(int32_t visibility) override; QWaylandWindow *m_window = nullptr; - QWaylandExtendedSurface *m_extendedWindow = nullptr; QSize m_pendingSize = {0, 0}; }; |