diff options
Diffstat (limited to 'src/imports/platform')
-rw-r--r-- | src/imports/platform/doc/src/qtlabsplatform-qmltypes.qdoc | 4 | ||||
-rw-r--r-- | src/imports/platform/platform.pri | 2 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformicon.cpp | 81 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformicon_p.h | 86 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformiconloader.cpp | 30 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformiconloader_p.h | 15 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformmenu.cpp | 66 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformmenu_p.h | 7 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformmenuitem.cpp | 84 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformmenuitem_p.h | 7 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformmessagedialog.cpp | 2 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformsystemtrayicon.cpp | 91 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformsystemtrayicon_p.h | 12 | ||||
-rw-r--r-- | src/imports/platform/qtlabsplatformplugin.cpp | 12 | ||||
-rw-r--r-- | src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp | 2 |
15 files changed, 380 insertions, 121 deletions
diff --git a/src/imports/platform/doc/src/qtlabsplatform-qmltypes.qdoc b/src/imports/platform/doc/src/qtlabsplatform-qmltypes.qdoc index b0c9c41e..57f011ef 100644 --- a/src/imports/platform/doc/src/qtlabsplatform-qmltypes.qdoc +++ b/src/imports/platform/doc/src/qtlabsplatform-qmltypes.qdoc @@ -26,7 +26,7 @@ ****************************************************************************/ /*! - \qmlmodule Qt.labs.platform 1.0 + \qmlmodule Qt.labs.platform 1.1 \title Qt Labs Platform QML Types \ingroup qmlmodules \brief Provides QML types for native platform extensions. @@ -39,7 +39,7 @@ following import statement in your .qml file: \badcode - import Qt.labs.platform 1.0 + import Qt.labs.platform 1.1 \endcode \section1 QML Types diff --git a/src/imports/platform/platform.pri b/src/imports/platform/platform.pri index 2227d89c..ec6e8616 100644 --- a/src/imports/platform/platform.pri +++ b/src/imports/platform/platform.pri @@ -4,6 +4,7 @@ HEADERS += \ $$PWD/qquickplatformfiledialog_p.h \ $$PWD/qquickplatformfolderdialog_p.h \ $$PWD/qquickplatformfontdialog_p.h \ + $$PWD/qquickplatformicon_p.h \ $$PWD/qquickplatformiconloader_p.h \ $$PWD/qquickplatformmenu_p.h \ $$PWD/qquickplatformmenubar_p.h \ @@ -19,6 +20,7 @@ SOURCES += \ $$PWD/qquickplatformfiledialog.cpp \ $$PWD/qquickplatformfolderdialog.cpp \ $$PWD/qquickplatformfontdialog.cpp \ + $$PWD/qquickplatformicon.cpp \ $$PWD/qquickplatformiconloader.cpp \ $$PWD/qquickplatformmenu.cpp \ $$PWD/qquickplatformmenubar.cpp \ diff --git a/src/imports/platform/qquickplatformicon.cpp b/src/imports/platform/qquickplatformicon.cpp new file mode 100644 index 00000000..7096ff8a --- /dev/null +++ b/src/imports/platform/qquickplatformicon.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformicon_p.h" + +QT_BEGIN_NAMESPACE + +QUrl QQuickPlatformIcon::source() const +{ + return m_source; +} + +void QQuickPlatformIcon::setSource(const QUrl& source) +{ + m_source = source; +} + +QString QQuickPlatformIcon::name() const +{ + return m_name; +} + +void QQuickPlatformIcon::setName(const QString& name) +{ + m_name = name; +} + +bool QQuickPlatformIcon::isMask() const +{ + return m_mask; +} + +void QQuickPlatformIcon::setMask(bool mask) +{ + m_mask = mask; +} + +bool QQuickPlatformIcon::operator==(const QQuickPlatformIcon &other) const +{ + return m_source == other.m_source && m_name == other.m_name && m_mask == other.m_mask; +} + +bool QQuickPlatformIcon::operator!=(const QQuickPlatformIcon &other) const +{ + return !(*this == other); +} + +QT_END_NAMESPACE diff --git a/src/imports/platform/qquickplatformicon_p.h b/src/imports/platform/qquickplatformicon_p.h new file mode 100644 index 00000000..9add9d6e --- /dev/null +++ b/src/imports/platform/qquickplatformicon_p.h @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMICON_P_H +#define QQUICKPLATFORMICON_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/qurl.h> +#include <QtCore/qstring.h> + +QT_BEGIN_NAMESPACE + +class QObject; + +class QQuickPlatformIcon +{ + Q_GADGET + Q_PROPERTY(QUrl source READ source WRITE setSource) + Q_PROPERTY(QString name READ name WRITE setName) + Q_PROPERTY(bool mask READ isMask WRITE setMask) + +public: + QUrl source() const; + void setSource(const QUrl &source); + + QString name() const; + void setName(const QString &name); + + bool isMask() const; + void setMask(bool mask); + + bool operator==(const QQuickPlatformIcon &other) const; + bool operator!=(const QQuickPlatformIcon &other) const; + +private: + bool m_mask = false; + QUrl m_source; + QString m_name; +}; + +QT_END_NAMESPACE + +#endif // QQUICKPLATFORMICON_P_H diff --git a/src/imports/platform/qquickplatformiconloader.cpp b/src/imports/platform/qquickplatformiconloader.cpp index 11ebd476..c7b699b2 100644 --- a/src/imports/platform/qquickplatformiconloader.cpp +++ b/src/imports/platform/qquickplatformiconloader.cpp @@ -62,42 +62,32 @@ void QQuickPlatformIconLoader::setEnabled(bool enabled) loadIcon(); } -QIcon QQuickPlatformIconLoader::icon() const +QIcon QQuickPlatformIconLoader::toQIcon() const { QIcon fallback = QPixmap::fromImage(image()); - return QIcon::fromTheme(m_iconName, fallback); + QIcon icon = QIcon::fromTheme(m_icon.name(), fallback); + icon.setIsMask(m_icon.isMask()); + return icon; } -QUrl QQuickPlatformIconLoader::iconSource() const +QQuickPlatformIcon QQuickPlatformIconLoader::icon() const { - return m_iconSource; + return m_icon; } -void QQuickPlatformIconLoader::setIconSource(const QUrl& source) +void QQuickPlatformIconLoader::setIcon(const QQuickPlatformIcon& icon) { - m_iconSource = source; - if (m_enabled) - loadIcon(); -} - -QString QQuickPlatformIconLoader::iconName() const -{ - return m_iconName; -} - -void QQuickPlatformIconLoader::setIconName(const QString& name) -{ - m_iconName = name; + m_icon = icon; if (m_enabled) loadIcon(); } void QQuickPlatformIconLoader::loadIcon() { - if (m_iconSource.isEmpty()) { + if (m_icon.source().isEmpty()) { clear(m_parent); } else { - load(qmlEngine(m_parent), m_iconSource); + load(qmlEngine(m_parent), m_icon.source()); if (m_slot != -1 && isLoading()) { connectFinished(m_parent, m_slot); m_slot = -1; diff --git a/src/imports/platform/qquickplatformiconloader_p.h b/src/imports/platform/qquickplatformiconloader_p.h index dd26a65b..d284a513 100644 --- a/src/imports/platform/qquickplatformiconloader_p.h +++ b/src/imports/platform/qquickplatformiconloader_p.h @@ -53,6 +53,8 @@ #include <QtGui/qicon.h> #include <QtQuick/private/qquickpixmapcache_p.h> +#include "qquickplatformicon_p.h" + QT_BEGIN_NAMESPACE class QObject; @@ -65,13 +67,10 @@ public: bool isEnabled() const; void setEnabled(bool enabled); - QIcon icon() const; - - QUrl iconSource() const; - void setIconSource(const QUrl &source); + QIcon toQIcon() const; - QString iconName() const; - void setIconName(const QString &name); + QQuickPlatformIcon icon() const; + void setIcon(const QQuickPlatformIcon &icon); private: void loadIcon(); @@ -79,9 +78,7 @@ private: QObject *m_parent; int m_slot; bool m_enabled; - QIcon m_icon; - QUrl m_iconSource; - QString m_iconName; + QQuickPlatformIcon m_icon; }; QT_END_NAMESPACE diff --git a/src/imports/platform/qquickplatformmenu.cpp b/src/imports/platform/qquickplatformmenu.cpp index 0a5ce8e4..844fbbd9 100644 --- a/src/imports/platform/qquickplatformmenu.cpp +++ b/src/imports/platform/qquickplatformmenu.cpp @@ -543,57 +543,48 @@ void QQuickPlatformMenu::setTitle(const QString &title) /*! \qmlproperty url Qt.labs.platform::Menu::iconSource - - This property holds the url of the menu's icon. - - \sa iconName + \deprecated Use icon.source instead */ QUrl QQuickPlatformMenu::iconSource() const { - if (!m_iconLoader) - return QUrl(); - - return m_iconLoader->iconSource(); + return icon().source(); } void QQuickPlatformMenu::setIconSource(const QUrl& source) { - if (source == iconSource()) + QQuickPlatformIcon newIcon = icon(); + if (source == newIcon.source()) return; if (m_menuItem) m_menuItem->setIconSource(source); - iconLoader()->setIconSource(source); + newIcon.setSource(source); + iconLoader()->setIcon(newIcon); emit iconSourceChanged(); } /*! \qmlproperty string Qt.labs.platform::Menu::iconName - - This property holds the theme name of the menu's icon. - - \sa iconSource, QIcon::fromTheme() + \deprecated Use icon.name instead */ QString QQuickPlatformMenu::iconName() const { - if (!m_iconLoader) - return QString(); - - return m_iconLoader->iconName(); + return icon().name(); } void QQuickPlatformMenu::setIconName(const QString& name) { - if (name == iconName()) + QQuickPlatformIcon newIcon = icon(); + if (name == newIcon.name()) return; if (m_menuItem) m_menuItem->setIconName(name); - iconLoader()->setIconName(name); - emit iconNameChanged(); -} + newIcon.setName(name); + iconLoader()->setIcon(newIcon); + emit iconNameChanged();} /*! \qmlproperty font Qt.labs.platform::Menu::font @@ -618,6 +609,35 @@ void QQuickPlatformMenu::setFont(const QFont& font) } /*! + \since Qt.labs.platform 1.1 (Qt 5.12) + \qmlpropertygroup Qt.labs.platform::MenuItem::icon + \qmlproperty url Qt.labs.platform::MenuItem::icon.source + \qmlproperty string Qt.labs.platform::MenuItem::icon.name + \qmlproperty bool Qt.labs.platform::MenuItem::icon.mask + + This property holds the menu item's icon. +*/ +QQuickPlatformIcon QQuickPlatformMenu::icon() const +{ + if (!m_iconLoader) + return QQuickPlatformIcon(); + + return iconLoader()->icon(); +} + +void QQuickPlatformMenu::setIcon(const QQuickPlatformIcon &icon) +{ + if (iconLoader()->icon() == icon) + return; + + if (m_menuItem) + m_menuItem->setIcon(icon); + + iconLoader()->setIcon(icon); + emit iconChanged(); +} + +/*! \qmlmethod void Qt.labs.platform::Menu::addItem(MenuItem item) Adds an \a item to the end of the menu. @@ -913,7 +933,7 @@ void QQuickPlatformMenu::updateIcon() if (!m_handle || !m_iconLoader) return; - m_handle->setIcon(m_iconLoader->icon()); + m_handle->setIcon(m_iconLoader->toQIcon()); sync(); } diff --git a/src/imports/platform/qquickplatformmenu_p.h b/src/imports/platform/qquickplatformmenu_p.h index 14f083dd..eb18f66b 100644 --- a/src/imports/platform/qquickplatformmenu_p.h +++ b/src/imports/platform/qquickplatformmenu_p.h @@ -56,6 +56,8 @@ #include <QtQml/qqmllist.h> #include <QtQml/qqml.h> +#include "qquickplatformicon_p.h" + QT_BEGIN_NAMESPACE class QIcon; @@ -86,6 +88,7 @@ class QQuickPlatformMenu : public QObject, public QQmlParserStatus Q_PROPERTY(QUrl iconSource READ iconSource WRITE setIconSource NOTIFY iconSourceChanged FINAL) Q_PROPERTY(QString iconName READ iconName WRITE setIconName NOTIFY iconNameChanged FINAL) Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged FINAL) + Q_PROPERTY(QQuickPlatformIcon icon READ icon WRITE setIcon NOTIFY iconChanged FINAL REVISION 1) Q_ENUMS(QPlatformMenu::MenuType) Q_CLASSINFO("DefaultProperty", "data") @@ -136,6 +139,9 @@ public: QFont font() const; void setFont(const QFont &font); + QQuickPlatformIcon icon() const; + void setIcon(const QQuickPlatformIcon &icon); + Q_INVOKABLE void addItem(QQuickPlatformMenuItem *item); Q_INVOKABLE void insertItem(int index, QQuickPlatformMenuItem *item); Q_INVOKABLE void removeItem(QQuickPlatformMenuItem *item); @@ -166,6 +172,7 @@ Q_SIGNALS: void minimumWidthChanged(); void fontChanged(); void typeChanged(); + Q_REVISION(1) void iconChanged(); protected: void classBegin() override; diff --git a/src/imports/platform/qquickplatformmenuitem.cpp b/src/imports/platform/qquickplatformmenuitem.cpp index bc6d97e1..d657fd12 100644 --- a/src/imports/platform/qquickplatformmenuitem.cpp +++ b/src/imports/platform/qquickplatformmenuitem.cpp @@ -443,63 +443,41 @@ void QQuickPlatformMenuItem::setText(const QString &text) /*! \qmlproperty url Qt.labs.platform::MenuItem::iconSource - - This property holds the url of the menu item's icon. - - \code - MenuItem { - iconName: "edit-undo" - iconSource: "qrc:/images/undo.png" - } - \endcode - - \sa iconName + \deprecated Use icon.source instead */ QUrl QQuickPlatformMenuItem::iconSource() const { - if (!m_iconLoader) - return QUrl(); - - return m_iconLoader->iconSource(); + return icon().source(); } void QQuickPlatformMenuItem::setIconSource(const QUrl& source) { - if (source == iconSource()) + QQuickPlatformIcon newIcon = icon(); + if (source == newIcon.source()) return; - iconLoader()->setIconSource(source); + newIcon.setSource(source); + iconLoader()->setIcon(newIcon); emit iconSourceChanged(); } /*! \qmlproperty string Qt.labs.platform::MenuItem::iconName - - This property holds the theme name of the menu item's icon. - - \code - MenuItem { - iconName: "edit-undo" - iconSource: "qrc:/images/undo.png" - } - \endcode - - \sa iconSource, QIcon::fromTheme() + \deprecated Use icon.name instead */ QString QQuickPlatformMenuItem::iconName() const { - if (!m_iconLoader) - return QString(); - - return m_iconLoader->iconName(); + return icon().name(); } void QQuickPlatformMenuItem::setIconName(const QString& name) { - if (name == iconName()) + QQuickPlatformIcon newIcon = icon(); + if (name == newIcon.name()) return; - iconLoader()->setIconName(name); + newIcon.setName(name); + iconLoader()->setIcon(newIcon); emit iconNameChanged(); } @@ -560,6 +538,42 @@ void QQuickPlatformMenuItem::setFont(const QFont& font) } /*! + \since Qt.labs.platform 1.1 (Qt 5.12) + \qmlpropertygroup Qt.labs.platform::MenuItem::icon + \qmlproperty url Qt.labs.platform::MenuItem::icon.source + \qmlproperty string Qt.labs.platform::MenuItem::icon.name + \qmlproperty bool Qt.labs.platform::MenuItem::icon.mask + + This property holds the menu item's icon. + + \code + MenuItem { + icon.mask: true + icon.name: "edit-undo" + icon.source: "qrc:/images/undo.png" + } + \endcode + + \sa QIcon::fromTheme() +*/ +QQuickPlatformIcon QQuickPlatformMenuItem::icon() const +{ + if (!m_iconLoader) + return QQuickPlatformIcon(); + + return m_iconLoader->icon(); +} + +void QQuickPlatformMenuItem::setIcon(const QQuickPlatformIcon &icon) +{ + if (iconLoader()->icon() == icon) + return; + + iconLoader()->setIcon(icon); + emit iconChanged(); +} + +/*! \qmlmethod void Qt.labs.platform::MenuItem::toggle() Toggles the \l checked state to its opposite state. @@ -604,7 +618,7 @@ void QQuickPlatformMenuItem::updateIcon() if (!m_handle || !m_iconLoader) return; - m_handle->setIcon(m_iconLoader->icon()); + m_handle->setIcon(m_iconLoader->toQIcon()); sync(); } diff --git a/src/imports/platform/qquickplatformmenuitem_p.h b/src/imports/platform/qquickplatformmenuitem_p.h index 6ff3ad81..f1143e64 100644 --- a/src/imports/platform/qquickplatformmenuitem_p.h +++ b/src/imports/platform/qquickplatformmenuitem_p.h @@ -55,6 +55,8 @@ #include <QtQml/qqmlparserstatus.h> #include <QtQml/qqml.h> +#include "qquickplatformicon_p.h" + QT_BEGIN_NAMESPACE class QPlatformMenuItem; @@ -80,6 +82,7 @@ class QQuickPlatformMenuItem : public QObject, public QQmlParserStatus Q_PROPERTY(QString iconName READ iconName WRITE setIconName NOTIFY iconNameChanged FINAL) Q_PROPERTY(QVariant shortcut READ shortcut WRITE setShortcut NOTIFY shortcutChanged FINAL) Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged FINAL) + Q_PROPERTY(QQuickPlatformIcon icon READ icon WRITE setIcon NOTIFY iconChanged FINAL REVISION 1) Q_ENUMS(QPlatformMenuItem::MenuRole) public: @@ -132,6 +135,9 @@ public: QFont font() const; void setFont(const QFont &font); + QQuickPlatformIcon icon() const; + void setIcon(const QQuickPlatformIcon &icon); + public Q_SLOTS: void toggle(); @@ -153,6 +159,7 @@ Q_SIGNALS: void iconNameChanged(); void shortcutChanged(); void fontChanged(); + Q_REVISION(1) void iconChanged(); protected: void classBegin() override; diff --git a/src/imports/platform/qquickplatformmessagedialog.cpp b/src/imports/platform/qquickplatformmessagedialog.cpp index 14184447..ffc4b296 100644 --- a/src/imports/platform/qquickplatformmessagedialog.cpp +++ b/src/imports/platform/qquickplatformmessagedialog.cpp @@ -376,7 +376,7 @@ void QQuickPlatformMessageDialog::handleClick(QPlatformDialogHelper::StandardBut case QPlatformDialogHelper::Apply: emit applyClicked(); break; case QPlatformDialogHelper::Reset: emit resetClicked(); break; case QPlatformDialogHelper::RestoreDefaults: emit restoreDefaultsClicked(); break; - default: qmlWarning(this) << "unknown button" << button; break; + default: qmlWarning(this) << "unknown button" << int(button); break; } } diff --git a/src/imports/platform/qquickplatformsystemtrayicon.cpp b/src/imports/platform/qquickplatformsystemtrayicon.cpp index 8b5d5f7b..202bc3bf 100644 --- a/src/imports/platform/qquickplatformsystemtrayicon.cpp +++ b/src/imports/platform/qquickplatformsystemtrayicon.cpp @@ -67,7 +67,7 @@ QT_BEGIN_NAMESPACE \code SystemTrayIcon { visible: true - iconSource: "qrc:/images/tray-icon.png" + icon.source: "qrc:/images/tray-icon.png" onActivated: { window.show() @@ -88,7 +88,7 @@ QT_BEGIN_NAMESPACE \code SystemTrayIcon { visible: true - iconSource: "qrc:/images/tray-icon.png" + icon.source: "qrc:/images/tray-icon.png" menu: Menu { MenuItem { @@ -111,7 +111,7 @@ QT_BEGIN_NAMESPACE \code SystemTrayIcon { visible: true - iconSource: "qrc:/images/tray-icon.png" + icon.source: "qrc:/images/tray-icon.png" onMessageClicked: console.log("Message clicked") Component.onCompleted: showMessage("Message title", "Something important came up. Click this to know more.") @@ -254,49 +254,43 @@ void QQuickPlatformSystemTrayIcon::setVisible(bool visible) /*! \qmlproperty url Qt.labs.platform::SystemTrayIcon::iconSource - - This property holds the url of the system tray icon. - - \sa iconName + \deprecated Use icon.source instead. + \sa icon */ QUrl QQuickPlatformSystemTrayIcon::iconSource() const { - if (!m_iconLoader) - return QUrl(); - - return m_iconLoader->iconSource(); + return icon().source(); } void QQuickPlatformSystemTrayIcon::setIconSource(const QUrl& source) { - if (source == iconSource()) + QQuickPlatformIcon newIcon = icon(); + if (source == newIcon.source()) return; - iconLoader()->setIconSource(source); + newIcon.setSource(source); + iconLoader()->setIcon(newIcon); emit iconSourceChanged(); } /*! \qmlproperty string Qt.labs.platform::SystemTrayIcon::iconName - - This property holds the theme name of the system tray icon. - - \sa iconSource, QIcon::fromTheme() + \deprecated Use icon.name instead. + \sa icon */ QString QQuickPlatformSystemTrayIcon::iconName() const { - if (!m_iconLoader) - return QString(); - - return m_iconLoader->iconName(); + return icon().name(); } void QQuickPlatformSystemTrayIcon::setIconName(const QString& name) { - if (name == iconName()) + QQuickPlatformIcon newIcon = icon(); + if (name == newIcon.name()) return; - iconLoader()->setIconName(name); + newIcon.setName(name); + iconLoader()->setIcon(newIcon); emit iconNameChanged(); } @@ -350,6 +344,50 @@ void QQuickPlatformSystemTrayIcon::setMenu(QQuickPlatformMenu *menu) } /*! + \since Qt.labs.platform 1.1 (Qt 5.12) + \qmlproperty rect Qt.labs.platform::SystemTrayIcon::geometry + + This property holds the geometry of the system tray icon. +*/ +QRect QQuickPlatformSystemTrayIcon::geometry() const +{ + return m_handle ? m_handle->geometry() : QRect(); +} + +/*! + \since Qt.labs.platform 1.1 (Qt 5.12) + \qmlpropertygroup Qt.labs.platform::SystemTrayIcon::icon + \qmlproperty url Qt.labs.platform::SystemTrayIcon::icon.source + \qmlproperty string Qt.labs.platform::SystemTrayIcon::icon.name + \qmlproperty bool Qt.labs.platform::SystemTrayIcon::icon.mask + + This property holds the system tray icon. + + \code + SystemTrayIcon { + icon.mask: true + icon.source: "qrc:/images/tray-icon.png" + } + \endcode +*/ +QQuickPlatformIcon QQuickPlatformSystemTrayIcon::icon() const +{ + if (!m_iconLoader) + return QQuickPlatformIcon(); + + return m_iconLoader->icon(); +} + +void QQuickPlatformSystemTrayIcon::setIcon(const QQuickPlatformIcon &icon) +{ + if (iconLoader()->icon() == icon) + return; + + iconLoader()->setIcon(icon); + emit iconChanged(); +} + +/*! \qmlmethod void Qt.labs.platform::SystemTrayIcon::show() Shows the system tray icon. @@ -435,7 +473,12 @@ void QQuickPlatformSystemTrayIcon::updateIcon() if (!m_handle || !m_iconLoader) return; - m_handle->updateIcon(m_iconLoader->icon()); + const QRect oldGeometry = m_handle->geometry(); + + m_handle->updateIcon(m_iconLoader->toQIcon()); + + if (oldGeometry != m_handle->geometry()) + emit geometryChanged(); } QT_END_NAMESPACE diff --git a/src/imports/platform/qquickplatformsystemtrayicon_p.h b/src/imports/platform/qquickplatformsystemtrayicon_p.h index 77a78f30..e43366cb 100644 --- a/src/imports/platform/qquickplatformsystemtrayicon_p.h +++ b/src/imports/platform/qquickplatformsystemtrayicon_p.h @@ -49,10 +49,13 @@ // #include <QtCore/qurl.h> +#include <QtCore/qrect.h> #include <QtGui/qpa/qplatformsystemtrayicon.h> #include <QtQml/qqmlparserstatus.h> #include <QtQml/qqml.h> +#include "qquickplatformicon_p.h" + QT_REQUIRE_CONFIG(systemtrayicon); QT_BEGIN_NAMESPACE @@ -71,6 +74,8 @@ class QQuickPlatformSystemTrayIcon : public QObject, public QQmlParserStatus Q_PROPERTY(QString iconName READ iconName WRITE setIconName NOTIFY iconNameChanged FINAL) Q_PROPERTY(QString tooltip READ tooltip WRITE setTooltip NOTIFY tooltipChanged FINAL) Q_PROPERTY(QQuickPlatformMenu *menu READ menu WRITE setMenu NOTIFY menuChanged FINAL) + Q_PROPERTY(QRect geometry READ geometry NOTIFY geometryChanged FINAL REVISION 1) + Q_PROPERTY(QQuickPlatformIcon icon READ icon WRITE setIcon NOTIFY iconChanged FINAL REVISION 1) Q_ENUMS(QPlatformSystemTrayIcon::ActivationReason QPlatformSystemTrayIcon::MessageIcon) public: @@ -97,6 +102,11 @@ public: QQuickPlatformMenu *menu() const; void setMenu(QQuickPlatformMenu *menu); + QRect geometry() const; + + QQuickPlatformIcon icon() const; + void setIcon(const QQuickPlatformIcon &icon); + public Q_SLOTS: void show(); void hide(); @@ -112,6 +122,8 @@ Q_SIGNALS: void iconNameChanged(); void tooltipChanged(); void menuChanged(); + Q_REVISION(1) void geometryChanged(); + Q_REVISION(1) void iconChanged(); protected: void init(); diff --git a/src/imports/platform/qtlabsplatformplugin.cpp b/src/imports/platform/qtlabsplatformplugin.cpp index 1eac7d80..b92c1ea0 100644 --- a/src/imports/platform/qtlabsplatformplugin.cpp +++ b/src/imports/platform/qtlabsplatformplugin.cpp @@ -56,12 +56,7 @@ # include "qquickplatformsystemtrayicon_p.h" #endif -static inline void initResources() -{ -#ifdef QT_STATIC - Q_INIT_RESOURCE(qmake_Qt_labs_platform); -#endif -} +#include "qquickplatformicon_p.h" QT_BEGIN_NAMESPACE @@ -81,7 +76,6 @@ public: QtLabsPlatformPlugin::QtLabsPlatformPlugin(QObject *parent) : QQmlExtensionPlugin(parent) { - initResources(); } void QtLabsPlatformPlugin::registerTypes(const char *uri) @@ -108,9 +102,13 @@ void QtLabsPlatformPlugin::registerTypes(const char *uri) #if QT_CONFIG(systemtrayicon) qmlRegisterType<QQuickPlatformSystemTrayIcon>(uri, 1, 0, "SystemTrayIcon"); + qmlRegisterType<QQuickPlatformSystemTrayIcon, 1>(uri, 1, 1, "SystemTrayIcon"); qRegisterMetaType<QPlatformSystemTrayIcon::ActivationReason>(); qRegisterMetaType<QPlatformSystemTrayIcon::MessageIcon>(); #endif + + qmlRegisterType<QQuickPlatformIcon>(); + qRegisterMetaType<QQuickPlatformIcon>(); } QT_END_NAMESPACE diff --git a/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp b/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp index 1cdfcfde..e406ff03 100644 --- a/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp +++ b/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp @@ -84,6 +84,8 @@ void QWidgetPlatformSystemTrayIcon::updateMenu(QPlatformMenu *menu) return; m_systray->setContextMenu(widgetMenu->menu()); +#else + Q_UNUSED(menu); #endif } |