public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Davide Pesavento" <pesa@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/qt:master commit in: dev-qt/qtwidgets/, dev-qt/qtwidgets/files/
Date: Sat, 28 Jun 2014 01:50:25 +0000 (UTC)	[thread overview]
Message-ID: <1403920108.dec357e79272b00c9d5e5a6113a3147f9fe1ad73.pesa@gentoo> (raw)

commit:     dec357e79272b00c9d5e5a6113a3147f9fe1ad73
Author:     David Heidelberger <david.heidelberger <AT> ixit <DOT> cz>
AuthorDate: Fri Jun 27 16:49:47 2014 +0000
Commit:     Davide Pesavento <pesa <AT> gentoo <DOT> org>
CommitDate: Sat Jun 28 01:48:28 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/qt.git;a=commit;h=dec357e7

[dev-qt/qtwidgets] Cherry pick systray improvement from dev branch.

Recommended by KDE developers, for more information see
http://blog.martin-graesslin.com/blog/2014/06/where-are-my-systray-icons/

---
 .../files/qtwidgets-5.3.1-prefer-qpa.patch         | 343 +++++++++++++++++++++
 ...gets-5.3.1.ebuild => qtwidgets-5.3.1-r1.ebuild} |   5 +
 dev-qt/qtwidgets/qtwidgets-5.3.9999.ebuild         |   5 +
 3 files changed, 353 insertions(+)

diff --git a/dev-qt/qtwidgets/files/qtwidgets-5.3.1-prefer-qpa.patch b/dev-qt/qtwidgets/files/qtwidgets-5.3.1-prefer-qpa.patch
new file mode 100644
index 0000000..2a5d130
--- /dev/null
+++ b/dev-qt/qtwidgets/files/qtwidgets-5.3.1-prefer-qpa.patch
@@ -0,0 +1,343 @@
+From f1ee10f81ac18789e9a7dc715b464415ba2bc2b8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= <mgraesslin@kde.org>
+Date: Wed, 19 Feb 2014 11:01:44 +0100
+Subject: Prefer QPA implementation in qsystemtrayicon_x11 if available
+
+In order to have the possibility to provide a custom QSystemTrayIcon
+implementation in the platform theme instead of the X11 xembed based
+one, the qpa implementation needs to be called. This was not possible
+as qpa and x11 implementation were compile time mutual exclusive.
+
+This change moves the qpa implementation in the shared part and the
+methods in qsystemtrayicon_qpa just delegate to them. In addition the
+_x11 part tries to create a QPlatformSystemTrayIcon through the
+platform theme and if that succeeds the implementation prefers the qpa
+variant and delegates to the same methods.
+
+Change-Id: I6b33acac63524a77ebdce39af6eb74666f8c7561
+Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com>
+Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
+Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
+---
+ src/widgets/util/qsystemtrayicon.cpp     | 68 ++++++++++++++++++++++++++++++++
+ src/widgets/util/qsystemtrayicon_p.h     |  9 +++++
+ src/widgets/util/qsystemtrayicon_qpa.cpp | 51 +++++-------------------
+ src/widgets/util/qsystemtrayicon_x11.cpp | 40 ++++++++++++++++++-
+ 4 files changed, 126 insertions(+), 42 deletions(-)
+
+diff --git a/src/widgets/util/qsystemtrayicon.cpp b/src/widgets/util/qsystemtrayicon.cpp
+index f1a69e6..fa318f3 100644
+--- a/src/widgets/util/qsystemtrayicon.cpp
++++ b/src/widgets/util/qsystemtrayicon.cpp
+@@ -672,6 +672,74 @@ void QBalloonTip::timerEvent(QTimerEvent *e)
+     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
+diff --git a/src/widgets/util/qsystemtrayicon_p.h b/src/widgets/util/qsystemtrayicon_p.h
+index 211ef30..317664a 100644
+--- a/src/widgets/util/qsystemtrayicon_p.h
++++ b/src/widgets/util/qsystemtrayicon_p.h
+@@ -98,6 +98,15 @@ public:
+     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
+diff --git a/src/widgets/util/qsystemtrayicon_qpa.cpp b/src/widgets/util/qsystemtrayicon_qpa.cpp
+index f98aeaf..045641c 100644
+--- a/src/widgets/util/qsystemtrayicon_qpa.cpp
++++ b/src/widgets/util/qsystemtrayicon_qpa.cpp
+@@ -65,28 +65,20 @@ QSystemTrayIconPrivate::~QSystemTrayIconPrivate()
+ 
+ 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 @@ QRect QSystemTrayIconPrivate::geometry_sys() const
+ 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 @@ void QSystemTrayIconPrivate::showMessage_sys(const QString &message,
+                                              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
+diff --git a/src/widgets/util/qsystemtrayicon_x11.cpp b/src/widgets/util/qsystemtrayicon_x11.cpp
+index 347e570..27d0418 100644
+--- 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 @@ void QSystemTrayIconSys::paintEvent(QPaintEvent *)
+ 
+ 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 @@ void QSystemTrayIconPrivate::install_sys()
+ 
+ QRect QSystemTrayIconPrivate::geometry_sys() const
+ {
++    if (qpa_sys)
++        return geometry_sys_qpa();
+     if (!sys)
+         return QRect();
+     return sys->globalGeometry();
+@@ -236,6 +247,10 @@ QRect QSystemTrayIconPrivate::geometry_sys() const
+ 
+ void QSystemTrayIconPrivate::remove_sys()
+ {
++    if (qpa_sys) {
++        remove_sys_qpa();
++        return;
++    }
+     if (!sys)
+         return;
+     QBalloonTip::hideBalloon();
+@@ -246,17 +261,26 @@ void QSystemTrayIconPrivate::remove_sys()
+ 
+ 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 @@ void QSystemTrayIconPrivate::updateToolTip_sys()
+ 
+ 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::isSystemTrayAvailable_sys()
+ 
+ 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();
+-- 
+2.0.0
+

diff --git a/dev-qt/qtwidgets/qtwidgets-5.3.1.ebuild b/dev-qt/qtwidgets/qtwidgets-5.3.1-r1.ebuild
similarity index 79%
rename from dev-qt/qtwidgets/qtwidgets-5.3.1.ebuild
rename to dev-qt/qtwidgets/qtwidgets-5.3.1-r1.ebuild
index e2b87e5..c50f5ce 100644
--- a/dev-qt/qtwidgets/qtwidgets-5.3.1.ebuild
+++ b/dev-qt/qtwidgets/qtwidgets-5.3.1-r1.ebuild
@@ -24,6 +24,11 @@ DEPEND="
 "
 RDEPEND="${DEPEND}"
 
+PATCHES=(
+	# http://blog.martin-graesslin.com/blog/2014/06/where-are-my-systray-icons/
+	"${FILESDIR}/${PN}-5.3.1-prefer-qpa.patch"
+)
+
 QT5_TARGET_SUBDIRS=(
 	src/tools/uic
 	src/widgets

diff --git a/dev-qt/qtwidgets/qtwidgets-5.3.9999.ebuild b/dev-qt/qtwidgets/qtwidgets-5.3.9999.ebuild
index e2b87e5..c50f5ce 100644
--- a/dev-qt/qtwidgets/qtwidgets-5.3.9999.ebuild
+++ b/dev-qt/qtwidgets/qtwidgets-5.3.9999.ebuild
@@ -24,6 +24,11 @@ DEPEND="
 "
 RDEPEND="${DEPEND}"
 
+PATCHES=(
+	# http://blog.martin-graesslin.com/blog/2014/06/where-are-my-systray-icons/
+	"${FILESDIR}/${PN}-5.3.1-prefer-qpa.patch"
+)
+
 QT5_TARGET_SUBDIRS=(
 	src/tools/uic
 	src/widgets


             reply	other threads:[~2014-06-28  1:50 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-28  1:50 Davide Pesavento [this message]
  -- strict thread matches above, loose matches on Subject: below --
2020-04-06 22:26 [gentoo-commits] proj/qt:master commit in: dev-qt/qtwidgets/, dev-qt/qtwidgets/files/ Andreas Sturmlechner
2019-09-29  7:04 Andreas Sturmlechner
2014-05-24 17:43 Davide Pesavento

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1403920108.dec357e79272b00c9d5e5a6113a3147f9fe1ad73.pesa@gentoo \
    --to=pesa@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox