From b9f5646ee6fd19a0ef1ccd15d752339aabcb3a53 Mon Sep 17 00:00:00 2001 From: Christian Pulvermacher Date: Wed, 6 Oct 2010 23:23:33 +0200 Subject: [PATCH] fix redrawing after connecting --- src/mainwindow.cpp | 11 ++++------ src/vncclientthread.cpp | 5 ++++- src/vncview.cpp | 52 +++++++++-------------------------------------- src/vncview.h | 3 +-- 4 files changed, 19 insertions(+), 52 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index c24e389..fb9d4c8 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -141,6 +141,8 @@ MainWindow::MainWindow(QString url, int quality): vnc_view->start(); key_menu = new KeyMenu(this); } + + //QTimer::singleShot(500, this, SLOT(close())); } void MainWindow::grabZoomKeys(bool grab) @@ -235,13 +237,8 @@ void MainWindow::statusChanged(RemoteView::RemoteStatus status) #ifdef Q_WS_MAEMO_5 setAttribute(Qt::WA_Maemo5ShowProgressIndicator, false); #endif - /* TODO: still needed? - if(!scaling->isChecked()) { - //ugly hack to force a refresh (forceFullRepaint() doesn't repaint?? -> vnc_view hidden???) - vnc_view->resize(scroll_area->size()); - vnc_view->enableScaling(false); - } - */ + vnc_view->setZoomLevel(zoom_slider->value()); + vnc_view->forceFullRepaint(); break; case RemoteView::Disconnecting: if(old_status != RemoteView::Disconnected) { //Disconnecting also occurs while connecting, so check last state diff --git a/src/vncclientthread.cpp b/src/vncclientthread.cpp index 2954084..dadf93d 100644 --- a/src/vncclientthread.cpp +++ b/src/vncclientthread.cpp @@ -91,6 +91,9 @@ void VncClientThread::updatefb(rfbClient* cl, int x, int y, int w, int h) VncClientThread *t = (VncClientThread*)rfbClientGetClientData(cl, 0); Q_ASSERT(t); + if (t->m_stopped) + return; //sending data to a stopped thread is not a good idea + t->setImage(img); t->emitUpdated(x, y, w, h); @@ -99,7 +102,7 @@ void VncClientThread::updatefb(rfbClient* cl, int x, int y, int w, int h) void VncClientThread::cuttext(rfbClient* cl, const char *text, int textlen) { const QString cutText = QString::fromUtf8(text, textlen); - kDebug(5011) << cutText; + kDebug(5011) << "cuttext: " << cutText; if (!cutText.isEmpty()) { VncClientThread *t = (VncClientThread*)rfbClientGetClientData(cl, 0); diff --git a/src/vncview.cpp b/src/vncview.cpp index 9d3866b..c4cc1c3 100644 --- a/src/vncview.cpp +++ b/src/vncview.cpp @@ -133,28 +133,6 @@ QSize VncView::minimumSizeHint() const return size(); } -void VncView::scaleResize(int w, int h) -{ - RemoteView::scaleResize(w, h); - - kDebug(5011) << "scaleResize(): " <width(), parentWidget()->height()); - else - scaleResize(width(), height()); - } + resize(width(), height()); m_initDone = true; @@ -374,16 +347,7 @@ if(x == 0 and y == 0) { if ((y == 0 && x == 0) && (m_frame.size() != old_frame_size)) { old_frame_size = m_frame.size(); kDebug(5011) << "Updating framebuffer size"; - if (m_scale) { - //setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); - if (parentWidget()) - scaleResize(parentWidget()->width(), parentWidget()->height()); - } else { - kDebug(5011) << "Resizing: " << m_frame.width() << m_frame.height(); - resize(m_frame.width(), m_frame.height()); - //setMaximumSize(m_frame.width(), m_frame.height()); //This is a hack to force Qt to center the view in the scroll area - //setMinimumSize(m_frame.width(), m_frame.height()); - } + setZoomLevel(); emit framebufferSizeChanged(m_frame.width(), m_frame.height()); } @@ -421,6 +385,10 @@ void VncView::setZoomLevel(int level) { Q_ASSERT(parentWidget() != 0); + if(level == -1) { //handle resize + resize(m_frame.width()*m_horizontalFactor, m_frame.height()*m_verticalFactor); + return; + } double factor; //actual magnification if(level > 95) { @@ -441,6 +409,10 @@ void VncView::setZoomLevel(int level) kDebug(5011) << "remote display smaller than local?"; factor = 1.0; } + if(factor != factor) //nan + factor = 1.0; + + kDebug(5011) << "factor" << factor; m_verticalFactor = m_horizontalFactor = factor; resize(m_frame.width()*factor, m_frame.height()*factor); @@ -514,10 +486,6 @@ void VncView::paintEvent(QPaintEvent *event) void VncView::resizeEvent(QResizeEvent *event) { RemoteView::resizeEvent(event); - /* - scaleResize(event->size().width(), event->size().height()); - forceFullRepaint(); - */ } bool VncView::event(QEvent *event) diff --git a/src/vncview.h b/src/vncview.h index d98a72c..6bcc2ff 100644 --- a/src/vncview.h +++ b/src/vncview.h @@ -60,8 +60,7 @@ public: public slots: void enableScaling(bool scale); //TODO: i may want to remove this - void setZoomLevel(int level); //'level' doesn't correspond to actual magnification, though mapping is done here - void scaleResize(int w, int h); + void setZoomLevel(int level = -1); //'level' doesn't correspond to actual magnification, though mapping is done here void sendKey(Qt::Key key); void sendKeySequence(QKeySequence keys); void forceFullRepaint(); -- 1.7.9.5