diff options
Diffstat (limited to 'src/widgets/util')
-rw-r--r-- | src/widgets/util/qsystemtrayicon.cpp | 9 | ||||
-rw-r--r-- | src/widgets/util/qsystemtrayicon_p.h | 2 | ||||
-rw-r--r-- | src/widgets/util/qsystemtrayicon_x11.cpp | 17 |
3 files changed, 24 insertions, 4 deletions
diff --git a/src/widgets/util/qsystemtrayicon.cpp b/src/widgets/util/qsystemtrayicon.cpp index 6b8c878dc4..7d04cab05e 100644 --- a/src/widgets/util/qsystemtrayicon.cpp +++ b/src/widgets/util/qsystemtrayicon.cpp @@ -416,6 +416,14 @@ void QBalloonTip::hideBalloon() theSolitaryBalloonTip = 0; } +void QBalloonTip::updateBalloonPosition(const QPoint& pos) +{ + if (!theSolitaryBalloonTip) + return; + theSolitaryBalloonTip->hide(); + theSolitaryBalloonTip->balloon(pos, 0, theSolitaryBalloonTip->showArrow); +} + bool QBalloonTip::isBalloonVisible() { return theSolitaryBalloonTip; @@ -549,6 +557,7 @@ void QBalloonTip::resizeEvent(QResizeEvent *ev) void QBalloonTip::balloon(const QPoint& pos, int msecs, bool showArrow) { + this->showArrow = showArrow; QRect scr = QApplication::desktop()->screenGeometry(pos); QSize sh = sizeHint(); const int border = 1; diff --git a/src/widgets/util/qsystemtrayicon_p.h b/src/widgets/util/qsystemtrayicon_p.h index d745269d2f..0dda689c51 100644 --- a/src/widgets/util/qsystemtrayicon_p.h +++ b/src/widgets/util/qsystemtrayicon_p.h @@ -110,6 +110,7 @@ public: const QPoint& pos, int timeout, bool showArrow = true); static void hideBalloon(); static bool isBalloonVisible(); + static void updateBalloonPosition(const QPoint& pos); private: QBalloonTip(QSystemTrayIcon::MessageIcon icon, const QString& title, @@ -127,6 +128,7 @@ private: QSystemTrayIcon *trayIcon; QPixmap pixmap; int timerId; + bool showArrow; }; QT_END_NAMESPACE diff --git a/src/widgets/util/qsystemtrayicon_x11.cpp b/src/widgets/util/qsystemtrayicon_x11.cpp index be8ee97df5..cda557b6b0 100644 --- a/src/widgets/util/qsystemtrayicon_x11.cpp +++ b/src/widgets/util/qsystemtrayicon_x11.cpp @@ -79,6 +79,7 @@ protected: virtual bool event(QEvent *); virtual void paintEvent(QPaintEvent *); virtual void resizeEvent(QResizeEvent *); + virtual void moveEvent(QMoveEvent *); private slots: void systemTrayWindowChanged(QScreen *screen); @@ -223,11 +224,20 @@ void QSystemTrayIconSys::paintEvent(QPaintEvent *) q->icon().paint(&painter, rect); } -void QSystemTrayIconSys::resizeEvent(QResizeEvent *) +void QSystemTrayIconSys::moveEvent(QMoveEvent *event) { - update(); + QWidget::moveEvent(event); + if (QBalloonTip::isBalloonVisible()) + QBalloonTip::updateBalloonPosition(globalGeometry().center()); } +void QSystemTrayIconSys::resizeEvent(QResizeEvent *event) +{ + update(); + QWidget::resizeEvent(event); + if (QBalloonTip::isBalloonVisible()) + QBalloonTip::updateBalloonPosition(globalGeometry().center()); +} //////////////////////////////////////////////////////////////////////////// QSystemTrayIconPrivate::QSystemTrayIconPrivate() @@ -340,9 +350,8 @@ void QSystemTrayIconPrivate::showMessage_sys(const QString &message, const QStri } if (!sys) return; - const QPoint g = sys->globalGeometry().topLeft(); QBalloonTip::showBalloon(icon, message, title, sys->systemTrayIcon(), - QPoint(g.x() + sys->width()/2, g.y() + sys->height()/2), + sys->globalGeometry().center(), msecs); } |