summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authorChristoph Schleifenbaum <christoph.schleifenbaum@kdab.com>2012-05-11 14:35:49 +0200
committerQt by Nokia <qt-info@nokia.com>2012-07-03 16:48:33 +0200
commitf4dd0828dcc39946835dad6ce416a65d911e2cd5 (patch)
treeaa75013565a29f0b66445918b0b8810a4a71b505 /src/gui
parentacf92203743321f49ec010fa3775adeb152f071e (diff)
Platform-plugin support for QSystemTrayIcon.
Implement QPlatformSystemTrayIcon providing QPA-plugin-support for system tray icons. Make QSystemTrayIcon use this as new backend. Ported over qsystemtrayicon_mac.mm to qcocoasystemtrayicon.mm to provide Cocoa support for the new interface. It had to be changed to match the interface, especially for icon and menu handling. This interface is made to not use QStyle or QMenu which are related classes of QSystemTrayIcon. It's therefore not introducing QtWidget dependency into the platform plugin. Task-number: QTBUG-20978 Change-Id: I0d0a73835698b3b4f97219d4f5bbcfa2af57dbe2 Reviewed-by: Christoph Schleifenbaum <christoph.schleifenbaum@kdab.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/kernel/kernel.pri6
-rw-r--r--src/gui/kernel/qplatformsystemtrayicon.h95
-rw-r--r--src/gui/kernel/qplatformsystemtrayicon_qpa.cpp125
-rw-r--r--src/gui/kernel/qplatformtheme.cpp11
-rw-r--r--src/gui/kernel/qplatformtheme.h5
5 files changed, 240 insertions, 2 deletions
diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri
index bf798372ae..f2c5334f8c 100644
--- a/src/gui/kernel/kernel.pri
+++ b/src/gui/kernel/kernel.pri
@@ -61,7 +61,8 @@ HEADERS += \
kernel/qplatformsharedgraphicscache.h \
kernel/qplatformdialoghelper.h \
kernel/qplatformservices.h \
- kernel/qplatformscreenpageflipper.h
+ kernel/qplatformscreenpageflipper.h \
+ kernel/qplatformsystemtrayicon.h
SOURCES += \
kernel/qclipboard_qpa.cpp \
@@ -108,7 +109,8 @@ SOURCES += \
kernel/qplatformsharedgraphicscache.cpp \
kernel/qplatformdialoghelper.cpp \
kernel/qplatformservices.cpp \
- kernel/qplatformscreenpageflipper.cpp
+ kernel/qplatformscreenpageflipper.cpp \
+ kernel/qplatformsystemtrayicon_qpa.cpp
contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles2) {
HEADERS += \
diff --git a/src/gui/kernel/qplatformsystemtrayicon.h b/src/gui/kernel/qplatformsystemtrayicon.h
new file mode 100644
index 0000000000..4bf708e871
--- /dev/null
+++ b/src/gui/kernel/qplatformsystemtrayicon.h
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2012 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Christoph Schleifenbaum <christoph.schleifenbaum@kdab.com>
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 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 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPLATFORMSYSTEMTRAYICON_H
+#define QPLATFORMSYSTEMTRAYICON_H
+
+#ifndef QT_NO_SYSTEMTRAYICON
+
+#include "QtCore/qobject.h"
+
+QT_BEGIN_NAMESPACE
+
+class QPlatformMenu;
+class QIcon;
+class QString;
+class QRect;
+
+class Q_GUI_EXPORT QPlatformSystemTrayIcon : public QObject
+{
+ Q_OBJECT
+public:
+ enum ActivationReason {
+ Unknown,
+ Context,
+ DoubleClick,
+ Trigger,
+ MiddleClick
+ };
+
+ enum MessageIcon { NoIcon, Information, Warning, Critical };
+
+ QPlatformSystemTrayIcon();
+ ~QPlatformSystemTrayIcon();
+
+ virtual void init() = 0;
+ virtual void cleanup() = 0;
+ virtual void updateIcon(const QIcon &icon) = 0;
+ virtual void updateToolTip(const QString &tooltip) = 0;
+ virtual void updateMenu(QPlatformMenu *menu) = 0;
+ virtual QRect geometry() const = 0;
+ virtual void showMessage(const QString &msg, const QString &title,
+ const QIcon &icon, MessageIcon iconType, int secs) = 0;
+
+ virtual bool isSystemTrayAvailable() const = 0;
+ virtual bool supportsMessages() const = 0;
+
+Q_SIGNALS:
+ void activated(QPlatformSystemTrayIcon::ActivationReason reason);
+ void messageClicked();
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_SYSTEMTRAYICON
+
+#endif // QSYSTEMTRAYICON_P_H
diff --git a/src/gui/kernel/qplatformsystemtrayicon_qpa.cpp b/src/gui/kernel/qplatformsystemtrayicon_qpa.cpp
new file mode 100644
index 0000000000..304fc2959f
--- /dev/null
+++ b/src/gui/kernel/qplatformsystemtrayicon_qpa.cpp
@@ -0,0 +1,125 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2012 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Christoph Schleifenbaum <christoph.schleifenbaum@kdab.com>
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 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 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformsystemtrayicon.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QPlatformSystemTrayIcon
+ \brief The QPlatformSystemTrayIcon class abstracts the system tray icon and interaction.
+
+ \sa QSystemTray
+*/
+
+/*!
+ \internal
+ */
+QPlatformSystemTrayIcon::QPlatformSystemTrayIcon()
+{
+}
+
+/*!
+ \internal
+ */
+QPlatformSystemTrayIcon::~QPlatformSystemTrayIcon()
+{
+}
+
+/*!
+ \fn void QPlatformSystemTrayIcon::init()
+ This method is called to initialize the platform dependent implementation.
+*/
+
+/*!
+ \fn void QPlatformSystemTrayIcon::cleanup()
+ This method is called to cleanup the platform dependent implementation.
+*/
+
+/*!
+ \fn void QPlatformSystemTrayIcon::updateIcon(const QIcon &icon)
+ This method is called when the \a icon did change.
+*/
+
+/*!
+ \fn void QPlatformSystemTrayIcon::updateToolTip(const QString &tooltip)
+ This method is called when the \a tooltip text did change.
+*/
+
+/*!
+ \fn void QPlatformSystemTrayIcon::updateMenu(QPlatformMenu *menu)
+ This method is called when the system tray \a menu did change.
+*/
+
+/*!
+ \fn QRect QPlatformSystemTrayIcon::geometry() const
+ This method returns the geometry of the platform dependent system tray icon on the screen.
+*/
+
+/*!
+ \fn void QPlatformSystemTrayIcon::showMessage(const QString &msg, const QString &title,
+ const QIcon &icon, MessageIcon iconType, int secs)
+ Shows a balloon message for the entry with the given \a title, message \msg and \a icon for
+ the time specified in \secs. \a iconType is used as a hint for the implementing platform.
+ \sa QSystemTrayIcon::showMessage
+*/
+
+/*!
+ \fn bool QPlatformSystemTrayIcon::isSystemTrayAvailable()
+ Returns true if the system tray is available on the platform.
+*/
+
+/*!
+ bool QPlatformSystemTrayIcon::supportsMessages()
+ Returns true if the system tray supports messages on the platform.
+*/
+
+/*!
+ \fn void activated(QPlatformSystemTrayIcon::ActivationReason reason)
+ This signal is emitted when the user activates the system tray icon.
+ \a reason specifies the reason for activation.
+ \sa QSystemTrayIcon::ActivationReason.
+*/
+
+QT_END_NAMESPACE
+
+#include "moc_qplatformsystemtrayicon.cpp"
diff --git a/src/gui/kernel/qplatformtheme.cpp b/src/gui/kernel/qplatformtheme.cpp
index 1038eb2826..d1ca8b740f 100644
--- a/src/gui/kernel/qplatformtheme.cpp
+++ b/src/gui/kernel/qplatformtheme.cpp
@@ -192,4 +192,15 @@ QPlatformMenuBar *QPlatformTheme::createPlatformMenuBar() const
return 0;
}
+#ifndef QT_NO_SYSTEMTRAYICON
+/*!
+ Factory function for QSystemTrayIcon. This function will return 0 if the platform
+ integration does not support creating any system tray icon.
+*/
+QPlatformSystemTrayIcon *QPlatformTheme::createPlatformSystemTrayIcon() const
+{
+ return 0;
+}
+#endif
+
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qplatformtheme.h b/src/gui/kernel/qplatformtheme.h
index f80f9e59d8..5ead94cd17 100644
--- a/src/gui/kernel/qplatformtheme.h
+++ b/src/gui/kernel/qplatformtheme.h
@@ -63,6 +63,7 @@ class QPlatformMenuItem;
class QPlatformMenu;
class QPlatformMenuBar;
class QPlatformDialogHelper;
+class QPlatformSystemTrayIcon;
class QVariant;
class QPalette;
class QFont;
@@ -170,6 +171,10 @@ public:
virtual bool usePlatformNativeDialog(DialogType type) const;
virtual QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const;
+#ifndef QT_NO_SYSTEMTRAYICON
+ virtual QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const;
+#endif
+
virtual const QPalette *palette(Palette type = SystemPalette) const;
virtual const QFont *font(Font type = SystemFont) const;