aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2018-04-19 15:26:56 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2018-04-20 08:06:50 +0000
commitb16f0030f348965a81698063b7f8a0a82de5a1e6 (patch)
tree04e4acaea51d46de92693cecf6d5661f8bd46f1a /src
parent7a1d2e71d7aff9ab31e267e1e07280a39165640b (diff)
Platform: make icon a grouped property
[ChangeLog][Platform][Menu] Deprecated iconName and iconSource properties in favor of icon.name and icon.source grouped properties. [ChangeLog][Platform][MenuItem] Deprecated iconName and iconSource properties in favor of icon.name and icon.source grouped properties. [ChangeLog][Platform][SystemTrayIcon] Deprecated iconName and iconSource properties in favor of icon.name and icon.source grouped properties. Task-number: QTBUG-67730 Change-Id: I08bbb2bb5ed2aaae02f9264c63fb6cfa04240a74 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/imports/platform/platform.pri2
-rw-r--r--src/imports/platform/qquickplatformicon.cpp71
-rw-r--r--src/imports/platform/qquickplatformicon_p.h81
-rw-r--r--src/imports/platform/qquickplatformiconloader.cpp28
-rw-r--r--src/imports/platform/qquickplatformiconloader_p.h15
-rw-r--r--src/imports/platform/qquickplatformmenu.cpp65
-rw-r--r--src/imports/platform/qquickplatformmenu_p.h7
-rw-r--r--src/imports/platform/qquickplatformmenuitem.cpp82
-rw-r--r--src/imports/platform/qquickplatformmenuitem_p.h7
-rw-r--r--src/imports/platform/qquickplatformsystemtrayicon.cpp73
-rw-r--r--src/imports/platform/qquickplatformsystemtrayicon_p.h7
-rw-r--r--src/imports/platform/qtlabsplatformplugin.cpp5
12 files changed, 332 insertions, 111 deletions
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..98fc045f
--- /dev/null
+++ b/src/imports/platform/qquickplatformicon.cpp
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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::operator==(const QQuickPlatformIcon &other) const
+{
+ return m_source == other.m_source && m_name == other.m_name;
+}
+
+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..270b3000
--- /dev/null
+++ b/src/imports/platform/qquickplatformicon_p.h
@@ -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$
+**
+****************************************************************************/
+
+#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)
+
+public:
+ QUrl source() const;
+ void setSource(const QUrl &source);
+
+ QString name() const;
+ void setName(const QString &name);
+
+ bool operator==(const QQuickPlatformIcon &other) const;
+ bool operator!=(const QQuickPlatformIcon &other) const;
+
+private:
+ 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..6d4d486e 100644
--- a/src/imports/platform/qquickplatformiconloader.cpp
+++ b/src/imports/platform/qquickplatformiconloader.cpp
@@ -62,42 +62,30 @@ 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);
+ return QIcon::fromTheme(m_icon.name(), fallback);
}
-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..c263f0a6 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,34 @@ 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
+
+ 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 +932,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..62a75d60 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,40 @@ 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
+
+ This property holds the menu item's icon.
+
+ \code
+ MenuItem {
+ 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 +616,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/qquickplatformsystemtrayicon.cpp b/src/imports/platform/qquickplatformsystemtrayicon.cpp
index 0663e878..a27e2245 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();
}
@@ -361,6 +355,37 @@ QRect QQuickPlatformSystemTrayIcon::geometry() const
}
/*!
+ \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
+
+ This property holds the system tray icon.
+
+ \code
+ SystemTrayIcon {
+ 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.
@@ -448,7 +473,7 @@ void QQuickPlatformSystemTrayIcon::updateIcon()
const QRect oldGeometry = m_handle->geometry();
- m_handle->updateIcon(m_iconLoader->icon());
+ m_handle->updateIcon(m_iconLoader->toQIcon());
if (oldGeometry != m_handle->geometry())
emit geometryChanged();
diff --git a/src/imports/platform/qquickplatformsystemtrayicon_p.h b/src/imports/platform/qquickplatformsystemtrayicon_p.h
index dc037dab..e43366cb 100644
--- a/src/imports/platform/qquickplatformsystemtrayicon_p.h
+++ b/src/imports/platform/qquickplatformsystemtrayicon_p.h
@@ -54,6 +54,8 @@
#include <QtQml/qqmlparserstatus.h>
#include <QtQml/qqml.h>
+#include "qquickplatformicon_p.h"
+
QT_REQUIRE_CONFIG(systemtrayicon);
QT_BEGIN_NAMESPACE
@@ -73,6 +75,7 @@ class QQuickPlatformSystemTrayIcon : public QObject, public QQmlParserStatus
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:
@@ -101,6 +104,9 @@ public:
QRect geometry() const;
+ QQuickPlatformIcon icon() const;
+ void setIcon(const QQuickPlatformIcon &icon);
+
public Q_SLOTS:
void show();
void hide();
@@ -117,6 +123,7 @@ Q_SIGNALS:
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 6f2fda57..22a59d72 100644
--- a/src/imports/platform/qtlabsplatformplugin.cpp
+++ b/src/imports/platform/qtlabsplatformplugin.cpp
@@ -56,6 +56,8 @@
# include "qquickplatformsystemtrayicon_p.h"
#endif
+#include "qquickplatformicon_p.h"
+
static inline void initResources()
{
#ifdef QT_STATIC
@@ -112,6 +114,9 @@ void QtLabsPlatformPlugin::registerTypes(const char *uri)
qRegisterMetaType<QPlatformSystemTrayIcon::ActivationReason>();
qRegisterMetaType<QPlatformSystemTrayIcon::MessageIcon>();
#endif
+
+ qmlRegisterType<QQuickPlatformIcon>();
+ qRegisterMetaType<QQuickPlatformIcon>();
}
QT_END_NAMESPACE