summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/widgets/desktop/systray/window.cpp1
-rw-r--r--src/widgets/util/qsystemtrayicon.cpp9
-rw-r--r--src/widgets/util/qsystemtrayicon_p.h2
-rw-r--r--src/widgets/util/qsystemtrayicon_x11.cpp17
4 files changed, 25 insertions, 4 deletions
diff --git a/examples/widgets/desktop/systray/window.cpp b/examples/widgets/desktop/systray/window.cpp
index 0ef5ddbd31..f13c05705e 100644
--- a/examples/widgets/desktop/systray/window.cpp
+++ b/examples/widgets/desktop/systray/window.cpp
@@ -144,6 +144,7 @@ void Window::iconActivated(QSystemTrayIcon::ActivationReason reason)
//! [5]
void Window::showMessage()
{
+ showIconCheckBox->setChecked(true);
QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::MessageIcon(
typeComboBox->itemData(typeComboBox->currentIndex()).toInt());
trayIcon->showMessage(titleEdit->text(), bodyEdit->toPlainText(), icon,
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);
}