fix refresh issues
authorChristian Pulvermacher <christian@christian-laptop.(none)>
Wed, 13 Oct 2010 13:35:49 +0000 (15:35 +0200)
committerChristian Pulvermacher <christian@christian-laptop.(none)>
Wed, 13 Oct 2010 13:35:49 +0000 (15:35 +0200)
src/mainwindow.cpp
src/mainwindow.h
src/vncview.cpp

index 7940a25..ddc67ac 100644 (file)
@@ -69,6 +69,8 @@ MainWindow::MainWindow(QString url, int quality):
        zoom_slider->setRange(0, 100);
        connect(zoom_slider, SIGNAL(valueChanged(int)),
                this, SLOT(setZoomLevel(int)));
        zoom_slider->setRange(0, 100);
        connect(zoom_slider, SIGNAL(valueChanged(int)),
                this, SLOT(setZoomLevel(int)));
+       connect(zoom_slider, SIGNAL(sliderReleased()),
+               this, SLOT(forceRepaint()));
        zoom_slider->setValue(settings.value("zoomlevel", 95).toInt());
        toolbar->addWidget(zoom_slider);
 
        zoom_slider->setValue(settings.value("zoomlevel", 95).toInt());
        toolbar->addWidget(zoom_slider);
 
@@ -266,7 +268,13 @@ void MainWindow::statusChanged(RemoteView::RemoteStatus status)
        old_status = status;
 }
 
        old_status = status;
 }
 
-//resizes the widget to use available screen space
+void MainWindow::forceRepaint()
+{
+       if(vnc_view)
+               vnc_view->forceFullRepaint();
+}
+
+//updates available screen space for current zoom level
 //necessary when rotating, showing fullscreen, etc.
 void MainWindow::forceResize()
 {
 //necessary when rotating, showing fullscreen, etc.
 void MainWindow::forceResize()
 {
@@ -362,9 +370,12 @@ void MainWindow::setZoomLevel(int level)
        vnc_view->setZoomLevel(level);
 
        int new_width = vnc_view->width();
        vnc_view->setZoomLevel(level);
 
        int new_width = vnc_view->width();
-       center = center * (double(new_width)/old_width);
 
 
-       //scroll to center
-       scroll_area->ensureVisible(center.x(), center.y(),
-               scroll_area->width()/2, scroll_area->height()/2);
+       //scroll to center, if zoom level actually changed
+       if(new_width != old_width) {
+               center = center * (double(new_width)/old_width);
+               scroll_area->ensureVisible(center.x(), center.y(),
+                       scroll_area->width()/2, scroll_area->height()/2);
+               vnc_view->update();
+       }
 }
 }
index 24a508f..c53e2f3 100644 (file)
@@ -49,6 +49,7 @@ public slots:
        void showConnectDialog();
        void connectToHost(QString url, int quality, int listen_port);
        void disconnectFromHost();
        void showConnectDialog();
        void connectToHost(QString url, int quality, int listen_port);
        void disconnectFromHost();
+       void forceRepaint();
        void forceResize();
        void forceResizeDelayed();
        void sendTab() { vnc_view->sendKey(Qt::Key_Tab); }
        void forceResize();
        void forceResizeDelayed();
        void sendTab() { vnc_view->sendKey(Qt::Key_Tab); }
index 1d4932e..c0f6f16 100644 (file)
@@ -450,7 +450,7 @@ void VncView::paintEvent(QPaintEvent *event)
 void VncView::resizeEvent(QResizeEvent *event)
 {
     RemoteView::resizeEvent(event);
 void VncView::resizeEvent(QResizeEvent *event)
 {
     RemoteView::resizeEvent(event);
-    forceFullRepaint();
+    update();
 }
 
 bool VncView::event(QEvent *event)
 }
 
 bool VncView::event(QEvent *event)