summaryrefslogtreecommitdiffstats
path: root/src/client/vnc/vncwindow.cpp
diff options
context:
space:
mode:
authorBjörn Hagemeister2014-04-23 18:20:33 +0200
committerBjörn Hagemeister2014-04-23 18:20:33 +0200
commitefcbd6b3fffbb92b7e0b90f21de69611d142f111 (patch)
tree238ce0a11c846aa7377f9c3fd2ddd57f980385d7 /src/client/vnc/vncwindow.cpp
parentFix status icon updating not working (diff)
parentMade vnc thread stoppable from outside. Thread kills itself. If the vnc (diff)
downloadpvs2-efcbd6b3fffbb92b7e0b90f21de69611d142f111.tar.gz
pvs2-efcbd6b3fffbb92b7e0b90f21de69611d142f111.tar.xz
pvs2-efcbd6b3fffbb92b7e0b90f21de69611d142f111.zip
Merge branch 'master' of git.openslx.org:pvs2
Diffstat (limited to 'src/client/vnc/vncwindow.cpp')
-rw-r--r--src/client/vnc/vncwindow.cpp58
1 files changed, 31 insertions, 27 deletions
diff --git a/src/client/vnc/vncwindow.cpp b/src/client/vnc/vncwindow.cpp
index cf97e74..2f2b427 100644
--- a/src/client/vnc/vncwindow.cpp
+++ b/src/client/vnc/vncwindow.cpp
@@ -35,11 +35,13 @@ VncWindow::~VncWindow()
void VncWindow::open(const QString& host, int port, const QString& passwd, bool ro, bool fullscreen, const QString& caption, const int clientId)
{
// start thread for vnc-updates
- this->onThreadFinished();
+ this->onProjectionStopped();
_clientId = clientId;
_vncWorker = new VncThread(host, port, passwd, 1);
- connect(_vncWorker, SIGNAL(finished()), this, SLOT(onThreadFinished()), Qt::QueuedConnection);
+ connect(_vncWorker, SIGNAL(projectionStopped()), this, SLOT(onProjectionStopped()), Qt::QueuedConnection);
connect(_vncWorker, SIGNAL(projectionStarted()), this, SLOT(onProjectionStarted()), Qt::QueuedConnection);
+
+ _tcpTimeoutTimer = startTimer(4000);
_vncWorker->start(QThread::LowPriority);
//_rfbclient = _thread->getRfbClient();
//installEventFilter(this);
@@ -67,7 +69,7 @@ void VncWindow::open(const QString& host, int port, const QString& passwd, bool
_vncWorker->setTargetSize(this->size());
connect(_vncWorker, SIGNAL(imageUpdated(const int, const int, const int, const int)), this,
- SLOT(onUpdateImage(const int, const int, const int, const int)),
+ SLOT(onUpdateImage(const int, const int, const int, const int)),
Qt::QueuedConnection);
}
@@ -76,7 +78,7 @@ void VncWindow::closeEvent(QCloseEvent *e)
e->ignore();
qDebug("Closing VNC viewer window.");
this->setVisible(false);
- this->onThreadFinished();
+ this->onProjectionStopped();
emit running(false, _clientId);
}
@@ -86,34 +88,29 @@ void VncWindow::onUpdateImage(const int x, const int y, const int w, const int h
}
/**
- * Thread finished, clean up and close window
- */
-void VncWindow::onThreadFinished()
-{
- if (_vncWorker)
- {
- disconnect(_vncWorker, SIGNAL(imageUpdated(const int, const int, const int, const int)), this,
- SLOT(onUpdateImage(const int, const int, const int, const int)));
- disconnect(_vncWorker, SIGNAL(finished()), this, SLOT(onThreadFinished()));
- _vncWorker->stop();
- delete _vncWorker;
- _vncWorker = NULL;
- this->close();
- }
- if(_redrawTimer != 0)
- {
- killTimer(_redrawTimer);
- _redrawTimer = 0;
- }
-}
-
-/**
* VNC Thread successfully connected to remote end - projection will start
*/
void VncWindow::onProjectionStarted()
{
emit running(true, _clientId);
- //_redrawTimer = startTimer(5000);
+ _redrawTimer = startTimer(5000);
+}
+
+void VncWindow::onProjectionStopped()
+{
+ if(_vncWorker == NULL)
+ return;
+
+ _vncWorker->blockSignals(true);
+ _vncWorker->stop();
+ _vncWorker = NULL;
+ if(_redrawTimer != 0)
+ {
+ killTimer(_redrawTimer);
+ _redrawTimer = 0;
+ }
+ this->close();
+
}
////////////////////////////////////////////////////////////////////////////////
@@ -133,6 +130,13 @@ void VncWindow::timerEvent(QTimerEvent *event)
if (this->isVisible())
this->repaint();
}
+ else if (event->timerId() == _tcpTimeoutTimer)
+ {
+ killTimer(_tcpTimeoutTimer);
+ if (_vncWorker != NULL && !_vncWorker->isConnected()){
+ this->onProjectionStopped();
+ }
+ }
else
killTimer(event->timerId());
}