changeset 969:c096881e8ed0

(issue50) Make message box a member variable This only shows the message box again if no old message box still exists.
author Andre Heinecke <andre.heinecke@intevation.de>
date Thu, 28 Aug 2014 14:43:47 +0200
parents 5e43b9a4e926
children c80777457133
files ui/trayicon.cpp ui/trayicon.h
diffstat 2 files changed, 24 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/ui/trayicon.cpp	Thu Aug 28 12:57:35 2014 +0200
+++ b/ui/trayicon.cpp	Thu Aug 28 14:43:47 2014 +0200
@@ -16,7 +16,8 @@
 
 TrayIcon::TrayIcon (QObject *parent) :
     QSystemTrayIcon (parent),
-    useAlt(false)
+    useAlt(false),
+    mMessageBox(NULL)
 {
     if (QSystemTrayIcon::isSystemTrayAvailable() &&
         qgetenv("XDG_CURRENT_DESKTOP") != "Unity") {
@@ -41,11 +42,19 @@
         QSystemTrayIcon::showMessage(title, msg, msg_icon, msecs);
         return;
     }
-    QMessageBox *theMessage = new QMessageBox (QMessageBox::Information,
-            title, msg, QMessageBox::Ok | QMessageBox::No, qobject_cast<QWidget*>(parent()));
-    theMessage->setIconPixmap (icon().pixmap(theMessage->iconPixmap().size()));
-    theMessage->button(QMessageBox::Ok)->setText (tr("Install update"));
-    theMessage->button(QMessageBox::No)->setText (tr("Remind me later"));
-    connect(theMessage->button(QMessageBox::Ok), SIGNAL(clicked()), this, SIGNAL(messageClicked()));
-    theMessage->show();
+    if (!mMessageBox) {
+        mMessageBox = new QMessageBox (QMessageBox::Information,
+                                       title, msg, QMessageBox::Ok | QMessageBox::No,
+                                       qobject_cast<QWidget*>(parent()));
+        connect(mMessageBox->button(QMessageBox::Ok), SIGNAL(clicked()), this, SIGNAL(messageClicked()));
+        connect(mMessageBox, SIGNAL(destroyed()), this, SLOT(messageDestroyed()));
+    }
+    mMessageBox->setIconPixmap (icon().pixmap(mMessageBox->iconPixmap().size()));
+    mMessageBox->button(QMessageBox::Ok)->setText (tr("Install update"));
+    mMessageBox->button(QMessageBox::No)->setText (tr("Remind me later"));
+    mMessageBox->show();
 }
+
+void TrayIcon::messageDestroyed() {
+    mMessageBox = NULL;
+}
--- a/ui/trayicon.h	Thu Aug 28 12:57:35 2014 +0200
+++ b/ui/trayicon.h	Thu Aug 28 14:43:47 2014 +0200
@@ -20,6 +20,9 @@
  * This class should become obsolete once Qt improves the support for
  * StatusNotifier icons that are used in Plasma 5 and Unity.
  */
+
+class QMessageBox;
+
 class TrayIcon :  public QSystemTrayIcon
 {
     Q_OBJECT
@@ -32,8 +35,12 @@
 public Q_SLOTS:
     void showMessage(const QString &title, const QString &msg,
                      QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int msecs = 10000);
+private Q_SLOTS:
+    void messageDestroyed();
+
 private:
     bool useAlt;
+    QMessageBox *mMessageBox;
 };
 
 #endif // TRAYICON_H

http://wald.intevation.org/projects/trustbridge/