aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports/platform
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports/platform')
-rw-r--r--src/imports/platform/doc/src/qtlabsplatform-qmltypes.qdoc4
-rw-r--r--src/imports/platform/platform.pri2
-rw-r--r--src/imports/platform/qquickplatformicon.cpp81
-rw-r--r--src/imports/platform/qquickplatformicon_p.h86
-rw-r--r--src/imports/platform/qquickplatformiconloader.cpp30
-rw-r--r--src/imports/platform/qquickplatformiconloader_p.h15
-rw-r--r--src/imports/platform/qquickplatformmenu.cpp66
-rw-r--r--src/imports/platform/qquickplatformmenu_p.h7
-rw-r--r--src/imports/platform/qquickplatformmenuitem.cpp84
-rw-r--r--src/imports/platform/qquickplatformmenuitem_p.h7
-rw-r--r--src/imports/platform/qquickplatformmessagedialog.cpp2
-rw-r--r--src/imports/platform/qquickplatformsystemtrayicon.cpp91
-rw-r--r--src/imports/platform/qquickplatformsystemtrayicon_p.h12
-rw-r--r--src/imports/platform/qtlabsplatformplugin.cpp12
-rw-r--r--src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp2
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
}