diff options
Diffstat (limited to 'src/labs/platform/widgets/qwidgetplatformsystemtrayicon.cpp')
-rw-r--r-- | src/labs/platform/widgets/qwidgetplatformsystemtrayicon.cpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/labs/platform/widgets/qwidgetplatformsystemtrayicon.cpp b/src/labs/platform/widgets/qwidgetplatformsystemtrayicon.cpp new file mode 100644 index 0000000000..bb61d58433 --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformsystemtrayicon.cpp @@ -0,0 +1,91 @@ +// Copyright (C) 2017 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#include "qwidgetplatformsystemtrayicon_p.h" +#include "qwidgetplatformmenu_p.h" + +#include <QtWidgets/qsystemtrayicon.h> + +QT_BEGIN_NAMESPACE + +QWidgetPlatformSystemTrayIcon::QWidgetPlatformSystemTrayIcon(QObject *parent) + : m_systray(new QSystemTrayIcon) +{ + setParent(parent); + + connect(m_systray.data(), &QSystemTrayIcon::messageClicked, this, &QPlatformSystemTrayIcon::messageClicked); + connect(m_systray.data(), &QSystemTrayIcon::activated, this, [this](QSystemTrayIcon::ActivationReason reason) { + emit activated(static_cast<ActivationReason>(reason)); + }); +} + +QWidgetPlatformSystemTrayIcon::~QWidgetPlatformSystemTrayIcon() +{ +} + +void QWidgetPlatformSystemTrayIcon::init() +{ + m_systray->show(); +} + +void QWidgetPlatformSystemTrayIcon::cleanup() +{ + m_systray->hide(); +} + +void QWidgetPlatformSystemTrayIcon::updateIcon(const QIcon &icon) +{ + m_systray->setIcon(icon); +} + +void QWidgetPlatformSystemTrayIcon::updateToolTip(const QString &tooltip) +{ + m_systray->setToolTip(tooltip); +} + +void QWidgetPlatformSystemTrayIcon::updateMenu(QPlatformMenu *menu) +{ +#if QT_CONFIG(menu) + QWidgetPlatformMenu *widgetMenu = qobject_cast<QWidgetPlatformMenu *>(menu); + if (!widgetMenu) + return; + + m_systray->setContextMenu(widgetMenu->menu()); +#else + Q_UNUSED(menu); +#endif +} + +QRect QWidgetPlatformSystemTrayIcon::geometry() const +{ + return m_systray->geometry(); +} + +void QWidgetPlatformSystemTrayIcon::showMessage(const QString &title, const QString &msg, const QIcon &icon, MessageIcon iconType, int msecs) +{ + Q_UNUSED(icon); + m_systray->showMessage(title, msg, static_cast<QSystemTrayIcon::MessageIcon>(iconType), msecs); +} + +bool QWidgetPlatformSystemTrayIcon::isSystemTrayAvailable() const +{ + return QSystemTrayIcon::isSystemTrayAvailable(); +} + +bool QWidgetPlatformSystemTrayIcon::supportsMessages() const +{ + return QSystemTrayIcon::supportsMessages(); +} + +QPlatformMenu *QWidgetPlatformSystemTrayIcon::createMenu() const +{ +#if QT_CONFIG(menu) + return new QWidgetPlatformMenu; +#else + return nullptr; +#endif +} + +QT_END_NAMESPACE + +#include "moc_qwidgetplatformsystemtrayicon_p.cpp" |