Prefer QPA implementation in qsystemtrayicon_x11 if available
This commit is contained in:
parent
df5040976c
commit
f276ab369e
@ -22,7 +22,7 @@
|
|||||||
Summary: Qt5 - QtBase components
|
Summary: Qt5 - QtBase components
|
||||||
Name: qt5-qtbase
|
Name: qt5-qtbase
|
||||||
Version: 5.3.1
|
Version: 5.3.1
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
|
|
||||||
# See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details
|
# See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details
|
||||||
License: LGPLv2 with exceptions or GPLv3 with exceptions
|
License: LGPLv2 with exceptions or GPLv3 with exceptions
|
||||||
@ -54,6 +54,9 @@ Patch2: qtbase-multilib_optflags.patch
|
|||||||
# fix QTBUG-35459 (too low entityCharacterLimit=1024 for CVE-2013-4549)
|
# fix QTBUG-35459 (too low entityCharacterLimit=1024 for CVE-2013-4549)
|
||||||
Patch4: qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch
|
Patch4: qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch
|
||||||
|
|
||||||
|
# Prefer QPA implementation in qsystemtrayicon_x11 if available
|
||||||
|
Patch5: qtbase-5.3.1-prefer-qpa-implementation.patch
|
||||||
|
|
||||||
# unconditionally enable freetype lcdfilter support
|
# unconditionally enable freetype lcdfilter support
|
||||||
Patch12: qtbase-opensource-src-5.2.0-enable_ft_lcdfilter.patch
|
Patch12: qtbase-opensource-src-5.2.0-enable_ft_lcdfilter.patch
|
||||||
|
|
||||||
@ -264,6 +267,7 @@ Qt5 libraries used for drawing widgets and OpenGL items.
|
|||||||
rm -fv mkspecs/linux-g++*/qmake.conf.multilib-optflags
|
rm -fv mkspecs/linux-g++*/qmake.conf.multilib-optflags
|
||||||
|
|
||||||
%patch4 -p1 -b .QTBUG-35459
|
%patch4 -p1 -b .QTBUG-35459
|
||||||
|
%patch5 -p1 -b .prefer-qpa
|
||||||
%patch12 -p1 -b .enable_ft_lcdfilter
|
%patch12 -p1 -b .enable_ft_lcdfilter
|
||||||
|
|
||||||
#patch50 -p1 -b .poll
|
#patch50 -p1 -b .poll
|
||||||
@ -695,6 +699,9 @@ popd
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Jun 27 2014 Jan Grulich <jgrulich@redhat.com> - 5.3.1-2
|
||||||
|
- Prefer QPA implementation in qsystemtrayicon_x11 if available
|
||||||
|
|
||||||
* Tue Jun 17 2014 Jan Grulich <jgrulich@redhat.com> - 5.3.1-1
|
* Tue Jun 17 2014 Jan Grulich <jgrulich@redhat.com> - 5.3.1-1
|
||||||
- 5.3.1
|
- 5.3.1
|
||||||
|
|
||||||
|
312
qtbase-5.3.1-prefer-qpa-implementation.patch
Normal file
312
qtbase-5.3.1-prefer-qpa-implementation.patch
Normal file
@ -0,0 +1,312 @@
|
|||||||
|
--- a/src/widgets/util/qsystemtrayicon.cpp
|
||||||
|
+++ b/src/widgets/util/qsystemtrayicon.cpp
|
||||||
|
@@ -672,6 +672,74 @@
|
||||||
|
QWidget::timerEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
+//////////////////////////////////////////////////////////////////////
|
||||||
|
+void QSystemTrayIconPrivate::install_sys_qpa()
|
||||||
|
+{
|
||||||
|
+ qpa_sys->init();
|
||||||
|
+ QObject::connect(qpa_sys, SIGNAL(activated(QPlatformSystemTrayIcon::ActivationReason)),
|
||||||
|
+ q_func(), SLOT(_q_emitActivated(QPlatformSystemTrayIcon::ActivationReason)));
|
||||||
|
+ QObject::connect(qpa_sys, &QPlatformSystemTrayIcon::messageClicked,
|
||||||
|
+ q_func(), &QSystemTrayIcon::messageClicked);
|
||||||
|
+ updateMenu_sys();
|
||||||
|
+ updateIcon_sys();
|
||||||
|
+ updateToolTip_sys();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void QSystemTrayIconPrivate::remove_sys_qpa()
|
||||||
|
+{
|
||||||
|
+ qpa_sys->cleanup();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+QRect QSystemTrayIconPrivate::geometry_sys_qpa() const
|
||||||
|
+{
|
||||||
|
+ return qpa_sys->geometry();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void QSystemTrayIconPrivate::updateIcon_sys_qpa()
|
||||||
|
+{
|
||||||
|
+ qpa_sys->updateIcon(icon);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void QSystemTrayIconPrivate::updateMenu_sys_qpa()
|
||||||
|
+{
|
||||||
|
+ if (menu) {
|
||||||
|
+ if (!menu->platformMenu()) {
|
||||||
|
+ QPlatformMenu *platformMenu = qpa_sys->createMenu();
|
||||||
|
+ if (platformMenu)
|
||||||
|
+ menu->setPlatformMenu(platformMenu);
|
||||||
|
+ }
|
||||||
|
+ qpa_sys->updateMenu(menu->platformMenu());
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void QSystemTrayIconPrivate::updateToolTip_sys_qpa()
|
||||||
|
+{
|
||||||
|
+ qpa_sys->updateToolTip(toolTip);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void QSystemTrayIconPrivate::showMessage_sys_qpa(const QString &message,
|
||||||
|
+ const QString &title,
|
||||||
|
+ QSystemTrayIcon::MessageIcon icon,
|
||||||
|
+ int msecs)
|
||||||
|
+{
|
||||||
|
+ QIcon notificationIcon;
|
||||||
|
+ switch (icon) {
|
||||||
|
+ case QSystemTrayIcon::Information:
|
||||||
|
+ notificationIcon = QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation);
|
||||||
|
+ break;
|
||||||
|
+ case QSystemTrayIcon::Warning:
|
||||||
|
+ notificationIcon = QApplication::style()->standardIcon(QStyle::SP_MessageBoxWarning);
|
||||||
|
+ break;
|
||||||
|
+ case QSystemTrayIcon::Critical:
|
||||||
|
+ notificationIcon = QApplication::style()->standardIcon(QStyle::SP_MessageBoxCritical);
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ qpa_sys->showMessage(message, title, notificationIcon,
|
||||||
|
+ static_cast<QPlatformSystemTrayIcon::MessageIcon>(icon), msecs);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#endif // QT_NO_SYSTEMTRAYICON
|
||||||
|
--- a/src/widgets/util/qsystemtrayicon_p.h
|
||||||
|
+++ b/src/widgets/util/qsystemtrayicon_p.h
|
||||||
|
@@ -98,6 +98,15 @@
|
||||||
|
QSystemTrayIconSys *sys;
|
||||||
|
QPlatformSystemTrayIcon *qpa_sys;
|
||||||
|
bool visible;
|
||||||
|
+
|
||||||
|
+private:
|
||||||
|
+ void install_sys_qpa();
|
||||||
|
+ void remove_sys_qpa();
|
||||||
|
+ void updateIcon_sys_qpa();
|
||||||
|
+ void updateToolTip_sys_qpa();
|
||||||
|
+ void updateMenu_sys_qpa();
|
||||||
|
+ QRect geometry_sys_qpa() const;
|
||||||
|
+ void showMessage_sys_qpa(const QString &msg, const QString &title, QSystemTrayIcon::MessageIcon icon, int secs);
|
||||||
|
};
|
||||||
|
|
||||||
|
class QBalloonTip : public QWidget
|
||||||
|
--- a/src/widgets/util/qsystemtrayicon_qpa.cpp
|
||||||
|
+++ b/src/widgets/util/qsystemtrayicon_qpa.cpp
|
||||||
|
@@ -65,28 +65,20 @@
|
||||||
|
|
||||||
|
void QSystemTrayIconPrivate::install_sys()
|
||||||
|
{
|
||||||
|
- if (qpa_sys) {
|
||||||
|
- qpa_sys->init();
|
||||||
|
- QObject::connect(qpa_sys, SIGNAL(activated(QPlatformSystemTrayIcon::ActivationReason)),
|
||||||
|
- q_func(), SLOT(_q_emitActivated(QPlatformSystemTrayIcon::ActivationReason)));
|
||||||
|
- QObject::connect(qpa_sys, SIGNAL(messageClicked()),
|
||||||
|
- q_func(), SIGNAL(messageClicked()));
|
||||||
|
- updateMenu_sys();
|
||||||
|
- updateIcon_sys();
|
||||||
|
- updateToolTip_sys();
|
||||||
|
- }
|
||||||
|
+ if (qpa_sys)
|
||||||
|
+ install_sys_qpa();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QSystemTrayIconPrivate::remove_sys()
|
||||||
|
{
|
||||||
|
if (qpa_sys)
|
||||||
|
- qpa_sys->cleanup();
|
||||||
|
+ remove_sys_qpa();
|
||||||
|
}
|
||||||
|
|
||||||
|
QRect QSystemTrayIconPrivate::geometry_sys() const
|
||||||
|
{
|
||||||
|
if (qpa_sys)
|
||||||
|
- return qpa_sys->geometry();
|
||||||
|
+ return geometry_sys_qpa();
|
||||||
|
else
|
||||||
|
return QRect();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -94,25 +86,19 @@
|
||||||
|
void QSystemTrayIconPrivate::updateIcon_sys()
|
||||||
|
{
|
||||||
|
if (qpa_sys)
|
||||||
|
- qpa_sys->updateIcon(icon);
|
||||||
|
+ updateIcon_sys_qpa();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QSystemTrayIconPrivate::updateMenu_sys()
|
||||||
|
{
|
||||||
|
- if (qpa_sys && menu) {
|
||||||
|
- if (!menu->platformMenu()) {
|
||||||
|
- QPlatformMenu *platformMenu = qpa_sys->createMenu();
|
||||||
|
- if (platformMenu)
|
||||||
|
- menu->setPlatformMenu(platformMenu);
|
||||||
|
- }
|
||||||
|
- qpa_sys->updateMenu(menu->platformMenu());
|
||||||
|
- }
|
||||||
|
+ if (qpa_sys)
|
||||||
|
+ updateMenu_sys_qpa();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QSystemTrayIconPrivate::updateToolTip_sys()
|
||||||
|
{
|
||||||
|
if (qpa_sys)
|
||||||
|
- qpa_sys->updateToolTip(toolTip);
|
||||||
|
+ updateToolTip_sys_qpa();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys()
|
||||||
|
@@ -138,25 +124,8 @@
|
||||||
|
QSystemTrayIcon::MessageIcon icon,
|
||||||
|
int msecs)
|
||||||
|
{
|
||||||
|
- if (!qpa_sys)
|
||||||
|
- return;
|
||||||
|
-
|
||||||
|
- QIcon notificationIcon;
|
||||||
|
- switch (icon) {
|
||||||
|
- case QSystemTrayIcon::Information:
|
||||||
|
- notificationIcon = QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation);
|
||||||
|
- break;
|
||||||
|
- case QSystemTrayIcon::Warning:
|
||||||
|
- notificationIcon = QApplication::style()->standardIcon(QStyle::SP_MessageBoxWarning);
|
||||||
|
- break;
|
||||||
|
- case QSystemTrayIcon::Critical:
|
||||||
|
- notificationIcon = QApplication::style()->standardIcon(QStyle::SP_MessageBoxCritical);
|
||||||
|
- break;
|
||||||
|
- default:
|
||||||
|
- break;
|
||||||
|
- }
|
||||||
|
- qpa_sys->showMessage(message, title, notificationIcon,
|
||||||
|
- static_cast<QPlatformSystemTrayIcon::MessageIcon>(icon), msecs);
|
||||||
|
+ if (qpa_sys)
|
||||||
|
+ showMessage_sys_qpa(message, title, icon, msecs);
|
||||||
|
}
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
--- a/src/widgets/util/qsystemtrayicon_x11.cpp
|
||||||
|
+++ b/src/widgets/util/qsystemtrayicon_x11.cpp
|
||||||
|
@@ -55,6 +55,9 @@
|
||||||
|
#include <qscreen.h>
|
||||||
|
#include <qbackingstore.h>
|
||||||
|
#include <qpa/qplatformnativeinterface.h>
|
||||||
|
+#include <qpa/qplatformsystemtrayicon.h>
|
||||||
|
+#include <qpa/qplatformtheme.h>
|
||||||
|
+#include <private/qguiapplication_p.h>
|
||||||
|
#include <qdebug.h>
|
||||||
|
|
||||||
|
#ifndef QT_NO_SYSTEMTRAYICON
|
||||||
|
|
||||||
|
|
||||||
|
@@ -209,16 +212,22 @@
|
||||||
|
|
||||||
|
QSystemTrayIconPrivate::QSystemTrayIconPrivate()
|
||||||
|
: sys(0),
|
||||||
|
+ qpa_sys(QGuiApplicationPrivate::platformTheme()->createPlatformSystemTrayIcon()),
|
||||||
|
visible(false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QSystemTrayIconPrivate::~QSystemTrayIconPrivate()
|
||||||
|
{
|
||||||
|
+ delete qpa_sys;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QSystemTrayIconPrivate::install_sys()
|
||||||
|
{
|
||||||
|
+ if (qpa_sys) {
|
||||||
|
+ install_sys_qpa();
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
Q_Q(QSystemTrayIcon);
|
||||||
|
if (!sys && locateSystemTray()) {
|
||||||
|
sys = new QSystemTrayIconSys(q);
|
||||||
|
@@ -229,6 +238,8 @@
|
||||||
|
|
||||||
|
QRect QSystemTrayIconPrivate::geometry_sys() const
|
||||||
|
{
|
||||||
|
+ if (qpa_sys)
|
||||||
|
+ return geometry_sys_qpa();
|
||||||
|
if (!sys)
|
||||||
|
return QRect();
|
||||||
|
return sys->globalGeometry();
|
||||||
|
@@ -236,6 +247,10 @@
|
||||||
|
|
||||||
|
void QSystemTrayIconPrivate::remove_sys()
|
||||||
|
{
|
||||||
|
+ if (qpa_sys) {
|
||||||
|
+ remove_sys_qpa();
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
if (!sys)
|
||||||
|
return;
|
||||||
|
QBalloonTip::hideBalloon();
|
||||||
|
|
||||||
|
|
||||||
|
@@ -246,17 +261,26 @@
|
||||||
|
|
||||||
|
void QSystemTrayIconPrivate::updateIcon_sys()
|
||||||
|
{
|
||||||
|
+ if (qpa_sys) {
|
||||||
|
+ updateIcon_sys_qpa();
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
if (sys)
|
||||||
|
sys->updateIcon();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QSystemTrayIconPrivate::updateMenu_sys()
|
||||||
|
{
|
||||||
|
-
|
||||||
|
+ if (qpa_sys)
|
||||||
|
+ updateMenu_sys_qpa();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QSystemTrayIconPrivate::updateToolTip_sys()
|
||||||
|
{
|
||||||
|
+ if (qpa_sys) {
|
||||||
|
+ updateToolTip_sys_qpa();
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
if (!sys)
|
||||||
|
return;
|
||||||
|
#ifndef QT_NO_TOOLTIP
|
||||||
|
@@ -266,6 +290,11 @@
|
||||||
|
|
||||||
|
bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys()
|
||||||
|
{
|
||||||
|
+ QScopedPointer<QPlatformSystemTrayIcon> sys(QGuiApplicationPrivate::platformTheme()->createPlatformSystemTrayIcon());
|
||||||
|
+ if (sys)
|
||||||
|
+ return sys->isSystemTrayAvailable();
|
||||||
|
+
|
||||||
|
+ // no QPlatformSystemTrayIcon so fall back to default xcb platform behavior
|
||||||
|
const QString platform = QGuiApplication::platformName();
|
||||||
|
if (platform.compare(QStringLiteral("xcb"), Qt::CaseInsensitive) == 0)
|
||||||
|
return locateSystemTray();
|
||||||
|
|
||||||
|
@@ -274,12 +303,21 @@
|
||||||
|
|
||||||
|
bool QSystemTrayIconPrivate::supportsMessages_sys()
|
||||||
|
{
|
||||||
|
+ QScopedPointer<QPlatformSystemTrayIcon> sys(QGuiApplicationPrivate::platformTheme()->createPlatformSystemTrayIcon());
|
||||||
|
+ if (sys)
|
||||||
|
+ return sys->supportsMessages();
|
||||||
|
+
|
||||||
|
+ // no QPlatformSystemTrayIcon so fall back to default xcb platform behavior
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QSystemTrayIconPrivate::showMessage_sys(const QString &message, const QString &title,
|
||||||
|
QSystemTrayIcon::MessageIcon icon, int msecs)
|
||||||
|
{
|
||||||
|
+ if (qpa_sys) {
|
||||||
|
+ showMessage_sys_qpa(message, title, icon, msecs);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
if (!sys)
|
||||||
|
return;
|
||||||
|
const QPoint g = sys->globalGeometry().topLeft();
|
Loading…
Reference in New Issue
Block a user