summaryrefslogtreecommitdiffstats
path: root/unix/xserver
diff options
context:
space:
mode:
authorPeter Åstrand <astrand@cendio.se>2009-01-15 12:21:42 +0000
committerPeter Åstrand <astrand@cendio.se>2009-01-15 12:21:42 +0000
commitc39e0789686690c534996ee60e0914bd88631c4e (patch)
treee6c25505e2eb06821212a1a3723946da2cd785a9 /unix/xserver
parent6978fc0bdb218dd9ff5d3519a9d959306f3742dd (diff)
downloadtigervnc-c39e0789686690c534996ee60e0914bd88631c4e.tar.gz
tigervnc-c39e0789686690c534996ee60e0914bd88631c4e.zip
Implemented support for DesktopName pseudo encoding, which allows
updating the desktop name on the fly. Tested in ThinLinc since 2008-01-07. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@3549 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'unix/xserver')
-rw-r--r--unix/xserver/hw/vnc/XserverDesktop.cc9
-rw-r--r--unix/xserver/hw/vnc/XserverDesktop.h1
-rw-r--r--unix/xserver/hw/vnc/vncExtInit.cc25
3 files changed, 35 insertions, 0 deletions
diff --git a/unix/xserver/hw/vnc/XserverDesktop.cc b/unix/xserver/hw/vnc/XserverDesktop.cc
index 91941406..203ad5ad 100644
--- a/unix/xserver/hw/vnc/XserverDesktop.cc
+++ b/unix/xserver/hw/vnc/XserverDesktop.cc
@@ -390,6 +390,15 @@ void XserverDesktop::serverCutText(const char* str, int len)
}
}
+void XserverDesktop::setDesktopName(const char* name)
+{
+ try {
+ server->setName(name);
+ } catch (rdr::Exception& e) {
+ vlog.error("XserverDesktop::setDesktopName: %s",e.str());
+ }
+}
+
void XserverDesktop::setCursor(CursorPtr cursor)
{
try {
diff --git a/unix/xserver/hw/vnc/XserverDesktop.h b/unix/xserver/hw/vnc/XserverDesktop.h
index 5137249e..fb758470 100644
--- a/unix/xserver/hw/vnc/XserverDesktop.h
+++ b/unix/xserver/hw/vnc/XserverDesktop.h
@@ -71,6 +71,7 @@ public:
void setColourMapEntries(ColormapPtr pColormap, int ndef, xColorItem* pdef);
void bell();
void serverCutText(const char* str, int len);
+ void setDesktopName(const char* name);
void setCursor(CursorPtr cursor);
void add_changed(RegionPtr reg);
void add_copied(RegionPtr dst, int dx, int dy);
diff --git a/unix/xserver/hw/vnc/vncExtInit.cc b/unix/xserver/hw/vnc/vncExtInit.cc
index 97df6585..9707d5de 100644
--- a/unix/xserver/hw/vnc/vncExtInit.cc
+++ b/unix/xserver/hw/vnc/vncExtInit.cc
@@ -410,7 +410,32 @@ static int ProcVncExtSetParam(ClientPtr client)
rep.type = X_Reply;
rep.length = 0;
rep.sequenceNumber = client->sequence;
+
+ // Retrieve desktop name before setting
+ char* value1 = 0;
+ rfb::VoidParameter* desktop1 = rfb::Configuration::getParam("desktop");
+ if (desktop1)
+ value1 = desktop1->getValueStr();
+
rep.success = rfb::Configuration::setParam(param.buf);
+
+ // Send DesktopName update if desktop name has been changed
+ char* value2 = 0;
+ rfb::VoidParameter* desktop2 = rfb::Configuration::getParam("desktop");
+ if (desktop2)
+ value2 = desktop2->getValueStr();
+ if (value1 && value2 && strcmp(value1, value2)) {
+ for (int scr = 0; scr < screenInfo.numScreens; scr++) {
+ if (desktop[scr]) {
+ desktop[scr]->setDesktopName(value2);
+ }
+ }
+ }
+ if (value1)
+ delete [] value1;
+ if (value2)
+ delete [] value2;
+
if (client->swapped) {
swaps(&rep.sequenceNumber, n);
swapl(&rep.length, n);