diff options
Diffstat (limited to 'unix/xserver/hw/vnc/vncExtInit.cc')
-rw-r--r-- | unix/xserver/hw/vnc/vncExtInit.cc | 25 |
1 files changed, 25 insertions, 0 deletions
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); |