From 47f886467b04ce712b4dcd90f0201720d614ff28 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 4 May 2010 14:59:04 +0200 Subject: VNC parameters for size and display id --- src/plugins/platforms/vnc/main.cpp | 2 +- src/plugins/platforms/vnc/qvncintegration.cpp | 54 ++++++++++++++++++++------- src/plugins/platforms/vnc/qvncintegration.h | 4 +- src/plugins/platforms/vnc/qvncserver.cpp | 4 +- src/plugins/platforms/vnc/qvncserver.h | 2 +- 5 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src/plugins/platforms/vnc/main.cpp b/src/plugins/platforms/vnc/main.cpp index c66029c..e051e2d 100644 --- a/src/plugins/platforms/vnc/main.cpp +++ b/src/plugins/platforms/vnc/main.cpp @@ -63,7 +63,7 @@ QPlatformIntegration* QVNCIntegrationPlugin::create(const QString& system, const { Q_UNUSED(paramList); if (system.toLower() == "vnc") - return new QVNCIntegration; + return new QVNCIntegration(paramList); return 0; } diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp index 7bdba35..69aea79 100644 --- a/src/plugins/platforms/vnc/qvncintegration.cpp +++ b/src/plugins/platforms/vnc/qvncintegration.cpp @@ -51,25 +51,16 @@ #include -QVNCScreen::QVNCScreen() +QVNCScreen::QVNCScreen(QRect screenSize, int screenId) : QFbScreen::QFbScreen() { - int w = 800; - int h = 600; - int ew, eh; - const char *str; - if ((str=::getenv("QT_VNC_SIZE")) && sscanf(str,"%dx%d",&ew,&eh)==2) { - w = ew; - h = eh; - } - - setGeometry(QRect(0,0,w, h)); + setGeometry(screenSize); setDepth(32); setFormat(QImage::Format_RGB32); setPhysicalSize((geometry().size()*254)/720); - d_ptr = new QVNCScreenPrivate(this); + d_ptr = new QVNCScreenPrivate(this, screenId); cursor = new QVNCCursor(d_ptr->vncServer, this); d_ptr->vncServer->setCursor(static_cast(cursor)); @@ -91,10 +82,45 @@ QRegion QVNCScreen::doRedraw() return touched; } +static inline int defaultWidth() { return 800; } +static inline int defaultHeight() { return 600; } +static inline int defaultDisplay() { return 0; } + +static void usage() +{ + qWarning() << "VNC Platform Integration options:"; + qWarning() << " size=x - set the display width and height"; + qWarning() << " defaults to" << defaultWidth() << "x" << defaultHeight(); + qWarning() << " display= - set the VNC display port to ID + 5900"; + qWarning() << " defaults to" << defaultDisplay(); +} -QVNCIntegration::QVNCIntegration() +QVNCIntegration::QVNCIntegration(const QStringList& paramList) { - mPrimaryScreen = new QVNCScreen(); + int sizeX = defaultWidth(); + int sizeY = defaultHeight(); + int display = defaultDisplay(); + bool showUsage = false; + + foreach(QString confString, paramList) { + if (confString.startsWith(QLatin1String("size="))) { + QString val = confString.section(QLatin1Char('='), 1, 1); + sizeX = val.section(QLatin1Char('x'), 0, 0).toInt(); + sizeY = val.section(QLatin1Char('x'), 1, 1).toInt(); + } + else if (confString.startsWith(QLatin1String("display="))) { + display = confString.section(QLatin1Char('='), 1, 1).toInt(); + } + else { + qWarning() << "Unknown VNC option:" << confString; + showUsage = true; + } + } + + if (showUsage) + usage(); + + mPrimaryScreen = new QVNCScreen(QRect(0, 0, sizeX, sizeY), display); mScreens.append(mPrimaryScreen); } diff --git a/src/plugins/platforms/vnc/qvncintegration.h b/src/plugins/platforms/vnc/qvncintegration.h index 524b888..dcb5419 100644 --- a/src/plugins/platforms/vnc/qvncintegration.h +++ b/src/plugins/platforms/vnc/qvncintegration.h @@ -56,7 +56,7 @@ class QVNCScreenPrivate; class QVNCScreen : public QFbScreen { public: - QVNCScreen(); + QVNCScreen(QRect screenSize, int screenId); int linestep() const { return image() ? image()->bytesPerLine() : 0; } uchar *base() const { return image() ? image()->bits() : 0; } @@ -76,7 +76,7 @@ class QVNCIntegrationPrivate; class QVNCIntegration : public QPlatformIntegration { public: - QVNCIntegration(); + QVNCIntegration(const QStringList& paramList); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; diff --git a/src/plugins/platforms/vnc/qvncserver.cpp b/src/plugins/platforms/vnc/qvncserver.cpp index ab0a2f3..bd4d6ab 100644 --- a/src/plugins/platforms/vnc/qvncserver.cpp +++ b/src/plugins/platforms/vnc/qvncserver.cpp @@ -1885,7 +1885,7 @@ void QVNCServer::discardClient() -QVNCScreenPrivate::QVNCScreenPrivate(QVNCScreen *parent) +QVNCScreenPrivate::QVNCScreenPrivate(QVNCScreen *parent, int screenId) : dpiX(72), dpiY(72), doOnScreenSurface(false), refreshRate(25), vncServer(0), q_ptr(parent) { @@ -1893,7 +1893,7 @@ QVNCScreenPrivate::QVNCScreenPrivate(QVNCScreen *parent) QWSSignalHandler::instance()->addObject(this); #endif - vncServer = new QVNCServer(q_ptr); + vncServer = new QVNCServer(q_ptr, screenId); vncServer->setRefreshRate(refreshRate); diff --git a/src/plugins/platforms/vnc/qvncserver.h b/src/plugins/platforms/vnc/qvncserver.h index b1a9797..837f1f4 100644 --- a/src/plugins/platforms/vnc/qvncserver.h +++ b/src/plugins/platforms/vnc/qvncserver.h @@ -249,7 +249,7 @@ public: class QVNCScreenPrivate : public QObject { public: - QVNCScreenPrivate(QVNCScreen *parent); + QVNCScreenPrivate(QVNCScreen *parent, int screenId); ~QVNCScreenPrivate(); void setDirty(const QRect &rect, bool force = false); -- cgit v0.12