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
|
||||
Name: qt5-qtbase
|
||||
Version: 5.3.1
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
|
||||
# See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details
|
||||
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)
|
||||
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
|
||||
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
|
||||
|
||||
%patch4 -p1 -b .QTBUG-35459
|
||||
%patch5 -p1 -b .prefer-qpa
|
||||
%patch12 -p1 -b .enable_ft_lcdfilter
|
||||
|
||||
#patch50 -p1 -b .poll
|
||||
@ -695,6 +699,9 @@ popd
|
||||
|
||||
|
||||
%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
|
||||
- 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