Show more detailed error messages
[presencevnc] / src / scrollarea.h
index 956555b..fa59830 100644 (file)
 //fixes tearing during scrolling and can display messages
 class ScrollArea : public QScrollArea
 {
+    Q_OBJECT
 public:
-    ScrollArea(QWidget *parent):
-        QScrollArea(parent) {
-        message.setParent(this);
+    explicit ScrollArea(QWidget *parent):
+        QScrollArea(parent),
+        message(this)
+    {
         message.setVisible(false);
         message.setAlignment(Qt::AlignCenter);
         message.setWordWrap(true);
@@ -41,17 +43,28 @@ public:
         message.setPalette(pal);
         message.setAutoFillBackground(true);
 
-        timer.setSingleShot(true);
-        timer.setInterval(2500);
-        connect(&timer, SIGNAL(timeout()),
+        message_timer.setSingleShot(true);
+        message_timer.setInterval(2500);
+        connect(&message_timer, SIGNAL(timeout()),
                 &message, SLOT(hide()));
+
+#ifdef Q_WS_MAEMO_5
+        // disable overshooting because it somehow causes repaint events for the whole widget (slow)
+        QAbstractKineticScroller *scroller = property("kineticScroller").value<QAbstractKineticScroller *>();
+        if (scroller)
+            scroller->setOvershootPolicy(QAbstractKineticScroller::OvershootAlwaysOff);
+#endif
     }
 
+public slots:
     void showMessage(const QString &s) {
         message.setText(s);
         message.show();
-        timer.start();
+        message_timer.start();
     }
+
+    //provided for convenience
+    void showMessage(QString /*title*/, QString msg) { showMessage(msg); }
 protected:
     virtual void resizeEvent(QResizeEvent* ev) {
         QScrollArea::resizeEvent(ev);
@@ -60,10 +73,10 @@ protected:
     virtual void scrollContentsBy(int dx, int dy) {
         QScrollArea::scrollContentsBy(dx, dy);
         if(widget())
-            widget()->update(); //update whole widget
+            message.hide(); //overlay-widget slows down scrolling
     }
 private:
     QLabel message;
-    QTimer timer;
+    QTimer message_timer;
 };
 #endif