#include "connectdialog.h"
-#include <iostream>
-
ConnectDialog::ConnectDialog(QWidget *parent):
QDialog(parent)
//set up combobox
hosts.addItems(hostnames_sorted);
+ hosts.insertSeparator(hosts.count());
+ hosts.addItem(QIcon("/usr/share/icons/hicolor/48x48/hildon/general_received.png"), tr("Listen for Incoming Connections"));
hosts.setEditable(true);
#ifdef Q_WS_MAEMO_5
hosts.lineEdit()->setInputMethodHints(Qt::ImhNoAutoUppercase); //somehow this doesn't work that well here
#endif
connect(&hosts, SIGNAL(editTextChanged(QString)),
this, SLOT(hostnameUpdated(QString)));
+ connect(&hosts, SIGNAL(currentIndexChanged(int)),
+ this, SLOT(indexChanged(int)));
layout.addWidget(&hosts);
#ifdef Q_WS_MAEMO_5
setLayout(&layout);
}
+void ConnectDialog::indexChanged(int index) {
+ if(index == -1)
+ return;
+
+ //disallow editing for special entries (icon set)
+ hosts.setEditable(hosts.itemIcon(index).isNull());
+}
+
+
void ConnectDialog::hostnameUpdated(QString newtext)
{
//clean up hostname
deleteLater();
return;
}
+ if(!hosts.itemIcon(hosts.currentIndex()).isNull()) {
+ emit connectToHost("", 2, 5900); //TODO: quality and port from user input
+ deleteLater();
+ return;
+ }
QSettings settings;
settings.beginGroup("hosts");
settings.endGroup();
settings.sync();
- emit connectToHost(QString("vnc://%1").arg(selected_host), quality);
+ emit connectToHost(QString("vnc://%1").arg(selected_host), quality, 0);
deleteLater();
}
public slots:
virtual void accept();
signals:
- void connectToHost(QString url, int quality);
+ void connectToHost(QString url, int quality, int listen_port);
private slots:
+ void indexChanged(int index);
void hostnameUpdated(QString newtext);
private:
QHBoxLayout layout;
void MainWindow::showConnectDialog()
{
ConnectDialog *connect_dialog = new ConnectDialog(this);
- connect(connect_dialog, SIGNAL(connectToHost(QString, int)),
- this, SLOT(connectToHost(QString, int)));
+ connect(connect_dialog, SIGNAL(connectToHost(QString, int, int)),
+ this, SLOT(connectToHost(QString, int, int)));
connect_dialog->exec();
}
-void MainWindow::connectToHost(QString url, int quality)
+void MainWindow::connectToHost(QString url, int quality, int listen_port)
{
disconnectFromHost();
- vnc_view = new VncView(this, url, RemoteView::Quality(quality));
+ vnc_view = new VncView(this, url, RemoteView::Quality(quality), listen_port);
connect(vnc_view, SIGNAL(statusChanged(RemoteView::RemoteStatus)),
this, SLOT(statusChanged(RemoteView::RemoteStatus)));
public slots:
void about();
void showConnectDialog();
- void connectToHost(QString url, int quality);
+ void connectToHost(QString url, int quality, int listen_port);
void disconnectFromHost();
void forceResize();
void forceResizeDelayed();
kDebug(5011) << "--------------------- trying init ---------------------";
- if (rfbInitClient(cl, 0, 0))
- break;
+ if(listen_port) { //listen for incoming connections
+ int argc = 2;
+ char* argv[2] = { "x", "-listen" }; //this isn't exactly elegant..
+ cl->listenPort = listen_port;
+ if (rfbInitClient(cl, &argc, argv))
+ break;
+ } else { //connect to host
+ if (rfbInitClient(cl, 0, 0))
+ break;
+ }
if (m_passwordError) {
passwd_failures++;
void stop();
void setHost(const QString &host);
void setPort(int port);
+ void setListenPort(int port) { listen_port = port; }
void setQuality(RemoteView::Quality quality);
- void setPassword(const QString &password) {
- m_password = password;
- }
- const QString password() const {
- return m_password;
- }
+ void setPassword(const QString &password) { m_password = password; }
+ const QString password() const { return m_password; }
RemoteView::Quality quality() const;
uint8_t *frameBuffer;
rfbClient *cl;
QString m_host;
QString m_password;
- int m_port;
+ int m_port, listen_port;
QMutex mutex;
RemoteView::Quality m_quality;
QQueue<ClientEvent* > m_eventQueue;
//local cursor width/height in px, should be an odd number
const int cursor_size = 7;
-VncView::VncView(QWidget *parent, const KUrl &url, RemoteView::Quality quality)
+VncView::VncView(QWidget *parent, const KUrl &url, RemoteView::Quality quality, int listen_port)
: RemoteView(parent),
m_initDone(false),
m_buttonMask(0),
m_verticalFactor(1.0),
m_forceLocalCursor(false),
force_full_repaint(false),
- quality(quality)
+ quality(quality),
+ listen_port(listen_port)
{
m_url = url;
m_host = url.host();
{
vncThread.setHost(m_host);
vncThread.setPort(m_port);
-
+ vncThread.setListenPort(listen_port); //if port is != 0, thread will listen for connections
vncThread.setQuality(quality);
// set local cursor on by default because low quality mostly means slow internet connection
Q_OBJECT
public:
- explicit VncView(QWidget *parent = 0, const KUrl &url = KUrl(), RemoteView::Quality quality = RemoteView::Medium);
+ explicit VncView(QWidget *parent = 0, const KUrl &url = KUrl(), RemoteView::Quality quality = RemoteView::Medium, int listen_port = 0);
~VncView();
QSize framebufferSize();
QMap<unsigned int, bool> m_mods;
int m_x, m_y, m_w, m_h;
int cursor_x, cursor_y;
+ int listen_port;
bool m_repaint;
bool m_quitFlag;
bool m_firstPasswordTry;