diff options
author | Peter Åstrand <astrand@cendio.se> | 2009-01-15 12:21:42 +0000 |
---|---|---|
committer | Peter Åstrand <astrand@cendio.se> | 2009-01-15 12:21:42 +0000 |
commit | c39e0789686690c534996ee60e0914bd88631c4e (patch) | |
tree | e6c25505e2eb06821212a1a3723946da2cd785a9 /unix/xserver | |
parent | 6978fc0bdb218dd9ff5d3519a9d959306f3742dd (diff) | |
download | tigervnc-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.cc | 9 | ||||
-rw-r--r-- | unix/xserver/hw/vnc/XserverDesktop.h | 1 | ||||
-rw-r--r-- | unix/xserver/hw/vnc/vncExtInit.cc | 25 |
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); |