summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/vnc
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/vnc')
-rw-r--r--src/plugins/platforms/vnc/main.cpp2
-rw-r--r--src/plugins/platforms/vnc/qvncintegration.cpp54
-rw-r--r--src/plugins/platforms/vnc/qvncintegration.h4
-rw-r--r--src/plugins/platforms/vnc/qvncserver.cpp4
-rw-r--r--src/plugins/platforms/vnc/qvncserver.h2
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 <QtCore/QTimer>
-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<QVNCCursor *>(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=<Width>x<Height> - set the display width and height";
+ qWarning() << " defaults to" << defaultWidth() << "x" << defaultHeight();
+ qWarning() << " display=<ID> - 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);