aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt9
-rw-r--r--common/CMakeLists.txt2
-rw-r--r--common/network/Socket.h6
-rw-r--r--common/os/Thread.h4
-rw-r--r--common/rdr/FdOutStream.cxx7
-rw-r--r--common/rfb/CConnection.cxx2
-rw-r--r--common/rfb/CSecurityTLS.cxx19
-rw-r--r--common/rfb/CSecurityTLS.h2
-rw-r--r--common/rfb/ComparingUpdateTracker.cxx29
-rw-r--r--common/rfb/ComparingUpdateTracker.h5
-rw-r--r--common/rfb/Configuration.cxx19
-rw-r--r--common/rfb/Configuration.h4
-rw-r--r--common/rfb/HTTPServer.h12
-rw-r--r--common/rfb/Hostname.h73
-rw-r--r--common/rfb/KeyRemapper.cxx27
-rw-r--r--common/rfb/KeyRemapper.h6
-rw-r--r--common/rfb/Logger_file.cxx18
-rw-r--r--common/rfb/Logger_file.h3
-rw-r--r--common/rfb/Logger_syslog.cxx1
-rw-r--r--common/rfb/SSecurityTLS.cxx20
-rw-r--r--common/rfb/SSecurityTLS.h2
-rw-r--r--common/rfb/VNCServerST.cxx9
-rw-r--r--common/rfb/VNCServerST.h11
-rw-r--r--common/rfb/ZRLEDecoder.cxx11
-rw-r--r--common/rfb/hextileDecode.h6
-rw-r--r--common/rfb/zrleDecode.h3
-rw-r--r--contrib/packages/deb/ubuntu-precise/debian/control2
-rw-r--r--contrib/packages/deb/ubuntu-trusty/debian/control2
-rw-r--r--contrib/packages/deb/ubuntu-xenial/debian/control4
-rw-r--r--contrib/packages/rpm/el6/SPECS/tigervnc.spec9
-rw-r--r--contrib/packages/rpm/el7/SPECS/tigervnc.spec2
-rw-r--r--doc/keyboard-test.txt74
-rw-r--r--po/CMakeLists.txt2
-rw-r--r--po/da.po308
-rw-r--r--po/de.po308
-rw-r--r--po/eo.po1142
-rw-r--r--po/nl.po306
-rw-r--r--po/pt_BR.po332
-rw-r--r--po/ru.po315
-rw-r--r--po/sr.po306
-rw-r--r--po/sv.po307
-rw-r--r--po/tigervnc.pot294
-rw-r--r--po/uk.po306
-rw-r--r--po/vi.po728
-rw-r--r--release/Info.plist.in2
-rw-r--r--tests/CMakeLists.txt3
-rw-r--r--tests/hostport.cxx80
-rw-r--r--unix/vncconfig/vncExt.c84
-rw-r--r--unix/vncconfig/vncExt.h85
-rw-r--r--unix/vncconfig/vncconfig.cxx156
-rw-r--r--unix/vncconfig/vncconfig.man13
-rwxr-xr-xunix/vncserver261
-rw-r--r--unix/vncserver.man20
-rw-r--r--unix/xserver/hw/vnc/Input.c14
-rw-r--r--unix/xserver/hw/vnc/Makefile.am10
-rw-r--r--unix/xserver/hw/vnc/RFBGlue.cc1
-rw-r--r--unix/xserver/hw/vnc/XorgGlue.c10
-rw-r--r--unix/xserver/hw/vnc/XorgGlue.h2
-rw-r--r--unix/xserver/hw/vnc/XserverDesktop.cc257
-rw-r--r--unix/xserver/hw/vnc/XserverDesktop.h17
-rw-r--r--unix/xserver/hw/vnc/Xvnc.man19
-rw-r--r--unix/xserver/hw/vnc/vncBlockHandler.c190
-rw-r--r--unix/xserver/hw/vnc/vncBlockHandler.h3
-rw-r--r--unix/xserver/hw/vnc/vncExt.c163
-rw-r--r--unix/xserver/hw/vnc/vncExtInit.cc45
-rw-r--r--unix/xserver/hw/vnc/vncExtInit.h13
-rw-r--r--unix/xserver/hw/vnc/vncHooks.c23
-rw-r--r--unix/xserver/hw/vnc/vncSelection.c521
-rw-r--r--unix/xserver/hw/vnc/vncSelection.h (renamed from common/rfb/Threading.h)22
-rw-r--r--unix/xserver/hw/vnc/xorg-version.h4
-rw-r--r--unix/xserver/hw/vnc/xvnc.c54
-rw-r--r--unix/xserver113.patch2
-rw-r--r--unix/xserver114.patch2
-rw-r--r--unix/xserver115.patch2
-rw-r--r--unix/xserver116.patch2
-rw-r--r--unix/xserver117.patch2
-rw-r--r--unix/xserver118.patch2
-rw-r--r--unix/xserver119.patch95
-rw-r--r--vncviewer/vncviewer.man5
-rw-r--r--win/rfb_win32/CMakeLists.txt1
-rw-r--r--win/rfb_win32/Clipboard.h1
-rw-r--r--win/rfb_win32/RegConfig.cxx15
-rw-r--r--win/rfb_win32/RegConfig.h9
-rw-r--r--win/rfb_win32/Service.cxx2
-rw-r--r--win/rfb_win32/Threading.cxx151
-rw-r--r--win/rfb_win32/Threading.h155
-rw-r--r--win/rfb_win32/WMHooks.cxx56
-rw-r--r--win/rfb_win32/WMNotifier.h1
-rw-r--r--win/winvnc/QueryConnectDialog.cxx4
-rw-r--r--win/winvnc/QueryConnectDialog.h8
-rw-r--r--win/winvnc/STrayIcon.cxx22
-rw-r--r--win/winvnc/STrayIcon.h20
-rw-r--r--win/winvnc/VNCServerWin32.cxx57
-rw-r--r--win/winvnc/VNCServerWin32.h14
-rw-r--r--win/winvnc/winvnc.cxx13
95 files changed, 4454 insertions, 3316 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cd5a23b9..a9e7f4e0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,10 +21,10 @@ include(CheckCSourceRuns)
include(CMakeMacroLibtoolFile)
project(tigervnc)
-set(VERSION 1.6.80)
+set(VERSION 1.7.80)
# The RC version must always be four comma-separated numbers
-set(RCVERSION 1,6,80,0)
+set(RCVERSION 1,7,80,0)
# Installation paths
set(BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin")
@@ -104,8 +104,9 @@ else()
message(STATUS "32-bit build")
endif()
-# CMake doesn't properly support resource compilation with MinGW. Boo!
-if(MINGW)
+# Versions of CMake before 2.8.7 do not properly support resource compilation
+# with MinGW. Boo!
+if(MINGW AND "${CMAKE_VERSION}" VERSION_LESS "2.8.7")
if(NOT DEFINED RC)
set(CMAKE_RC_COMPILER_INIT windres)
else()
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index e0431e62..e4489f6f 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -9,7 +9,7 @@ add_subdirectory(rfb)
# because PIC code does not exist on that platform and MinGW complains if -fPIC
# is passed (additionally, libvnc is not used on Windows.)
-if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
+if(NOT WIN32)
set_target_properties(os rdr network Xregion rfb
PROPERTIES COMPILE_FLAGS -fPIC)
endif()
diff --git a/common/network/Socket.h b/common/network/Socket.h
index 13b12d1d..53f957e6 100644
--- a/common/network/Socket.h
+++ b/common/network/Socket.h
@@ -21,6 +21,8 @@
#ifndef __NETWORK_SOCKET_H__
#define __NETWORK_SOCKET_H__
+#include <list>
+
#include <limits.h>
#include <rdr/FdInStream.h>
#include <rdr/FdOutStream.h>
@@ -125,6 +127,10 @@ namespace network {
// resources to be freed.
virtual void removeSocket(network::Socket* sock) = 0;
+ // getSockets() gets a list of sockets. This can be used to generate an
+ // fd_set for calling select().
+ virtual void getSockets(std::list<network::Socket*>* sockets) = 0;
+
// processSocketReadEvent() tells the server there is a Socket read event.
// The implementation can indicate that the Socket is no longer active
// by calling shutdown() on it. The caller will then call removeSocket()
diff --git a/common/os/Thread.h b/common/os/Thread.h
index 1a9aa54b..4c39884b 100644
--- a/common/os/Thread.h
+++ b/common/os/Thread.h
@@ -17,7 +17,9 @@
*/
#ifndef __OS_THREAD_H__
-#define __OP_THREAD_H__
+#define __OS_THREAD_H__
+
+#include <stddef.h>
namespace os {
class Mutex;
diff --git a/common/rdr/FdOutStream.cxx b/common/rdr/FdOutStream.cxx
index e6d081a3..29e864fc 100644
--- a/common/rdr/FdOutStream.cxx
+++ b/common/rdr/FdOutStream.cxx
@@ -101,8 +101,13 @@ void FdOutStream::flush()
blocking? timeoutms : 0);
// Timeout?
- if ((n == 0) && blocking)
+ if (n == 0) {
+ // If non-blocking then we're done here
+ if (!blocking)
+ break;
+
throw TimedOut();
+ }
sentUpTo += n;
offset += n;
diff --git a/common/rfb/CConnection.cxx b/common/rfb/CConnection.cxx
index 7e9fd310..35be9468 100644
--- a/common/rfb/CConnection.cxx
+++ b/common/rfb/CConnection.cxx
@@ -86,7 +86,7 @@ void CConnection::setFramebuffer(ModifiablePixelBuffer* fb)
if (fb->width() > framebuffer->width()) {
rect.setXYWH(framebuffer->width(), 0,
- fb->width() - fb->width(),
+ fb->width() - framebuffer->width(),
fb->height());
fb->fillRect(rect, black);
}
diff --git a/common/rfb/CSecurityTLS.cxx b/common/rfb/CSecurityTLS.cxx
index 3dcededb..8a053e3d 100644
--- a/common/rfb/CSecurityTLS.cxx
+++ b/common/rfb/CSecurityTLS.cxx
@@ -67,21 +67,14 @@ StringParameter CSecurityTLS::X509CRL("X509CRL", "X509 CRL file", "", ConfViewer
static LogWriter vlog("TLS");
-void CSecurityTLS::initGlobal()
-{
- static bool globalInitDone = false;
-
- if (!globalInitDone) {
- gnutls_global_init();
- globalInitDone = true;
- }
-}
-
CSecurityTLS::CSecurityTLS(bool _anon) : session(0), anon_cred(0),
anon(_anon), fis(0), fos(0)
{
cafile = X509CA.getData();
crlfile = X509CRL.getData();
+
+ if (gnutls_global_init() != GNUTLS_E_SUCCESS)
+ throw AuthFailureException("gnutls_global_init failed");
}
void CSecurityTLS::setDefaults()
@@ -125,8 +118,6 @@ void CSecurityTLS::shutdown(bool needbye)
if (session) {
gnutls_deinit(session);
session = 0;
-
- gnutls_global_deinit();
}
}
@@ -142,6 +133,8 @@ CSecurityTLS::~CSecurityTLS()
delete[] cafile;
delete[] crlfile;
+
+ gnutls_global_deinit();
}
bool CSecurityTLS::processMsg(CConnection* cc)
@@ -150,8 +143,6 @@ bool CSecurityTLS::processMsg(CConnection* cc)
rdr::OutStream* os = cc->getOutStream();
client = cc;
- initGlobal();
-
if (!session) {
if (!is->checkNoWait(1))
return false;
diff --git a/common/rfb/CSecurityTLS.h b/common/rfb/CSecurityTLS.h
index b147d802..57d964d7 100644
--- a/common/rfb/CSecurityTLS.h
+++ b/common/rfb/CSecurityTLS.h
@@ -62,8 +62,6 @@ namespace rfb {
CConnection *client;
private:
- static void initGlobal();
-
gnutls_session_t session;
gnutls_anon_client_credentials_t anon_cred;
gnutls_certificate_credentials_t cert_cred;
diff --git a/common/rfb/ComparingUpdateTracker.cxx b/common/rfb/ComparingUpdateTracker.cxx
index 1d27f3c4..237adc41 100644
--- a/common/rfb/ComparingUpdateTracker.cxx
+++ b/common/rfb/ComparingUpdateTracker.cxx
@@ -20,12 +20,16 @@
#include <vector>
#include <rdr/types.h>
#include <rfb/Exception.h>
+#include <rfb/LogWriter.h>
#include <rfb/ComparingUpdateTracker.h>
using namespace rfb;
+static LogWriter vlog("ComparingUpdateTracker");
+
ComparingUpdateTracker::ComparingUpdateTracker(PixelBuffer* buffer)
- : fb(buffer), oldFb(fb->getPF(), 0, 0), firstCompare(true), enabled(true)
+ : fb(buffer), oldFb(fb->getPF(), 0, 0), firstCompare(true),
+ enabled(true), totalPixels(0), missedPixels(0)
{
changed.assign_union(fb->getRect());
}
@@ -72,6 +76,13 @@ bool ComparingUpdateTracker::compare()
for (i = rects.begin(); i != rects.end(); i++)
compareRect(*i, &newChanged);
+ changed.get_rects(&rects);
+ for (i = rects.begin(); i != rects.end(); i++)
+ totalPixels += i->area();
+ newChanged.get_rects(&rects);
+ for (i = rects.begin(); i != rects.end(); i++)
+ missedPixels += i->area();
+
if (changed.equals(newChanged))
return false;
@@ -165,3 +176,19 @@ void ComparingUpdateTracker::compareRect(const Rect& r, Region* newChanged)
newChanged->assign_union(temp);
}
}
+
+void ComparingUpdateTracker::logStats()
+{
+ double ratio;
+ char a[1024], b[1024];
+
+ siPrefix(totalPixels, "pixels", a, sizeof(a));
+ siPrefix(missedPixels, "pixels", b, sizeof(b));
+
+ ratio = (double)totalPixels / missedPixels;
+
+ vlog.info("%s in / %s out", a, b);
+ vlog.info("(1:%g ratio)", ratio);
+
+ totalPixels = missedPixels = 0;
+}
diff --git a/common/rfb/ComparingUpdateTracker.h b/common/rfb/ComparingUpdateTracker.h
index fccc2222..e62f2b23 100644
--- a/common/rfb/ComparingUpdateTracker.h
+++ b/common/rfb/ComparingUpdateTracker.h
@@ -40,12 +40,17 @@ namespace rfb {
virtual void enable();
virtual void disable();
+
+ void logStats();
+
private:
void compareRect(const Rect& r, Region* newchanged);
PixelBuffer* fb;
ManagedPixelBuffer oldFb;
bool firstCompare;
bool enabled;
+
+ rdr::U32 totalPixels, missedPixels;
};
}
diff --git a/common/rfb/Configuration.cxx b/common/rfb/Configuration.cxx
index 8e1ea6e9..a5c23028 100644
--- a/common/rfb/Configuration.cxx
+++ b/common/rfb/Configuration.cxx
@@ -23,24 +23,14 @@
#include <ctype.h>
#include <string.h>
+#include <os/Mutex.h>
+
#include <rfb/util.h>
#include <rfb/Configuration.h>
#include <rfb/LogWriter.h>
#include <rfb/Exception.h>
-#include <rfb/Threading.h>
-#ifdef __RFB_THREADING_IMPL
-// On platforms that support Threading, we use Locks to make getData safe
-#define LOCK_CONFIG Lock l(*configLock())
-rfb::Mutex* configLock_ = 0;
-static rfb::Mutex* configLock() {
- if (!configLock_)
- configLock_ = new rfb::Mutex;
- return configLock_;
-}
-#else
-#define LOCK_CONFIG
-#endif
+#define LOCK_CONFIG os::AutoMutex a(mutex)
#include <rdr/HexOutStream.h>
#include <rdr/HexInStream.h>
@@ -195,9 +185,12 @@ VoidParameter::VoidParameter(const char* name_, const char* desc_,
_next = conf->head;
conf->head = this;
+
+ mutex = new os::Mutex();
}
VoidParameter::~VoidParameter() {
+ delete mutex;
}
const char*
diff --git a/common/rfb/Configuration.h b/common/rfb/Configuration.h
index da93fddf..fbf161db 100644
--- a/common/rfb/Configuration.h
+++ b/common/rfb/Configuration.h
@@ -45,6 +45,8 @@
#include <rfb/util.h>
+namespace os { class Mutex; }
+
namespace rfb {
class VoidParameter;
struct ParameterIterator;
@@ -174,6 +176,8 @@ namespace rfb {
bool immutable;
const char* name;
const char* description;
+
+ os::Mutex* mutex;
};
class AliasParameter : public VoidParameter {
diff --git a/common/rfb/HTTPServer.h b/common/rfb/HTTPServer.h
index d7ca69ad..04ef4993 100644
--- a/common/rfb/HTTPServer.h
+++ b/common/rfb/HTTPServer.h
@@ -26,8 +26,6 @@
#ifndef __RFB_HTTP_SERVER_H__
#define __RFB_HTTP_SERVER_H__
-#include <list>
-
#include <rdr/MemInStream.h>
#include <rfb/UpdateTracker.h>
#include <rfb/Configuration.h>
@@ -58,6 +56,10 @@ namespace rfb {
// Could clean up socket-specific resources here.
virtual void removeSocket(network::Socket* sock);
+ // getSockets() gets a list of sockets. This can be used to generate an
+ // fd_set for calling select().
+ virtual void getSockets(std::list<network::Socket*>* sockets);
+
// processSocketReadEvent()
// The platform-specific side of the server implementation calls
// this method whenever data arrives on one of the active
@@ -73,12 +75,6 @@ namespace rfb {
virtual int checkTimeouts();
- // getSockets() gets a list of sockets. This can be used to generate an
- // fd_set for calling select().
-
- virtual void getSockets(std::list<network::Socket*>* sockets);
-
-
// -=- File interface
// - getFile is passed the path portion of a URL and returns an
diff --git a/common/rfb/Hostname.h b/common/rfb/Hostname.h
index f70347f9..bd68dc02 100644
--- a/common/rfb/Hostname.h
+++ b/common/rfb/Hostname.h
@@ -19,6 +19,7 @@
#ifndef __RFB_HOSTNAME_H__
#define __RFB_HOSTNAME_H__
+#include <assert.h>
#include <stdlib.h>
#include <rdr/Exception.h>
#include <rfb/util.h>
@@ -26,30 +27,72 @@
namespace rfb {
static void getHostAndPort(const char* hi, char** host, int* port, int basePort=5900) {
- CharArray portBuf;
- CharArray hostBuf;
+ const char* hostStart;
+ const char* hostEnd;
+ const char* portStart;
+
if (hi == NULL)
throw rdr::Exception("NULL host specified");
+
+ assert(host);
+ assert(port);
+
if (hi[0] == '[') {
- if (!strSplit(&hi[1], ']', &hostBuf.buf, &portBuf.buf))
+ hostStart = &hi[1];
+ hostEnd = strchr(hostStart, ']');
+ if (hostEnd == NULL)
throw rdr::Exception("unmatched [ in host");
+
+ portStart = hostEnd + 1;
+ if (*portStart == '\0')
+ portStart = NULL;
} else {
- portBuf.buf = strDup(hi);
- }
- if (strSplit(portBuf.buf, ':', hostBuf.buf ? 0 : &hostBuf.buf, &portBuf.buf)) {
- if (portBuf.buf[0] == ':') {
- *port = atoi(&portBuf.buf[1]);
+ hostStart = &hi[0];
+ hostEnd = strrchr(hostStart, ':');
+
+ if (hostEnd == NULL) {
+ hostEnd = hostStart + strlen(hostStart);
+ portStart = NULL;
} else {
- *port = atoi(portBuf.buf);
- if (*port < 100) *port += basePort;
+ if ((hostEnd > hostStart) && (hostEnd[-1] == ':'))
+ hostEnd--;
+ portStart = strchr(hostStart, ':');
+ if (portStart != hostEnd) {
+ // We found more : in the host. This is probably an IPv6 address
+ hostEnd = hostStart + strlen(hostStart);
+ portStart = NULL;
+ }
}
- } else {
- *port = basePort;
}
- if (strlen(hostBuf.buf) == 0)
+
+ if (hostStart == hostEnd)
*host = strDup("localhost");
- else
- *host = hostBuf.takeBuf();
+ else {
+ size_t len;
+ len = hostEnd - hostStart + 1;
+ *host = new char[len];
+ strncpy(*host, hostStart, len-1);
+ (*host)[len-1] = '\0';
+ }
+
+ if (portStart == NULL)
+ *port = basePort;
+ else {
+ char* end;
+
+ if (portStart[0] != ':')
+ throw rdr::Exception("invalid port specified");
+
+ if (portStart[1] != ':')
+ *port = strtol(portStart + 1, &end, 10);
+ else
+ *port = strtol(portStart + 2, &end, 10);
+ if (*end != '\0')
+ throw rdr::Exception("invalid port specified");
+
+ if ((portStart[1] != ':') && (*port < 100))
+ *port += basePort;
+ }
}
};
diff --git a/common/rfb/KeyRemapper.cxx b/common/rfb/KeyRemapper.cxx
index d33f0a45..b4c2793c 100644
--- a/common/rfb/KeyRemapper.cxx
+++ b/common/rfb/KeyRemapper.cxx
@@ -17,6 +17,9 @@
*/
#include <stdio.h>
+
+#include <os/Mutex.h>
+
#include <rfb/KeyRemapper.h>
#include <rfb/Configuration.h>
#include <rfb/LogWriter.h>
@@ -27,14 +30,21 @@ static LogWriter vlog("KeyRemapper");
KeyRemapper KeyRemapper::defInstance;
-#ifdef __RFB_THREADING_IMPL
-static Mutex mappingLock;
-#endif
+KeyRemapper::KeyRemapper(const char* m)
+{
+ mutex = new os::Mutex;
+
+ setMapping(m);
+}
+
+KeyRemapper::~KeyRemapper()
+{
+ delete mutex;
+}
void KeyRemapper::setMapping(const char* m) {
-#ifdef __RFB_THREADING_IMPL
- Lock l(mappingLock);
-#endif
+ os::AutoMutex a(mutex);
+
mapping.clear();
while (m[0]) {
int from, to;
@@ -59,9 +69,8 @@ void KeyRemapper::setMapping(const char* m) {
}
rdr::U32 KeyRemapper::remapKey(rdr::U32 key) const {
-#ifdef __RFB_THREADING_IMPL
- Lock l(mappingLock);
-#endif
+ os::AutoMutex a(mutex);
+
std::map<rdr::U32,rdr::U32>::const_iterator i = mapping.find(key);
if (i != mapping.end())
return i->second;
diff --git a/common/rfb/KeyRemapper.h b/common/rfb/KeyRemapper.h
index a4b7aa01..1406bad2 100644
--- a/common/rfb/KeyRemapper.h
+++ b/common/rfb/KeyRemapper.h
@@ -22,16 +22,20 @@
#include <map>
#include <rdr/types.h>
+namespace os { class Mutex; }
+
namespace rfb {
class KeyRemapper {
public:
- KeyRemapper(const char* m="") { setMapping(m); }
+ KeyRemapper(const char* m="");
+ ~KeyRemapper();
void setMapping(const char* m);
rdr::U32 remapKey(rdr::U32 key) const;
static KeyRemapper defInstance;
private:
std::map<rdr::U32,rdr::U32> mapping;
+ os::Mutex* mutex;
};
};
diff --git a/common/rfb/Logger_file.cxx b/common/rfb/Logger_file.cxx
index ebe15d52..149ad404 100644
--- a/common/rfb/Logger_file.cxx
+++ b/common/rfb/Logger_file.cxx
@@ -21,36 +21,30 @@
#include <stdlib.h>
#include <string.h>
+#include <os/Mutex.h>
+
#include <rfb/util.h>
#include <rfb/Logger_file.h>
-#include <rfb/Threading.h>
using namespace rfb;
-
-// If threading is available then protect the write() operation
-// from concurrent accesses
-#ifdef __RFB_THREADING_IMPL
-static Mutex logLock;
-#endif
-
-
Logger_File::Logger_File(const char* loggerName)
: Logger(loggerName), indent(13), width(79), m_filename(0), m_file(0),
m_lastLogTime(0)
{
+ mutex = new os::Mutex();
}
Logger_File::~Logger_File()
{
closeFile();
+ delete mutex;
}
void Logger_File::write(int level, const char *logname, const char *message)
{
-#ifdef __RFB_THREADING_IMPL
- Lock l(logLock);
-#endif
+ os::AutoMutex a(mutex);
+
if (!m_file) {
if (!m_filename) return;
CharArray bakFilename(strlen(m_filename) + 1 + 4);
diff --git a/common/rfb/Logger_file.h b/common/rfb/Logger_file.h
index 5e0c917b..5b5c34e1 100644
--- a/common/rfb/Logger_file.h
+++ b/common/rfb/Logger_file.h
@@ -24,6 +24,8 @@
#include <time.h>
#include <rfb/Logger.h>
+namespace os { class Mutex; }
+
namespace rfb {
class Logger_File : public Logger {
@@ -43,6 +45,7 @@ namespace rfb {
char* m_filename;
FILE* m_file;
time_t m_lastLogTime;
+ os::Mutex* mutex;
};
bool initFileLogger(const char* filename);
diff --git a/common/rfb/Logger_syslog.cxx b/common/rfb/Logger_syslog.cxx
index 291d36cd..dc1d0c1a 100644
--- a/common/rfb/Logger_syslog.cxx
+++ b/common/rfb/Logger_syslog.cxx
@@ -25,7 +25,6 @@
#include <rfb/util.h>
#include <rfb/Logger_syslog.h>
#include <rfb/LogWriter.h>
-#include <rfb/Threading.h>
using namespace rfb;
diff --git a/common/rfb/SSecurityTLS.cxx b/common/rfb/SSecurityTLS.cxx
index 0f52d34b..b9460223 100644
--- a/common/rfb/SSecurityTLS.cxx
+++ b/common/rfb/SSecurityTLS.cxx
@@ -48,23 +48,15 @@ StringParameter SSecurityTLS::X509_KeyFile
static LogWriter vlog("TLS");
-void SSecurityTLS::initGlobal()
-{
- static bool globalInitDone = false;
-
- if (!globalInitDone) {
- if (gnutls_global_init() != GNUTLS_E_SUCCESS)
- throw AuthFailureException("gnutls_global_init failed");
- globalInitDone = true;
- }
-}
-
SSecurityTLS::SSecurityTLS(bool _anon) : session(0), dh_params(0),
anon_cred(0), cert_cred(0),
anon(_anon), fis(0), fos(0)
{
certfile = X509_CertFile.getData();
keyfile = X509_KeyFile.getData();
+
+ if (gnutls_global_init() != GNUTLS_E_SUCCESS)
+ throw AuthFailureException("gnutls_global_init failed");
}
void SSecurityTLS::shutdown()
@@ -94,8 +86,6 @@ void SSecurityTLS::shutdown()
if (session) {
gnutls_deinit(session);
session = 0;
-
- gnutls_global_deinit();
}
}
@@ -111,6 +101,8 @@ SSecurityTLS::~SSecurityTLS()
delete[] keyfile;
delete[] certfile;
+
+ gnutls_global_deinit();
}
bool SSecurityTLS::processMsg(SConnection *sc)
@@ -121,8 +113,6 @@ bool SSecurityTLS::processMsg(SConnection *sc)
vlog.debug("Process security message (session %p)", session);
if (!session) {
- initGlobal();
-
if (gnutls_init(&session, GNUTLS_SERVER) != GNUTLS_E_SUCCESS)
throw AuthFailureException("gnutls_init failed");
diff --git a/common/rfb/SSecurityTLS.h b/common/rfb/SSecurityTLS.h
index a7932054..30242a24 100644
--- a/common/rfb/SSecurityTLS.h
+++ b/common/rfb/SSecurityTLS.h
@@ -54,8 +54,6 @@ namespace rfb {
void setParams(gnutls_session_t session);
private:
- static void initGlobal();
-
gnutls_session_t session;
gnutls_dh_params_t dh_params;
gnutls_anon_server_credentials_t anon_cred;
diff --git a/common/rfb/VNCServerST.cxx b/common/rfb/VNCServerST.cxx
index d5010854..e15cd701 100644
--- a/common/rfb/VNCServerST.cxx
+++ b/common/rfb/VNCServerST.cxx
@@ -110,6 +110,8 @@ VNCServerST::~VNCServerST()
desktop->stop();
}
+ if (comparer)
+ comparer->logStats();
delete comparer;
}
@@ -155,6 +157,10 @@ void VNCServerST::removeSocket(network::Socket* sock) {
desktopStarted = false;
desktop->stop();
}
+
+ if (comparer)
+ comparer->logStats();
+
return;
}
}
@@ -292,6 +298,9 @@ void VNCServerST::unblockUpdates()
void VNCServerST::setPixelBuffer(PixelBuffer* pb_, const ScreenSet& layout)
{
+ if (comparer)
+ comparer->logStats();
+
pb = pb_;
delete comparer;
comparer = 0;
diff --git a/common/rfb/VNCServerST.h b/common/rfb/VNCServerST.h
index bd84c452..0ced12a4 100644
--- a/common/rfb/VNCServerST.h
+++ b/common/rfb/VNCServerST.h
@@ -25,8 +25,6 @@
#include <sys/time.h>
-#include <list>
-
#include <rfb/SDesktop.h>
#include <rfb/VNCServer.h>
#include <rfb/Configuration.h>
@@ -67,6 +65,10 @@ namespace rfb {
// Clean up any resources associated with the Socket
virtual void removeSocket(network::Socket* sock);
+ // getSockets() gets a list of sockets. This can be used to generate an
+ // fd_set for calling select().
+ virtual void getSockets(std::list<network::Socket*>* sockets);
+
// processSocketReadEvent
// Read more RFB data from the Socket. If an error occurs during
// processing then shutdown() is called on the Socket, causing
@@ -111,11 +113,6 @@ namespace rfb {
// any), and logs the specified reason for closure.
void closeClients(const char* reason, network::Socket* sock);
- // getSockets() gets a list of sockets. This can be used to generate an
- // fd_set for calling select().
-
- void getSockets(std::list<network::Socket*>* sockets);
-
// getSConnection() gets the SConnection for a particular Socket. If
// the Socket is not recognised then null is returned.
diff --git a/common/rfb/ZRLEDecoder.cxx b/common/rfb/ZRLEDecoder.cxx
index c13f2861..b891ba52 100644
--- a/common/rfb/ZRLEDecoder.cxx
+++ b/common/rfb/ZRLEDecoder.cxx
@@ -86,10 +86,9 @@ void ZRLEDecoder::decodeRect(const Rect& r, const void* buffer,
{
rdr::MemInStream is(buffer, buflen);
const rfb::PixelFormat& pf = cp.pf();
- rdr::U8* buf[64 * 64 * 4 * pf.bpp/8];
switch (pf.bpp) {
- case 8: zrleDecode8 (r, &is, &zis, (rdr::U8*) buf, pf, pb); break;
- case 16: zrleDecode16(r, &is, &zis, (rdr::U16*)buf, pf, pb); break;
+ case 8: zrleDecode8 (r, &is, &zis, pf, pb); break;
+ case 16: zrleDecode16(r, &is, &zis, pf, pb); break;
case 32:
{
Pixel maxPixel = pf.pixelFromRGB((rdr::U16)-1, (rdr::U16)-1, (rdr::U16)-1);
@@ -99,16 +98,16 @@ void ZRLEDecoder::decodeRect(const Rect& r, const void* buffer,
if ((fitsInLS3Bytes && pf.isLittleEndian()) ||
(fitsInMS3Bytes && pf.isBigEndian()))
{
- zrleDecode24A(r, &is, &zis, (rdr::U32*)buf, pf, pb);
+ zrleDecode24A(r, &is, &zis, pf, pb);
}
else if ((fitsInLS3Bytes && pf.isBigEndian()) ||
(fitsInMS3Bytes && pf.isLittleEndian()))
{
- zrleDecode24B(r, &is, &zis, (rdr::U32*)buf, pf, pb);
+ zrleDecode24B(r, &is, &zis, pf, pb);
}
else
{
- zrleDecode32(r, &is, &zis, (rdr::U32*)buf, pf, pb);
+ zrleDecode32(r, &is, &zis, pf, pb);
}
break;
}
diff --git a/common/rfb/hextileDecode.h b/common/rfb/hextileDecode.h
index 7affa157..402cd031 100644
--- a/common/rfb/hextileDecode.h
+++ b/common/rfb/hextileDecode.h
@@ -22,6 +22,7 @@
// BPP - 8, 16 or 32
#include <rdr/InStream.h>
+#include <rfb/Exception.h>
#include <rfb/hextileConstants.h>
namespace rfb {
@@ -44,7 +45,7 @@ static void HEXTILE_DECODE (const Rect& r, rdr::InStream* is,
Rect t;
PIXEL_T bg = 0;
PIXEL_T fg = 0;
- PIXEL_T buf[16 * 16 * 4];
+ PIXEL_T buf[16 * 16];
for (t.tl.y = r.tl.y; t.tl.y < r.br.y; t.tl.y += 16) {
@@ -87,6 +88,9 @@ static void HEXTILE_DECODE (const Rect& r, rdr::InStream* is,
int y = (xy & 15);
int w = ((wh >> 4) & 15) + 1;
int h = (wh & 15) + 1;
+ if (x + w > 16 || y + h > 16) {
+ throw rfb::Exception("HEXTILE_DECODE: Hextile out of bounds");
+ }
PIXEL_T* ptr = buf + y * t.width() + x;
int rowAdd = t.width() - w;
while (h-- > 0) {
diff --git a/common/rfb/zrleDecode.h b/common/rfb/zrleDecode.h
index 07d6795a..0bfbbe15 100644
--- a/common/rfb/zrleDecode.h
+++ b/common/rfb/zrleDecode.h
@@ -47,12 +47,13 @@ namespace rfb {
#endif
void ZRLE_DECODE (const Rect& r, rdr::InStream* is,
- rdr::ZlibInStream* zis, PIXEL_T* buf,
+ rdr::ZlibInStream* zis,
const PixelFormat& pf, ModifiablePixelBuffer* pb)
{
int length = is->readU32();
zis->setUnderlying(is, length);
Rect t;
+ PIXEL_T buf[64 * 64];
for (t.tl.y = r.tl.y; t.tl.y < r.br.y; t.tl.y += 64) {
diff --git a/contrib/packages/deb/ubuntu-precise/debian/control b/contrib/packages/deb/ubuntu-precise/debian/control
index e2797ed3..b29222e7 100644
--- a/contrib/packages/deb/ubuntu-precise/debian/control
+++ b/contrib/packages/deb/ubuntu-precise/debian/control
@@ -9,7 +9,7 @@ Homepage: http://www.tigervnc.com
Package: tigervncserver
Architecture: any
Provides: xserver, vnc-server
-Depends: x11-common | xserver-common, x11-utils, xauth, libbz2-1.0, libc6, libfontenc1, libfreetype6, libgcc1, libgl1-mesa-dri, libgnutls28, libjpeg-turbo8, libp11-kit0, libpam0g, libpixman-1-0, libstdc++6, libtasn1-3, libx11-6, libxau6, libxcb1, libxdmcp6, libxext6, libxfont1, libxtst6, zlib1g, libglu1-mesa, libxcursor1, libxinerama1, libxfixes3, x11-xkb-utils
+Depends: x11-common | xserver-common, x11-utils, xauth, libbz2-1.0, libc6, libfontenc1, libfreetype6, libgcc1, libgl1-mesa-dri, libgnutls28, libjpeg-turbo8, libp11-kit0, libpam0g, libpixman-1-0, libstdc++6, libtasn1-3, libx11-6, libxau6, libxcb1, libxdmcp6, libxext6, libxfont1, libxtst6, zlib1g, libglu1-mesa, libxcursor1, libxinerama1, libxfixes3, x11-xkb-utils, libgcrypt11
Recommends: xfonts-base, x11-xserver-utils
Suggests: xtigervncviewer, tigervnc-java
Description: virtual network computing server software
diff --git a/contrib/packages/deb/ubuntu-trusty/debian/control b/contrib/packages/deb/ubuntu-trusty/debian/control
index ec671034..022f69fa 100644
--- a/contrib/packages/deb/ubuntu-trusty/debian/control
+++ b/contrib/packages/deb/ubuntu-trusty/debian/control
@@ -9,7 +9,7 @@ Homepage: http://www.tigervnc.com
Package: tigervncserver
Architecture: any
Provides: xserver, vnc-server
-Depends: x11-common | xserver-common, x11-utils, xauth, libbz2-1.0, libc6, libfontenc1, libfreetype6, libgcc1, libgl1-mesa-dri, libgnutls28, libjpeg-turbo8, libp11-kit0, libpam0g, libpixman-1-0, libstdc++6, libtasn1-3-bin, libx11-6, libxau6, libxcb1, libxdmcp6, libxext6, libxfont1, libxtst6, zlib1g, libglu1-mesa, libxcursor1, libxinerama1, libxfixes3, x11-xkb-utils
+Depends: x11-common | xserver-common, x11-utils, xauth, libbz2-1.0, libc6, libfontenc1, libfreetype6, libgcc1, libgl1-mesa-dri, libgnutls28, libjpeg-turbo8, libp11-kit0, libpam0g, libpixman-1-0, libstdc++6, libtasn1-3-bin, libx11-6, libxau6, libxcb1, libxdmcp6, libxext6, libxfont1, libxtst6, zlib1g, libglu1-mesa, libxcursor1, libxinerama1, libxfixes3, x11-xkb-utils, libgcrypt20
Recommends: xfonts-base, x11-xserver-utils
Suggests: xtigervncviewer, tigervnc-java
Description: virtual network computing server software
diff --git a/contrib/packages/deb/ubuntu-xenial/debian/control b/contrib/packages/deb/ubuntu-xenial/debian/control
index 87a78d62..626efeeb 100644
--- a/contrib/packages/deb/ubuntu-xenial/debian/control
+++ b/contrib/packages/deb/ubuntu-xenial/debian/control
@@ -3,13 +3,13 @@ Section: x11
Priority: optional
Maintainer: Brian P. Hinz <bphinz@users.sourceforge.net>
Standards-Version: 3.8.4
-Build-Depends: debhelper (>> 7.1), zlib1g-dev, libjpeg-turbo8-dev, libxaw7-dev (>> 4.1.0), perl-modules, xfonts-base, xutils-dev, libx11-dev, libxau-dev, libxext-dev, libxi-dev, libxkbfile-dev, libxmu-dev, libxt-dev, x11proto-core-dev, cmake (>> 2.8), libgnutls-dev, libpam0g-dev, libpng12-dev, automake, autoconf, libtool, pkg-config, libpixman-1-dev, x11proto-bigreqs-dev, x11proto-composite-dev, x11proto-damage-dev, x11proto-dri2-dev, x11proto-fixes-dev, x11proto-fonts-dev, x11proto-gl-dev, x11proto-input-dev, x11proto-kb-dev, x11proto-randr-dev, x11proto-render-dev, x11proto-resource-dev, x11proto-scrnsaver-dev, x11proto-video-dev, x11proto-xext-dev, x11proto-xf86bigfont-dev, x11proto-xf86dga-dev, x11proto-xf86dri-dev, x11proto-xf86vidmode-dev, x11proto-xinerama-dev, libosmesa6-dev, libgl1-mesa-dev, libgl1-mesa-dri, libgl1-mesa-glx, libxfont-dev, x11proto-record-dev, default-jdk, libxtst-dev, libxft-dev, libexpat1-dev, libfontconfig1-dev, libxrender-dev, libpciaccess-dev, curl, bzip2, quilt, libglu1-mesa-dev, libxcursor-dev, libxinerama-dev, libxfixes-dev, libcairo2-dev, x11proto-dri3-dev, libgcrypt20-dev, x11proto-xcmisc-dev, x11proto-present-dev, xorg-server-source, libfltk1.3-dev
+Build-Depends: debhelper (>> 7.1), zlib1g-dev, libjpeg-turbo8-dev, libxaw7-dev (>> 4.1.0), perl-modules, xfonts-base, xutils-dev, libx11-dev, libxau-dev, libxext-dev, libxi-dev, libxkbfile-dev, libxmu-dev, libxt-dev, x11proto-core-dev, cmake (>> 2.8), libgnutls-dev, libpam0g-dev, libpng12-dev, automake, autoconf, libtool, pkg-config, libpixman-1-dev, x11proto-bigreqs-dev, x11proto-composite-dev, x11proto-damage-dev, x11proto-dri2-dev, x11proto-fixes-dev, x11proto-fonts-dev, x11proto-gl-dev, x11proto-input-dev, x11proto-kb-dev, x11proto-randr-dev, x11proto-render-dev, x11proto-resource-dev, x11proto-scrnsaver-dev, x11proto-video-dev, x11proto-xext-dev, x11proto-xf86bigfont-dev, x11proto-xf86dga-dev, x11proto-xf86dri-dev, x11proto-xf86vidmode-dev, x11proto-xinerama-dev, libosmesa6-dev, libgl1-mesa-dev, libgl1-mesa-dri, libgl1-mesa-glx, libxfont-dev, x11proto-record-dev, default-jdk, libxtst-dev, libxft-dev, libexpat1-dev, libfontconfig1-dev, libxrender-dev, libpciaccess-dev, curl, bzip2, quilt, libglu1-mesa-dev, libxcursor-dev, libxinerama-dev, libxfixes-dev, libcairo2-dev, x11proto-dri3-dev, libgcrypt20-dev, x11proto-xcmisc-dev, x11proto-present-dev, xorg-server-source, libfltk1.3-dev, fluid
Homepage: http://www.tigervnc.com
Package: tigervncserver
Architecture: any
Provides: xserver, vnc-server
-Depends: x11-common | xserver-common, x11-utils, xauth, libbz2-1.0, libc6, libfontenc1, libfreetype6, libgcc1, libgl1-mesa-dri, libgnutls30, libjpeg-turbo8, libp11-kit0, libpam0g, libpixman-1-0, libstdc++6, libtasn1-3-bin, libx11-6, libxau6, libxcb1, libxdmcp6, libxext6, libxfont1, libxtst6, zlib1g, libglu1-mesa, libxcursor1, libxinerama1, libxfixes3, x11-xkb-utils
+Depends: x11-common | xserver-common, x11-utils, xauth, libbz2-1.0, libc6, libfontenc1, libfreetype6, libgcc1, libgl1-mesa-dri, libgnutls30, libjpeg-turbo8, libp11-kit0, libpam0g, libpixman-1-0, libstdc++6, libtasn1-3-bin, libx11-6, libxau6, libxcb1, libxdmcp6, libxext6, libxfont1, libxtst6, zlib1g, libglu1-mesa, libxcursor1, libxinerama1, libxfixes3, x11-xkb-utils, libgcrypt20
Recommends: xfonts-base, x11-xserver-utils
Suggests: xtigervncviewer, tigervnc-java
Description: virtual network computing server software
diff --git a/contrib/packages/rpm/el6/SPECS/tigervnc.spec b/contrib/packages/rpm/el6/SPECS/tigervnc.spec
index 16d1ba57..447eb7fb 100644
--- a/contrib/packages/rpm/el6/SPECS/tigervnc.spec
+++ b/contrib/packages/rpm/el6/SPECS/tigervnc.spec
@@ -10,7 +10,7 @@
Name: tigervnc
Version: @VERSION@
-Release: 4%{?snap:.%{snap}}%{?dist}
+Release: 5%{?snap:.%{snap}}%{?dist}
Summary: A TigerVNC remote display system
Group: User Interface/Desktops
@@ -177,7 +177,7 @@ pushd unix/xserver
for all in `find . -type f -perm -001`; do
chmod -x "$all"
done
-patch -p1 -b --suffix .vnc < ../xserver115.patch
+patch -p1 -b --suffix .vnc < ../xserver117.patch
popd
%patch16 -p0 -b .man
@@ -339,7 +339,7 @@ pushd java
-DJAVA_KEY_ALIAS=%{_key_alias} \
-DJAVA_STOREPASS=":env STOREPASS" \
-DJAVA_KEYPASS=":env KEYPASS" \
- -DJAVA_TSA_URL=https://timestamp.geotrust.com/tsa .
+ -DJAVA_TSA_URL=http://timestamp.geotrust.com/tsa .
%endif
JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8" make
@@ -460,6 +460,9 @@ fi
%endif
%changelog
+* Mon Jun 20 2016 Brian P. Hinz <bphinz@users.sourceforge.net> 1.6.80-5
+- Patch for Xorg 1.17 due to vendor bump of Xorg version
+
* Sat Apr 02 2016 Brian P. Hinz <bphinz@users.sourceforge.net> 1.6.80-4
- Fixed CVE-2015-8803 CVE-2015-8804 CVE-2015-8805 secp256r1 and secp384r1 bugs
diff --git a/contrib/packages/rpm/el7/SPECS/tigervnc.spec b/contrib/packages/rpm/el7/SPECS/tigervnc.spec
index c440d983..ac58d5b4 100644
--- a/contrib/packages/rpm/el7/SPECS/tigervnc.spec
+++ b/contrib/packages/rpm/el7/SPECS/tigervnc.spec
@@ -259,7 +259,7 @@ pushd java
-DJAVA_KEY_ALIAS=%{_key_alias} \
-DJAVA_STOREPASS=":env STOREPASS" \
-DJAVA_KEYPASS=":env KEYPASS" \
- -DJAVA_TSA_URL=https://timestamp.geotrust.com/tsa .
+ -DJAVA_TSA_URL=http://timestamp.geotrust.com/tsa .
%endif
JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8" make
diff --git a/doc/keyboard-test.txt b/doc/keyboard-test.txt
index 800faeca..89b5088d 100644
--- a/doc/keyboard-test.txt
+++ b/doc/keyboard-test.txt
@@ -3,6 +3,15 @@ Test protocol for keyboard handling
Platform specific tests/issues are marked with [].
+These tests are primarily about what is sent over the protocol and some
+may be difficult or impossible to test using normal applications. In
+these cases you can turn on debug logging in either the client or the
+server by specifying "-Log *:stderr:100".
+
+We currently have a limitation in Xvnc where it can run out of symbols,
+resulting in nothing being sent to the applications. Just run setxkbmap
+with any layout to reset the symbol table.
+
Client
------
@@ -11,74 +20,95 @@ Client
- ASCII characters
- Latin 1 character
- Unicode BMP characters
- - Unicode non-BMP characters
+ - Unicode non-BMP characters (does any layout actually have these?)
- Dead keys:
+ These are not available on a single layout, so you need to switch to
+ test everything. The useful layouts also differ per platform:
+
+ X11: US International for most, Greek for some specific diacretics
+ Win: US International, Czech, Greek Polytonic, Vietnamese
+ OS X: ABC Extended (FIXME: lots of broken keys),
+ Greek (FIXME: cannot be used with TigerVNC)
+
- Grave
- Acute
- Circumflex
- Tilde
- - Macron
+ - Macron (FIXME: broken on Win)
- Breve
- Dot above
+ - Dot below
- Diaeresis
- Ring above
- Double acute
- Caron
- Cedilla
- Ogonek
- - Ypogegrammeni
- - Katakana voiced mark
- - Katakana semi-voiced mark
- - Dialytika tonos
+ - Ypogegrammeni (iota below) (FIXME: broken on Win)
+ - Dialytika tonos [Win] (Diaresis on X11, and maybe OS X?)
+ - Comma above (FIXME: broken on Win)
+ - Reversed comma above (FIXME: broken on Win)
+ - Horn [X11?]
+ - Hook above [Win?]
+ - Hook below [X11?, Win?]
+ - Dakuten (Katakana voiced mark) (Only Input Methods layouts?)
+ - Handakuten (Katakana semi-voiced mark) (Only Input Methods layouts?)
- FIXME: Many more that we currently probably don't support
- No composition on client
- Modifiers:
+ X11: You can usually toggle Hyper/Super and Compose/Scroll_Lock using
+ XKB options.
+
- CapsLock, NumLock (sent but ignored by server)
- Shift, Ctrl
- Alt, AltGr, Super [Win, X11] (FIXME: AltGr broken on Win)
+ - Meta [X11]
- Left/right identification (FIXME: broken for Shift on Win)
- - CmdL => AltL, CmdR => SuperL, AltL => ModeSwitch, AltR => Level3Shift [Mac]
+ - CmdL => AltL, CmdR => SuperL, AltL => ModeSwitch, AltR => Level3Shift [OS X]
- Hyper sends Super [X11]
- CapsLock, Shift and AltGr affect symbol lookup
- - NumLock affects symbol lookup [Win, X11]
- Ctrl does not affect symbol lookup
- - Shift inverts NumLock behaviour [X11]
- - Shift turns NumLock off, but not on [Win] (FIXME: fake Shifts also sent)
- - CtrlL+AltR fake release [Win]
- - Ctrl+Alt+any (note behaviour above though)
- - Ctrl+AltGr+any (FIXME: broken on Win)
+ - CtrlL+AltR is fake released to compensate for Windows' AltGr magic [Win]
+ - Ctrl+Alt+<ANY> sends the same symbol as <ANY> (note behaviour above though)
+ - Ctrl+AltGr+<ANY> sends the same symbol as AltGr+<ANY> (FIXME: broken on Win)
- "Shift press, A press, Shift release, A release" should not send "a release"
- Numpad:
+ - NumLock affects symbol lookup [Win, X11]
- Numpad specific symbols are sent
- - Affected by NumLock
- Decimal key should send Decimal for layouts with . as a symbol, and
Separator for layouts with , as a symbol
+ - Shift inverts NumLock behaviour [X11]
+ - Shift turns NumLock off, but not on [Win] (FIXME: fake Shifts also sent)
- Multimedia keys:
+ OS X: FIXME: all broken
+
- Back, Forward, Refresh, Stop
- - HomePage, Search, Favourites
+ - HomePage, Search, Favourites (FIXME: broken on Win)
- Mail, Calculator
- Volume up, down, mute
- Media next, previous, stop, play
- - Sleep
+ - Sleep (FIXME: broken on Win)
- FIXME: probably more keys exist
- Non-character keys:
- - F1-F24
- - Tab, Space, Backspace, Return
- - LeftTab sends Tab
- - Esc, PrntScrn, ScrollLock, Pause
- - Insert, Delete, Home, End, PageUp, PageDown
+ - F1-F24 (FIXME: F14-F15 broken on OS X)
+ - Tab, Space, Backspace, Return, Esc
+ - LeftTab sends Tab [X11?]
+ - PrntScrn, ScrollLock, Pause [X11, Win]
+ - Help [X11?, OS X]
+ - Insert [X11, Win]
+ - Delete, Home, End, PageUp, PageDown
- Arrow keys
- Menu
- Alt+PrntScrn sends Sys_Req [Win]
@@ -93,7 +123,7 @@ Client
- Local input methods are disabled/enabled with focus
-- System keys should be grabbed in full screen
+- System keys should be grabbed in full screen (FIXME: lots missing on Win)
The exact keys depends on the system and configuration, but it
is usually variants of these:
diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
index 887174bb..8fcb64e5 100644
--- a/po/CMakeLists.txt
+++ b/po/CMakeLists.txt
@@ -1,7 +1,7 @@
# Gettext support - mostly borrowed from the Licq project
set(po_FILES
- bg da de el eo es fi fr it nl pl pt_BR ru sk sr sv tr uk zh_CN
+ bg da de el eo es fi fr it nl pl pt_BR ru sk sr sv tr uk vi zh_CN
)
if (NOT GETTEXT_MSGMERGE_EXECUTABLE AND NOT GETTEXT_MSGFMT_EXECUTABLE)
diff --git a/po/da.po b/po/da.po
index ec0574ce..f917aebc 100644
--- a/po/da.po
+++ b/po/da.po
@@ -1,14 +1,14 @@
# Danish translation of tigervnc.
-# Copyright (C) 2015 the TigerVNC Team (msgids)
+# Copyright (C) 2016 the TigerVNC Team (msgids)
# This file is distributed under the same license as the tigervnc package.
-# Joe Hansen <joedalton2@yahoo.dk>, 2015.
+# Joe Hansen <joedalton2@yahoo.dk>, 2015, 2016.
#
msgid ""
msgstr ""
-"Project-Id-Version: tigervnc 1.5.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2015-12-08 15:00+0000\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-04 15:00+0000\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
"Language: da\n"
@@ -17,108 +17,98 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
#, c-format
msgid "connected to host %s port %d"
msgstr "forbundet til værten %s på port %d"
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
#, c-format
msgid "Desktop name: %.80s"
msgstr "Skrivebordsnavn: %.80s"
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
#, c-format
msgid "Host: %.80s port: %d"
msgstr "Vært: %.80s port: %d"
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
#, c-format
msgid "Size: %d x %d"
msgstr "Størrelse: %d x %d"
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
#, c-format
msgid "Pixel format: %s"
msgstr "Billedformat: %s"
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
#, c-format
msgid "(server default %s)"
msgstr "(serverstandard %s)"
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
#, c-format
msgid "Requested encoding: %s"
msgstr "Anmodt kodning: %s"
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
#, c-format
msgid "Last used encoding: %s"
msgstr "Sidst anvendt kodning: %s"
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
#, c-format
msgid "Line speed estimate: %d kbit/s"
msgstr "Linjehastighedsestimat: %d kbit/s"
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
#, c-format
msgid "Protocol version: %d.%d"
msgstr "Protokolversion: %d.%d"
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
#, c-format
msgid "Security method: %s"
msgstr "Sikkerhedsmetode: %s"
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
#, c-format
msgid "SetDesktopSize failed: %d"
msgstr "SetDesktopSize fejlede: %d"
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
msgid "Invalid SetColourMapEntries from server!"
msgstr "Ugyldig SetColourMapEntries fra server!"
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Ukendt kodning %d"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Ukendt kodning"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
msgid "Enabling continuous updates"
msgstr "Aktiverer fortsættende opdateringer"
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
#, c-format
msgid "Throughput %d kbit/s - changing to quality %d"
msgstr "Gennemløb %d kbit/s - ændrer til kvalitet %d"
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
#, c-format
msgid "Throughput %d kbit/s - full color is now %s"
msgstr "Gennemløb %d kbit/s - fuld farve er nu %s"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "disabled"
msgstr "deaktiveret"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "enabled"
msgstr "aktiveret"
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
#, c-format
msgid "Using %s encoding"
msgstr "Bruger %s-kodning"
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
#, c-format
msgid "Using pixel format %s"
msgstr "Bruger billedpunktsformat %s"
@@ -127,25 +117,25 @@ msgstr "Bruger billedpunktsformat %s"
msgid "Invalid geometry specified!"
msgstr "Ugyldig geometri angivet!"
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
msgid "Adjusting window size to avoid accidental full screen request"
msgstr "Justerer vinduesstørrelse for at undgå utilsigtet anmodning om fuld skærm"
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
msgid "Failure grabbing keyboard"
msgstr "Kunne ikke fange tastatur"
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
msgid "Failure grabbing mouse"
msgstr "Kunne ikke fange mus"
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
msgid "Invalid screen layout computed for resize request!"
msgstr "Ugyldig skærmlayout beregnet for anmodning om ny størrelse!"
#: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
msgid "Not enough memory for framebuffer"
msgstr "Ikke nok hukommelse for framebuffer"
@@ -162,160 +152,164 @@ msgid "VNC Viewer: Connection Options"
msgstr "VNC-fremviser: Forbindelsesindstillinger"
#: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
msgid "Cancel"
msgstr "Afbryd"
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
msgid "OK"
msgstr "O.k."
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
msgid "Compression"
msgstr "Komprimering"
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
msgid "Auto select"
msgstr "Vælg automatisk"
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
msgid "Preferred encoding"
msgstr "Foretrukken kodning"
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
msgid "Color level"
msgstr "Farveniveau"
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
msgid "Full (all available colors)"
msgstr "Fuld (alle tilgængelige farver)"
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
msgid "Medium (256 colors)"
msgstr "Mellem (256 farver)"
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
msgid "Low (64 colors)"
msgstr "Lav (64 farver)"
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
msgid "Very low (8 colors)"
msgstr "Meget lav (8 farver)"
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
msgid "Custom compression level:"
msgstr "Tilpasset komprimeringsniveau:"
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
msgid "level (1=fast, 6=best [4-6 are rarely useful])"
msgstr "niveau (1=hurtig, 6=bedst [4-6 bruges sjældent])"
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
msgid "Allow JPEG compression:"
msgstr "Tillad JPEG-komprimering:"
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
msgid "quality (0=poor, 9=best)"
msgstr "kvalitet (0=dårlig, 9=bedst)"
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
msgid "Security"
msgstr "Sikkerhed"
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
msgid "Encryption"
msgstr "Kryptering"
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
msgid "None"
msgstr "Ingen"
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
msgid "TLS with anonymous certificates"
msgstr "TLS med anonyme certifikater"
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
msgid "TLS with X509 certificates"
msgstr "TLS med X509-certifikater"
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
msgid "Path to X509 CA certificate"
msgstr "Sti til X509 CA-certifikat"
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
msgid "Path to X509 CRL file"
msgstr "Sti til X509 CRL-fil"
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
msgid "Authentication"
msgstr "Godkendelse"
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
msgid "Standard VNC (insecure without encryption)"
msgstr "Standard-VNC (usikker uden kryptering)"
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
msgid "Username and password (insecure without encryption)"
msgstr "Bruernavn og adgangskode (usikker uden kryptering)"
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
msgid "Input"
msgstr "Inddata"
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
msgid "View only (ignore mouse and keyboard)"
msgstr "Vis kun (ignorer mus og tastatur)"
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
msgid "Accept clipboard from server"
msgstr "Accepter udklipsholderen fra serveren"
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Angiv også primær markering"
+
+#: vncviewer/OptionsDialog.cxx:716
msgid "Send clipboard to server"
msgstr "Send udklipsholderen til serveren"
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Send primær markering og klip mellemlager som udklipsholder"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Send primær markering som udklipsholder"
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
msgid "Pass system keys directly to server (full screen)"
msgstr "Videresend systemnøgler direkte til serveren (fuld skærm)"
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
msgid "Menu key"
msgstr "Menutast"
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
msgid "Screen"
msgstr "Skærm"
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
msgid "Resize remote session on connect"
msgstr "Ændr størrelse for ekstern session ved forbind"
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
msgid "Resize remote session to the local window"
msgstr "Ændr størrelse for ekstern session til det lokale vindue"
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
msgid "Full-screen mode"
msgstr "Tilstand for fuld skærm"
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
msgid "Enable full-screen mode over all monitors"
msgstr "Aktiver tilstand for fuld skærm over alle skærme"
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
msgid "Misc."
msgstr "Div."
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
msgid "Shared (don't disconnect other viewers)"
msgstr "Delt (afbryd ikke andre fremvisere)"
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
msgid "Show dot when no cursor"
msgstr "Vis punktum når ingen markør"
@@ -367,112 +361,112 @@ msgstr "Godkendelse afbrudt"
msgid "Username:"
msgstr "Brugernavn:"
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
#, c-format
msgid "Unable to create platform specific framebuffer: %s"
msgstr "Kan ikke oprette platformspecifik framebuffer: %s"
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
msgid "Using platform independent framebuffer"
msgstr "Bruger framebuffer uafhængig af platform"
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
#, c-format
msgid "No scan code for extended virtual key 0x%02x"
msgstr "Ingen skanningskode for udvidet virtuel nøgle 0x%02x"
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
#, c-format
msgid "No scan code for virtual key 0x%02x"
msgstr "Ingen skanningskode for virtuel nøgle 0x%02x"
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
#, c-format
msgid "No symbol for extended virtual key 0x%02x"
msgstr "Intet symbol for udvidet virtuel nøgle 0x%02x"
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
#, c-format
msgid "No symbol for virtual key 0x%02x"
msgstr "Intet symbol for virtuel nøgle 0x%02x"
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
#, c-format
msgid "No symbol for key code 0x%02x (in the current state)"
msgstr "Intet symbol for nøglekode 0x%02x (i den nuværende tilstand)"
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
#, c-format
msgid "No symbol for key code %d (in the current state)"
msgstr "Intet symbol for nøglekode %d (i den nuværende tilstand)"
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
msgctxt "ContextMenu|"
msgid "E&xit viewer"
msgstr "&Afslut fremviser"
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
msgctxt "ContextMenu|"
msgid "&Full screen"
msgstr "&Fuld skærm"
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
msgctxt "ContextMenu|"
msgid "Minimi&ze"
msgstr "&Minimer"
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
msgctxt "ContextMenu|"
msgid "Resize &window to session"
msgstr "Ændr størrelse for &vindue til session"
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
msgctxt "ContextMenu|"
msgid "&Ctrl"
msgstr "&Ctrl"
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
msgctxt "ContextMenu|"
msgid "&Alt"
msgstr "&Alt"
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
#, c-format
msgctxt "ContextMenu|"
msgid "Send %s"
msgstr "Send %s"
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
msgctxt "ContextMenu|"
msgid "Send Ctrl-Alt-&Del"
msgstr "Send Ctrl-Alt-&Slet"
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
msgctxt "ContextMenu|"
msgid "&Refresh screen"
msgstr "&Opdater skærm"
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
msgctxt "ContextMenu|"
msgid "&Options..."
msgstr "&Indstillinger ..."
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
msgctxt "ContextMenu|"
msgid "Connection &info..."
msgstr "Forbindelses&info ..."
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
msgctxt "ContextMenu|"
msgid "About &TigerVNC viewer..."
msgstr "Om &TigerVNC-fremviseren ..."
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
msgctxt "ContextMenu|"
msgid "Dismiss &menu"
msgstr "Fjern %menu"
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
msgid "VNC connection info"
msgstr "VNC-forbindelsesinfo"
@@ -494,123 +488,123 @@ msgstr "BitBlt mislykkedes"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
msgid "Display lacks pixmap format for default depth"
msgstr "Skærm mangler pixmap-format for standarddybde"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
msgid "Couldn't find suitable pixmap format"
msgstr "Kunne ikke finde et egnet pixmap-format"
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
msgid "Only true colour displays supported"
msgstr "Kun skærme med »true colour« er understøttet"
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
#, c-format
msgid "Using default colormap and visual, TrueColor, depth %d."
msgstr "Bruger standardfarvekort og visuel, TrueColor, dybde %d."
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
msgid "Could not create framebuffer image"
msgstr "Kunne ikke oprette framebuffer-billede"
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
#, c-format
msgid "The name of the parameter %s was too large to write to the registry"
msgstr "Navnet på parameteren %s var for lang til at kunne skrives til registret"
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
#, c-format
msgid "The parameter %s was too large to write to the registry"
msgstr "Parameteren %s var for lang til at kunne skrives til registret"
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
#, c-format
msgid "Failed to write parameter %s of type %s to the registry: %ld"
msgstr "Kunne ikke skrive parameteren %s af typen %s til registret: %ld"
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
#, c-format
msgid "The name of the parameter %s was too large to read from the registry"
msgstr "Navnet for parameteren %s var for lang til at kunne læses fra registret"
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
#, c-format
msgid "Failed to read parameter %s from the registry: %ld"
msgstr "Kunne ikke læse parameteren %s fra registret: %ld"
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
#, c-format
msgid "The parameter %s was too large to read from the registry"
msgstr "Parameteren %s var for lang til at kunne læses fra registret"
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
#, c-format
msgid "Failed to create registry key: %ld"
msgstr "Kunne ikke oprette registernøgle: %ld"
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
#, c-format
msgid "Unknown parameter type for parameter %s"
msgstr "Ukendt parametertype for parameteren %s"
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
#, c-format
msgid "Failed to close registry key: %ld"
msgstr "Kunne ikke lukke registernøgle: %ld"
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
#, c-format
msgid "Failed to open registry key: %ld"
msgstr "Kunne ikke åbne registernøgle: %ld"
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
msgid "Failed to write configuration file, can't obtain home directory path."
msgstr "Kunne ikke skrive konfigurationsfil, kan ikke indhente hjemmemappens sti."
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
#, c-format
msgid "Failed to write configuration file, can't open %s: %s"
msgstr "Kunne ikke skrive konfigurationsfil, kan ikke åbne %s: %s"
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
msgid "Failed to read configuration file, can't obtain home directory path."
msgstr "Kunne ikke læse konfigurationsfil, kan ikke indhente hjemmemappens sti."
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
#, c-format
msgid "Failed to read configuration file, can't open %s: %s"
msgstr "Kunne ikke læse konfigurationsfil, kan ikke åbne %s: %s"
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
#, c-format
msgid "Failed to read line %d in file %s: %s"
msgstr "Kunne ikke læse linje %d i filen %s: %s"
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
msgid "Line too long"
msgstr "Linjen er for lang"
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
#, c-format
msgid "Configuration file %s is in an invalid format"
msgstr "Konfigurationsfilen %s er i et ugyldigt format"
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
msgid "Invalid format"
msgstr "Ugyldigt format"
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
msgid "Invalid format or too large value"
msgstr "Ugyldigt format eller for stor værdi"
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
#, c-format
msgid "Unknown parameter %s on line %d in file %s"
msgstr "Ukendt parameter %s på linje %d i filen %s"
@@ -632,86 +626,92 @@ msgstr ""
msgid "About TigerVNC Viewer"
msgstr "Om TigerVNC-fremviseren"
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Intern FLTK-fejl. Afbryder."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
#, c-format
msgid "Error starting new TigerVNC Viewer: %s"
msgstr "Fejl ved start af ny TigerVNC-fremviser: %s"
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
#, c-format
msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
msgstr "Opsigelsessignalet %d er blevet modtaget. TigerVNC-fremviseren vil nu afslutte."
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
msgid "TigerVNC Viewer"
msgstr "TigerVNC-fremviser"
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
msgid "No"
msgstr "Nej"
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
msgid "Yes"
msgstr "Ja"
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
msgid "Close"
msgstr "Luk"
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
msgid "About"
msgstr "Om"
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
msgid "Hide"
msgstr "Skjul"
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
msgid "Quit"
msgstr "Afslut"
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
msgid "Services"
msgstr "Tjenester"
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
msgid "Hide Others"
msgstr "Skjul andre"
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
msgid "Show All"
msgstr "Vis alle"
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
msgctxt "SysMenu|"
msgid "&File"
msgstr "&Fil"
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
msgctxt "SysMenu|File|"
msgid "&New Connection"
msgstr "&Ny forbindelse"
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
msgid "Could not create VNC home directory: can't obtain home directory path."
msgstr "Kunne ikke oprette VNC-hjemmemappen: Kan ikke indhente hjemmemappens sti."
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
#, c-format
msgid "Could not create VNC home directory: %s."
msgstr "Kunne ikke oprette VNC-hjemmemappe: %s."
#. TRANSLATORS: "Parameters" are command line arguments, or settings
#. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
msgid "Parameters -listen and -via are incompatible"
msgstr "Parameterne -listen og -via er ikke kompatible"
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
#, c-format
msgid "Listening on port %d"
msgstr "Lytter på port %d"
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Intern FLTK-fejl. Afbryder."
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Ukendt kodning %d"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Ukendt kodning"
diff --git a/po/de.po b/po/de.po
index 3c1a20aa..796c5535 100644
--- a/po/de.po
+++ b/po/de.po
@@ -2,13 +2,13 @@
# Copyright (C) 2014 the TigerVNC Team (msgids)
# This file is distributed under the same license as the tigervnc package.
# Klaus Franken <Klaus.Franken@StrukturPunkt.de>, 2005.
-# Mario Blättermann <mario.blaettermann@gmail.com>, 2014, 2015.
+# Mario Blättermann <mario.blaettermann@gmail.com>, 2014, 2015, 2016.
msgid ""
msgstr ""
-"Project-Id-Version: tigervnc 1.5.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2015-12-05 22:02+0100\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-07 22:49+0200\n"
"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"Language: de\n"
@@ -16,110 +16,100 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.8.5\n"
+"X-Generator: Poedit 1.8.7.1\n"
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
#, c-format
msgid "connected to host %s port %d"
msgstr "verbunden mit Rechner %s, Port %d"
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
#, c-format
msgid "Desktop name: %.80s"
msgstr "Desktop-Name: %.80s"
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
#, c-format
msgid "Host: %.80s port: %d"
msgstr "Rechner: %.80s Port: %d"
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
#, c-format
msgid "Size: %d x %d"
msgstr "Größe: %d x %d"
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
#, c-format
msgid "Pixel format: %s"
msgstr "Pixelformat: %s"
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
#, c-format
msgid "(server default %s)"
msgstr "(Server-Vorgabe %s)"
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
#, c-format
msgid "Requested encoding: %s"
msgstr "Angeforderte Zeichenkodierung: %s"
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
#, c-format
msgid "Last used encoding: %s"
msgstr "Zuletzt verwendete Zeichenkodierung: %s"
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
#, c-format
msgid "Line speed estimate: %d kbit/s"
msgstr "Geschätzte Verbindungsgeschwindigkeit: %d kbit/s"
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
#, c-format
msgid "Protocol version: %d.%d"
msgstr "Protokollversion: %d.%d"
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
#, c-format
msgid "Security method: %s"
msgstr "Sicherheitsmethode: %s"
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
#, c-format
msgid "SetDesktopSize failed: %d"
msgstr "SetDesktopSize fehlgeschlagen: %d"
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
msgid "Invalid SetColourMapEntries from server!"
msgstr "Ungültige SetColourMapEntries vom Server!"
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Unbekannte Kodierung %d"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Unbekannte Kodierung"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
msgid "Enabling continuous updates"
msgstr "Fortlaufende Aktualisierungen aktivieren"
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
#, c-format
msgid "Throughput %d kbit/s - changing to quality %d"
msgstr "Durchsatz %d kbit/s - Qualität wird auf %d geändert"
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
#, c-format
msgid "Throughput %d kbit/s - full color is now %s"
msgstr "Durchsatz %d kbit/s - Vollfarbmodus ist jetzt %s"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "disabled"
msgstr "deaktiviert"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "enabled"
msgstr "aktiviert"
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
#, c-format
msgid "Using %s encoding"
msgstr "%s-Verschlüsselung wird verwendet"
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
#, c-format
msgid "Using pixel format %s"
msgstr "Pixelformat %s wird verwendet"
@@ -128,25 +118,25 @@ msgstr "Pixelformat %s wird verwendet"
msgid "Invalid geometry specified!"
msgstr "Unzulässige Geometrie wurde angegeben!"
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
msgid "Adjusting window size to avoid accidental full screen request"
msgstr "Fenstergröße anpassen, um zufällige Vollbild-Anforderung zu vermeiden"
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
msgid "Failure grabbing keyboard"
msgstr "Fehler beim Erkennen der Tastatur"
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
msgid "Failure grabbing mouse"
msgstr "Fehler beim Erkennen der Maus"
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
msgid "Invalid screen layout computed for resize request!"
msgstr "Ungültige Bildschirmanordnung wurde für die Größenänderungsanforderung ermittelt!"
#: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
msgid "Not enough memory for framebuffer"
msgstr "Nicht genügend Speicher für Framebuffer"
@@ -163,160 +153,164 @@ msgid "VNC Viewer: Connection Options"
msgstr "VNC-Betrachter: Verbindungsoptionen"
#: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
msgid "Cancel"
msgstr "Abbrechen"
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
msgid "OK"
msgstr "OK"
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
msgid "Compression"
msgstr "Kompression"
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
msgid "Auto select"
msgstr "Automatisch auswählen"
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
msgid "Preferred encoding"
msgstr "Bevorzugte Kodierung"
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
msgid "Color level"
msgstr "Farbstufe"
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
msgid "Full (all available colors)"
msgstr "Voll (alle verfügbaren Farben)"
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
msgid "Medium (256 colors)"
msgstr "Mittel (256 Farben)"
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
msgid "Low (64 colors)"
msgstr "Niedrig (64 Farben)"
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
msgid "Very low (8 colors)"
msgstr "Sehr gering (8 Farben)"
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
msgid "Custom compression level:"
msgstr "Individuelle Kompressionsstufe:"
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
msgid "level (1=fast, 6=best [4-6 are rarely useful])"
msgstr "Stufe (1=schnell, 9=beste) [4-6 sind selten sinnvoll]"
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
msgid "Allow JPEG compression:"
msgstr "JPEG-Kompression erlauben:"
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
msgid "quality (0=poor, 9=best)"
msgstr "Qualität (0=schlechte, 9=beste)"
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
msgid "Security"
msgstr "Sicherheit"
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
msgid "Encryption"
msgstr "Verschlüsselung"
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
msgid "None"
msgstr "Keine"
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
msgid "TLS with anonymous certificates"
msgstr "TLS mit anonymen Zertifikaten"
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
msgid "TLS with X509 certificates"
msgstr "TLS mit X509-Zertifikaten"
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
msgid "Path to X509 CA certificate"
msgstr "Pfad zum X509-CA-Zertifikat"
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
msgid "Path to X509 CRL file"
msgstr "Pfad zur X509-CRL-Datei"
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
msgid "Authentication"
msgstr "Authentifizierung"
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
msgid "Standard VNC (insecure without encryption)"
msgstr "Standard-VNC (unsicher ohne Verschlüsselung)"
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
msgid "Username and password (insecure without encryption)"
msgstr "Benutzername und Passwort (unsicher ohne Verschlüsselung)"
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
msgid "Input"
msgstr "Eingabe"
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
msgid "View only (ignore mouse and keyboard)"
msgstr "Nur Ansicht (Maus und Tastatur ignorieren)"
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
msgid "Accept clipboard from server"
msgstr "Zwischenablage vom Server akzeptieren"
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Primäre Auswahl ebenfalls setzen"
+
+#: vncviewer/OptionsDialog.cxx:716
msgid "Send clipboard to server"
msgstr "Zwischenablage zum Server senden"
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Primäre Auswahl und Ausschneidepuffer als Zwischenablage senden"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Primäre Auswahl als Zwischenablage senden"
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
msgid "Pass system keys directly to server (full screen)"
msgstr "Systemtasten direkt an den Server übergeben (Vollbild)"
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
msgid "Menu key"
msgstr "Menü-Taste"
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
msgid "Screen"
msgstr "Bildschirm"
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
msgid "Resize remote session on connect"
msgstr "Ferne Sitzung beim Verbinden an das lokale Fenster anpassen"
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
msgid "Resize remote session to the local window"
msgstr "Ferne Sitzung an das lokale Fenster anpassen"
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
msgid "Full-screen mode"
msgstr "Vollbildmodus"
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
msgid "Enable full-screen mode over all monitors"
msgstr "Vollbildmodus für alle Monitore aktivieren"
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
msgid "Misc."
msgstr "Sonstiges"
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
msgid "Shared (don't disconnect other viewers)"
msgstr "Gemeinsamer Zugriff (andere VNC-Viewer nicht trennen)"
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
msgid "Show dot when no cursor"
msgstr "Punkt zeigen, wenn kein Cursor"
@@ -368,112 +362,112 @@ msgstr "Authentifizierung abgebrochen"
msgid "Username:"
msgstr "Benutzername:"
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
#, c-format
msgid "Unable to create platform specific framebuffer: %s"
msgstr "Plattformspezifischer Framebuffer konnte nicht erstellt werden: %s"
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
msgid "Using platform independent framebuffer"
msgstr "Plattformunabhängiger Framebuffer wird verwendet"
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
#, c-format
msgid "No scan code for extended virtual key 0x%02x"
msgstr "Kein Scan-Code für erweiterte virtuelle Taste 0x%02x"
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
#, c-format
msgid "No scan code for virtual key 0x%02x"
msgstr "Kein Scan-Code für virtuelle Taste 0x%02x"
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
#, c-format
msgid "No symbol for extended virtual key 0x%02x"
msgstr "Kein Symbol für erweiterte virtuelle Taste 0x%02x"
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
#, c-format
msgid "No symbol for virtual key 0x%02x"
msgstr "Kein Symbol für virtuelle Taste 0x%02x"
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
#, c-format
msgid "No symbol for key code 0x%02x (in the current state)"
msgstr "Kein Symbol für Tastencode 0x%02x (im aktuellen Zustand)"
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
#, c-format
msgid "No symbol for key code %d (in the current state)"
msgstr "Kein Symbol für Tastencode %d (im aktuellen Zustand)"
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
msgctxt "ContextMenu|"
msgid "E&xit viewer"
msgstr "Betrachter be&enden"
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
msgctxt "ContextMenu|"
msgid "&Full screen"
msgstr "&Vollbildmodus"
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
msgctxt "ContextMenu|"
msgid "Minimi&ze"
msgstr "M&inimieren"
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
msgctxt "ContextMenu|"
msgid "Resize &window to session"
msgstr "&Fenster an Sitzung anpassen"
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
msgctxt "ContextMenu|"
msgid "&Ctrl"
msgstr "&Strg"
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
msgctxt "ContextMenu|"
msgid "&Alt"
msgstr "&Alt"
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
#, c-format
msgctxt "ContextMenu|"
msgid "Send %s"
msgstr "%s senden"
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
msgctxt "ContextMenu|"
msgid "Send Ctrl-Alt-&Del"
msgstr "Strg-Alt-E&ntf senden"
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
msgctxt "ContextMenu|"
msgid "&Refresh screen"
msgstr "Bildschirm &aktualisieren"
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
msgctxt "ContextMenu|"
msgid "&Options..."
msgstr "&Optionen …"
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
msgctxt "ContextMenu|"
msgid "Connection &info..."
msgstr "Verbindungs&informationen …"
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
msgctxt "ContextMenu|"
msgid "About &TigerVNC viewer..."
msgstr "Info zu &TigerVNC-Betrachter …"
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
msgctxt "ContextMenu|"
msgid "Dismiss &menu"
msgstr "Menü &verlassen"
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
msgid "VNC connection info"
msgstr "VNC-Verbindungsinformation"
@@ -495,123 +489,123 @@ msgstr "BitBlt fehlgeschlagen"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
msgid "Display lacks pixmap format for default depth"
msgstr "Anzeige hat kein Pixmap-Format für die vorgegebene Tiefe"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
msgid "Couldn't find suitable pixmap format"
msgstr "Es konnte kein geeignetes Pixmap-Format gefunden werden"
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
msgid "Only true colour displays supported"
msgstr "Nur True-Color-Anzeigen werden unterstützt"
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
#, c-format
msgid "Using default colormap and visual, TrueColor, depth %d."
msgstr "Vorgegebene Farbzuweisung und Anzeige wird verwendet,Tiefe %d."
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
msgid "Could not create framebuffer image"
msgstr "Framebuffer-Image konnte nicht erstellt werden"
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
#, c-format
msgid "The name of the parameter %s was too large to write to the registry"
msgstr "Der Parameterwert %s war beim Schreiben in die Registrierungsdatenbank zu groß"
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
#, c-format
msgid "The parameter %s was too large to write to the registry"
msgstr "Der Parameterwert %s war zu groß zum Schreiben in die Registrierungsdatenbank."
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
#, c-format
msgid "Failed to write parameter %s of type %s to the registry: %ld"
msgstr "Der Parameterwert %s des Typs %s konnte nicht in die Registrierungsdatenbank geschrieben werden: %ld"
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
#, c-format
msgid "The name of the parameter %s was too large to read from the registry"
msgstr "Der Parametername %s war zu groß zum Lesen aus der Registrierungsdatenbank."
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
#, c-format
msgid "Failed to read parameter %s from the registry: %ld"
msgstr "Der Parameter %s konnte nicht aus der Registrierungsdatenbank gelesen werden %ld"
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
#, c-format
msgid "The parameter %s was too large to read from the registry"
msgstr "Der Parameterwert %s war zu groß zum Lesen aus der Registrierungsdatenbank."
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
#, c-format
msgid "Failed to create registry key: %ld"
msgstr "Registrierungsschlüssel konnte nicht erzeugt werden: %ld"
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
#, c-format
msgid "Unknown parameter type for parameter %s"
msgstr "Unbekannter Parametertyp für Parameter %s"
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
#, c-format
msgid "Failed to close registry key: %ld"
msgstr "Registrierungsschlüssel konnte nicht geschlossen werden: %ld"
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
#, c-format
msgid "Failed to open registry key: %ld"
msgstr "Registrierungsschlüssel konnte nicht geöffnet werden: %ld"
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
msgid "Failed to write configuration file, can't obtain home directory path."
msgstr "Konfigurationsdatei konnte nicht geschrieben werden, auf Benutzerverzeichnispfad kann nicht zugegriffen werden."
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
#, c-format
msgid "Failed to write configuration file, can't open %s: %s"
msgstr "Konfigurationsdatei kann nicht geschrieben werden, %s lässt sich nicht öffnen: %s"
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
msgid "Failed to read configuration file, can't obtain home directory path."
msgstr "Konfigurationsdatei konnte nicht gelesen werden, auf Benutzerverzeichnispfad kann nicht zugegriffen werden."
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
#, c-format
msgid "Failed to read configuration file, can't open %s: %s"
msgstr "Konfigurationsdatei kann nicht gelesen werden, %s lässt sich nicht öffnen: %s"
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
#, c-format
msgid "Failed to read line %d in file %s: %s"
msgstr "Zeile %d in Datei %s konnte nicht gelesen werden: %s"
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
msgid "Line too long"
msgstr "Zeile ist zu lang"
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
#, c-format
msgid "Configuration file %s is in an invalid format"
msgstr "Format der Konfigurationsdatei %s ist ungültig"
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
msgid "Invalid format"
msgstr "Ungültiges Format"
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
msgid "Invalid format or too large value"
msgstr "Ungültiges Format oder zu großer Wert"
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
#, c-format
msgid "Unknown parameter %s on line %d in file %s"
msgstr "Ungültiger Parametername %s in Zeile %d in Datei %s"
@@ -634,89 +628,95 @@ msgstr ""
msgid "About TigerVNC Viewer"
msgstr "Info zu TigerVNC-Betrachter"
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Interner FLTK-Fehler. Abbruch."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
#, c-format
msgid "Error starting new TigerVNC Viewer: %s"
msgstr "Fehler beim Starten des neuen TigerVNC-Betrachters: %s"
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
#, c-format
msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
msgstr "Terminierungssignal %d wurde empfangen. Der TigerVNC-Betrachter wird nun beendet."
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
msgid "TigerVNC Viewer"
msgstr "TigerVNC-Betrachter"
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
msgid "No"
msgstr "Nein"
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
msgid "Yes"
msgstr "Ja"
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
msgid "Close"
msgstr "Schließen"
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
msgid "About"
msgstr "Info"
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
msgid "Hide"
msgstr "Verbergen"
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
msgid "Quit"
msgstr "Beenden"
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
msgid "Services"
msgstr "Dienste"
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
msgid "Hide Others"
msgstr "Andere verbergen"
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
msgid "Show All"
msgstr "Alle zeigen"
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
msgctxt "SysMenu|"
msgid "&File"
msgstr "&Datei"
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
msgctxt "SysMenu|File|"
msgid "&New Connection"
msgstr "&Neue Verbindung"
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
msgid "Could not create VNC home directory: can't obtain home directory path."
msgstr "VNC-Benutzerverzeichnis konnte nicht angelegt werden: auf Benutzerverzeichnispfad kann nicht zugegriffen werden."
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
#, c-format
msgid "Could not create VNC home directory: %s."
msgstr "VNC-Benutzerverzeichnis konnte nicht erstellt werden: %s."
#. TRANSLATORS: "Parameters" are command line arguments, or settings
#. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
msgid "Parameters -listen and -via are incompatible"
msgstr "Die Parameter -listen und -via schließen sich gegenseitig aus"
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
#, c-format
msgid "Listening on port %d"
msgstr "Am Port %d wird gelauscht"
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Interner FLTK-Fehler. Abbruch."
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Unbekannte Kodierung %d"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Unbekannte Kodierung"
#~ msgid "Alt"
#~ msgstr "Alt"
diff --git a/po/eo.po b/po/eo.po
index 9ab37ce2..3ca4bf99 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -1,627 +1,616 @@
# Esperanto translation
-# Copyright (C) 2015 the TigerVNC Team (msgids)
+# Copyright (C) 2015, 2016 the TigerVNC Team (msgids)
# This file is distributed under the same license as the tigervnc package.
-# Felipe Castro <fefcas@gmail.com>, 2015.
+# Felipe Castro <fefcas@gmail.com>, 2015, 2016.
#
msgid ""
msgstr ""
-"Project-Id-Version: tigervnc 1.3.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2014-11-19 12:46+0000\n"
-"PO-Revision-Date: 2015-01-20 15:14-0300\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-10-15 21:00-0300\n"
"Last-Translator: Felipe Castro <fefcas@gmail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
"Language: eo\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.6.10\n"
+"X-Generator: Poedit 1.5.4\n"
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:194
+#: vncviewer/CConn.cxx:110
#, c-format
-msgid "(server default %s)"
-msgstr "(servila implicito %s)"
-
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:227
-msgid "About"
-msgstr "Pri"
-
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:103
-msgid "About TigerVNC Viewer"
-msgstr "Pri la montrilo TigerVNC"
-
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1097
-msgid "About TigerVNC viewer..."
-msgstr "Pri la montrilo TigerVNC..."
+msgid "connected to host %s port %d"
+msgstr "konektita al gastiganto %s pordo %d"
-#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:86
-msgid "About..."
-msgstr "Pri..."
+#: vncviewer/CConn.cxx:169
+#, c-format
+msgid "Desktop name: %.80s"
+msgstr "Labortabla nomo: %.80s"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:704
-msgid "Accept clipboard from server"
-msgstr "Akcepti tondaĵon el la servilo"
+#: vncviewer/CConn.cxx:174
+#, c-format
+msgid "Host: %.80s port: %d"
+msgstr "Gastiganto: %.80s pordo: %d"
-#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:327
-msgid "Adjusting window size to avoid accidental full screen request"
-msgstr "Alĝustigo de fenestra grando por eviti akcidentan plenekranan peton"
+#: vncviewer/CConn.cxx:179
+#, c-format
+msgid "Size: %d x %d"
+msgstr "Grando: %d x %d"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:563
-msgid "Allow JPEG compression:"
-msgstr "Permesi JPEG-densigon:"
+#: vncviewer/CConn.cxx:187
+#, c-format
+msgid "Pixel format: %s"
+msgstr "Bildero-formo: %s"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1081
-msgid "Alt"
-msgstr "Alt-klavo"
+#: vncviewer/CConn.cxx:194
+#, c-format
+msgid "(server default %s)"
+msgstr "(servila implicito %s)"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:648
-msgid "Authentication"
-msgstr "Aŭtentikiĝo"
+#: vncviewer/CConn.cxx:199
+#, c-format
+msgid "Requested encoding: %s"
+msgstr "Petata enkodigo: %s"
-#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:89
-msgid "Authentication cancelled"
-msgstr "Aŭtentikiĝo estas nuligita"
+#: vncviewer/CConn.cxx:204
+#, c-format
+msgid "Last used encoding: %s"
+msgstr "Lasta uzata enkodigo: %s"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:437
-msgid "Auto select"
-msgstr "Aŭtomate elekti"
+#: vncviewer/CConn.cxx:209
+#, c-format
+msgid "Line speed estimate: %d kbit/s"
+msgstr "Lini-rapida konjekto: %d kbit/s"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:651
+#: vncviewer/CConn.cxx:214
#, c-format
-msgid "Bad Name/Value pair on line: %d in file: %s"
-msgstr "Malĝusta paro novo/valoro en linio: %d en dosiero: %s"
+msgid "Protocol version: %d.%d"
+msgstr "Protokola versio: %d.%d"
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:91
-msgid "BitBlt failed"
-msgstr "BitBlt malsukcesis"
+#: vncviewer/CConn.cxx:219
+#, c-format
+msgid "Security method: %s"
+msgstr "Sekureca metodo: %s"
-#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:91
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:221
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:83
-msgid "Cancel"
-msgstr "Nuligi"
+#: vncviewer/CConn.cxx:319
+#, c-format
+msgid "SetDesktopSize failed: %d"
+msgstr "SetDesktopSize fiaskis: %d"
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:116
-msgid "CleanupSignalHandler called"
-msgstr "CleanupSignalHandler estas vokita"
+#: vncviewer/CConn.cxx:411
+msgid "Invalid SetColourMapEntries from server!"
+msgstr "Malvalida SetColourMapEntries el servilo!"
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:222
-msgid "Close"
-msgstr "Fermi"
+#: vncviewer/CConn.cxx:485
+msgid "Enabling continuous updates"
+msgstr "Ebligo de daŭrigaj ĝisdatigoj"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:499
-msgid "Color level"
-msgstr "Kolora nivelo"
+#: vncviewer/CConn.cxx:555
+#, c-format
+msgid "Throughput %d kbit/s - changing to quality %d"
+msgstr "Traigo %d kbit/s - ni ŝanĝas al kvalito %d"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:421
-msgid "Compression"
-msgstr "Densigo"
+#: vncviewer/CConn.cxx:577
+#, c-format
+msgid "Throughput %d kbit/s - full color is now %s"
+msgstr "Traigo %d kbit/s - plenkoloro nun estas %s"
-#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:96
-msgid "Connect"
-msgstr "Konekti"
+#: vncviewer/CConn.cxx:579
+msgid "disabled"
+msgstr "malebligita"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1096
-msgid "Connection info..."
-msgstr "Informo pri konekto..."
+#: vncviewer/CConn.cxx:579
+msgid "enabled"
+msgstr "ebligita"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:362
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:404
+#: vncviewer/CConn.cxx:589
#, c-format
-msgid "Could not convert the parameter-name %s to wchar_t* when reading from the Registry, the buffersize is to small."
-msgstr "Ne eblis konverti la parametro-nomo %s al wchar_t* dum lego el la Registrujo, la bufrogrando tro malgrandas."
+msgid "Using %s encoding"
+msgstr "Ni uzas enkodigon %s"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:302
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:340
+#: vncviewer/CConn.cxx:636
#, c-format
-msgid "Could not convert the parameter-name %s to wchar_t* when writing to the Registry, the buffersize is to small."
-msgstr "Ne eblis konverti la parametro-nomo %s al wchar_t* dum skribo al la Registrujo, la bufrogrando tro malgrandas."
+msgid "Using pixel format %s"
+msgstr "Ni uzas bilderformon %s"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:318
-#, c-format
-msgid "Could not convert the parameter-value %s to wchar_t* when writing to the Registry, the buffersize is to small."
-msgstr "Ne eblis konverti la parametro-valoro %s al wchar_t* dum skribo al la Registrujo, la bufrogrando tro malgrandas."
+#: vncviewer/DesktopWindow.cxx:106
+msgid "Invalid geometry specified!"
+msgstr "Malvalida geometrio indikita!"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:381
-#, c-format
-msgid "Could not convert the parameter-value for %s to utf8 char* when reading from the Registry, the buffer dest is to small."
-msgstr "Ne eblis konverti la parametro-valoro %s al utf8 char* dum lego el la Registrujo, la bufra celo tro malgrandas."
+#: vncviewer/DesktopWindow.cxx:303
+msgid "Adjusting window size to avoid accidental full screen request"
+msgstr "Alĝustigo de fenestra grando por eviti akcidentan plenekranan peton"
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:256
-#, c-format
-msgid "Could not create VNC home directory: %s."
-msgstr "Ne eblis krei hejman dosierujon de VNC: %s."
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
+msgid "Failure grabbing keyboard"
+msgstr "Fiasko dum elpreno de klavaro"
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:251
-msgid "Could not create VNC home directory: can't obtain home directory path."
-msgstr "Ne eblis krei hejman dosierujon de VNC: ne eblas havi tiun vojon."
+#: vncviewer/DesktopWindow.cxx:516
+msgid "Failure grabbing mouse"
+msgstr "Fiasko dum elpreno de muso"
-#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:58
-msgid "Could not create framebuffer bitmap"
-msgstr "Ne eblis krei frambufran bitmapon"
+#: vncviewer/DesktopWindow.cxx:746
+msgid "Invalid screen layout computed for resize request!"
+msgstr "Malvalida ekrana aranĝo komputita por regrandiga peto!"
+
+#: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
+#: vncviewer/X11PixelBuffer.cxx:117
+msgid "Not enough memory for framebuffer"
+msgstr "Ne sufiĉe da memoro por frambufro"
-#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:52
+#: vncviewer/OSXPixelBuffer.cxx:52
msgid "Could not create framebuffer device"
msgstr "Ne eblis krei frambufran aparaton"
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:107
-msgid "Could not create framebuffer image"
-msgstr "Ne eblis krei frambufran bildon"
+#: vncviewer/OSXPixelBuffer.cxx:58
+msgid "Could not create framebuffer bitmap"
+msgstr "Ne eblis krei frambufran bitmapon"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:310
-#, c-format
-msgid "Could not encode the parameter-value %s when writing to the Registry."
-msgstr "Ne eblis enkodigi la parametro-valoron %s dum skribo al la Registrujo."
+#: vncviewer/OptionsDialog.cxx:57
+msgid "VNC Viewer: Connection Options"
+msgstr "Rigardilo VNC: konektaj preferoj"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:613
-#, c-format
-msgid "Could not read the line(%d) in the configuration file,the buffersize is to small."
-msgstr "Ne eblis legi la linion(%d) en la agorda dosiero, la bufrogrando tro malgrandas."
+#: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
+#: vncviewer/vncviewer.cxx:282
+msgid "Cancel"
+msgstr "Nuligi"
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:68
-msgid "Couldn't find suitable pixmap format"
-msgstr "Ne eblis trovi taŭgan bildermapan formon"
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
+msgid "OK"
+msgstr "Bone"
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:79
-msgid "CreateCompatibleDC failed"
-msgstr "CreateCompatibleDC malsukcesis"
+#: vncviewer/OptionsDialog.cxx:423
+msgid "Compression"
+msgstr "Densigo"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1079
-msgid "Ctrl"
-msgstr "Stirklavo"
+#: vncviewer/OptionsDialog.cxx:439
+msgid "Auto select"
+msgstr "Aŭtomate elekti"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:550
-msgid "Custom compression level:"
-msgstr "Persona densig-nivelo:"
+#: vncviewer/OptionsDialog.cxx:451
+msgid "Preferred encoding"
+msgstr "Preferata enkodigo"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:283
-msgid "Decoding: The size of the buffer dest is to small, it needs to be 1 byte bigger."
-msgstr "Dekodigo: la grando de la bufra celo tro etas, ĝi bezonas esti 1 bajto pli granda."
+#: vncviewer/OptionsDialog.cxx:499
+msgid "Color level"
+msgstr "Kolora nivelo"
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:172
-#, c-format
-msgid "Desktop name: %.80s"
-msgstr "Labortabla nomo: %.80s"
+#: vncviewer/OptionsDialog.cxx:510
+msgid "Full (all available colors)"
+msgstr "Kompleta (ĉiuj disponeblaj koloroj)"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1099
-msgid "Dismiss menu"
-msgstr "Forlasi la menuon"
+#: vncviewer/OptionsDialog.cxx:517
+msgid "Medium (256 colors)"
+msgstr "Meze (256 koloroj)"
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:59
-msgid "Display lacks pixmap format for default depth"
-msgstr "Montri la bildermapan formon \"lacks\" por apriora profundo"
+#: vncviewer/OptionsDialog.cxx:524
+msgid "Low (64 colors)"
+msgstr "Malalte (64 koloroj)"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:778
-msgid "Enable full-screen mode over all monitors"
-msgstr "Ebligi plenekranan reĝimon en ĉiuj ekranoj"
+#: vncviewer/OptionsDialog.cxx:531
+msgid "Very low (8 colors)"
+msgstr "Tre malalta (8 koloroj)"
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:469
-msgid "Enabling continuous updates"
-msgstr "Ebligo de daŭrigaj ĝisdatigoj"
+#: vncviewer/OptionsDialog.cxx:548
+msgid "Custom compression level:"
+msgstr "Persona densig-nivelo:"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:200
-#, c-format
-msgid "Encoding backslash: The size of the buffer dest is to small, it needs to be more than %d bytes bigger."
-msgstr "Enkodigo de retroklino: la grando de la bufra celo tro etas, ĝi bezonas esti pli ol %d bajtoj pli granda."
+#: vncviewer/OptionsDialog.cxx:554
+msgid "level (1=fast, 6=best [4-6 are rarely useful])"
+msgstr "nivelo (1=rapida, 6=plejbona [4-6 rare utilas])"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:214
-#, c-format
-msgid "Encoding escape sequence: The size of the buffer dest is to small, it needs to be more than %d bytes bigger."
-msgstr "Enkodigo de skapsekvo: la grando de la bufra celo tro etas, ĝi bezonas esti pli ol %d bajtoj pli granda."
+#: vncviewer/OptionsDialog.cxx:561
+msgid "Allow JPEG compression:"
+msgstr "Permesi JPEG-densigon:"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:234
-#, c-format
-msgid "Encoding normal character: The size of the buffer dest is to small, it needs to be more than %d bytes bigger."
-msgstr "Enkodigo de ordinara signo: la grando de la bufra celo tro etas, ĝi bezonas esti pli ol %d bajtoj pli granda."
+#: vncviewer/OptionsDialog.cxx:567
+msgid "quality (0=poor, 9=best)"
+msgstr "kvalito (0=aĉa, 9=plejbona)"
+
+#: vncviewer/OptionsDialog.cxx:578
+msgid "Security"
+msgstr "Sekureco"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:595
+#: vncviewer/OptionsDialog.cxx:593
msgid "Encryption"
msgstr "Ĉifrado"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:503
-#, c-format
-msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer"
-msgstr "Eraro(%d) dum fermo de ŝlosilo: Software\\TigerVNC\\vncviewer"
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
+msgid "None"
+msgstr "Nenio"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:455
-#, c-format
-msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer"
-msgstr "Eraro(%d) dum fermo de ŝlosilo: Software\\TigerVNC\\vncviewer"
+#: vncviewer/OptionsDialog.cxx:610
+msgid "TLS with anonymous certificates"
+msgstr "TLS kun anonimaj atestiloj"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:434
-#, c-format
-msgid "Error(%d) creating key: Software\\TigerVNC\\vncviewer"
-msgstr "Eraro(%d) dum kreo de ŝlosilo: Software\\TigerVNC\\vncviewer"
+#: vncviewer/OptionsDialog.cxx:616
+msgid "TLS with X509 certificates"
+msgstr "TLS kun atestiloj X509"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:471
-#, c-format
-msgid "Error(%d) opening key: Software\\TigerVNC\\vncviewer"
-msgstr "Eraro(%d) dum malfermo de ŝlosilo: Software\\TigerVNC\\vncviewer"
+#: vncviewer/OptionsDialog.cxx:623
+msgid "Path to X509 CA certificate"
+msgstr "Vojo al atestilo X509 CA"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:373
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:415
-#, c-format
-msgid "Error(%d) reading %s from Registry."
-msgstr "Eraro(%d) dum lego de %s el la Registrujo."
+#: vncviewer/OptionsDialog.cxx:630
+msgid "Path to X509 CRL file"
+msgstr "Vojo al dosiero X509 CRL"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:348
-#, c-format
-msgid "Error(%d) writing %d(REG_DWORD) to Registry."
-msgstr "Eraro(%d) dum skribo de %d(REG_DWORD) al la Registrujo."
+#: vncviewer/OptionsDialog.cxx:646
+msgid "Authentication"
+msgstr "Aŭtentikiĝo"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:326
-#, c-format
-msgid "Error(%d) writing %s(REG_SZ) to Registry."
-msgstr "Eraro(%d) dum skribo de %s(REG_SZ) al la Registrujo."
+#: vncviewer/OptionsDialog.cxx:663
+msgid "Standard VNC (insecure without encryption)"
+msgstr "Ordinara VNC (nesekura sen ĉifrado)"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1067
-msgid "Exit viewer"
-msgstr "Eliri la montrilon"
+#: vncviewer/OptionsDialog.cxx:669
+msgid "Username and password (insecure without encryption)"
+msgstr "Uzantnomo kaj pasvorto (nesekura sen ĉifrado)"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:588
-msgid "Failed to read configuration file, can't obtain home directory path."
-msgstr "Fiasko dum lego de agorda dosiero, ne eblas preni la hejman dosierujan vojon."
+#: vncviewer/OptionsDialog.cxx:688
+msgid "Input"
+msgstr "Enigo"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:602
-#, c-format
-msgid "Failed to read configuration file, can't open %s"
-msgstr "Fiasko dum lego de agorda dosiero, ne eblas malfermi %s"
+#: vncviewer/OptionsDialog.cxx:696
+msgid "View only (ignore mouse and keyboard)"
+msgstr "Nur rigardi (preteratenti muson kaj klavaron)"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:621
-#, c-format
-msgid "Failed to read line %d in file %s"
-msgstr "Fiasko dum lego de la linio %d en la dosiero %s"
+#: vncviewer/OptionsDialog.cxx:702
+msgid "Accept clipboard from server"
+msgstr "Akcepti tondaĵon el la servilo"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:528
-msgid "Failed to write configuration file, can't obtain home directory path."
-msgstr "Fiasko dum skribo de agorda dosiero, ne eblas preni la hejman dosierujan vojon."
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Difini ankaŭ la ĉefan elekton"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:542
-#, c-format
-msgid "Failed to write configuration file, can't open %s"
-msgstr "Fiasko dum skribo de la agorda dosiero, ne eblas malfermi %s"
+#: vncviewer/OptionsDialog.cxx:716
+msgid "Send clipboard to server"
+msgstr "Sendi tondaĵon al la servilo"
-#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:526
-#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:538
-#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:551
-msgid "Failure grabbing keyboard"
-msgstr "Fiasko dum elpreno de klavaro"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Sendi ĉefan elekton kiel tondajô"
-#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:563
-msgid "Failure grabbing mouse"
-msgstr "Fiasko dum elpreno de muso"
+#: vncviewer/OptionsDialog.cxx:730
+msgid "Pass system keys directly to server (full screen)"
+msgstr "Pasi sistemajn klavojn rekte al la servilo (plenekrane)"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:512
-msgid "Full (all available colors)"
-msgstr "Kompleta (ĉiuj disponeblaj koloroj)"
+#: vncviewer/OptionsDialog.cxx:733
+msgid "Menu key"
+msgstr "Menu-klavo"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070
-msgid "Full screen"
-msgstr "Plena ekrano"
+#: vncviewer/OptionsDialog.cxx:749
+msgid "Screen"
+msgstr "Ekrano"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:770
-msgid "Full-screen mode"
-msgstr "Plenekrana reĝimo"
+#: vncviewer/OptionsDialog.cxx:757
+msgid "Resize remote session on connect"
+msgstr "Regrandigi foran seancon dum konekto"
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:230
-msgid "Hide"
-msgstr "Kaŝi"
+#: vncviewer/OptionsDialog.cxx:770
+msgid "Resize remote session to the local window"
+msgstr "Regrandigi foran seancon al la loka fenestro"
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:238
-msgid "Hide Others"
-msgstr "Kaŝi aliajn"
+#: vncviewer/OptionsDialog.cxx:776
+msgid "Full-screen mode"
+msgstr "Plenekrana reĝimo"
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:177
-#, c-format
-msgid "Host: %.80s port: %d"
-msgstr "Gastiganto: %.80s pordo: %d"
+#: vncviewer/OptionsDialog.cxx:782
+msgid "Enable full-screen mode over all monitors"
+msgstr "Ebligi plenekranan reĝimon en ĉiuj ekranoj"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:690
-msgid "Input"
-msgstr "Enigo"
+#: vncviewer/OptionsDialog.cxx:791
+msgid "Misc."
+msgstr "Divers."
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:510
-msgid "Internal FLTK error. Exiting."
-msgstr "Interna eraro de FLTK. Ni ĉesas."
+#: vncviewer/OptionsDialog.cxx:799
+msgid "Shared (don't disconnect other viewers)"
+msgstr "Kunhave (ne malkonekti aliajn rigardilojn)"
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:384
-msgid "Invalid SetColourMapEntries from server!"
-msgstr "Malvalida SetColourMapEntries el servilo!"
+#: vncviewer/OptionsDialog.cxx:805
+msgid "Show dot when no cursor"
+msgstr "Montri punkton kiam sen kursoro"
-#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:106
-msgid "Invalid geometry specified!"
-msgstr "Malvalida geometrio indikita!"
+#: vncviewer/ServerDialog.cxx:42
+msgid "VNC Viewer: Connection Details"
+msgstr "Rigardilo VNC: konektaj detaloj"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:708
-#, c-format
-msgid "Invalid parameter name on line: %d in file: %s"
-msgstr "Malvalida parametra nomo en linio: %d en dosiero: %s"
+#: vncviewer/ServerDialog.cxx:49 vncviewer/ServerDialog.cxx:54
+msgid "VNC server:"
+msgstr "Servilo VNC:"
-#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:805
-msgid "Invalid screen layout computed for resize request!"
-msgstr "Malvalida ekrana aranĝo komputita por regrandiga peto!"
+#: vncviewer/ServerDialog.cxx:64
+msgid "Options..."
+msgstr "Modifiloj..."
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:204
-#, c-format
-msgid "Last used encoding: %s"
-msgstr "Lasta uzata enkodigo: %s"
+#: vncviewer/ServerDialog.cxx:69
+msgid "Load..."
+msgstr "Ŝargo..."
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:631
-#, c-format
-msgid ""
-"Line 1 in file %s\n"
-"must contain the TigerVNC configuration file identifier string:\n"
-"\"%s\""
-msgstr ""
-"Linio 1 en la dosiero %s\n"
-"devas enhavi la agordo-dosieran identig-ĉenon de TigerVNC:\n"
-"\"%s\""
+#: vncviewer/ServerDialog.cxx:74
+msgid "Save As..."
+msgstr "Konservi kiel..."
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:209
-#, c-format
-msgid "Line speed estimate: %d kbit/s"
-msgstr "Lini-rapida konjekto: %d kbit/s"
+#: vncviewer/ServerDialog.cxx:86
+msgid "About..."
+msgstr "Pri..."
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:478
-#, c-format
-msgid "Listening on port %d\n"
-msgstr "Ni aŭskultas pordon %d\n"
+#: vncviewer/ServerDialog.cxx:96
+msgid "Connect"
+msgstr "Konekti"
-#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:69
-msgid "Load..."
-msgstr "Ŝargo..."
+#: vncviewer/UserDialog.cxx:74
+msgid "Opening password file failed"
+msgstr "Malfermo de pasvorta dosiero fiaskis"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:526
-msgid "Low (64 colors)"
-msgstr "Malalte (64 koloroj)"
+#: vncviewer/UserDialog.cxx:86 vncviewer/UserDialog.cxx:96
+msgid "VNC authentication"
+msgstr "Aŭtentikiĝo de VNC"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:519
-msgid "Medium (256 colors)"
-msgstr "Meze (256 koloroj)"
+#: vncviewer/UserDialog.cxx:87 vncviewer/UserDialog.cxx:102
+msgid "Password:"
+msgstr "Pasvorto:"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:725
-msgid "Menu key"
-msgstr "Menu-klavo"
+#: vncviewer/UserDialog.cxx:89
+msgid "Authentication cancelled"
+msgstr "Aŭtentikiĝo estas nuligita"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:791
-msgid "Misc."
-msgstr "Divers."
+#: vncviewer/UserDialog.cxx:99
+msgid "Username:"
+msgstr "Uzantnomo:"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1037
+#: vncviewer/Viewport.cxx:391
#, c-format
-msgid "Multiple characters given for key code %d (0x%04x): '%s'"
-msgstr "Multoblaj signoj indikitaj por klavkodo %d (0x%04x): '%s'"
+msgid "Unable to create platform specific framebuffer: %s"
+msgstr "Ne eblas krei frambufron specifan de platformo: %s"
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:218
-msgid "No"
-msgstr "Ne"
+#: vncviewer/Viewport.cxx:392
+msgid "Using platform independent framebuffer"
+msgstr "Ni uzas frambufron sendependan de platformo"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:691
+#: vncviewer/Viewport.cxx:628
#, c-format
msgid "No scan code for extended virtual key 0x%02x"
msgstr "Neniu skankodo por kroma virtuala klavo 0x%02x"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:693
+#: vncviewer/Viewport.cxx:630
#, c-format
msgid "No scan code for virtual key 0x%02x"
msgstr "Neniu skankodo por virtuala klavo 0x%02x"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:710
+#: vncviewer/Viewport.cxx:647
#, c-format
msgid "No symbol for extended virtual key 0x%02x"
msgstr "Neniu simbolo por kroma virtuala klavo 0x%02x"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:776
+#: vncviewer/Viewport.cxx:649
#, c-format
-msgid "No symbol for key code %d (in the current state)"
-msgstr "Neniu simbolo por klavkodo %d (en la nuna stato)"
+msgid "No symbol for virtual key 0x%02x"
+msgstr "Neniu simbolo por virtuala klavo 0x%02x"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:750
+#: vncviewer/Viewport.cxx:687
#, c-format
msgid "No symbol for key code 0x%02x (in the current state)"
msgstr "Neniu simbolo por klavkodo 0x%02x (en la nuna stato)"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:712
+#: vncviewer/Viewport.cxx:713
#, c-format
-msgid "No symbol for virtual key 0x%02x"
-msgstr "Neniu simbolo por virtuala klavo 0x%02x"
-
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:606
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:659
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:727
-msgid "None"
-msgstr "Nenio"
+msgid "No symbol for key code %d (in the current state)"
+msgstr "Neniu simbolo por klavkodo %d (en la nuna stato)"
-#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:48
-#: /home/ossman/devel/tigervnc/vncviewer/FLTKPixelBuffer.cxx:33
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:111
-msgid "Not enough memory for framebuffer"
-msgstr "Ne sufiĉe da memoro por frambufro"
+#: vncviewer/Viewport.cxx:750
+msgctxt "ContextMenu|"
+msgid "E&xit viewer"
+msgstr "E&liri la rigardilon"
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:220
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:88
-msgid "OK"
-msgstr "Bone"
+#: vncviewer/Viewport.cxx:753
+msgctxt "ContextMenu|"
+msgid "&Full screen"
+msgstr "&Plena ekrano"
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:77
-msgid "Only true colour displays supported"
-msgstr "Nur verŝajn-koloraj montriloj estas subtenataj"
+#: vncviewer/Viewport.cxx:756
+msgctxt "ContextMenu|"
+msgid "Minimi&ze"
+msgstr "Mal&grandigi"
-#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:74
-msgid "Opening password file failed"
-msgstr "Malfermo de pasvorta dosiero fiaskis"
+#: vncviewer/Viewport.cxx:758
+msgctxt "ContextMenu|"
+msgid "Resize &window to session"
+msgstr "Regrandigi &fenestron al seanco"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1095
-#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:64
-msgid "Options..."
-msgstr "Modifiloj..."
+#: vncviewer/Viewport.cxx:763
+msgctxt "ContextMenu|"
+msgid "&Ctrl"
+msgstr "&Stirklavo"
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:463
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:464
-msgid "Parameters -listen and -via are incompatible"
-msgstr "Parametroj -listen kaj -via estas malkongruaj"
+#: vncviewer/Viewport.cxx:766
+msgctxt "ContextMenu|"
+msgid "&Alt"
+msgstr "&Alt"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:722
-msgid "Pass system keys directly to server (full screen)"
-msgstr "Pasi sistemajn klavojn rekte al la servilo (plenekrane)"
+#: vncviewer/Viewport.cxx:772
+#, c-format
+msgctxt "ContextMenu|"
+msgid "Send %s"
+msgstr "Sendi %s"
-#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:87
-#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:102
-msgid "Password:"
-msgstr "Pasvorto:"
+#: vncviewer/Viewport.cxx:778
+msgctxt "ContextMenu|"
+msgid "Send Ctrl-Alt-&Del"
+msgstr "Sendi Ctrl-Alt-&Del"
+
+#: vncviewer/Viewport.cxx:781
+msgctxt "ContextMenu|"
+msgid "&Refresh screen"
+msgstr "A&ktualigi ekranon"
+
+#: vncviewer/Viewport.cxx:784
+msgctxt "ContextMenu|"
+msgid "&Options..."
+msgstr "&Modifiloj..."
+
+#: vncviewer/Viewport.cxx:786
+msgctxt "ContextMenu|"
+msgid "Connection &info..."
+msgstr "&Informo pri konekto..."
+
+#: vncviewer/Viewport.cxx:788
+msgctxt "ContextMenu|"
+msgid "About &TigerVNC viewer..."
+msgstr "Pri la rigardilo &TigerVNC..."
+
+#: vncviewer/Viewport.cxx:791
+msgctxt "ContextMenu|"
+msgid "Dismiss &menu"
+msgstr "Forlasi la me&nuon"
+
+#: vncviewer/Viewport.cxx:875
+msgid "VNC connection info"
+msgstr "Konekta informo de VNC"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:625
-msgid "Path to X509 CA certificate"
-msgstr "Vojo al atestilo X509 CA"
+#: vncviewer/Win32PixelBuffer.cxx:62
+msgid "unable to create DIB section"
+msgstr "ne eblas krei sekcion DIB"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:632
-msgid "Path to X509 CRL file"
-msgstr "Vojo al dosiero X509 CRL"
+#: vncviewer/Win32PixelBuffer.cxx:79
+msgid "CreateCompatibleDC failed"
+msgstr "CreateCompatibleDC malsukcesis"
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:188
-#, c-format
-msgid "Pixel format: %s"
-msgstr "Bildero-formo: %s"
+#: vncviewer/Win32PixelBuffer.cxx:82
+msgid "SelectObject failed"
+msgstr "SelectObject fiaskis"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:449
-msgid "Preferred encoding"
-msgstr "Preferata enkodigo"
+#: vncviewer/Win32PixelBuffer.cxx:91
+msgid "BitBlt failed"
+msgstr "BitBlt malsukcesis"
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:214
-#, c-format
-msgid "Protocol version: %d.%d"
-msgstr "Protokola versio: %d.%d"
+#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
+#. to translate.
+#: vncviewer/X11PixelBuffer.cxx:65
+msgid "Display lacks pixmap format for default depth"
+msgstr "Montri la bildermapan formon \"lacks\" por apriora profundo"
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:233
-msgid "Quit"
-msgstr "Eliri"
+#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
+#. to translate.
+#: vncviewer/X11PixelBuffer.cxx:76
+msgid "Couldn't find suitable pixmap format"
+msgstr "Ne eblis trovi taŭgan bildermapan formon"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1093
-msgid "Refresh screen"
-msgstr "Aktualigi ekranon"
+#: vncviewer/X11PixelBuffer.cxx:85
+msgid "Only true colour displays supported"
+msgstr "Nur verŝajn-koloraj rigardiloj estas subtenataj"
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:199
+#: vncviewer/X11PixelBuffer.cxx:87
#, c-format
-msgid "Requested encoding: %s"
-msgstr "Petata enkodigo: %s"
-
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:749
-msgid "Resize remote session on connect"
-msgstr "Regrandigi foran seancon dum konekto"
-
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:762
-msgid "Resize remote session to the local window"
-msgstr "Regrandigi foran seancon al la loka fenestro"
+msgid "Using default colormap and visual, TrueColor, depth %d."
+msgstr "Ni uzas aprioran kolormapon kaj ŝajnon, 'TrueColor', profundo %d."
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1073
-msgid "Resize window to session"
-msgstr "Regrandigi fenestron al seanco"
-
-#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:74
-msgid "Save As..."
-msgstr "Konservi kiel..."
+#: vncviewer/X11PixelBuffer.cxx:113
+msgid "Could not create framebuffer image"
+msgstr "Ne eblis krei frambufran bildon"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:741
-msgid "Screen"
-msgstr "Ekrano"
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
+#, c-format
+msgid "The name of the parameter %s was too large to write to the registry"
+msgstr "La nomo de la parametro %s estis tro granda por skribi al la registrujo"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:580
-msgid "Security"
-msgstr "Sekureco"
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
+#, c-format
+msgid "The parameter %s was too large to write to the registry"
+msgstr "La parametro %s estis tro granda por skribi al la registrujo"
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:219
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
#, c-format
-msgid "Security method: %s"
-msgstr "Sekureca metodo: %s"
+msgid "Failed to write parameter %s of type %s to the registry: %ld"
+msgstr "Fiasko dum skribo de la parametro %s el tipo %s al la registrujo: %ld"
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:82
-msgid "SelectObject failed"
-msgstr "SelectObject fiaskis"
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
+#, c-format
+msgid "The name of the parameter %s was too large to read from the registry"
+msgstr "La nomo de la parametro %s estis tro longa por legi el la registrujo"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
#, c-format
-msgid "Send %s"
-msgstr "Sendi %s"
+msgid "Failed to read parameter %s from the registry: %ld"
+msgstr "Fiasko dum lego de parametro %s el la registrujo: %ld"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1091
-msgid "Send Ctrl-Alt-Del"
-msgstr "Sendi Ctrl-Alt-Del"
+#: vncviewer/parameters.cxx:359
+#, c-format
+msgid "The parameter %s was too large to read from the registry"
+msgstr "La parametro %s estis tro longa por legi el la registrujo"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:710
-msgid "Send clipboard to server"
-msgstr "Sendi tondaĵon al la servilo"
+#: vncviewer/parameters.cxx:409
+#, c-format
+msgid "Failed to create registry key: %ld"
+msgstr "Fiasko dum kreo de registruja ŝlosilo: %ld"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:716
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Sendi ĉefan elekton kaj tondan bufron kiel tondajôn"
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
+#, c-format
+msgid "Unknown parameter type for parameter %s"
+msgstr "Nekonata parametra tipo por parametro %s"
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:237
-msgid "Services"
-msgstr "Servoj"
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
+#, c-format
+msgid "Failed to close registry key: %ld"
+msgstr "Fiasko dum fermo de registruja ŝlosilo: %ld"
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:319
+#: vncviewer/parameters.cxx:446
#, c-format
-msgid "SetDesktopSize failed: %d"
-msgstr "SetDesktopSize fiaskis: %d"
+msgid "Failed to open registry key: %ld"
+msgstr "Fiasko dum malfermo de registruja ŝlosilo: %ld"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:799
-msgid "Shared (don't disconnect other viewers)"
-msgstr "Kunhave (ne malkonekti aliajn montrilojn)"
+#: vncviewer/parameters.cxx:503
+msgid "Failed to write configuration file, can't obtain home directory path."
+msgstr "Fiasko dum skribo de agorda dosiero, ne eblas preni la hejman dosierujan vojon."
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:239
-msgid "Show All"
-msgstr "Montri ĉiujn"
+#: vncviewer/parameters.cxx:516
+#, c-format
+msgid "Failed to write configuration file, can't open %s: %s"
+msgstr "Fiasko dum skribo de la agorda dosiero, ne eblas malfermi %s: %s"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:805
-msgid "Show dot when no cursor"
-msgstr "Montri punkton kiam sen kursoro"
+#: vncviewer/parameters.cxx:559
+msgid "Failed to read configuration file, can't obtain home directory path."
+msgstr "Fiasko dum lego de agorda dosiero, ne eblas preni la hejman dosierujan vojon."
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:182
+#: vncviewer/parameters.cxx:572
#, c-format
-msgid "Size: %d x %d"
-msgstr "Grando: %d x %d"
-
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:665
-msgid "Standard VNC (insecure without encryption)"
-msgstr "Ordinara VNC (nesekura sen ĉifrado)"
+msgid "Failed to read configuration file, can't open %s: %s"
+msgstr "Fiasko dum lego de agorda dosiero, ne eblas malfermi %s: %s"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:618
-msgid "TLS with X509 certificates"
-msgstr "TLS kun atestiloj X509"
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
+#, c-format
+msgid "Failed to read line %d in file %s: %s"
+msgstr "Fiasko dum lego de linio %d en la dosiero %s: %s"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:612
-msgid "TLS with anonymous certificates"
-msgstr "TLS kun anonimaj atestiloj"
+#: vncviewer/parameters.cxx:591
+msgid "Line too long"
+msgstr "Linio tro longas"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:448
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:497
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:561
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:701
+#: vncviewer/parameters.cxx:598
#, c-format
-msgid "The parameterArray contains a object of a invalid type at line %d."
-msgstr "La parameterArray enhavas objekton de malvalida tipo ĉe linio %d."
+msgid "Configuration file %s is in an invalid format"
+msgstr "Agorda dosiero %s estas en nevalida formo"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:664
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:680
-#, c-format
-msgid "The value of the parameter %s on line %d in file %s is invalid."
-msgstr "La valoro de parametro %s en linio %d en dosiero %s malvalidas."
+#: vncviewer/parameters.cxx:616
+msgid "Invalid format"
+msgstr "Nevalida formo"
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:539
-#, c-format
-msgid "Throughput %d kbit/s - changing to quality %d"
-msgstr "Traigo %d kbit/s - ni ŝanĝas al kvalito %d"
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
+msgid "Invalid format or too large value"
+msgstr "Nevalida formo aŭ tro granda valoro"
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:561
+#: vncviewer/parameters.cxx:672
#, c-format
-msgid "Throughput %d kbit/s - full color is now %s"
-msgstr "Traigo %d kbit/s - plenkoloro nun estas %s"
+msgid "Unknown parameter %s on line %d in file %s"
+msgstr "Nekonata parametro %s en linio %d en dosiero %s"
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:210
-msgid "TigerVNC Viewer"
-msgstr "Montrilo TigerVNC"
-
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:80
+#: vncviewer/vncviewer.cxx:100
#, c-format
msgid ""
"TigerVNC Viewer %d-bit v%s\n"
@@ -629,124 +618,187 @@ msgid ""
"Copyright (C) 1999-%d TigerVNC Team and many others (see README.txt)\n"
"See http://www.tigervnc.org for information on TigerVNC."
msgstr ""
-"Montrilo TigerVNC %d-bit v%s\n"
+"Rigardilo TigerVNC %d-bit v%s\n"
"Konstruita en: %s\n"
"Kopirajto (C) 1999-%d teamo TigerVNC kaj multaj aliaj (konsultu README.txt)\n"
"Konsultu http://www.tigervnc.org por informoj pri TigerVNC."
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:456
-#, c-format
-msgid "Unable to create platform specific framebuffer: %s"
-msgstr "Ne eblas krei frambufron specifan de platformo: %s"
+#: vncviewer/vncviewer.cxx:127
+msgid "About TigerVNC Viewer"
+msgstr "Pri la rigardilo TigerVNC"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1015
-#, c-format
-msgid "Unknown FLTK key code %d (0x%04x)"
-msgstr "Nekonata klavkodo de FLTK %d (0x%04x)"
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Interna eraro de FLTK. Ni ĉesas."
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:889
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
#, c-format
-msgid "Unknown decimal separator: '%s'"
-msgstr "Nekonata dekuma apartigilo: '%s'"
+msgid "Error starting new TigerVNC Viewer: %s"
+msgstr "Eraro dum ekigo de nova Rigardilo TigerVNC: %s"
-#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:271
+#: vncviewer/vncviewer.cxx:179
#, c-format
-msgid "Unknown escape sequence at character %d"
-msgstr "Nekonata eskap-sekvo ĉe signo %d"
+msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
+msgstr "Finiga signalo %d estis ricevata. La Rigardilo TigerVNC ĉesos nun."
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:430
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:437
-msgid "Unknown rect encoding"
-msgstr "Nekonata enkodigo 'rect'"
+#: vncviewer/vncviewer.cxx:271
+msgid "TigerVNC Viewer"
+msgstr "Rigardilo TigerVNC"
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:429
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:436
-#, c-format
-msgid "Unknown rect encoding %d"
-msgstr "Nekonata enkodigo 'rect' %d"
+#: vncviewer/vncviewer.cxx:279
+msgid "No"
+msgstr "Ne"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:671
-msgid "Username and password (insecure without encryption)"
-msgstr "Uzantnomo kaj pasvorto (nesekura sen ĉifrado)"
+#: vncviewer/vncviewer.cxx:280
+msgid "Yes"
+msgstr "Jes"
-#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:99
-msgid "Username:"
-msgstr "Uzantnomo:"
+#: vncviewer/vncviewer.cxx:283
+msgid "Close"
+msgstr "Fermi"
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:573
-#, c-format
-msgid "Using %s encoding"
-msgstr "Ni uzas enkodigon %s"
+#: vncviewer/vncviewer.cxx:288
+msgid "About"
+msgstr "Pri"
+
+#: vncviewer/vncviewer.cxx:291
+msgid "Hide"
+msgstr "Kaŝi"
+
+#: vncviewer/vncviewer.cxx:294
+msgid "Quit"
+msgstr "Eliri"
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:79
+#: vncviewer/vncviewer.cxx:298
+msgid "Services"
+msgstr "Servoj"
+
+#: vncviewer/vncviewer.cxx:299
+msgid "Hide Others"
+msgstr "Kaŝi aliajn"
+
+#: vncviewer/vncviewer.cxx:300
+msgid "Show All"
+msgstr "Montri ĉiujn"
+
+#: vncviewer/vncviewer.cxx:309
+msgctxt "SysMenu|"
+msgid "&File"
+msgstr "&Dosiero"
+
+#: vncviewer/vncviewer.cxx:312
+msgctxt "SysMenu|File|"
+msgid "&New Connection"
+msgstr "&Nova konekto"
+
+#: vncviewer/vncviewer.cxx:324
+msgid "Could not create VNC home directory: can't obtain home directory path."
+msgstr "Ne eblis krei hejman dosierujon de VNC: ne eblas havi tiun vojon."
+
+#: vncviewer/vncviewer.cxx:329
#, c-format
-msgid "Using default colormap and visual, %sdepth %d."
-msgstr "Ni uzas aprioran kolormapon kaj ŝajnon, %sprofundo %d."
+msgid "Could not create VNC home directory: %s."
+msgstr "Ne eblis krei hejman dosierujon de VNC: %s."
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:620
+#. TRANSLATORS: "Parameters" are command line arguments, or settings
+#. from a file or the Windows registry.
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
+msgid "Parameters -listen and -via are incompatible"
+msgstr "Parametroj -listen kaj -via estas malkongruaj"
+
+#: vncviewer/vncviewer.cxx:550
#, c-format
-msgid "Using pixel format %s"
-msgstr "Ni uzas bilderformon %s"
+msgid "Listening on port %d"
+msgstr "Ni aŭskultas pordon %d"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:457
-msgid "Using platform independent framebuffer"
-msgstr "Ni uzas frambufron sendependan de platformo"
+#~ msgid "Alt"
+#~ msgstr "Alt-klavo"
-#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:42
-msgid "VNC Viewer: Connection Details"
-msgstr "Montrilo VNC: konektaj detaloj"
+#~ msgid "Bad Name/Value pair on line: %d in file: %s"
+#~ msgstr "Malĝusta paro novo/valoro en linio: %d en dosiero: %s"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:57
-msgid "VNC Viewer: Connection Options"
-msgstr "Montrilo VNC: konektaj preferoj"
+#~ msgid "CleanupSignalHandler called"
+#~ msgstr "CleanupSignalHandler estas vokita"
-#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:86
-#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:96
-msgid "VNC authentication"
-msgstr "Aŭtentikiĝo de VNC"
+#~ msgid "Could not convert the parameter-name %s to wchar_t* when reading from the Registry, the buffersize is to small."
+#~ msgstr "Ne eblis konverti la parametro-nomo %s al wchar_t* dum lego el la Registrujo, la bufrogrando tro malgrandas."
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1187
-msgid "VNC connection info"
-msgstr "Konekta informo de VNC"
+#~ msgid "Could not convert the parameter-name %s to wchar_t* when writing to the Registry, the buffersize is to small."
+#~ msgstr "Ne eblis konverti la parametro-nomo %s al wchar_t* dum skribo al la Registrujo, la bufrogrando tro malgrandas."
-#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:49
-#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:54
-msgid "VNC server:"
-msgstr "Servilo VNC:"
+#~ msgid "Could not convert the parameter-value %s to wchar_t* when writing to the Registry, the buffersize is to small."
+#~ msgstr "Ne eblis konverti la parametro-valoro %s al wchar_t* dum skribo al la Registrujo, la bufrogrando tro malgrandas."
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:533
-msgid "Very low (8 colors)"
-msgstr "Tre malalta (8 koloroj)"
+#~ msgid "Could not convert the parameter-value for %s to utf8 char* when reading from the Registry, the buffer dest is to small."
+#~ msgstr "Ne eblis konverti la parametro-valoro %s al utf8 char* dum lego el la Registrujo, la bufra celo tro malgrandas."
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:698
-msgid "View only (ignore mouse and keyboard)"
-msgstr "Nur rigardi (preteratenti muson kaj klavaron)"
+#~ msgid "Could not read the line(%d) in the configuration file,the buffersize is to small."
+#~ msgstr "Ne eblis legi la linion(%d) en la agorda dosiero, la bufrogrando tro malgrandas."
-#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:219
-msgid "Yes"
-msgstr "Jes"
+#~ msgid "Decoding: The size of the buffer dest is to small, it needs to be 1 byte bigger."
+#~ msgstr "Dekodigo: la grando de la bufra celo tro etas, ĝi bezonas esti 1 bajto pli granda."
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:111
-#, c-format
-msgid "connected to host %s port %d"
-msgstr "konektita al gastiganto %s pordo %d"
+#~ msgid "Encoding backslash: The size of the buffer dest is to small, it needs to be more than %d bytes bigger."
+#~ msgstr "Enkodigo de retroklino: la grando de la bufra celo tro etas, ĝi bezonas esti pli ol %d bajtoj pli granda."
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:563
-msgid "disabled"
-msgstr "malebligita"
+#~ msgid "Encoding escape sequence: The size of the buffer dest is to small, it needs to be more than %d bytes bigger."
+#~ msgstr "Enkodigo de skapsekvo: la grando de la bufra celo tro etas, ĝi bezonas esti pli ol %d bajtoj pli granda."
-#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:563
-msgid "enabled"
-msgstr "ebligita"
+#~ msgid "Encoding normal character: The size of the buffer dest is to small, it needs to be more than %d bytes bigger."
+#~ msgstr "Enkodigo de ordinara signo: la grando de la bufra celo tro etas, ĝi bezonas esti pli ol %d bajtoj pli granda."
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:556
-msgid "level (1=fast, 6=best [4-6 are rarely useful])"
-msgstr "nivelo (1=rapida, 6=plejbona [4-6 rare utilas])"
+#~ msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer"
+#~ msgstr "Eraro(%d) dum fermo de ŝlosilo: Software\\TigerVNC\\vncviewer"
-#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:569
-msgid "quality (0=poor, 9=best)"
-msgstr "kvalito (0=aĉa, 9=plejbona)"
+#~ msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer"
+#~ msgstr "Eraro(%d) dum fermo de ŝlosilo: Software\\TigerVNC\\vncviewer"
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:62
-msgid "unable to create DIB section"
-msgstr "ne eblas krei sekcion DIB"
+#~ msgid "Error(%d) creating key: Software\\TigerVNC\\vncviewer"
+#~ msgstr "Eraro(%d) dum kreo de ŝlosilo: Software\\TigerVNC\\vncviewer"
+
+#~ msgid "Error(%d) opening key: Software\\TigerVNC\\vncviewer"
+#~ msgstr "Eraro(%d) dum malfermo de ŝlosilo: Software\\TigerVNC\\vncviewer"
+
+#~ msgid "Error(%d) reading %s from Registry."
+#~ msgstr "Eraro(%d) dum lego de %s el la Registrujo."
+
+#~ msgid "Error(%d) writing %d(REG_DWORD) to Registry."
+#~ msgstr "Eraro(%d) dum skribo de %d(REG_DWORD) al la Registrujo."
+
+#~ msgid "Error(%d) writing %s(REG_SZ) to Registry."
+#~ msgstr "Eraro(%d) dum skribo de %s(REG_SZ) al la Registrujo."
+
+#~ msgid ""
+#~ "Line 1 in file %s\n"
+#~ "must contain the TigerVNC configuration file identifier string:\n"
+#~ "\"%s\""
+#~ msgstr ""
+#~ "Linio 1 en la dosiero %s\n"
+#~ "devas enhavi la agordo-dosieran identig-ĉenon de TigerVNC:\n"
+#~ "\"%s\""
+
+#~ msgid "Multiple characters given for key code %d (0x%04x): '%s'"
+#~ msgstr "Multoblaj signoj indikitaj por klavkodo %d (0x%04x): '%s'"
+
+#~ msgid "The parameterArray contains a object of a invalid type at line %d."
+#~ msgstr "La parameterArray enhavas objekton de malvalida tipo ĉe linio %d."
+
+#~ msgid "The value of the parameter %s on line %d in file %s is invalid."
+#~ msgstr "La valoro de parametro %s en linio %d en dosiero %s malvalidas."
+
+#~ msgid "Unknown FLTK key code %d (0x%04x)"
+#~ msgstr "Nekonata klavkodo de FLTK %d (0x%04x)"
+
+#~ msgid "Unknown decimal separator: '%s'"
+#~ msgstr "Nekonata dekuma apartigilo: '%s'"
+
+#~ msgid "Unknown escape sequence at character %d"
+#~ msgstr "Nekonata eskap-sekvo ĉe signo %d"
+
+#, fuzzy
+#~ msgid "Unknown rect encoding"
+#~ msgstr "Nekonata enkodigo"
+
+#, fuzzy
+#~ msgid "Unknown rect encoding %d"
+#~ msgstr "Nekonata enkodigo %d"
diff --git a/po/nl.po b/po/nl.po
index 37598a84..0c24da15 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -2,13 +2,13 @@
# Copyright (C) the TigerVNC Team (msgids)
# This file is distributed under the same license as the tigervnc package.
#
-# Benno Schulenberg <benno@vertaalt.nl>, 2014, 2015.
+# Benno Schulenberg <benno@vertaalt.nl>, 2014, 2015, 2016.
msgid ""
msgstr ""
-"Project-Id-Version: tigervnc 1.5.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2015-12-04 21:42+0100\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-26 11:15+0200\n"
"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
"Language: nl\n"
@@ -18,108 +18,98 @@ msgstr ""
"X-Generator: Lokalize 1.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
#, c-format
msgid "connected to host %s port %d"
msgstr "verbonden met host %s poort %d"
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
#, c-format
msgid "Desktop name: %.80s"
msgstr "Bureaubladnaam: %.80s"
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
#, c-format
msgid "Host: %.80s port: %d"
msgstr "Host: %.80s poort: %d"
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
#, c-format
msgid "Size: %d x %d"
msgstr "Grootte: %d x %d"
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
#, c-format
msgid "Pixel format: %s"
msgstr "Pixel-indeling: %s"
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
#, c-format
msgid "(server default %s)"
msgstr "(serverstandaard is %s)"
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
#, c-format
msgid "Requested encoding: %s"
msgstr "Gevraagde codering: %s"
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
#, c-format
msgid "Last used encoding: %s"
msgstr "Laatst gebruikte codering: %s"
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
#, c-format
msgid "Line speed estimate: %d kbit/s"
msgstr "Geschatte lijnsnelheid: %d kbit/s"
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
#, c-format
msgid "Protocol version: %d.%d"
msgstr "Protocolversie: %d.%d"
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
#, c-format
msgid "Security method: %s"
msgstr "Beveiligingsmethode: %s"
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
#, c-format
msgid "SetDesktopSize failed: %d"
msgstr "### SetDesktopSize is mislukt: %d"
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
msgid "Invalid SetColourMapEntries from server!"
msgstr "Ongeldige 'SetColourMapEntries' van de server!"
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Onbekende codering %d"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Onbekende codering"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
msgid "Enabling continuous updates"
msgstr "Continue updates inschakelen"
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
#, c-format
msgid "Throughput %d kbit/s - changing to quality %d"
msgstr "Throughput is %d kbit/s -- overgaand naar kwaliteit %d"
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
#, c-format
msgid "Throughput %d kbit/s - full color is now %s"
msgstr "Throughput is %d kbit/s -- volledige kleuren is nu %s"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "disabled"
msgstr "uitgeschakeld"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "enabled"
msgstr "ingeschakeld"
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
#, c-format
msgid "Using %s encoding"
msgstr "Codering %s wordt gebruikt"
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
#, c-format
msgid "Using pixel format %s"
msgstr "Pixel-indeling %s wordt gebruikt"
@@ -128,25 +118,25 @@ msgstr "Pixel-indeling %s wordt gebruikt"
msgid "Invalid geometry specified!"
msgstr "Ongeldige afmetingen opgegeven!"
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
msgid "Adjusting window size to avoid accidental full screen request"
msgstr "Venstergrootte wordt aangepast om onbedoeld volledigschermverzoek te vermijden"
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
msgid "Failure grabbing keyboard"
msgstr "Het pakken van het toetsenbord is mislukt"
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
msgid "Failure grabbing mouse"
msgstr "Het pakken van de muis is mislukt"
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
msgid "Invalid screen layout computed for resize request!"
msgstr "Ongeldige schermopmaak berekend voor wijzigingsverzoek."
#: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
msgid "Not enough memory for framebuffer"
msgstr "Onvoldoende geheugen beschikbaar voor framebuffer"
@@ -163,160 +153,164 @@ msgid "VNC Viewer: Connection Options"
msgstr "VNC-viewer: Verbindingsopties"
#: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
msgid "Cancel"
msgstr "Annuleren"
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
msgid "OK"
msgstr "OK"
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
msgid "Compression"
msgstr "Compressie"
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
msgid "Auto select"
msgstr "Automatisch selecteren"
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
msgid "Preferred encoding"
msgstr "Voorkeurscodering"
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
msgid "Color level"
msgstr "Kleurdiepte"
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
msgid "Full (all available colors)"
msgstr "volledig (alle beschikbare kleuren)"
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
msgid "Medium (256 colors)"
msgstr "medium (256 kleuren)"
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
msgid "Low (64 colors)"
msgstr "laag (64 kleuren)"
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
msgid "Very low (8 colors)"
msgstr "zeer laag (8 kleuren)"
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
msgid "Custom compression level:"
msgstr "Aangepast compressieniveau:"
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
msgid "level (1=fast, 6=best [4-6 are rarely useful])"
msgstr "niveau (1=snel, 6=best [4-6 zijn zelden nuttig])"
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
msgid "Allow JPEG compression:"
msgstr "JPEG-compressie toestaan:"
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
msgid "quality (0=poor, 9=best)"
msgstr "kwaliteit (0=slecht, 9=best)"
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
msgid "Security"
msgstr "Beveiliging"
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
msgid "Encryption"
msgstr "Versleuteling"
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
msgid "None"
msgstr "Geen"
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
msgid "TLS with anonymous certificates"
msgstr "TLS met anonieme certificaten"
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
msgid "TLS with X509 certificates"
msgstr "TLS met X509-certificaten"
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
msgid "Path to X509 CA certificate"
msgstr "Pad naar X509 CA-certificaat"
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
msgid "Path to X509 CRL file"
msgstr "Pad naar X509 CRL-bestand"
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
msgid "Authentication"
msgstr "Authenticatie"
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
msgid "Standard VNC (insecure without encryption)"
msgstr "Standaard VNC (onveilig zonder versleuteling)"
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
msgid "Username and password (insecure without encryption)"
msgstr "Gebruikersnaam en wachtwoord (onveilig zonder versleuteling)"
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
msgid "Input"
msgstr "Invoer"
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
msgid "View only (ignore mouse and keyboard)"
msgstr "Alleen kijken (muis en toetsenbord negeren)"
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
msgid "Accept clipboard from server"
msgstr "Klembord van server accepteren"
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Ook de hoofdselectie instellen"
+
+#: vncviewer/OptionsDialog.cxx:716
msgid "Send clipboard to server"
msgstr "Klembord naar server zenden"
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Hoofdselectie en knipbuffer als klembord verzenden"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Hoofdselectie als klembord verzenden"
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
msgid "Pass system keys directly to server (full screen)"
msgstr "Systeemsleutels direct aan server doorgeven (volledigscherm)"
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
msgid "Menu key"
msgstr "Menutoets"
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
msgid "Screen"
msgstr "Scherm"
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
msgid "Resize remote session on connect"
msgstr "Grootte van gindse sessie aanpassen bij verbinden"
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
msgid "Resize remote session to the local window"
msgstr "Gindse sessie aan het lokale venster aanpassen"
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
msgid "Full-screen mode"
msgstr "Volledigscherm-modus"
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
msgid "Enable full-screen mode over all monitors"
msgstr "Volledigscherm-modus over alle beeldschermen inschakelen"
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
msgid "Misc."
msgstr "Overige"
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
msgid "Shared (don't disconnect other viewers)"
msgstr "Gedeeld (verbinding van andere viewers niet verbreken)"
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
msgid "Show dot when no cursor"
msgstr "Punt tonen als er geen cursor is"
@@ -368,112 +362,112 @@ msgstr "Authenticatie is geannuleerd"
msgid "Username:"
msgstr "Gebruikersnaam:"
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
#, c-format
msgid "Unable to create platform specific framebuffer: %s"
msgstr "Kan geen platform-specifiek framebuffer aanmaken: %s"
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
msgid "Using platform independent framebuffer"
msgstr "Platform-onafhankelijk framebuffer wordt gebruikt"
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
#, c-format
msgid "No scan code for extended virtual key 0x%02x"
msgstr "Geen scancode voor uitgebreide virtuele toets 0x%02x"
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
#, c-format
msgid "No scan code for virtual key 0x%02x"
msgstr "Geen scancode voor virtuele toets 0x%02x"
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
#, c-format
msgid "No symbol for extended virtual key 0x%02x"
msgstr "Geen symbool voor uitgebreide virtuele toets 0x%02x"
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
#, c-format
msgid "No symbol for virtual key 0x%02x"
msgstr "Geen symbool voor virtuele toets 0x%02x"
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
#, c-format
msgid "No symbol for key code 0x%02x (in the current state)"
msgstr "Geen symbool voor toetscode 0x%02x (in de huidige toestand)"
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
#, c-format
msgid "No symbol for key code %d (in the current state)"
msgstr "Geen symbool voor toetscode %d (in de huidige toestand)"
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
msgctxt "ContextMenu|"
msgid "E&xit viewer"
msgstr "Viewer af&sluiten"
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
msgctxt "ContextMenu|"
msgid "&Full screen"
msgstr "&Volledig scherm"
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
msgctxt "ContextMenu|"
msgid "Minimi&ze"
msgstr "&Minimaliseren"
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
msgctxt "ContextMenu|"
msgid "Resize &window to session"
msgstr "Ve&nster aan sessie aanpassen"
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
msgctxt "ContextMenu|"
msgid "&Ctrl"
msgstr "&Ctrl"
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
msgctxt "ContextMenu|"
msgid "&Alt"
msgstr "&Alt"
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
#, c-format
msgctxt "ContextMenu|"
msgid "Send %s"
msgstr "%s zenden"
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
msgctxt "ContextMenu|"
msgid "Send Ctrl-Alt-&Del"
msgstr "Ctrl-Alt-&Del zenden"
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
msgctxt "ContextMenu|"
msgid "&Refresh screen"
msgstr "Sch&erm verversen"
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
msgctxt "ContextMenu|"
msgid "&Options..."
msgstr "&Opties..."
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
msgctxt "ContextMenu|"
msgid "Connection &info..."
msgstr "Verbindings&info..."
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
msgctxt "ContextMenu|"
msgid "About &TigerVNC viewer..."
msgstr "Info over &TigerVNC-viewer..."
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
msgctxt "ContextMenu|"
msgid "Dismiss &menu"
msgstr "Menu ver&laten"
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
msgid "VNC connection info"
msgstr "VNC-verbindingsinfo"
@@ -495,123 +489,123 @@ msgstr "### BitBlt is mislukt"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
msgid "Display lacks pixmap format for default depth"
msgstr "Scherm heeft geen pixmap-indeling voor standaard kleurdiepte"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
msgid "Couldn't find suitable pixmap format"
msgstr "Kan geen geschikte pixmap-indeling vinden"
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
msgid "Only true colour displays supported"
msgstr "Alleen true-color beeldschermen worden ondersteund"
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
#, c-format
msgid "Using default colormap and visual, TrueColor, depth %d."
msgstr "Standaard kleurenkaart en visual worden gebruikt, TrueColor, diepte %d."
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
msgid "Could not create framebuffer image"
msgstr "Kan framebuffer-afbeelding niet aanmaken"
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
#, c-format
msgid "The name of the parameter %s was too large to write to the registry"
msgstr "De naam van parameter %s is te lang om naar het register te schrijven"
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
#, c-format
msgid "The parameter %s was too large to write to the registry"
msgstr "Parameter %s is te lang om naar het register te schrijven"
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
#, c-format
msgid "Failed to write parameter %s of type %s to the registry: %ld"
msgstr "Schrijven van parameter %s van type %s naar het register is mislukt: %ld"
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
#, c-format
msgid "The name of the parameter %s was too large to read from the registry"
msgstr "De naam van parameter %s is te lang om uit het register te lezen"
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
#, c-format
msgid "Failed to read parameter %s from the registry: %ld"
msgstr "Lezen van parameter %s uit het register is mislukt: %ld"
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
#, c-format
msgid "The parameter %s was too large to read from the registry"
msgstr "Parameter %s is te lang om uit het register te lezen"
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
#, c-format
msgid "Failed to create registry key: %ld"
msgstr "Aanmaken registersleutel is mislukt: %ld"
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
#, c-format
msgid "Unknown parameter type for parameter %s"
msgstr "Onbekend parametertype voor parameter %s"
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
#, c-format
msgid "Failed to close registry key: %ld"
msgstr "Sluiten van registersleutel is mislukt: %ld"
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
#, c-format
msgid "Failed to open registry key: %ld"
msgstr "Openen van registersleutel is mislukt: %ld"
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
msgid "Failed to write configuration file, can't obtain home directory path."
msgstr "Schrijven van configuratiebestand is mislukt; kan pad van thuismap niet verkrijgen."
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
#, c-format
msgid "Failed to write configuration file, can't open %s: %s"
msgstr "Schrijven van configuratiebestand is mislukt; kan %s niet openen: %s"
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
msgid "Failed to read configuration file, can't obtain home directory path."
msgstr "Lezen van configuratiebestand is mislukt; kan pad van thuismap niet verkrijgen."
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
#, c-format
msgid "Failed to read configuration file, can't open %s: %s"
msgstr "Lezen van configuratiebestand is mislukt; kan %s niet openen: %s"
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
#, c-format
msgid "Failed to read line %d in file %s: %s"
msgstr "Lezen van regel %d in bestand %s is mislukt: %s"
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
msgid "Line too long"
msgstr "Regel is te lang"
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
#, c-format
msgid "Configuration file %s is in an invalid format"
msgstr "Configuratiebestand %s het een ongeldige opmaak"
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
msgid "Invalid format"
msgstr "Ongeldige opmaak"
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
msgid "Invalid format or too large value"
msgstr "Ongeldige opmaak of te grote waarde"
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
#, c-format
msgid "Unknown parameter %s on line %d in file %s"
msgstr "Onbekende parameter %s op regel %d in bestand %s"
@@ -633,89 +627,95 @@ msgstr ""
msgid "About TigerVNC Viewer"
msgstr "Info over TigerVNC-viewer"
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Interne FLTK-fout. Bezig met afsluiten."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
#, c-format
msgid "Error starting new TigerVNC Viewer: %s"
msgstr "Fout tijdens starten van nieuwe TigerVNC-viewer: %s"
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
#, c-format
msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
msgstr "Beëindigingssignaal %d werd ontvangen. TigerVNC-viewer sluit nu af."
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
msgid "TigerVNC Viewer"
msgstr "TigerVNC-viewer"
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
msgid "No"
msgstr "Nee"
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
msgid "Yes"
msgstr "Ja"
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
msgid "Close"
msgstr "Sluiten"
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
msgid "About"
msgstr "Info"
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
msgid "Hide"
msgstr "Verbergen"
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
msgid "Quit"
msgstr "Afsluiten"
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
msgid "Services"
msgstr "Diensten"
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
msgid "Hide Others"
msgstr "Andere verbergen"
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
msgid "Show All"
msgstr "Alles tonen"
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
msgctxt "SysMenu|"
msgid "&File"
msgstr "&Bestand"
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
msgctxt "SysMenu|File|"
msgid "&New Connection"
msgstr "&Nieuwe verbinding"
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
msgid "Could not create VNC home directory: can't obtain home directory path."
msgstr "Kan de VNC-thuismap niet aanmaken: kan pad van thuismap niet verkrijgen."
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
#, c-format
msgid "Could not create VNC home directory: %s."
msgstr "Kan de VNC-thuismap niet aanmaken: %s."
#. TRANSLATORS: "Parameters" are command line arguments, or settings
#. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
msgid "Parameters -listen and -via are incompatible"
msgstr "de opties '-listen' en '-via' gaan niet samen"
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
#, c-format
msgid "Listening on port %d"
msgstr "Luisterend op poort %d"
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Interne FLTK-fout. Bezig met afsluiten."
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Onbekende codering %d"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Onbekende codering"
#~ msgid "Bad Name/Value pair on line: %d in file: %s"
#~ msgstr "Ongeldig naam-waardepaar op regel %d in bestand %s"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index ec1dd046..0a061d8e 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,14 +1,14 @@
# Brazilian Portuguese translation of tigervnc.
-# Copyright (C) 2015 the TigerVNC Team (msgids)
+# Copyright (C) 2016 the TigerVNC Team (msgids)
# This file is distributed under the same license as the tigervnc package.
-# Rafael Fontenelle <rffontenelle@gmail.com>, 2015.
+# Rafael Fontenelle <rffontenelle@gmail.com>, 2015, 2016.
#
msgid ""
msgstr ""
-"Project-Id-Version: tigervnc 1.5.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2015-12-15 15:50-0200\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-01 15:36-0200\n"
"Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n"
"Language: pt_BR\n"
@@ -18,108 +18,98 @@ msgstr ""
"X-Generator: Poedit 1.8.6\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
#, c-format
msgid "connected to host %s port %d"
msgstr "conectado ao host %s porta %d"
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
#, c-format
msgid "Desktop name: %.80s"
msgstr "Nome do desktop: %.80s"
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
#, c-format
msgid "Host: %.80s port: %d"
msgstr "Host %.80s porta: %d"
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
#, c-format
msgid "Size: %d x %d"
msgstr "Tamanho: %d x %d"
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
#, c-format
msgid "Pixel format: %s"
msgstr "Formato de pixel: %s"
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
#, c-format
msgid "(server default %s)"
msgstr "(padrão do servidor %s)"
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
#, c-format
msgid "Requested encoding: %s"
msgstr "Codificação solicitada: %s"
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
#, c-format
msgid "Last used encoding: %s"
msgstr "Última codificação usada: %s"
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
#, c-format
msgid "Line speed estimate: %d kbit/s"
msgstr "Velocidade estimada da linha: %d kbit/s"
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
#, c-format
msgid "Protocol version: %d.%d"
msgstr "Versão do protocolo: %d.%d"
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
#, c-format
msgid "Security method: %s"
msgstr "Método de segurança: %s"
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
#, c-format
msgid "SetDesktopSize failed: %d"
msgstr "Definir tamanho do desktop falhou: %d"
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
msgid "Invalid SetColourMapEntries from server!"
msgstr "SetColourMapEntries inválido do servidor!"
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Codificação %d desconhecida"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Codificação desconhecida"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
msgid "Enabling continuous updates"
msgstr "Ativando atualizações contínuas"
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
#, c-format
msgid "Throughput %d kbit/s - changing to quality %d"
msgstr "Resultado %d kbit/s - alteração para qualidade %d"
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
#, c-format
msgid "Throughput %d kbit/s - full color is now %s"
msgstr "Resultado %d kbit/s - a cor total agora está em %s"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "disabled"
msgstr "desativado"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "enabled"
msgstr "ativado"
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
#, c-format
msgid "Using %s encoding"
msgstr "Usando codificação %s"
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
#, c-format
msgid "Using pixel format %s"
msgstr "Usando formato de pixel %s"
@@ -128,25 +118,25 @@ msgstr "Usando formato de pixel %s"
msgid "Invalid geometry specified!"
msgstr "Geometria inválida especificada!"
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
msgid "Adjusting window size to avoid accidental full screen request"
msgstr "Ajustando tamanho de janela para evitar solicitação de tela cheia acidental"
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
msgid "Failure grabbing keyboard"
msgstr "Falha ao se conectar com o teclado"
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
msgid "Failure grabbing mouse"
msgstr "Falha ao se conectar com o mouse"
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
msgid "Invalid screen layout computed for resize request!"
msgstr "Layout de tela inválida computada para solicitação de redimensionamento!"
#: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
msgid "Not enough memory for framebuffer"
msgstr "Memória insuficiente para o framebuffer"
@@ -163,160 +153,164 @@ msgid "VNC Viewer: Connection Options"
msgstr "Visualizador VNC: Opções da conexão"
#: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
msgid "Cancel"
msgstr "Cancelar"
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
msgid "OK"
msgstr "OK"
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
msgid "Compression"
msgstr "Compressão"
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
msgid "Auto select"
msgstr "Seleção automática"
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
msgid "Preferred encoding"
msgstr "Codificação preferida"
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
msgid "Color level"
msgstr "Profundidade de cores"
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
msgid "Full (all available colors)"
msgstr "Completo (todas as cores)"
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
msgid "Medium (256 colors)"
msgstr "Médio (256 cores)"
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
msgid "Low (64 colors)"
msgstr "Baixo (64 cores)"
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
msgid "Very low (8 colors)"
msgstr "Muito baixo (8 cores)"
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
msgid "Custom compression level:"
msgstr "Compressão personalizada:"
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
msgid "level (1=fast, 6=best [4-6 are rarely useful])"
msgstr "nível (1=rápido, 6=o melhor [4-6 raramente úteis])"
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
msgid "Allow JPEG compression:"
msgstr "Permite compressão JPEG:"
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
msgid "quality (0=poor, 9=best)"
msgstr "qualidade (0=ruim, 9=o melhor)"
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
msgid "Security"
msgstr "Segurança"
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
msgid "Encryption"
msgstr "Criptografia"
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
msgid "None"
msgstr "Nenhum"
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
msgid "TLS with anonymous certificates"
msgstr "TLS com certificados anônimos"
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
msgid "TLS with X509 certificates"
msgstr "TLS com certificados X509"
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
msgid "Path to X509 CA certificate"
msgstr "Caminho para o certificado X509 CA"
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
msgid "Path to X509 CRL file"
msgstr "Caminho para o arquivo X509 CRL"
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
msgid "Authentication"
msgstr "Autenticação"
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
msgid "Standard VNC (insecure without encryption)"
msgstr "VNC padrão (inseguro sem criptografia)"
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
msgid "Username and password (insecure without encryption)"
msgstr "Usuário e senha (inseguro sem criptografia)"
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
msgid "Input"
msgstr "Entrada"
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
msgid "View only (ignore mouse and keyboard)"
msgstr "Ver apenas (ignora mouse e teclado)"
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
msgid "Accept clipboard from server"
msgstr "Aceitar área de transferência do servidor"
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Também enviar seleção primária"
+
+#: vncviewer/OptionsDialog.cxx:716
msgid "Send clipboard to server"
msgstr "Enviar área de transferência para o servidor"
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Enviar seleção primária e recortar buffer como área de transferência"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Enviar seleção primária como área de transferência"
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
msgid "Pass system keys directly to server (full screen)"
msgstr "Passar teclas de sistema diretamente para o servidor (tela cheia)"
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
msgid "Menu key"
msgstr "Tecla de menu"
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
msgid "Screen"
msgstr "Tela"
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
msgid "Resize remote session on connect"
msgstr "Redimensionar a sessão remota ao conectar"
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
msgid "Resize remote session to the local window"
msgstr "Redimensionar a sessão remota para a janela local"
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
msgid "Full-screen mode"
msgstr "Modo tela cheia"
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
msgid "Enable full-screen mode over all monitors"
msgstr "Ativar o modo de tela cheia em todos os monitores"
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
msgid "Misc."
msgstr "Diversos"
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
msgid "Shared (don't disconnect other viewers)"
msgstr "Compartilhado (não desconecta outros visualizadores)"
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
msgid "Show dot when no cursor"
msgstr "Mostrar ponto quando estiver sem mouse"
@@ -334,11 +328,11 @@ msgstr "Opções..."
#: vncviewer/ServerDialog.cxx:69
msgid "Load..."
-msgstr "Carregar…"
+msgstr "Carregar..."
#: vncviewer/ServerDialog.cxx:74
msgid "Save As..."
-msgstr "Salvar como…"
+msgstr "Salvar como..."
#: vncviewer/ServerDialog.cxx:86
msgid "About..."
@@ -368,112 +362,112 @@ msgstr "Autenticação cancelada"
msgid "Username:"
msgstr "Nome de usuário:"
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
#, c-format
msgid "Unable to create platform specific framebuffer: %s"
-msgstr "Não foi possível criar frambuffer específico da plataforma: %s"
+msgstr "Não foi possível criar framebuffer específico da plataforma: %s"
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
msgid "Using platform independent framebuffer"
-msgstr "Usando frambuffer independente de plataforma"
+msgstr "Usando framebuffer independente de plataforma"
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
#, c-format
msgid "No scan code for extended virtual key 0x%02x"
msgstr "Nenhum código de scan para a tecla virtual estendida 0x%02x"
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
#, c-format
msgid "No scan code for virtual key 0x%02x"
msgstr "Nenhum código de scan para a tecla virtual 0x%02x"
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
#, c-format
msgid "No symbol for extended virtual key 0x%02x"
msgstr "Nenhum símbolo para a tecla virtual estendida 0x%02x"
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
#, c-format
msgid "No symbol for virtual key 0x%02x"
msgstr "Nenhum símbolo para a tecla virtual 0x%02x"
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
#, c-format
msgid "No symbol for key code 0x%02x (in the current state)"
msgstr "Nenhum símbolo para a tecla virtual 0x%02x (no estado atual)"
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
#, c-format
msgid "No symbol for key code %d (in the current state)"
msgstr "Nenhum símbolo para a tecla virtual %d (no estado atual)"
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
msgctxt "ContextMenu|"
msgid "E&xit viewer"
msgstr "&Sair do visualizador"
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
msgctxt "ContextMenu|"
msgid "&Full screen"
msgstr "&Tela cheia"
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
msgctxt "ContextMenu|"
msgid "Minimi&ze"
msgstr "Minimi&zar"
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
msgctxt "ContextMenu|"
msgid "Resize &window to session"
msgstr "Redimensionar a &janela para a sessão"
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
msgctxt "ContextMenu|"
msgid "&Ctrl"
msgstr "&Ctrl"
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
msgctxt "ContextMenu|"
msgid "&Alt"
msgstr "&Alt"
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
#, c-format
msgctxt "ContextMenu|"
msgid "Send %s"
msgstr "Enviar %s"
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
msgctxt "ContextMenu|"
msgid "Send Ctrl-Alt-&Del"
msgstr "Enviar Ctrl-Alt-&Del"
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
msgctxt "ContextMenu|"
msgid "&Refresh screen"
msgstr "&Atualizar tela"
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
msgctxt "ContextMenu|"
msgid "&Options..."
msgstr "&Opções..."
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
msgctxt "ContextMenu|"
msgid "Connection &info..."
msgstr "&Informação de conexão..."
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
msgctxt "ContextMenu|"
msgid "About &TigerVNC viewer..."
msgstr "Sobre o visualizador &TigerVNC..."
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
msgctxt "ContextMenu|"
msgid "Dismiss &menu"
msgstr "Recusar &menu"
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
msgid "VNC connection info"
msgstr "Informação de conexão VNC..."
@@ -495,123 +489,123 @@ msgstr "BitBlt falhou"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
msgid "Display lacks pixmap format for default depth"
-msgstr "Tela carece de formato de pixamp para profundidade padrão"
+msgstr "Tela carece de formato de pixmap para profundidade padrão"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
msgid "Couldn't find suitable pixmap format"
-msgstr "Não foi possível localizar um formato de pixamo adequado"
+msgstr "Não foi possível localizar um formato de pixmap adequado"
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
msgid "Only true colour displays supported"
-msgstr "Apenas suporte a telas true color"
+msgstr "Apenas suporte a telas True Color"
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
#, c-format
msgid "Using default colormap and visual, TrueColor, depth %d."
msgstr "Usando mapa de cores padrão e visual, TrueColor, profundidade %d."
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
msgid "Could not create framebuffer image"
msgstr "Não foi possível criar imagem framebuffer"
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
#, c-format
msgid "The name of the parameter %s was too large to write to the registry"
msgstr "O nome do parâmetro %s era grande demais ser escrito no registro"
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
#, c-format
msgid "The parameter %s was too large to write to the registry"
msgstr "O parâmetro %s era grande demais para ser escrito no registro"
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
#, c-format
msgid "Failed to write parameter %s of type %s to the registry: %ld"
msgstr "Falha ao escrever parâmetro %s do tipo %s no registro: %ld"
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
#, c-format
msgid "The name of the parameter %s was too large to read from the registry"
msgstr "O nome do parâmetro %s era grande demais ser lido do registro"
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
#, c-format
msgid "Failed to read parameter %s from the registry: %ld"
-msgstr "flaha ao ler parâmetro %s do registro: %ld"
+msgstr "Falha ao ler parâmetro %s do registro: %ld"
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
#, c-format
msgid "The parameter %s was too large to read from the registry"
msgstr "O parâmetro %s era grande demais para ser lido do registro"
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
#, c-format
msgid "Failed to create registry key: %ld"
msgstr "Falha ao criar chave de registro: %ld"
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
#, c-format
msgid "Unknown parameter type for parameter %s"
msgstr "Tipo de parâmetro desconhecido para o parâmetro %s"
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
#, c-format
msgid "Failed to close registry key: %ld"
msgstr "Falha ao fechar chave de registro: %ld"
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
#, c-format
msgid "Failed to open registry key: %ld"
msgstr "Falha ao abrir chave de registro: %ld"
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
msgid "Failed to write configuration file, can't obtain home directory path."
-msgstr "Não foi possível escrever o arquivo de configuração, não foi possível obter o caminho do diretório home."
+msgstr "Não foi possível escrever o arquivo de configuração, não foi possível obter o caminho do diretório HOME."
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
#, c-format
msgid "Failed to write configuration file, can't open %s: %s"
msgstr "Não foi possível escrever o arquivo de configuração, não foi possível abrir %s: %s"
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
msgid "Failed to read configuration file, can't obtain home directory path."
-msgstr "Não foi possível ler o arquivo de configuração, não foi possível obter o caminho do diretório home."
+msgstr "Não foi possível ler o arquivo de configuração, não foi possível obter o caminho do diretório HOME."
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
#, c-format
msgid "Failed to read configuration file, can't open %s: %s"
msgstr "Não foi possível ler o arquivo de configuração, não foi possível abrir %s: %s"
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
#, c-format
msgid "Failed to read line %d in file %s: %s"
msgstr "Falha ao ler a linha %d no arquivo %s: %s"
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
msgid "Line too long"
msgstr "Linha longa demais"
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
#, c-format
msgid "Configuration file %s is in an invalid format"
msgstr "O arquivo de configuração %s está em um formato inválido"
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
msgid "Invalid format"
msgstr "Formato inválido"
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
msgid "Invalid format or too large value"
msgstr "Formato inválido ou valor grande demais"
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
#, c-format
msgid "Unknown parameter %s on line %d in file %s"
msgstr "Parâmetro %s desconhecido na linha %d no arquivo %s"
@@ -633,89 +627,95 @@ msgstr ""
msgid "About TigerVNC Viewer"
msgstr "Sobre o Visualizador TigerVNC"
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Erro interno no FLTK. Saindo."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
#, c-format
msgid "Error starting new TigerVNC Viewer: %s"
msgstr "Erro ao iniciar novo Visualizador TigerVNC: %s"
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
#, c-format
msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
msgstr "Sinal de terminação %d foi recebido. Visualizador TigerVNC vai fechar agora."
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
msgid "TigerVNC Viewer"
msgstr "Visualizador TigerVNC"
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
msgid "No"
msgstr "Não"
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
msgid "Yes"
msgstr "Sim"
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
msgid "Close"
msgstr "Fechar"
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
msgid "About"
msgstr "Sobre"
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
msgid "Hide"
msgstr "Ocultar"
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
msgid "Quit"
msgstr "Sair"
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
msgid "Services"
msgstr "Serviços"
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
msgid "Hide Others"
msgstr "Ocultar Outros"
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
msgid "Show All"
msgstr "Exibir Todos"
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
msgctxt "SysMenu|"
msgid "&File"
msgstr "&Arquivo"
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
msgctxt "SysMenu|File|"
msgid "&New Connection"
msgstr "&Nova Conexão"
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
msgid "Could not create VNC home directory: can't obtain home directory path."
-msgstr "Não foi possível criar o diretório home VNC: não foi possível obter o caminho do diretório home."
+msgstr "Não foi possível criar o diretório HOME do VNC: não foi possível obter o caminho do diretório HOME."
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
#, c-format
msgid "Could not create VNC home directory: %s."
-msgstr "Não foi possível criar um diretório inicial VNC: %s."
+msgstr "Não foi possível criar um diretório HOME do VNC: %s."
#. TRANSLATORS: "Parameters" are command line arguments, or settings
#. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
msgid "Parameters -listen and -via are incompatible"
msgstr "Os parâmetros -listen e -via são incompatíveis"
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
#, c-format
msgid "Listening on port %d"
msgstr "Ouvindo na porta %d"
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Erro interno no FLTK. Saindo."
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Codificação %d desconhecida"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Codificação desconhecida"
#~ msgid "Multiple characters given for key code %d (0x%04x): '%s'"
#~ msgstr "Diversos caracteres fornecidos como código de chave %d (0x%04x): '%s'"
diff --git a/po/ru.po b/po/ru.po
index a35981ec..67884afb 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -1,126 +1,117 @@
# Russian translation for tigervnc.
# Copyright © 2016 the TigerVNC Team (msgids)
# This file is distributed under the same license as the tigervnc package.
-# Constantin Kaplinsky <const@tightvnc.com>, 2011.
# PuppyRus linux team <www.puppyrus.org>.
+# Constantin Kaplinsky <const@tightvnc.com>, 2011.
# Pavel Maryanov <acid@jack.kiev.ua>, 2016.
+# Yuri Kozlov <yuray@komyakino.ru>, 2016.
msgid ""
msgstr ""
-"Project-Id-Version: tigervnc 1.5.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2016-04-07 16:08+0300\n"
-"Last-Translator: Pavel Maryanov <acid@jack.kiev.ua>\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-07 09:23+0300\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian <gnu@d07.ru>\n"
"Language: ru_UA\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Poedit 1.8.7.1\n"
+"X-Generator: Lokalize 1.5\n"
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
#, c-format
msgid "connected to host %s port %d"
msgstr "подключен к компьютеру %s, порт %d"
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
#, c-format
msgid "Desktop name: %.80s"
msgstr "Имя компьютера: %.80s"
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
#, c-format
msgid "Host: %.80s port: %d"
msgstr "Компьютер: %.80s порт: %d"
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
#, c-format
msgid "Size: %d x %d"
msgstr "Размер: %d x %d"
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
#, c-format
msgid "Pixel format: %s"
msgstr "Формат пикселей: %s"
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
#, c-format
msgid "(server default %s)"
msgstr "(сервер по умолчанию %s)"
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
#, c-format
msgid "Requested encoding: %s"
msgstr "Запрошено кодирование: %s"
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
#, c-format
msgid "Last used encoding: %s"
msgstr "Используется кодирование: %s"
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
#, c-format
msgid "Line speed estimate: %d kbit/s"
msgstr "Скорость соединения: %d кбит/с"
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
#, c-format
msgid "Protocol version: %d.%d"
msgstr "Версия протокола: %d.%d"
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
#, c-format
msgid "Security method: %s"
msgstr "Метод защиты: %s"
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
#, c-format
msgid "SetDesktopSize failed: %d"
msgstr "Ошибка SetDesktopSize: %d"
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
msgid "Invalid SetColourMapEntries from server!"
-msgstr "С сервера получен недопустмый SetColourMapEntries"
-
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Неизвестное кодирование %d"
+msgstr "С сервера получен недопустимый SetColourMapEntries"
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Неизвестное кодирование"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
msgid "Enabling continuous updates"
msgstr "Включение непрерывного обновления"
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
#, c-format
msgid "Throughput %d kbit/s - changing to quality %d"
msgstr "Пропускная способность %d кбит/с. Установлено качество %d"
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
#, c-format
msgid "Throughput %d kbit/s - full color is now %s"
msgstr "Пропускная способность %d кбит/с. Глубина цвета %s"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "disabled"
msgstr "отключено"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "enabled"
msgstr "включено"
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
#, c-format
msgid "Using %s encoding"
msgstr "Используется кодирование %s"
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
#, c-format
msgid "Using pixel format %s"
msgstr "Используется формат пикселей %s"
@@ -129,25 +120,25 @@ msgstr "Используется формат пикселей %s"
msgid "Invalid geometry specified!"
msgstr "Указан недопустимый размер экрана."
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
msgid "Adjusting window size to avoid accidental full screen request"
msgstr "Зафиксировать размер окна, чтобы исключить переключения на полный экран"
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
msgid "Failure grabbing keyboard"
msgstr "Не удалось перехватить клавиатуру"
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
msgid "Failure grabbing mouse"
msgstr "Не удалось перехватить мышь"
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
msgid "Invalid screen layout computed for resize request!"
-msgstr "Для запроса на изменение рамера рассчитан недопустимый макет экрана."
+msgstr "Для запроса на изменение размера рассчитан недопустимый макет экрана."
#: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
msgid "Not enough memory for framebuffer"
msgstr "Недостаточно памяти для framebuffer"
@@ -164,160 +155,164 @@ msgid "VNC Viewer: Connection Options"
msgstr "VNC Viewer: параметры соединения"
#: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
msgid "Cancel"
msgstr "Отмена"
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
msgid "OK"
msgstr "ОК"
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
msgid "Compression"
msgstr "Сжатие"
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
msgid "Auto select"
msgstr "Автоматический выбор"
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
msgid "Preferred encoding"
msgstr "Вид кодирования"
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
msgid "Color level"
msgstr "Глубина цвета"
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
msgid "Full (all available colors)"
msgstr "Полная (все цвета)"
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
msgid "Medium (256 colors)"
msgstr "Средняя (256 цветов)"
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
msgid "Low (64 colors)"
msgstr "Низкая (64 цвета)"
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
msgid "Very low (8 colors)"
msgstr "Минимум цвета (8 цветов)"
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
msgid "Custom compression level:"
msgstr "Задать уровень сжатия:"
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
msgid "level (1=fast, 6=best [4-6 are rarely useful])"
msgstr "уровень (1=мин, 6=макс. [4-6 используются редко])"
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
msgid "Allow JPEG compression:"
msgstr "Разрешить сжатие JPEG:"
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
msgid "quality (0=poor, 9=best)"
msgstr "качество (0=наихудшее, 9=наилучшее)"
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
msgid "Security"
msgstr "Безопасность"
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
msgid "Encryption"
msgstr "Шифрование"
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
msgid "None"
msgstr "Нет"
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
msgid "TLS with anonymous certificates"
msgstr "TLS с анонимными сертификатами"
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
msgid "TLS with X509 certificates"
msgstr "TLS с сертификатами X509"
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
msgid "Path to X509 CA certificate"
msgstr "Путь к сертификату X509 CA"
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
msgid "Path to X509 CRL file"
msgstr "Путь к файлу X509 CRL"
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
msgid "Authentication"
msgstr "Авторизация"
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
msgid "Standard VNC (insecure without encryption)"
msgstr "Стандартный VNC (без защиты и шифрования)"
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
msgid "Username and password (insecure without encryption)"
msgstr "Имя пользователя и пароль (без защиты и шифрования)"
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
msgid "Input"
msgstr "Ввод"
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
msgid "View only (ignore mouse and keyboard)"
msgstr "Только просмотр (не перехватывать мышь и клавиатуру)"
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
msgid "Accept clipboard from server"
msgstr "Принимать буфер обмена с сервера"
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Также принимать мышиный буфер"
+
+#: vncviewer/OptionsDialog.cxx:716
msgid "Send clipboard to server"
msgstr "Отправлять буфер обмена на сервер"
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Отправлять выделение в терминале в буфер обмена сервера"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Отправлять мышиный буфер туда же, куда и буфер обмена"
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
msgid "Pass system keys directly to server (full screen)"
msgstr "Отправлять сочетания клавиш (для полного экрана)"
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
msgid "Menu key"
msgstr "Вызов меню:"
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
msgid "Screen"
msgstr "Экран"
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
msgid "Resize remote session on connect"
msgstr "Изменить размер удалённого экрана"
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
msgid "Resize remote session to the local window"
msgstr "Изменить размер удалённого сеанса до локального окна"
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
msgid "Full-screen mode"
msgstr "Полноэкранный режим"
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
msgid "Enable full-screen mode over all monitors"
msgstr "Расширить режим полного экрана на все мониторы"
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
msgid "Misc."
msgstr "Разное"
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
msgid "Shared (don't disconnect other viewers)"
msgstr "Совместная работа (не отключать других клиентов)"
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
msgid "Show dot when no cursor"
msgstr "Показывать точку при отсутствии курсора"
@@ -369,112 +364,112 @@ msgstr "Авторизация отменена"
msgid "Username:"
msgstr "Имя пользователя:"
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
#, c-format
msgid "Unable to create platform specific framebuffer: %s"
msgstr "Не удаётся создать framebuffer: %s"
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
msgid "Using platform independent framebuffer"
msgstr "Используется универсальный framebuffer"
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
#, c-format
msgid "No scan code for extended virtual key 0x%02x"
msgstr "Нет скан-кода для дополнительной виртуальной клавиши 0x%02x"
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
#, c-format
msgid "No scan code for virtual key 0x%02x"
msgstr "Нет скан-кода для виртуальной клавиши 0x%02x"
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
#, c-format
msgid "No symbol for extended virtual key 0x%02x"
msgstr "Нет символа для расширенной виртуальной клавиши 0x%02x"
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
#, c-format
msgid "No symbol for virtual key 0x%02x"
msgstr "Нет символа для виртуальной клавиши 0x%02x"
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
#, c-format
msgid "No symbol for key code 0x%02x (in the current state)"
msgstr "Нет символа для кода клавиши 0x%02x (в текущем состоянии)"
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
#, c-format
msgid "No symbol for key code %d (in the current state)"
msgstr "Нет символа для кода клавиши %d (в текущем состоянии)"
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
msgctxt "ContextMenu|"
msgid "E&xit viewer"
msgstr "В&ыход"
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
msgctxt "ContextMenu|"
msgid "&Full screen"
msgstr "&Полный экран"
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
msgctxt "ContextMenu|"
msgid "Minimi&ze"
msgstr "&Свернуть"
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
msgctxt "ContextMenu|"
msgid "Resize &window to session"
msgstr "Изменить размер окна"
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
msgctxt "ContextMenu|"
msgid "&Ctrl"
msgstr "&CTRL"
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
msgctxt "ContextMenu|"
msgid "&Alt"
msgstr "&ALT"
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
#, c-format
msgctxt "ContextMenu|"
msgid "Send %s"
msgstr "Отправить %s"
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
msgctxt "ContextMenu|"
msgid "Send Ctrl-Alt-&Del"
msgstr "Отправить CTRL-ALT-&DEL"
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
msgctxt "ContextMenu|"
msgid "&Refresh screen"
msgstr "&Обновить экран"
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
msgctxt "ContextMenu|"
msgid "&Options..."
msgstr "&Параметры"
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
msgctxt "ContextMenu|"
msgid "Connection &info..."
msgstr "Сведения о соединении"
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
msgctxt "ContextMenu|"
msgid "About &TigerVNC viewer..."
msgstr "О &TigerVNC viewer"
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
msgctxt "ContextMenu|"
msgid "Dismiss &menu"
msgstr "Закрыть &меню"
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
msgid "VNC connection info"
msgstr "Сведения о соединении VNC"
@@ -496,123 +491,123 @@ msgstr "Ошибка BitBlt"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
msgid "Display lacks pixmap format for default depth"
msgstr "Неправильный формат pixmap для выбранной глубины цвета"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
msgid "Couldn't find suitable pixmap format"
msgstr "Не удалось найти допустимый формат pixmap"
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
msgid "Only true colour displays supported"
msgstr "Поддерживаются только полноцветные экраны"
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
#, c-format
msgid "Using default colormap and visual, TrueColor, depth %d."
msgstr "Используется стандартная цветовая карта и визуальное оформление, TrueColor, глубина %d."
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
msgid "Could not create framebuffer image"
msgstr "Не удалось создать изображение в framebuffer"
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
#, c-format
msgid "The name of the parameter %s was too large to write to the registry"
msgstr "Название параметра %s слишком длинное для записи в реестр"
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
#, c-format
msgid "The parameter %s was too large to write to the registry"
msgstr "Параметр %s слишком длинный для записи в реестр"
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
#, c-format
msgid "Failed to write parameter %s of type %s to the registry: %ld"
msgstr "Не удалось записать параметр %s типа %s в реестр: %ld"
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
#, c-format
msgid "The name of the parameter %s was too large to read from the registry"
msgstr "Название параметра %s слишком длинное для чтения из реестра"
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
#, c-format
msgid "Failed to read parameter %s from the registry: %ld"
msgstr "Не удалось прочитать параметр %s из реестра: %ld"
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
#, c-format
msgid "The parameter %s was too large to read from the registry"
msgstr "Параметр %s слишком длинный для чтения из реестра"
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
#, c-format
msgid "Failed to create registry key: %ld"
msgstr "Не удалось создать ключ реестра: %ld"
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
#, c-format
msgid "Unknown parameter type for parameter %s"
msgstr "Неизвестный тип для параметра %s"
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
#, c-format
msgid "Failed to close registry key: %ld"
msgstr "Не удалось закрыть ключ реестра: %ld"
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
#, c-format
msgid "Failed to open registry key: %ld"
msgstr "Не удалось открыть ключ реестра: %ld"
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
msgid "Failed to write configuration file, can't obtain home directory path."
msgstr "Не удалось создать домашний каталог VNC: не удаётся получить путь к домашнему каталогу."
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
#, c-format
msgid "Failed to write configuration file, can't open %s: %s"
msgstr "Не удалось записать файл конфигурации: не удаётся открыть %s: %s"
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
msgid "Failed to read configuration file, can't obtain home directory path."
msgstr "Не удалось прочитать файл конфигурации: не удаётся получить путь к домашнему каталогу."
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
#, c-format
msgid "Failed to read configuration file, can't open %s: %s"
msgstr "Не удалось прочитать файл конфигурации: не удаётся открыть %s: %s"
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
#, c-format
msgid "Failed to read line %d in file %s: %s"
msgstr "Не удалось прочитать строку %d из файла %s: %s"
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
msgid "Line too long"
msgstr "Строка слишком длинная"
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
#, c-format
msgid "Configuration file %s is in an invalid format"
msgstr "Недопустимый формат файла конфигурации %s"
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
msgid "Invalid format"
msgstr "Недопустимый формат"
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
msgid "Invalid format or too large value"
msgstr "Недопустимый формат или слишком большое значение"
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
#, c-format
msgid "Unknown parameter %s on line %d in file %s"
msgstr "Неизвестный параметр %s в строке %d файла %s"
@@ -634,86 +629,92 @@ msgstr ""
msgid "About TigerVNC Viewer"
msgstr "О TigerVNC viewer"
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Внутренняя ошибка FLTK. Выход."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
#, c-format
msgid "Error starting new TigerVNC Viewer: %s"
msgstr "Не удалось запустить новый TigerVNC Viewer: %s"
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
#, c-format
msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
msgstr "Получен сигнал завершения работы %d. TigerVNC Viewer будет закрыт."
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
msgid "TigerVNC Viewer"
msgstr "TigerVNC Viewer"
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
msgid "No"
msgstr "Нет"
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
msgid "Yes"
msgstr "Да"
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
msgid "Close"
msgstr "Закрыть"
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
msgid "About"
msgstr "О программе"
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
msgid "Hide"
msgstr "Скрыть"
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
msgid "Quit"
msgstr "Выход"
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
msgid "Services"
msgstr "Службы"
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
msgid "Hide Others"
msgstr "Скрыть прочее"
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
msgid "Show All"
msgstr "Показать все"
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
msgctxt "SysMenu|"
msgid "&File"
msgstr "&Файл"
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
msgctxt "SysMenu|File|"
msgid "&New Connection"
msgstr "&Новое соединение"
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
msgid "Could not create VNC home directory: can't obtain home directory path."
msgstr "Не удалось создать домашний каталог VNC: не удаётся получить путь к домашнему каталогу."
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
#, c-format
msgid "Could not create VNC home directory: %s."
msgstr "Не удалось создать домашний каталог VNC: %s."
#. TRANSLATORS: "Parameters" are command line arguments, or settings
#. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
msgid "Parameters -listen and -via are incompatible"
msgstr "Параметры -listen и -via несовместимы"
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
#, c-format
msgid "Listening on port %d"
msgstr "Прослушивается порт %d"
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Внутренняя ошибка FLTK. Выход."
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Неизвестное кодирование %d"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Неизвестное кодирование"
diff --git a/po/sr.po b/po/sr.po
index 6768e6b6..b452195b 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -1,13 +1,13 @@
# Serbian translation for tigervnc.
-# Copyright © 2015 the TigerVNC Team (msgids)
+# Copyright © 2016 the TigerVNC Team (msgids)
# This file is distributed under the same license as the tigervnc package.
# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2016.
msgid ""
msgstr ""
-"Project-Id-Version: tigervnc-1.5.90\n"
+"Project-Id-Version: tigervnc-1.6.90\n"
"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2016-03-06 15:42+0200\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-08-07 21:27+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
"Language: sr\n"
@@ -16,108 +16,98 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
#, c-format
msgid "connected to host %s port %d"
msgstr "повезан сам са домаћином „%s“ прикључник %d"
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
#, c-format
msgid "Desktop name: %.80s"
msgstr "Назив радне површи: %.80s"
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
#, c-format
msgid "Host: %.80s port: %d"
msgstr "Домаћин: %.80s прикључник: %d"
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
#, c-format
msgid "Size: %d x %d"
msgstr "Величина: %d x %d"
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
#, c-format
msgid "Pixel format: %s"
msgstr "Формат пиксела: %s"
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
#, c-format
msgid "(server default %s)"
msgstr "(основно на серверу %s)"
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
#, c-format
msgid "Requested encoding: %s"
msgstr "Затражено кодирање: %s"
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
#, c-format
msgid "Last used encoding: %s"
msgstr "Последње коришћено кодирање: %s"
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
#, c-format
msgid "Line speed estimate: %d kbit/s"
msgstr "Процењена брзина линије: %d kbit/s"
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
#, c-format
msgid "Protocol version: %d.%d"
msgstr "Издања протокола: %d.%d"
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
#, c-format
msgid "Security method: %s"
msgstr "Метод безбедности: %s"
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
#, c-format
msgid "SetDesktopSize failed: %d"
msgstr "Неуспело подешавање величине радне површи: %d"
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
msgid "Invalid SetColourMapEntries from server!"
msgstr "Неисправни уноси подешавања мапе боје са сервера!"
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Непознато кодирање „%d“"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Непознато кодирање"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
msgid "Enabling continuous updates"
msgstr "Укључујем непрекидно освежавање"
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
#, c-format
msgid "Throughput %d kbit/s - changing to quality %d"
msgstr "Пропусност је %d kbit/s — мењам на квалитет %d"
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
#, c-format
msgid "Throughput %d kbit/s - full color is now %s"
msgstr "Пропусност је %d kbit/s — пуна боја је сада %s"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "disabled"
msgstr "искључена"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "enabled"
msgstr "укључена"
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
#, c-format
msgid "Using %s encoding"
msgstr "Користим „%s“ кодирање"
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
#, c-format
msgid "Using pixel format %s"
msgstr "Користим формат пиксела %s"
@@ -126,25 +116,25 @@ msgstr "Користим формат пиксела %s"
msgid "Invalid geometry specified!"
msgstr "Наведена је неисправна геометрија!"
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
msgid "Adjusting window size to avoid accidental full screen request"
msgstr "Прилагођавам величину прозора да би се избегли случајни захтеви за целим екраном"
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
msgid "Failure grabbing keyboard"
msgstr "Неуспех хватања тастатуре"
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
msgid "Failure grabbing mouse"
msgstr "Неуспех хватања миша"
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
msgid "Invalid screen layout computed for resize request!"
msgstr "Прорачунат је неодговарајући распоред екрана за захтев промене величине!"
#: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
msgid "Not enough memory for framebuffer"
msgstr "Нема довољно меморије за међумеморију кадра"
@@ -161,160 +151,164 @@ msgid "VNC Viewer: Connection Options"
msgstr "ВНЦ прегледач: Могућности повезивања"
#: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
msgid "Cancel"
msgstr "Откажи"
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
msgid "OK"
msgstr "У реду"
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
msgid "Compression"
msgstr "Сажимање"
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
msgid "Auto select"
msgstr "Сам изабери"
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
msgid "Preferred encoding"
msgstr "Жељено кодирање"
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
msgid "Color level"
msgstr "Ниво боје"
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
msgid "Full (all available colors)"
msgstr "Пун (све доступне боје)"
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
msgid "Medium (256 colors)"
msgstr "Средњи (256 боја)"
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
msgid "Low (64 colors)"
msgstr "Низак (64 боје)"
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
msgid "Very low (8 colors)"
msgstr "Врло низак (8 боје)"
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
msgid "Custom compression level:"
msgstr "Произвољни ниво сажимања:"
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
msgid "level (1=fast, 6=best [4-6 are rarely useful])"
msgstr "ниво (1=брзо, 6=најбоље [4-6 се ретко користи])"
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
msgid "Allow JPEG compression:"
msgstr "Дозволи ЈПЕГ сажимање:"
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
msgid "quality (0=poor, 9=best)"
msgstr "квалитет (0=лош, 9=најбољи)"
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
msgid "Security"
msgstr "Безбедност"
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
msgid "Encryption"
msgstr "Шифровање"
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
msgid "None"
msgstr "Ништа"
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
msgid "TLS with anonymous certificates"
msgstr "ТЛС са анонимним уверењима"
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
msgid "TLS with X509 certificates"
msgstr "ТЛС са X509 уверењима"
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
msgid "Path to X509 CA certificate"
msgstr "Путања до X509 уверења"
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
msgid "Path to X509 CRL file"
msgstr "Путања до X509 ЦРЛ датотеке"
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
msgid "Authentication"
msgstr "Потврђивање идентитета"
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
msgid "Standard VNC (insecure without encryption)"
msgstr "Стандардни ВНЦ (несигурно без шифровања)"
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
msgid "Username and password (insecure without encryption)"
msgstr "Корисник и лозинка (несигурно без шифровања)"
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
msgid "Input"
msgstr "Улаз"
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
msgid "View only (ignore mouse and keyboard)"
msgstr "Само преглед (занемари миша и тастатуру)"
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
msgid "Accept clipboard from server"
msgstr "Прихвати оставу са сервера"
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Такође постави први избор"
+
+#: vncviewer/OptionsDialog.cxx:716
msgid "Send clipboard to server"
msgstr "Пошаљи оставу на сервер"
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Пошаљи први избор и исеци међумеморију као оставу"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Пошаљи први избор као оставу"
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
msgid "Pass system keys directly to server (full screen)"
msgstr "Проследи системске кључеве директно на сервер (пун екран)"
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
msgid "Menu key"
msgstr "Тастер изборника"
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
msgid "Screen"
msgstr "Екран"
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
msgid "Resize remote session on connect"
msgstr "Промени величину удаљене сесије приликом повезивања"
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
msgid "Resize remote session to the local window"
msgstr "Промени величину удаљене сесије на месни прозор"
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
msgid "Full-screen mode"
msgstr "Режим пуног екрана"
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
msgid "Enable full-screen mode over all monitors"
msgstr "Укључи режим преко целог екрана на свим мониторима"
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
msgid "Misc."
msgstr "Разно"
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
msgid "Shared (don't disconnect other viewers)"
msgstr "Дељено (не прекидај везу другим прегледачима)"
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
msgid "Show dot when no cursor"
msgstr "Прикажи тачку када нема курзора"
@@ -366,112 +360,112 @@ msgstr "Потврђивање идентитета је отказано"
msgid "Username:"
msgstr "Корисник:"
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
#, c-format
msgid "Unable to create platform specific framebuffer: %s"
msgstr "Не могу да направим међумеморију кадра особену за платформу: %s"
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
msgid "Using platform independent framebuffer"
msgstr "Користим међумеморију кадра независну од платформе"
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
#, c-format
msgid "No scan code for extended virtual key 0x%02x"
msgstr "Нема шифре прегледа за проширени виртуелни кључ 0x%02x"
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
#, c-format
msgid "No scan code for virtual key 0x%02x"
msgstr "Нема шифре прегледа за виртуелни кључ 0x%02x"
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
#, c-format
msgid "No symbol for extended virtual key 0x%02x"
msgstr "Нема симбола за проширени виртуелни кључ 0x%02x"
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
#, c-format
msgid "No symbol for virtual key 0x%02x"
msgstr "Нема симбола за виртуелни кључ 0x%02x"
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
#, c-format
msgid "No symbol for key code 0x%02x (in the current state)"
msgstr "Нема симбола за шифру кључа 0x%02x (у текућем стању)"
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
#, c-format
msgid "No symbol for key code %d (in the current state)"
msgstr "Нема симбола за шифру кључа %d (у текућем стању)"
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
msgctxt "ContextMenu|"
msgid "E&xit viewer"
msgstr "&Напусти прегледача"
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
msgctxt "ContextMenu|"
msgid "&Full screen"
msgstr "&Пун екран"
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
msgctxt "ContextMenu|"
msgid "Minimi&ze"
msgstr "&Умањи"
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
msgctxt "ContextMenu|"
msgid "Resize &window to session"
msgstr "&Величина прозора на сесију"
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
msgctxt "ContextMenu|"
msgid "&Ctrl"
msgstr "&Ктрл"
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
msgctxt "ContextMenu|"
msgid "&Alt"
msgstr "&Алт"
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
#, c-format
msgctxt "ContextMenu|"
msgid "Send %s"
msgstr "Пошаљи „%s“"
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
msgctxt "ContextMenu|"
msgid "Send Ctrl-Alt-&Del"
msgstr "Пошаљи Ктрл-Алт-&Дел"
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
msgctxt "ContextMenu|"
msgid "&Refresh screen"
msgstr "&Освежи екран"
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
msgctxt "ContextMenu|"
msgid "&Options..."
msgstr "&Могућности..."
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
msgctxt "ContextMenu|"
msgid "Connection &info..."
msgstr "Подаци о &вези..."
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
msgctxt "ContextMenu|"
msgid "About &TigerVNC viewer..."
msgstr "О &програму..."
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
msgctxt "ContextMenu|"
msgid "Dismiss &menu"
msgstr "Одбаци &изборник"
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
msgid "VNC connection info"
msgstr "Подаци о ВНЦ вези"
@@ -493,123 +487,123 @@ msgstr "Није успело Бит блт"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
msgid "Display lacks pixmap format for default depth"
msgstr "Приказу недостаје формат пиксмапе за основну дубину"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
msgid "Couldn't find suitable pixmap format"
msgstr "Не могу да нађем погодан формат пиксмапе"
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
msgid "Only true colour displays supported"
msgstr "Само прикази праве боје су подржани"
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
#, c-format
msgid "Using default colormap and visual, TrueColor, depth %d."
msgstr "Користим основну мапу боје и видности, Права боја, дубине %d."
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
msgid "Could not create framebuffer image"
msgstr "Не могу да направим слику међумеморије кадра"
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
#, c-format
msgid "The name of the parameter %s was too large to write to the registry"
msgstr "Назив параметра „%s“ беше превелик за уписивање у регистар"
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
#, c-format
msgid "The parameter %s was too large to write to the registry"
msgstr "Параметар „%s“ беше превелик за уписивање у регистар"
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
#, c-format
msgid "Failed to write parameter %s of type %s to the registry: %ld"
msgstr "Нисам успео да упишем параметар „%s“ врсте „%s“ у регистар: %ld"
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
#, c-format
msgid "The name of the parameter %s was too large to read from the registry"
msgstr "Назив параметра „%s“ беше превелик за читање из регистра"
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
#, c-format
msgid "Failed to read parameter %s from the registry: %ld"
msgstr "Нисам успео да прочитам параметар „%s“ из регистра: %ld"
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
#, c-format
msgid "The parameter %s was too large to read from the registry"
msgstr "Параметар „%s“ беше превелик за читање из регистра"
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
#, c-format
msgid "Failed to create registry key: %ld"
msgstr "Нисам успео да направим кључ регистра: %ld"
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
#, c-format
msgid "Unknown parameter type for parameter %s"
msgstr "Непозната врста параметра за параметар „%s“"
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
#, c-format
msgid "Failed to close registry key: %ld"
msgstr "Нисам успео да затворим кључ регистра: %ld"
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
#, c-format
msgid "Failed to open registry key: %ld"
msgstr "Нисам успео да отворим кључ регистра: %ld"
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
msgid "Failed to write configuration file, can't obtain home directory path."
msgstr "Нисам успео да упишем датотеку подешавања, не могу да добијем путању личне фасцикле."
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
#, c-format
msgid "Failed to write configuration file, can't open %s: %s"
msgstr "Нисам успео да упишем датотеку подешавања, не могу да отворим „%s“: %s"
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
msgid "Failed to read configuration file, can't obtain home directory path."
msgstr "Нисам успео да прочитам датотеку подешавања, не могу да добијем путању личне фасцикле."
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
#, c-format
msgid "Failed to read configuration file, can't open %s: %s"
msgstr "Нисам успео да прочитам датотеку подешавања, не могу да отворим „%s“: %s"
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
#, c-format
msgid "Failed to read line %d in file %s: %s"
msgstr "Нисам успео да прочитам %d. ред у датотеци „%s“: %s"
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
msgid "Line too long"
msgstr "Ред је предуг"
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
#, c-format
msgid "Configuration file %s is in an invalid format"
msgstr "Датотека подешавања „%s“ је у неисправном запису"
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
msgid "Invalid format"
msgstr "Неисправан запис"
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
msgid "Invalid format or too large value"
msgstr "Неисправан запис или предуга вредност"
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
#, c-format
msgid "Unknown parameter %s on line %d in file %s"
msgstr "Непознат параметар „%s“ у %d. реду у датотеци „%s“"
@@ -631,86 +625,92 @@ msgstr ""
msgid "About TigerVNC Viewer"
msgstr "О програму"
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Унутрашња ФЛТК грешка. Излазим."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
#, c-format
msgid "Error starting new TigerVNC Viewer: %s"
msgstr "Грешка покретања новог примерка програма: %s"
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
#, c-format
msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
msgstr "Примљен је сигнал за окончавање %d. Програм ће сада изаћи."
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
msgid "TigerVNC Viewer"
msgstr "Прегледач ТигарВНЦ"
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
msgid "No"
msgstr "Не"
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
msgid "Yes"
msgstr "Да"
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
msgid "Close"
msgstr "Затвори"
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
msgid "About"
msgstr "О програму"
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
msgid "Hide"
msgstr "Сакриј"
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
msgid "Quit"
msgstr "Изађи"
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
msgid "Services"
msgstr "Услуге"
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
msgid "Hide Others"
msgstr "Сакриј остале"
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
msgid "Show All"
msgstr "Прикажи све"
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
msgctxt "SysMenu|"
msgid "&File"
msgstr "&Датотека"
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
msgctxt "SysMenu|File|"
msgid "&New Connection"
msgstr "&Нова веза"
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
msgid "Could not create VNC home directory: can't obtain home directory path."
msgstr "Не могу да направим личну фасциклу ВНЦ-а: не могу да добијем путању личне фасцикле."
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
#, c-format
msgid "Could not create VNC home directory: %s."
msgstr "Не могу да направим личну фасциклу ВНЦ-а: %s."
#. TRANSLATORS: "Parameters" are command line arguments, or settings
#. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
msgid "Parameters -listen and -via are incompatible"
msgstr "Параметри „-listen“ и „-via“ нису сагласни"
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
#, c-format
msgid "Listening on port %d"
msgstr "Ослушкујем на прикључнику %d"
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Унутрашња ФЛТК грешка. Излазим."
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Непознато кодирање „%d“"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Непознато кодирање"
diff --git a/po/sv.po b/po/sv.po
index ee48aa2d..d4500a5a 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,16 +1,17 @@
# Swedish messages for TigerVNC.
-# Copyright © 2015 the TigerVNC Team (msgids)
+# Copyright © 2015, 2016 the TigerVNC Team (msgids)
# This file is distributed under the same license as the TigerVNC package.
+#
# Peter Åstrand <astrand@cendio.se>, 2011.
-# Göran Uddeborg <goeran@uddeborg.se>, 2015.
+# Göran Uddeborg <goeran@uddeborg.se>, 2015, 2016.
#
-# $Revision: 1.10 $
+# $Revision: 1.13 $
msgid ""
msgstr ""
-"Project-Id-Version: tigervnc 1.5.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2015-12-28 16:52+0100\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-16 20:31+0200\n"
"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
@@ -19,108 +20,98 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
#, c-format
msgid "connected to host %s port %d"
msgstr "ansluten till värd %s port %d"
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
#, c-format
msgid "Desktop name: %.80s"
msgstr "Skrivbordsnamn: %.80s"
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
#, c-format
msgid "Host: %.80s port: %d"
msgstr "Värd: %.80s port: %d"
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
#, c-format
msgid "Size: %d x %d"
msgstr "Storlek: %d x %d"
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
#, c-format
msgid "Pixel format: %s"
msgstr "Pixelformat: %s"
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
#, c-format
msgid "(server default %s)"
msgstr "(serverstandard %s)"
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
#, c-format
msgid "Requested encoding: %s"
msgstr "Begärd kodning: %s"
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
#, c-format
msgid "Last used encoding: %s"
msgstr "Senast använd kodning: %s"
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
#, c-format
msgid "Line speed estimate: %d kbit/s"
msgstr "Uppskattad hastighet på förbindelsen: %d kbit/s"
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
#, c-format
msgid "Protocol version: %d.%d"
msgstr "Protokollversion: %d.%d"
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
#, c-format
msgid "Security method: %s"
msgstr "Säkerhetsmetod: %s"
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
#, c-format
msgid "SetDesktopSize failed: %d"
msgstr "SetDesktopSize misslyckades: %d"
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
msgid "Invalid SetColourMapEntries from server!"
msgstr "Ogiltig SetColourMapEntries från server!"
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Okänd kodning %d"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Okänd kodning"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
msgid "Enabling continuous updates"
msgstr "Aktiverar kontinuerliga uppdateringar"
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
#, c-format
msgid "Throughput %d kbit/s - changing to quality %d"
msgstr "Bandbredd %d kbit/s - byter till kvalitet %d"
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
#, c-format
msgid "Throughput %d kbit/s - full color is now %s"
msgstr "Bandbredd %d kbit/s - fullfärg är nu %s"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "disabled"
msgstr "avaktiverad"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "enabled"
msgstr "aktiverad"
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
#, c-format
msgid "Using %s encoding"
msgstr "Använder kodning %s"
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
#, c-format
msgid "Using pixel format %s"
msgstr "Använder pixelformat %s"
@@ -129,25 +120,25 @@ msgstr "Använder pixelformat %s"
msgid "Invalid geometry specified!"
msgstr "Ogiltig geometri angiven!"
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
msgid "Adjusting window size to avoid accidental full screen request"
msgstr "Justerar fönsterstorleken för att undvika fullskärm av misstag"
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
msgid "Failure grabbing keyboard"
msgstr "Misslyckades med att fånga tangentbordet"
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
msgid "Failure grabbing mouse"
msgstr "Misslyckades med att fånga musen"
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
msgid "Invalid screen layout computed for resize request!"
msgstr "Ogiltig skärmlayout beräknad för storleksförändrings-begäran!"
#: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
msgid "Not enough memory for framebuffer"
msgstr "Inte tillräckligt med minne för framebuffer"
@@ -164,160 +155,164 @@ msgid "VNC Viewer: Connection Options"
msgstr "VNC-visare: Anslutningsalternativ"
#: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
msgid "Cancel"
msgstr "Avbryt"
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
msgid "OK"
msgstr "Ok"
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
msgid "Compression"
msgstr "Kompression"
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
msgid "Auto select"
msgstr "Automatiskt val"
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
msgid "Preferred encoding"
msgstr "Föredragen kodning"
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
msgid "Color level"
msgstr "Färgnivå"
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
msgid "Full (all available colors)"
msgstr "Full (alla tillgängliga färger)"
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
msgid "Medium (256 colors)"
msgstr "Medium (256 färger)"
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
msgid "Low (64 colors)"
msgstr "Låg (64 färger)"
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
msgid "Very low (8 colors)"
msgstr "Mycket låg (8 färger)"
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
msgid "Custom compression level:"
msgstr "Anpassad komprimeringsnivå:"
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
msgid "level (1=fast, 6=best [4-6 are rarely useful])"
msgstr "nivå (1=snabb, 6=bäst [4-6 sällan användbara])"
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
msgid "Allow JPEG compression:"
msgstr "Tillåt JPEG-komprimering:"
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
msgid "quality (0=poor, 9=best)"
msgstr "kvalitet (0=dålig, 9=bäst)"
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
msgid "Security"
msgstr "Säkerhet"
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
msgid "Encryption"
msgstr "Kryptering"
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
msgid "None"
msgstr "Ingen"
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
msgid "TLS with anonymous certificates"
msgstr "TLS med anonyma certifikat"
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
msgid "TLS with X509 certificates"
msgstr "TLS med X509-certifikat"
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
msgid "Path to X509 CA certificate"
msgstr "Sökväg till CA-certifikat för X509"
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
msgid "Path to X509 CRL file"
msgstr "Sökväg till CRL-fil för X509"
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
msgid "Authentication"
msgstr "Autentisering"
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
msgid "Standard VNC (insecure without encryption)"
msgstr "Standard-VNC (osäkert utan kryptering)"
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
msgid "Username and password (insecure without encryption)"
msgstr "Användarnamn och lösenord (osäkert utan kryptering)"
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
msgid "Input"
msgstr "Inmatning"
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
msgid "View only (ignore mouse and keyboard)"
msgstr "Endast visning (ignorera mus och tangentbord)"
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
msgid "Accept clipboard from server"
msgstr "Acceptera urklipp från server"
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Sätt även primär markering"
+
+#: vncviewer/OptionsDialog.cxx:716
msgid "Send clipboard to server"
msgstr "Skicka urklipp till server"
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Skicka primär markering och klippbuffert som urklipp"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Skicka primär markering som urklipp"
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
msgid "Pass system keys directly to server (full screen)"
msgstr "Skicka systemtangenter direkt till servern (fullskärm)"
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
msgid "Menu key"
msgstr "Menytangent"
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
msgid "Screen"
msgstr "Skärm"
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
msgid "Resize remote session on connect"
msgstr "Anpassa sessionsstorlek vid anslutning"
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
msgid "Resize remote session to the local window"
msgstr "Anpassa sessionsstorlek till lokalt fönster"
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
msgid "Full-screen mode"
msgstr "Fullskärmsläge"
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
msgid "Enable full-screen mode over all monitors"
msgstr "Aktivera fullskärmsläge på alla skärmar"
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
msgid "Misc."
msgstr "Diverse"
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
msgid "Shared (don't disconnect other viewers)"
msgstr "Delad (koppla ej från andra visare)"
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
msgid "Show dot when no cursor"
msgstr "Visa punkt när muspekare saknas"
@@ -369,112 +364,112 @@ msgstr "Autentisering avbruten"
msgid "Username:"
msgstr "Användarnamn:"
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
#, c-format
msgid "Unable to create platform specific framebuffer: %s"
msgstr "Kan inte skapa plattformsspecifik framebuffer: %s"
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
msgid "Using platform independent framebuffer"
msgstr "Använder plattformsoberoende framebuffer"
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
#, c-format
msgid "No scan code for extended virtual key 0x%02x"
msgstr "Ingen scancode för utökad virtuell tangent 0x%02x"
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
#, c-format
msgid "No scan code for virtual key 0x%02x"
msgstr "Ingen scancode för virtuell tangent 0x%02x"
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
#, c-format
msgid "No symbol for extended virtual key 0x%02x"
msgstr "Ingen symbol för utökad virtuell tangent 0x%02x"
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
#, c-format
msgid "No symbol for virtual key 0x%02x"
msgstr "Ingen symbol för virtuell tangent 0x%02x"
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
#, c-format
msgid "No symbol for key code 0x%02x (in the current state)"
msgstr "Ingen symbol för tangentkod 0x%02x (i nuvarande tillstånd)"
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
#, c-format
msgid "No symbol for key code %d (in the current state)"
msgstr "Ingen symbol för tangentkod %d (i nuvarande tillstånd)"
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
msgctxt "ContextMenu|"
msgid "E&xit viewer"
msgstr "&Avsluta visaren"
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
msgctxt "ContextMenu|"
msgid "&Full screen"
msgstr "&Fullskärm"
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
msgctxt "ContextMenu|"
msgid "Minimi&ze"
msgstr "M&inimera"
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
msgctxt "ContextMenu|"
msgid "Resize &window to session"
msgstr "Anpassa &fönster till session"
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
msgctxt "ContextMenu|"
msgid "&Ctrl"
msgstr "&Ctrl"
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
msgctxt "ContextMenu|"
msgid "&Alt"
msgstr "&Alt"
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
#, c-format
msgctxt "ContextMenu|"
msgid "Send %s"
msgstr "Skicka %s"
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
msgctxt "ContextMenu|"
msgid "Send Ctrl-Alt-&Del"
msgstr "Skicka Ctrl-Alt-&Del"
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
msgctxt "ContextMenu|"
msgid "&Refresh screen"
msgstr "&Uppdatera skärm"
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
msgctxt "ContextMenu|"
msgid "&Options..."
msgstr "&Inställningar..."
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
msgctxt "ContextMenu|"
msgid "Connection &info..."
msgstr "&Information om anslutningen..."
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
msgctxt "ContextMenu|"
msgid "About &TigerVNC viewer..."
msgstr "Om &TigerVNC-visaren..."
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
msgctxt "ContextMenu|"
msgid "Dismiss &menu"
msgstr "Stäng &meny"
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
msgid "VNC connection info"
msgstr "VNC anslutningsinformation"
@@ -496,123 +491,123 @@ msgstr "BitBlt misslyckades"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
msgid "Display lacks pixmap format for default depth"
msgstr "Skärmen saknar pixmap-format för standarddjup"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
msgid "Couldn't find suitable pixmap format"
msgstr "Kunde inte hitta lämpligt pixmap-format"
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
msgid "Only true colour displays supported"
msgstr "Endast skärmar med true colour stöds"
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
#, c-format
msgid "Using default colormap and visual, TrueColor, depth %d."
msgstr "Använder standardfärgkarta och visual, TrueColor, depth %d."
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
msgid "Could not create framebuffer image"
msgstr "Kunde inte skapa framebuffer-bild"
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
#, c-format
msgid "The name of the parameter %s was too large to write to the registry"
msgstr "Namnet på parameter %s var för stor för skrivning till registret"
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
#, c-format
msgid "The parameter %s was too large to write to the registry"
msgstr "Parameter %s var för stor för skrivning till registret"
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
#, c-format
msgid "Failed to write parameter %s of type %s to the registry: %ld"
msgstr "Misslyckades med att skriva parameter %s av typ %s till registret: %ld"
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
#, c-format
msgid "The name of the parameter %s was too large to read from the registry"
msgstr "Namnet på parameter %s var för stor för att läsas från registret"
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
#, c-format
msgid "Failed to read parameter %s from the registry: %ld"
msgstr "Misslyckades med att läsa parameter %s från registret: %ld"
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
#, c-format
msgid "The parameter %s was too large to read from the registry"
msgstr "Parameter %s var för stor för läsning från registret"
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
#, c-format
msgid "Failed to create registry key: %ld"
msgstr "Misslyckades med att skapa registernyckel: %ld"
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
#, c-format
msgid "Unknown parameter type for parameter %s"
msgstr "Okänd parametertyp för parameter %s"
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
#, c-format
msgid "Failed to close registry key: %ld"
msgstr "Misslyckades med att stänga registernyckel: %ld"
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
#, c-format
msgid "Failed to open registry key: %ld"
msgstr "Misslyckades med att öppna registernyckel: %ld"
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
msgid "Failed to write configuration file, can't obtain home directory path."
msgstr "Misslyckades med att skriva konfigurations-fil, kan inte avgöra hemkatalogens sökväg."
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
#, c-format
msgid "Failed to write configuration file, can't open %s: %s"
msgstr "Misslyckades med att skriva konfigurations-fil: kan inte öppna %s: %s"
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
msgid "Failed to read configuration file, can't obtain home directory path."
msgstr "Misslyckades med att läsa konfigurations-fil, kan inte avgöra hemkatalogens sökväg."
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
#, c-format
msgid "Failed to read configuration file, can't open %s: %s"
msgstr "Misslyckades med att läsa konfigurations-fil, kan inte öppna %s: %s"
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
#, c-format
msgid "Failed to read line %d in file %s: %s"
msgstr "Misslyckades med att läsa rad %d i fil %s: %s"
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
msgid "Line too long"
msgstr "Raden är för lång"
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
#, c-format
msgid "Configuration file %s is in an invalid format"
msgstr "Konfigurationsfilen %s har ogiltigt format"
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
msgid "Invalid format"
msgstr "Ogiltigt format"
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
msgid "Invalid format or too large value"
msgstr "Ogiltigt format eller för stort värde"
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
#, c-format
msgid "Unknown parameter %s on line %d in file %s"
msgstr "Okänd parameter %s på rad %d i fil %s"
@@ -634,86 +629,86 @@ msgstr ""
msgid "About TigerVNC Viewer"
msgstr "Om VNC-visaren"
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Internt FLTK-fel. Avslutar."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
#, c-format
msgid "Error starting new TigerVNC Viewer: %s"
msgstr "Fel vid start av ny TigerVNC-visare: %s"
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
#, c-format
msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
msgstr "Termineringssignal %d har mottagits. TigerVNC-visaren kommer nu att avslutas."
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
msgid "TigerVNC Viewer"
msgstr "VNC-visare"
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
msgid "No"
msgstr "Ingen"
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
msgid "Yes"
msgstr "Ja"
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
msgid "Close"
msgstr "Stäng"
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
msgid "About"
msgstr "Om"
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
msgid "Hide"
msgstr "Göm"
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
msgid "Quit"
msgstr "Avsluta"
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
msgid "Services"
msgstr "Tjänster"
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
msgid "Hide Others"
msgstr "Göm andra"
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
msgid "Show All"
msgstr "Visa alla"
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
msgctxt "SysMenu|"
msgid "&File"
msgstr "&Arkiv"
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
msgctxt "SysMenu|File|"
msgid "&New Connection"
msgstr "&Ny anslutning"
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
msgid "Could not create VNC home directory: can't obtain home directory path."
msgstr "Kunde inte skapa VNC-hemkatalog: kan inte avgöra hemkatalogens sökväg"
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
#, c-format
msgid "Could not create VNC home directory: %s."
msgstr "Kunde inte skapa VNC-hemkatalog: %s."
#. TRANSLATORS: "Parameters" are command line arguments, or settings
#. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
msgid "Parameters -listen and -via are incompatible"
msgstr "Parametrar -listen och -via är inkompatibla"
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
#, c-format
msgid "Listening on port %d"
msgstr "Lyssnar på port %d"
-
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Internt FLTK-fel. Avslutar."
diff --git a/po/tigervnc.pot b/po/tigervnc.pot
index 2bb748d1..0d9e049c 100644
--- a/po/tigervnc.pot
+++ b/po/tigervnc.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,108 +17,98 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
#, c-format
msgid "connected to host %s port %d"
msgstr ""
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
#, c-format
msgid "Desktop name: %.80s"
msgstr ""
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
#, c-format
msgid "Host: %.80s port: %d"
msgstr ""
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
#, c-format
msgid "Size: %d x %d"
msgstr ""
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
#, c-format
msgid "Pixel format: %s"
msgstr ""
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
#, c-format
msgid "(server default %s)"
msgstr ""
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
#, c-format
msgid "Requested encoding: %s"
msgstr ""
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
#, c-format
msgid "Last used encoding: %s"
msgstr ""
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
#, c-format
msgid "Line speed estimate: %d kbit/s"
msgstr ""
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
#, c-format
msgid "Protocol version: %d.%d"
msgstr ""
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
#, c-format
msgid "Security method: %s"
msgstr ""
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
#, c-format
msgid "SetDesktopSize failed: %d"
msgstr ""
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
msgid "Invalid SetColourMapEntries from server!"
msgstr ""
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr ""
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr ""
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
msgid "Enabling continuous updates"
msgstr ""
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
#, c-format
msgid "Throughput %d kbit/s - changing to quality %d"
msgstr ""
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
#, c-format
msgid "Throughput %d kbit/s - full color is now %s"
msgstr ""
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "disabled"
msgstr ""
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "enabled"
msgstr ""
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
#, c-format
msgid "Using %s encoding"
msgstr ""
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
#, c-format
msgid "Using pixel format %s"
msgstr ""
@@ -127,25 +117,25 @@ msgstr ""
msgid "Invalid geometry specified!"
msgstr ""
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
msgid "Adjusting window size to avoid accidental full screen request"
msgstr ""
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
msgid "Failure grabbing keyboard"
msgstr ""
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
msgid "Failure grabbing mouse"
msgstr ""
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
msgid "Invalid screen layout computed for resize request!"
msgstr ""
#: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
msgid "Not enough memory for framebuffer"
msgstr ""
@@ -162,160 +152,164 @@ msgid "VNC Viewer: Connection Options"
msgstr ""
#: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
msgid "Cancel"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
msgid "OK"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
msgid "Compression"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
msgid "Auto select"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
msgid "Preferred encoding"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
msgid "Color level"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
msgid "Full (all available colors)"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
msgid "Medium (256 colors)"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
msgid "Low (64 colors)"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
msgid "Very low (8 colors)"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
msgid "Custom compression level:"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
msgid "level (1=fast, 6=best [4-6 are rarely useful])"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
msgid "Allow JPEG compression:"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
msgid "quality (0=poor, 9=best)"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
msgid "Security"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
msgid "Encryption"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
msgid "None"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
msgid "TLS with anonymous certificates"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
msgid "TLS with X509 certificates"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
msgid "Path to X509 CA certificate"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
msgid "Path to X509 CRL file"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
msgid "Authentication"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
msgid "Standard VNC (insecure without encryption)"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
msgid "Username and password (insecure without encryption)"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
msgid "Input"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
msgid "View only (ignore mouse and keyboard)"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
msgid "Accept clipboard from server"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr ""
+
+#: vncviewer/OptionsDialog.cxx:716
msgid "Send clipboard to server"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
msgid "Pass system keys directly to server (full screen)"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
msgid "Menu key"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
msgid "Screen"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
msgid "Resize remote session on connect"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
msgid "Resize remote session to the local window"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
msgid "Full-screen mode"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
msgid "Enable full-screen mode over all monitors"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
msgid "Misc."
msgstr ""
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
msgid "Shared (don't disconnect other viewers)"
msgstr ""
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
msgid "Show dot when no cursor"
msgstr ""
@@ -367,112 +361,112 @@ msgstr ""
msgid "Username:"
msgstr ""
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
#, c-format
msgid "Unable to create platform specific framebuffer: %s"
msgstr ""
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
msgid "Using platform independent framebuffer"
msgstr ""
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
#, c-format
msgid "No scan code for extended virtual key 0x%02x"
msgstr ""
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
#, c-format
msgid "No scan code for virtual key 0x%02x"
msgstr ""
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
#, c-format
msgid "No symbol for extended virtual key 0x%02x"
msgstr ""
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
#, c-format
msgid "No symbol for virtual key 0x%02x"
msgstr ""
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
#, c-format
msgid "No symbol for key code 0x%02x (in the current state)"
msgstr ""
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
#, c-format
msgid "No symbol for key code %d (in the current state)"
msgstr ""
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
msgctxt "ContextMenu|"
msgid "E&xit viewer"
msgstr ""
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
msgctxt "ContextMenu|"
msgid "&Full screen"
msgstr ""
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
msgctxt "ContextMenu|"
msgid "Minimi&ze"
msgstr ""
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
msgctxt "ContextMenu|"
msgid "Resize &window to session"
msgstr ""
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
msgctxt "ContextMenu|"
msgid "&Ctrl"
msgstr ""
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
msgctxt "ContextMenu|"
msgid "&Alt"
msgstr ""
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
#, c-format
msgctxt "ContextMenu|"
msgid "Send %s"
msgstr ""
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
msgctxt "ContextMenu|"
msgid "Send Ctrl-Alt-&Del"
msgstr ""
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
msgctxt "ContextMenu|"
msgid "&Refresh screen"
msgstr ""
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
msgctxt "ContextMenu|"
msgid "&Options..."
msgstr ""
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
msgctxt "ContextMenu|"
msgid "Connection &info..."
msgstr ""
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
msgctxt "ContextMenu|"
msgid "About &TigerVNC viewer..."
msgstr ""
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
msgctxt "ContextMenu|"
msgid "Dismiss &menu"
msgstr ""
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
msgid "VNC connection info"
msgstr ""
@@ -494,123 +488,123 @@ msgstr ""
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
msgid "Display lacks pixmap format for default depth"
msgstr ""
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
msgid "Couldn't find suitable pixmap format"
msgstr ""
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
msgid "Only true colour displays supported"
msgstr ""
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
#, c-format
msgid "Using default colormap and visual, TrueColor, depth %d."
msgstr ""
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
msgid "Could not create framebuffer image"
msgstr ""
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
#, c-format
msgid "The name of the parameter %s was too large to write to the registry"
msgstr ""
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
#, c-format
msgid "The parameter %s was too large to write to the registry"
msgstr ""
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
#, c-format
msgid "Failed to write parameter %s of type %s to the registry: %ld"
msgstr ""
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
#, c-format
msgid "The name of the parameter %s was too large to read from the registry"
msgstr ""
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
#, c-format
msgid "Failed to read parameter %s from the registry: %ld"
msgstr ""
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
#, c-format
msgid "The parameter %s was too large to read from the registry"
msgstr ""
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
#, c-format
msgid "Failed to create registry key: %ld"
msgstr ""
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
#, c-format
msgid "Unknown parameter type for parameter %s"
msgstr ""
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
#, c-format
msgid "Failed to close registry key: %ld"
msgstr ""
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
#, c-format
msgid "Failed to open registry key: %ld"
msgstr ""
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
msgid "Failed to write configuration file, can't obtain home directory path."
msgstr ""
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
#, c-format
msgid "Failed to write configuration file, can't open %s: %s"
msgstr ""
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
msgid "Failed to read configuration file, can't obtain home directory path."
msgstr ""
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
#, c-format
msgid "Failed to read configuration file, can't open %s: %s"
msgstr ""
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
#, c-format
msgid "Failed to read line %d in file %s: %s"
msgstr ""
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
msgid "Line too long"
msgstr ""
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
#, c-format
msgid "Configuration file %s is in an invalid format"
msgstr ""
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
msgid "Invalid format"
msgstr ""
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
msgid "Invalid format or too large value"
msgstr ""
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
#, c-format
msgid "Unknown parameter %s on line %d in file %s"
msgstr ""
@@ -628,86 +622,86 @@ msgstr ""
msgid "About TigerVNC Viewer"
msgstr ""
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr ""
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
#, c-format
msgid "Error starting new TigerVNC Viewer: %s"
msgstr ""
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
#, c-format
msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
msgstr ""
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
msgid "TigerVNC Viewer"
msgstr ""
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
msgid "No"
msgstr ""
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
msgid "Yes"
msgstr ""
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
msgid "Close"
msgstr ""
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
msgid "About"
msgstr ""
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
msgid "Hide"
msgstr ""
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
msgid "Quit"
msgstr ""
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
msgid "Services"
msgstr ""
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
msgid "Hide Others"
msgstr ""
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
msgid "Show All"
msgstr ""
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
msgctxt "SysMenu|"
msgid "&File"
msgstr ""
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
msgctxt "SysMenu|File|"
msgid "&New Connection"
msgstr ""
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
msgid "Could not create VNC home directory: can't obtain home directory path."
msgstr ""
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
#, c-format
msgid "Could not create VNC home directory: %s."
msgstr ""
#. TRANSLATORS: "Parameters" are command line arguments, or settings
#. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
msgid "Parameters -listen and -via are incompatible"
msgstr ""
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
#, c-format
msgid "Listening on port %d"
msgstr ""
-
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr ""
diff --git a/po/uk.po b/po/uk.po
index b8a8b12e..379fdde5 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -2,13 +2,13 @@
# Copyright (C) 2014 the TigerVNC Team (msgids)
# This file is distributed under the same license as the tigervnc package.
#
-# Yuri Chornoivan <yurchor@ukr.net>, 2014, 2015.
+# Yuri Chornoivan <yurchor@ukr.net>, 2014, 2015, 2016.
msgid ""
msgstr ""
-"Project-Id-Version: tigervnc 1.5.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2015-12-01 21:51+0200\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-01 14:38+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
"Language: uk\n"
@@ -18,108 +18,98 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Lokalize 1.5\n"
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
#, c-format
msgid "connected to host %s port %d"
msgstr "з’єднано з вузлом %s, порт %d"
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
#, c-format
msgid "Desktop name: %.80s"
msgstr "Назва робочої станції: %.80s"
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
#, c-format
msgid "Host: %.80s port: %d"
msgstr "Вузол: %.80s порт: %d"
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
#, c-format
msgid "Size: %d x %d"
msgstr "Розмір: %d x %d"
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
#, c-format
msgid "Pixel format: %s"
msgstr "Формат у пікселях: %s"
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
#, c-format
msgid "(server default %s)"
msgstr "(типовий для сервера %s)"
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
#, c-format
msgid "Requested encoding: %s"
msgstr "Запит щодо кодування: %s"
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
#, c-format
msgid "Last used encoding: %s"
msgstr "Останнє використане кодування: %s"
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
#, c-format
msgid "Line speed estimate: %d kbit/s"
msgstr "Оцінка швидкості лінії: %d кбіт/с"
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
#, c-format
msgid "Protocol version: %d.%d"
msgstr "Версія протоколу: %d.%d"
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
#, c-format
msgid "Security method: %s"
msgstr "Метод захисту: %s"
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
#, c-format
msgid "SetDesktopSize failed: %d"
msgstr "Помилка SetDesktopSize: %d"
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
msgid "Invalid SetColourMapEntries from server!"
msgstr "Некоректне значення SetColourMapEntries від сервера!"
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Невідоме кодування %d"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Невідоме кодування"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
msgid "Enabling continuous updates"
msgstr "Увімкнути неперервне оновлення"
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
#, c-format
msgid "Throughput %d kbit/s - changing to quality %d"
msgstr "Пропускна здатність %d кбіт/с — змінюємо якість на %d"
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
#, c-format
msgid "Throughput %d kbit/s - full color is now %s"
msgstr "Пропускна здатність %d кбіт/с — змінюємо колірність на %s"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "disabled"
msgstr "вимкнено"
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
msgid "enabled"
msgstr "увімкнено"
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
#, c-format
msgid "Using %s encoding"
msgstr "Використовуємо кодування %s"
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
#, c-format
msgid "Using pixel format %s"
msgstr "Використовуємо формат у пікселях %s"
@@ -128,25 +118,25 @@ msgstr "Використовуємо формат у пікселях %s"
msgid "Invalid geometry specified!"
msgstr "Вказано некоректні геометричні параметри!"
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
msgid "Adjusting window size to avoid accidental full screen request"
msgstr "Коригувати розміри вікна, щоб уникнути випадкового запиту щодо переходу у повноекранний режим"
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
msgid "Failure grabbing keyboard"
msgstr "Помилка під час спроби перехопити клавіатуру"
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
msgid "Failure grabbing mouse"
msgstr "Помилка під час спроби перехопити мишу"
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
msgid "Invalid screen layout computed for resize request!"
msgstr "Результати обчислення компонування вікна для запиту щодо зміни розмірів є некоректними!"
#: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
msgid "Not enough memory for framebuffer"
msgstr "Недостатньо пам’яті для буфера кадрів"
@@ -163,160 +153,164 @@ msgid "VNC Viewer: Connection Options"
msgstr "Засіб перегляду VNC: параметри з’єднання"
#: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
msgid "Cancel"
msgstr "Скасувати"
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
msgid "OK"
msgstr "Гаразд"
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
msgid "Compression"
msgstr "Стискання"
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
msgid "Auto select"
msgstr "Автовибір"
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
msgid "Preferred encoding"
msgstr "Бажане кодування"
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
msgid "Color level"
msgstr "Рівень відтворення кольору"
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
msgid "Full (all available colors)"
msgstr "Повністю (усі доступні кольори)"
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
msgid "Medium (256 colors)"
msgstr "Середній (256 кольори)"
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
msgid "Low (64 colors)"
msgstr "Низький (64 кольори)"
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
msgid "Very low (8 colors)"
msgstr "Дуже низький (8 кольорів)"
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
msgid "Custom compression level:"
msgstr "Нетиповий рівень стискання:"
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
msgid "level (1=fast, 6=best [4-6 are rarely useful])"
msgstr "рівень (1=швидко, 6=найякісніше [4-6 використовувати не варто])"
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
msgid "Allow JPEG compression:"
msgstr "Дозволити стискання JPEG:"
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
msgid "quality (0=poor, 9=best)"
msgstr "якість (0=найгірша, 9=найкраща)"
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
msgid "Security"
msgstr "Захист"
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
msgid "Encryption"
msgstr "Шифрування"
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
msgid "None"
msgstr "Немає"
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
msgid "TLS with anonymous certificates"
msgstr "TLS із анонімними сертифікатами"
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
msgid "TLS with X509 certificates"
msgstr "TLS з сертифікатами X509"
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
msgid "Path to X509 CA certificate"
msgstr "Шлях до сертифіката CA X509"
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
msgid "Path to X509 CRL file"
msgstr "Шлях до файла CRL X509"
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
msgid "Authentication"
msgstr "Розпізнавання"
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
msgid "Standard VNC (insecure without encryption)"
msgstr "Стандартний VNC (без захисту і шифрування)"
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
msgid "Username and password (insecure without encryption)"
msgstr "Ім’я користувача і пароль (без захисту і шифрування)"
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
msgid "Input"
msgstr "Введення"
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
msgid "View only (ignore mouse and keyboard)"
msgstr "Лише перегляд (ігнорувати сигнали від миші і клавіатури)"
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
msgid "Accept clipboard from server"
msgstr "Приймати вміст буфера з сервера"
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Також встановити основне позначене"
+
+#: vncviewer/OptionsDialog.cxx:716
msgid "Send clipboard to server"
msgstr "Надіслати вміст буфера обміну до сервера"
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Надіслати основне позначене і вирізати буфер до буфера обміну"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Надіслати основне позначене як буфер обміну"
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
msgid "Pass system keys directly to server (full screen)"
msgstr "Передавати натискання системних клавіш безпосередньо до сервера (повноекранний режим)"
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
msgid "Menu key"
msgstr "Клавіша меню"
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
msgid "Screen"
msgstr "Екран"
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
msgid "Resize remote session on connect"
msgstr "Змінювати розміри віддаленого сеансу під час з’єднання"
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
msgid "Resize remote session to the local window"
msgstr "Змінювати розміри віддаленого сеансу відповідно до локального вікна"
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
msgid "Full-screen mode"
msgstr "Повноекранний режим"
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
msgid "Enable full-screen mode over all monitors"
msgstr "Увімкнути повноекранний режим на усіх моніторах"
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
msgid "Misc."
msgstr "Інше"
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
msgid "Shared (don't disconnect other viewers)"
msgstr "Спільний (не від’єднувати інші засоби перегляду)"
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
msgid "Show dot when no cursor"
msgstr "Показувати крапку, якщо немає курсора"
@@ -368,112 +362,112 @@ msgstr "Розпізнавання скасовано"
msgid "Username:"
msgstr "Користувач:"
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
#, c-format
msgid "Unable to create platform specific framebuffer: %s"
msgstr "Не вдалося створити специфічний для платформи буфер кадрів: %s"
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
msgid "Using platform independent framebuffer"
msgstr "Використовуємо незалежний від платформи буфер кадрів"
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
#, c-format
msgid "No scan code for extended virtual key 0x%02x"
msgstr "Немає коду сканування для віртуальної клавіші розширення 0x%02x"
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
#, c-format
msgid "No scan code for virtual key 0x%02x"
msgstr "Немає коду сканування для віртуальної клавіші 0x%02x"
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
#, c-format
msgid "No symbol for extended virtual key 0x%02x"
msgstr "Немає символу для віртуальної клавіші розширення 0x%02x"
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
#, c-format
msgid "No symbol for virtual key 0x%02x"
msgstr "Немає символу для віртуальної клавіші 0x%02x"
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
#, c-format
msgid "No symbol for key code 0x%02x (in the current state)"
msgstr "Немає символу для клавіші з кодом 0x%02x (у поточному стані)"
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
#, c-format
msgid "No symbol for key code %d (in the current state)"
msgstr "Немає символу для клавіші з кодом %d (у поточному стані)"
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
msgctxt "ContextMenu|"
msgid "E&xit viewer"
msgstr "Ви&йти із засобу перегляду"
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
msgctxt "ContextMenu|"
msgid "&Full screen"
msgstr "&На весь екран"
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
msgctxt "ContextMenu|"
msgid "Minimi&ze"
msgstr "М&інімізувати"
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
msgctxt "ContextMenu|"
msgid "Resize &window to session"
msgstr "Змінити &розміри вікна відповідно до сеансу"
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
msgctxt "ContextMenu|"
msgid "&Ctrl"
msgstr "&Ctrl"
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
msgctxt "ContextMenu|"
msgid "&Alt"
msgstr "&Alt"
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
#, c-format
msgctxt "ContextMenu|"
msgid "Send %s"
msgstr "Надіслати %s"
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
msgctxt "ContextMenu|"
msgid "Send Ctrl-Alt-&Del"
msgstr "На&діслати Ctrl-Alt-Del"
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
msgctxt "ContextMenu|"
msgid "&Refresh screen"
msgstr "&Оновити вміст екрана"
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
msgctxt "ContextMenu|"
msgid "&Options..."
msgstr "П&араметри…"
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
msgctxt "ContextMenu|"
msgid "Connection &info..."
msgstr "Дані щодо з’&єднання…"
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
msgctxt "ContextMenu|"
msgid "About &TigerVNC viewer..."
msgstr "Про &засіб перегляду TigerVNC…"
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
msgctxt "ContextMenu|"
msgid "Dismiss &menu"
msgstr "Закрити &меню"
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
msgid "VNC connection info"
msgstr "Дані щодо з’єднання VNC"
@@ -495,123 +489,123 @@ msgstr "Помилка BitBlt"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
msgid "Display lacks pixmap format for default depth"
msgstr "Для дисплея не вказано формат у пікселях для типової глибини"
#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
#. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
msgid "Couldn't find suitable pixmap format"
msgstr "Не вдалося визначити відповідний формат зображення"
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
msgid "Only true colour displays supported"
msgstr "Передбачено підтримку лише дисплеїв з True Color"
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
#, c-format
msgid "Using default colormap and visual, TrueColor, depth %d."
msgstr "Використовуємо типову карту кольорів і відтворення, TrueColor, глибина %d."
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
msgid "Could not create framebuffer image"
msgstr "Не вдалося створити зображення буфера кадрів"
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
#, c-format
msgid "The name of the parameter %s was too large to write to the registry"
msgstr "Назва параметра %s є надто довгою для запису до реєстру"
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
#, c-format
msgid "The parameter %s was too large to write to the registry"
msgstr "Параметр %s є надто довгим для запису до реєстру"
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
#, c-format
msgid "Failed to write parameter %s of type %s to the registry: %ld"
msgstr "Не вдалося записати параметр %s типу %s до реєстру: %ld"
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
#, c-format
msgid "The name of the parameter %s was too large to read from the registry"
msgstr "Назва параметра %s є надто довгою для читання з реєстру"
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
#, c-format
msgid "Failed to read parameter %s from the registry: %ld"
msgstr "Не вдалося прочитати параметр %s з реєстру: %ld"
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
#, c-format
msgid "The parameter %s was too large to read from the registry"
msgstr "Параметр %s є надто довгим для читання з реєстру"
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
#, c-format
msgid "Failed to create registry key: %ld"
msgstr "Не вдалося створити ключ реєстру: %ld"
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
#, c-format
msgid "Unknown parameter type for parameter %s"
msgstr "Невідомий тип параметра %s"
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
#, c-format
msgid "Failed to close registry key: %ld"
msgstr "Не вдалося закрити ключ реєстру: %ld"
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
#, c-format
msgid "Failed to open registry key: %ld"
msgstr "Не вдалося відкрити ключ реєстру: %ld"
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
msgid "Failed to write configuration file, can't obtain home directory path."
msgstr "Не вдалося записати файл налаштувань, оскільки не вдалося визначити шлях до домашнього каталогу."
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
#, c-format
msgid "Failed to write configuration file, can't open %s: %s"
msgstr "Не вдалося записати файл налаштувань, оскільки не вдалося відкрити %s: %s"
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
msgid "Failed to read configuration file, can't obtain home directory path."
msgstr "Не вдалося прочитати файл налаштувань, оскільки не вдалося визначити шлях до домашнього каталогу."
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
#, c-format
msgid "Failed to read configuration file, can't open %s: %s"
msgstr "Не вдалося прочитати файл налаштувань, оскільки не вдалося відкрити %s: %s"
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
#, c-format
msgid "Failed to read line %d in file %s: %s"
msgstr "Не вдалося прочитати рядок %d у файлі %s: %s"
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
msgid "Line too long"
msgstr "Занадто довгий рядок"
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
#, c-format
msgid "Configuration file %s is in an invalid format"
msgstr "Файл налаштувань %s збережено у некоректному форматі"
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
msgid "Invalid format"
msgstr "Некоректне форматування"
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
msgid "Invalid format or too large value"
msgstr "Некоректне форматування або надто велике значення"
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
#, c-format
msgid "Unknown parameter %s on line %d in file %s"
msgstr "Невідомий параметр %s у рядку %d файла %s"
@@ -633,89 +627,95 @@ msgstr ""
msgid "About TigerVNC Viewer"
msgstr "Про засіб перегляду TigerVNC"
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Внутрішня помилка FLTK. Завершуємо роботу."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
#, c-format
msgid "Error starting new TigerVNC Viewer: %s"
msgstr "Помилка під час спроби запуску нового засобу перегляду TigerVNC: %s"
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
#, c-format
msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
msgstr "Отримано сигнал переривання %d. Зараз засіб перегляду TigerVNC завершить роботу."
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
msgid "TigerVNC Viewer"
msgstr "Засіб перегляду TigerVNC"
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
msgid "No"
msgstr "Ні"
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
msgid "Yes"
msgstr "Так"
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
msgid "Close"
msgstr "Закрити"
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
msgid "About"
msgstr "Про програму"
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
msgid "Hide"
msgstr "Сховати"
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
msgid "Quit"
msgstr "Вийти"
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
msgid "Services"
msgstr "Служби"
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
msgid "Hide Others"
msgstr "Сховати решту"
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
msgid "Show All"
msgstr "Показати всі"
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
msgctxt "SysMenu|"
msgid "&File"
msgstr "&Файл"
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
msgctxt "SysMenu|File|"
msgid "&New Connection"
msgstr "&Створити з'єднання"
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
msgid "Could not create VNC home directory: can't obtain home directory path."
msgstr "Не вдалося створити домашній каталог VNC: не вдалося отримати шлях до домашнього каталогу."
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
#, c-format
msgid "Could not create VNC home directory: %s."
msgstr "Не вдалося створити домашній каталог VNC: %s."
#. TRANSLATORS: "Parameters" are command line arguments, or settings
#. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
msgid "Parameters -listen and -via are incompatible"
msgstr "Параметри -listen і -via є несумісними"
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
#, c-format
msgid "Listening on port %d"
msgstr "Очікуємо на дані на порту %d"
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Внутрішня помилка FLTK. Завершуємо роботу."
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Невідоме кодування %d"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Невідоме кодування"
#~ msgid "Alt"
#~ msgstr "Alt"
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 00000000..2c521554
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,728 @@
+# Vietnamese translations for tigervnc package
+# Bản dịch Tiếng Việt dành cho gói tigervnc
+# This file is distributed under the same license as the tigervnc package.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2014, 2015, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tigervnc 1.6.90\n"
+"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-04 08:44+0700\n"
+"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
+"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Gtranslator 2.91.7\n"
+
+#: vncviewer/CConn.cxx:110
+#, c-format
+msgid "connected to host %s port %d"
+msgstr "đã kết nối đến máy %s cổng %d"
+
+#: vncviewer/CConn.cxx:169
+#, c-format
+msgid "Desktop name: %.80s"
+msgstr "Tên máy tính: %.80s"
+
+#: vncviewer/CConn.cxx:174
+#, c-format
+msgid "Host: %.80s port: %d"
+msgstr "Máy: %.80s cổng: %d"
+
+#: vncviewer/CConn.cxx:179
+#, c-format
+msgid "Size: %d x %d"
+msgstr "Cỡ: %d x %d"
+
+#: vncviewer/CConn.cxx:187
+#, c-format
+msgid "Pixel format: %s"
+msgstr "Định dạng điểm ảnh: %s"
+
+#: vncviewer/CConn.cxx:194
+#, c-format
+msgid "(server default %s)"
+msgstr "(máy chủ mặc định %s)"
+
+#: vncviewer/CConn.cxx:199
+#, c-format
+msgid "Requested encoding: %s"
+msgstr "Bộ mã đã yêu cầu: %s"
+
+#: vncviewer/CConn.cxx:204
+#, c-format
+msgid "Last used encoding: %s"
+msgstr "Bảng mã dùng lần cuối: %s"
+
+#: vncviewer/CConn.cxx:209
+#, c-format
+msgid "Line speed estimate: %d kbit/s"
+msgstr "Ước tính tốc độ đường dây: %d kbit/s"
+
+#: vncviewer/CConn.cxx:214
+#, c-format
+msgid "Protocol version: %d.%d"
+msgstr "Phiên bản giao thức: %d.%d"
+
+#: vncviewer/CConn.cxx:219
+#, c-format
+msgid "Security method: %s"
+msgstr "Phương thức bảo mật: %s"
+
+#: vncviewer/CConn.cxx:319
+#, c-format
+msgid "SetDesktopSize failed: %d"
+msgstr "SetDesktopSize gặp lỗi: %d"
+
+#: vncviewer/CConn.cxx:411
+msgid "Invalid SetColourMapEntries from server!"
+msgstr "SetColourMapEntries từ máy phục vụ không hợp lệ!"
+
+#: vncviewer/CConn.cxx:485
+msgid "Enabling continuous updates"
+msgstr "Đang bật cập nhật liên tục"
+
+#: vncviewer/CConn.cxx:555
+#, c-format
+msgid "Throughput %d kbit/s - changing to quality %d"
+msgstr "Năng lực %d kbit/s - đổi thành chất lượng %d"
+
+#: vncviewer/CConn.cxx:577
+#, c-format
+msgid "Throughput %d kbit/s - full color is now %s"
+msgstr "Năng lực %d kbit/s - màu đầy đủ giờ là %s"
+
+#: vncviewer/CConn.cxx:579
+msgid "disabled"
+msgstr "tắt"
+
+#: vncviewer/CConn.cxx:579
+msgid "enabled"
+msgstr "bật"
+
+#: vncviewer/CConn.cxx:589
+#, c-format
+msgid "Using %s encoding"
+msgstr "Đang dùng bảng mã %s"
+
+#: vncviewer/CConn.cxx:636
+#, c-format
+msgid "Using pixel format %s"
+msgstr "Đang dùng định dạng điểm ảnh %s"
+
+#: vncviewer/DesktopWindow.cxx:106
+msgid "Invalid geometry specified!"
+msgstr "Hình dạng đã cho không hợp lệ!"
+
+#: vncviewer/DesktopWindow.cxx:303
+msgid "Adjusting window size to avoid accidental full screen request"
+msgstr "Chỉnh cỡ cửa sổ để tránh yêu cầu toàm màn hình ngẫu nhiên"
+
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
+msgid "Failure grabbing keyboard"
+msgstr "Gặp lỗi khi điều khiển bàn phím"
+
+#: vncviewer/DesktopWindow.cxx:516
+msgid "Failure grabbing mouse"
+msgstr "Gặp lỗi khi điều khiển chuột"
+
+#: vncviewer/DesktopWindow.cxx:746
+msgid "Invalid screen layout computed for resize request!"
+msgstr "Bố cục màn hình đã tính toán không hợp lệ cho yêu cầu đổi cỡ!"
+
+#: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
+#: vncviewer/X11PixelBuffer.cxx:117
+msgid "Not enough memory for framebuffer"
+msgstr "Không đủ bộ nhớ cho bộ đệm khung"
+
+#: vncviewer/OSXPixelBuffer.cxx:52
+msgid "Could not create framebuffer device"
+msgstr "Không thể tạo thiết bị bộ đệm khung"
+
+#: vncviewer/OSXPixelBuffer.cxx:58
+msgid "Could not create framebuffer bitmap"
+msgstr "Không thể tạo ánh xạ bộ đệm khung"
+
+#: vncviewer/OptionsDialog.cxx:57
+msgid "VNC Viewer: Connection Options"
+msgstr "Bộ xem VNC: Các tùy chọn kết nối"
+
+#: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
+#: vncviewer/vncviewer.cxx:282
+msgid "Cancel"
+msgstr "Thôi"
+
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
+msgid "OK"
+msgstr "Đồng ý"
+
+#: vncviewer/OptionsDialog.cxx:423
+msgid "Compression"
+msgstr "Nén"
+
+#: vncviewer/OptionsDialog.cxx:439
+msgid "Auto select"
+msgstr "Chọn tự động"
+
+#: vncviewer/OptionsDialog.cxx:451
+msgid "Preferred encoding"
+msgstr "Bảng mã ưa thích"
+
+#: vncviewer/OptionsDialog.cxx:499
+msgid "Color level"
+msgstr "Mức màu"
+
+#: vncviewer/OptionsDialog.cxx:510
+msgid "Full (all available colors)"
+msgstr "Đầy đủ (mọi màu sẵn có)"
+
+#: vncviewer/OptionsDialog.cxx:517
+msgid "Medium (256 colors)"
+msgstr "Trung bình (256 màu)"
+
+#: vncviewer/OptionsDialog.cxx:524
+msgid "Low (64 colors)"
+msgstr "Thấp (64 màu)"
+
+#: vncviewer/OptionsDialog.cxx:531
+msgid "Very low (8 colors)"
+msgstr "Rất thấp (8 màu)"
+
+#: vncviewer/OptionsDialog.cxx:548
+msgid "Custom compression level:"
+msgstr "Mức nén tự chọn:"
+
+#: vncviewer/OptionsDialog.cxx:554
+msgid "level (1=fast, 6=best [4-6 are rarely useful])"
+msgstr "mức độ (1=nhanh, 6=tốt nhất [4-6 là hữu dụng hơn cả])"
+
+#: vncviewer/OptionsDialog.cxx:561
+msgid "Allow JPEG compression:"
+msgstr "Cho phép nén JPEG:"
+
+#: vncviewer/OptionsDialog.cxx:567
+msgid "quality (0=poor, 9=best)"
+msgstr "Chất lượng (0=kém, 9=tốt nhất)"
+
+#: vncviewer/OptionsDialog.cxx:578
+msgid "Security"
+msgstr "Bảo mật"
+
+#: vncviewer/OptionsDialog.cxx:593
+msgid "Encryption"
+msgstr "Mã hóa"
+
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
+msgid "None"
+msgstr "Không có gì"
+
+#: vncviewer/OptionsDialog.cxx:610
+msgid "TLS with anonymous certificates"
+msgstr "TLS với chứng nhận nặc danh"
+
+#: vncviewer/OptionsDialog.cxx:616
+msgid "TLS with X509 certificates"
+msgstr "TLS với chứng nhận X509"
+
+#: vncviewer/OptionsDialog.cxx:623
+msgid "Path to X509 CA certificate"
+msgstr "Đường dẫn chứng nhận CA X509"
+
+#: vncviewer/OptionsDialog.cxx:630
+msgid "Path to X509 CRL file"
+msgstr "Đường dẫn đến tập tin CRL X509"
+
+#: vncviewer/OptionsDialog.cxx:646
+msgid "Authentication"
+msgstr "Xác thực"
+
+#: vncviewer/OptionsDialog.cxx:663
+msgid "Standard VNC (insecure without encryption)"
+msgstr "VNC tiêu chuẩn (không bảo mật, không mã hóa)"
+
+#: vncviewer/OptionsDialog.cxx:669
+msgid "Username and password (insecure without encryption)"
+msgstr "Tài khoản và mật khẩu (không bảo mật, không mã hóa)"
+
+#: vncviewer/OptionsDialog.cxx:688
+msgid "Input"
+msgstr "Đầu vào"
+
+#: vncviewer/OptionsDialog.cxx:696
+msgid "View only (ignore mouse and keyboard)"
+msgstr "Chỉ xem (không bắt chuột và bàn phím)"
+
+#: vncviewer/OptionsDialog.cxx:702
+msgid "Accept clipboard from server"
+msgstr "Chấp nhận clipboard từ máy chủ"
+
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Cũng đặt chọn chính"
+
+#: vncviewer/OptionsDialog.cxx:716
+msgid "Send clipboard to server"
+msgstr "Gửi clipboard đến máy chủ"
+
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Gửi chọn chính là clipboard"
+
+#: vncviewer/OptionsDialog.cxx:730
+msgid "Pass system keys directly to server (full screen)"
+msgstr "Gửi các phím hệ thống trực tiếp đến máy phục vụ (toàn màn hình)"
+
+#: vncviewer/OptionsDialog.cxx:733
+msgid "Menu key"
+msgstr "Phím trình đơn"
+
+#: vncviewer/OptionsDialog.cxx:749
+msgid "Screen"
+msgstr "Màn hình"
+
+#: vncviewer/OptionsDialog.cxx:757
+msgid "Resize remote session on connect"
+msgstr "Đổi cỡ phiên máy từ xa khi kết nối"
+
+#: vncviewer/OptionsDialog.cxx:770
+msgid "Resize remote session to the local window"
+msgstr "Đổi cỡ phiên thành cửa sổ nội bộ"
+
+#: vncviewer/OptionsDialog.cxx:776
+msgid "Full-screen mode"
+msgstr "Chế độ toàn màn hình"
+
+#: vncviewer/OptionsDialog.cxx:782
+msgid "Enable full-screen mode over all monitors"
+msgstr "Bật chế độ toàn màn hình qua tất cả các màn hình"
+
+#: vncviewer/OptionsDialog.cxx:791
+msgid "Misc."
+msgstr "Linh tinh"
+
+#: vncviewer/OptionsDialog.cxx:799
+msgid "Shared (don't disconnect other viewers)"
+msgstr "Đã chia sẻ (đừng ngắt kết nối các bộ xem khác)"
+
+#: vncviewer/OptionsDialog.cxx:805
+msgid "Show dot when no cursor"
+msgstr "Hiển thị chấm khi không có con trỏ"
+
+#: vncviewer/ServerDialog.cxx:42
+msgid "VNC Viewer: Connection Details"
+msgstr "Phần mềm xem VNC: Chi tiết kết nối"
+
+#: vncviewer/ServerDialog.cxx:49 vncviewer/ServerDialog.cxx:54
+msgid "VNC server:"
+msgstr "Máy phục vụ VNC:"
+
+#: vncviewer/ServerDialog.cxx:64
+msgid "Options..."
+msgstr "Tùy chọn…"
+
+#: vncviewer/ServerDialog.cxx:69
+msgid "Load..."
+msgstr "Tải…"
+
+#: vncviewer/ServerDialog.cxx:74
+msgid "Save As..."
+msgstr "Lưu thành…"
+
+#: vncviewer/ServerDialog.cxx:86
+msgid "About..."
+msgstr "Giới thiệu…"
+
+#: vncviewer/ServerDialog.cxx:96
+msgid "Connect"
+msgstr "Kết nối"
+
+#: vncviewer/UserDialog.cxx:74
+msgid "Opening password file failed"
+msgstr "Gặp lỗi khi mở tập tin mật khẩu"
+
+#: vncviewer/UserDialog.cxx:86 vncviewer/UserDialog.cxx:96
+msgid "VNC authentication"
+msgstr "Xác thực VNC"
+
+#: vncviewer/UserDialog.cxx:87 vncviewer/UserDialog.cxx:102
+msgid "Password:"
+msgstr "Mật khẩu:"
+
+#: vncviewer/UserDialog.cxx:89
+msgid "Authentication cancelled"
+msgstr "Xác thực bị hủy bỏ"
+
+#: vncviewer/UserDialog.cxx:99
+msgid "Username:"
+msgstr "Tài khoản:"
+
+#: vncviewer/Viewport.cxx:391
+#, c-format
+msgid "Unable to create platform specific framebuffer: %s"
+msgstr "Không thể tạo bộ đệm khung đặc tả nền tảng: %s"
+
+#: vncviewer/Viewport.cxx:392
+msgid "Using platform independent framebuffer"
+msgstr "Đang sử dụng bộ đệm khung độc lập nên tảng"
+
+#: vncviewer/Viewport.cxx:628
+#, c-format
+msgid "No scan code for extended virtual key 0x%02x"
+msgstr "Không có mã quét cho phím ảo mở rộng 0x%02x"
+
+#: vncviewer/Viewport.cxx:630
+#, c-format
+msgid "No scan code for virtual key 0x%02x"
+msgstr "Không có mã quét cho phím ảo 0x%02x"
+
+#: vncviewer/Viewport.cxx:647
+#, c-format
+msgid "No symbol for extended virtual key 0x%02x"
+msgstr "Không có ký hiệu cho phím ảo mở rộng 0x%02x"
+
+#: vncviewer/Viewport.cxx:649
+#, c-format
+msgid "No symbol for virtual key 0x%02x"
+msgstr "Không có ký hiệu cho phím ảo 0x%02x"
+
+#: vncviewer/Viewport.cxx:687
+#, c-format
+msgid "No symbol for key code 0x%02x (in the current state)"
+msgstr "Không có ký hiệu cho mã phím 0x%02x (trong trạng thái hiện tại)"
+
+#: vncviewer/Viewport.cxx:713
+#, c-format
+msgid "No symbol for key code %d (in the current state)"
+msgstr "Không có ký hiệu cho mã phím %d (trong trạng thái hiện tại)"
+
+#: vncviewer/Viewport.cxx:750
+msgctxt "ContextMenu|"
+msgid "E&xit viewer"
+msgstr "T&hoát khỏi bộ xem"
+
+#: vncviewer/Viewport.cxx:753
+msgctxt "ContextMenu|"
+msgid "&Full screen"
+msgstr "T&oàn màn hình"
+
+#: vncviewer/Viewport.cxx:756
+msgctxt "ContextMenu|"
+msgid "Minimi&ze"
+msgstr "Thu &nhỏ"
+
+#: vncviewer/Viewport.cxx:758
+msgctxt "ContextMenu|"
+msgid "Resize &window to session"
+msgstr "Đổi cỡ Cửa &sổ sang phiên"
+
+#: vncviewer/Viewport.cxx:763
+msgctxt "ContextMenu|"
+msgid "&Ctrl"
+msgstr "&Ctrl"
+
+#: vncviewer/Viewport.cxx:766
+msgctxt "ContextMenu|"
+msgid "&Alt"
+msgstr "&Alt"
+
+#: vncviewer/Viewport.cxx:772
+#, c-format
+msgctxt "ContextMenu|"
+msgid "Send %s"
+msgstr "Gửi %s"
+
+#: vncviewer/Viewport.cxx:778
+msgctxt "ContextMenu|"
+msgid "Send Ctrl-Alt-&Del"
+msgstr "Gửi Ctrl-Alt-&Del"
+
+#: vncviewer/Viewport.cxx:781
+msgctxt "ContextMenu|"
+msgid "&Refresh screen"
+msgstr "&Làm mới màn hình"
+
+#: vncviewer/Viewport.cxx:784
+msgctxt "ContextMenu|"
+msgid "&Options..."
+msgstr "Tù&y chọn…"
+
+#: vncviewer/Viewport.cxx:786
+msgctxt "ContextMenu|"
+msgid "Connection &info..."
+msgstr "Thông t&in về kết nối…"
+
+#: vncviewer/Viewport.cxx:788
+msgctxt "ContextMenu|"
+msgid "About &TigerVNC viewer..."
+msgstr "Giới thiệu Bộ xem &TigerVNC…"
+
+#: vncviewer/Viewport.cxx:791
+msgctxt "ContextMenu|"
+msgid "Dismiss &menu"
+msgstr "Thải bỏ &Trình đơn"
+
+#: vncviewer/Viewport.cxx:875
+msgid "VNC connection info"
+msgstr "Thông tin kết nối VNC"
+
+#: vncviewer/Win32PixelBuffer.cxx:62
+msgid "unable to create DIB section"
+msgstr "không thể tạo phần DIB"
+
+#: vncviewer/Win32PixelBuffer.cxx:79
+msgid "CreateCompatibleDC failed"
+msgstr "CreateCompatibleDC gặp lỗi"
+
+#: vncviewer/Win32PixelBuffer.cxx:82
+msgid "SelectObject failed"
+msgstr "SelectObject gặp lỗi"
+
+#: vncviewer/Win32PixelBuffer.cxx:91
+msgid "BitBlt failed"
+msgstr "BitBlt gặp lỗi"
+
+#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
+#. to translate.
+#: vncviewer/X11PixelBuffer.cxx:65
+msgid "Display lacks pixmap format for default depth"
+msgstr "Hiển thị định dạng pixmap thiếu cho độ sâu mặc định"
+
+#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
+#. to translate.
+#: vncviewer/X11PixelBuffer.cxx:76
+msgid "Couldn't find suitable pixmap format"
+msgstr "Không thể tìm thấy định dạng phù hợp pixmap"
+
+#: vncviewer/X11PixelBuffer.cxx:85
+msgid "Only true colour displays supported"
+msgstr "Chỉ hỗ trợ hiển thị màu thật"
+
+#: vncviewer/X11PixelBuffer.cxx:87
+#, c-format
+msgid "Using default colormap and visual, TrueColor, depth %d."
+msgstr "Đang dùng bản đồ màu mặc định và ảo, TrueColor, độ sâu %d."
+
+#: vncviewer/X11PixelBuffer.cxx:113
+msgid "Could not create framebuffer image"
+msgstr "Không thể tạo ảnh bộ đệm khung"
+
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
+#, c-format
+msgid "The name of the parameter %s was too large to write to the registry"
+msgstr "Tên của tham số %s là quá lớn để ghi vào đăng ký"
+
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
+#, c-format
+msgid "The parameter %s was too large to write to the registry"
+msgstr "Tham số %s là quá lớn để ghi vào đăng ký"
+
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
+#, c-format
+msgid "Failed to write parameter %s of type %s to the registry: %ld"
+msgstr "Gặp lỗi khi ghi tham số %s của kiểu %s vào sổ đăng ký: %ld"
+
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
+#, c-format
+msgid "The name of the parameter %s was too large to read from the registry"
+msgstr "Tên của tham số %s là quá lớn để đọc từ sổ đăng ký"
+
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
+#, c-format
+msgid "Failed to read parameter %s from the registry: %ld"
+msgstr "Gặp lỗi khi đọc tham số %s từ sổ đăng ký: %ld"
+
+#: vncviewer/parameters.cxx:359
+#, c-format
+msgid "The parameter %s was too large to read from the registry"
+msgstr "Tham số %s là quá lớn để đọc từ sổ đăng ký"
+
+#: vncviewer/parameters.cxx:409
+#, c-format
+msgid "Failed to create registry key: %ld"
+msgstr "Gặp lỗi khi tạo khóa đăng ký: %ld"
+
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
+#, c-format
+msgid "Unknown parameter type for parameter %s"
+msgstr "Không hiểu kiểu tham số cho đối số %s"
+
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
+#, c-format
+msgid "Failed to close registry key: %ld"
+msgstr "Gặp lỗi khi đóng khóa đăng ký: %ld"
+
+#: vncviewer/parameters.cxx:446
+#, c-format
+msgid "Failed to open registry key: %ld"
+msgstr "Gặp lỗi khi mở khóa đăng ký: %ld"
+
+#: vncviewer/parameters.cxx:503
+msgid "Failed to write configuration file, can't obtain home directory path."
+msgstr "Gặp lỗi khi ghi tập tin cấu hình, không thể lấy đường dẫn thư mục riêng."
+
+#: vncviewer/parameters.cxx:516
+#, c-format
+msgid "Failed to write configuration file, can't open %s: %s"
+msgstr "Gặp lỗi khi ghi tập tin cấu hình, không thể mở %s: %s"
+
+#: vncviewer/parameters.cxx:559
+msgid "Failed to read configuration file, can't obtain home directory path."
+msgstr "Gặp lỗi khi đọc tập tin cấu hình, không thể lấy đường dẫn thư mục riêng."
+
+#: vncviewer/parameters.cxx:572
+#, c-format
+msgid "Failed to read configuration file, can't open %s: %s"
+msgstr "Gặp lỗi khi đọc tập tin cấu hình, không thể mở %s: %s"
+
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
+#, c-format
+msgid "Failed to read line %d in file %s: %s"
+msgstr "Gặp lỗi khi đọc dòng %d trong tập tin %s: %s"
+
+#: vncviewer/parameters.cxx:591
+msgid "Line too long"
+msgstr "Dòng quá dài"
+
+#: vncviewer/parameters.cxx:598
+#, c-format
+msgid "Configuration file %s is in an invalid format"
+msgstr "Tập tin cấu hình %s ở định dạng không hợp lệ"
+
+#: vncviewer/parameters.cxx:616
+msgid "Invalid format"
+msgstr "Định dạng không hợp lệ"
+
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
+msgid "Invalid format or too large value"
+msgstr "Định dạng không hợp lệ hay giá trị quá lớn"
+
+#: vncviewer/parameters.cxx:672
+#, c-format
+msgid "Unknown parameter %s on line %d in file %s"
+msgstr "Không hiểu tham số %s trên dòng %d ở tập tin %s"
+
+#: vncviewer/vncviewer.cxx:100
+#, c-format
+msgid ""
+"TigerVNC Viewer %d-bit v%s\n"
+"Built on: %s\n"
+"Copyright (C) 1999-%d TigerVNC Team and many others (see README.txt)\n"
+"See http://www.tigervnc.org for information on TigerVNC."
+msgstr ""
+"TigerVNC Viewer %d-bít v%s\n"
+"Biên dịch vào: %s\n"
+"Copyright (C) 1999-%d Nhóm TigerVNC và nhiều người khác (xem README.txt)\n"
+"Truy cập http://www.tigervnc.org để biết thêm thông tin về TigerVNC."
+
+#: vncviewer/vncviewer.cxx:127
+msgid "About TigerVNC Viewer"
+msgstr "Giới thiệu về bộ xem TigerVNC"
+
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Lỗi bên trong FLTK. Nên thoát."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
+#, c-format
+msgid "Error starting new TigerVNC Viewer: %s"
+msgstr "Gặp lỗi khi khởi chạy bộ xem TigerVNC mới: %s"
+
+#: vncviewer/vncviewer.cxx:179
+#, c-format
+msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
+msgstr "Đã nhận được tín hiệu kết thúc %d. Bộ xem TigerVNC bây giờ sẽ thoát."
+
+#: vncviewer/vncviewer.cxx:271
+msgid "TigerVNC Viewer"
+msgstr "Bộ xem TigerVNC"
+
+#: vncviewer/vncviewer.cxx:279
+msgid "No"
+msgstr "Không"
+
+#: vncviewer/vncviewer.cxx:280
+msgid "Yes"
+msgstr "Có"
+
+#: vncviewer/vncviewer.cxx:283
+msgid "Close"
+msgstr "Đóng"
+
+#: vncviewer/vncviewer.cxx:288
+msgid "About"
+msgstr "Giới thiệu"
+
+#: vncviewer/vncviewer.cxx:291
+msgid "Hide"
+msgstr "Ẩn"
+
+#: vncviewer/vncviewer.cxx:294
+msgid "Quit"
+msgstr "Thoát"
+
+#: vncviewer/vncviewer.cxx:298
+msgid "Services"
+msgstr "Dịch vụ"
+
+#: vncviewer/vncviewer.cxx:299
+msgid "Hide Others"
+msgstr "Các thứ khác ẩn"
+
+#: vncviewer/vncviewer.cxx:300
+msgid "Show All"
+msgstr "Hiện tất cả"
+
+#: vncviewer/vncviewer.cxx:309
+msgctxt "SysMenu|"
+msgid "&File"
+msgstr "&Chính"
+
+#: vncviewer/vncviewer.cxx:312
+msgctxt "SysMenu|File|"
+msgid "&New Connection"
+msgstr "Kết nối &mới"
+
+#: vncviewer/vncviewer.cxx:324
+msgid "Could not create VNC home directory: can't obtain home directory path."
+msgstr "Không thể tạo thư mục cá nhân cho VNC: không thể lấy đường dẫn thư mục cá nhân."
+
+#: vncviewer/vncviewer.cxx:329
+#, c-format
+msgid "Could not create VNC home directory: %s."
+msgstr "Không thể tạo thư mục cá nhân cho VNC: %s."
+
+#. TRANSLATORS: "Parameters" are command line arguments, or settings
+#. from a file or the Windows registry.
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
+msgid "Parameters -listen and -via are incompatible"
+msgstr "Các tham số -listen và -via xung khắc nhau"
+
+#: vncviewer/vncviewer.cxx:550
+#, c-format
+msgid "Listening on port %d"
+msgstr "Đang nghe trên cổng %d"
+
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Bảng mã chưa biết %d"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Bảng mã chưa biết"
+
+#~ msgid "Alt"
+#~ msgstr "Alt"
+
+#~ msgid "CleanupSignalHandler called"
+#~ msgstr "CleanupSignalHandler được gọi"
+
+#, fuzzy
+#~ msgid "Error(%d) reading %s from Registry."
+#~ msgstr "Gặp lỗi khi đọc từ máy phục vụ"
diff --git a/release/Info.plist.in b/release/Info.plist.in
index ae4fe009..c390ad6c 100644
--- a/release/Info.plist.in
+++ b/release/Info.plist.in
@@ -6,6 +6,8 @@
<string>English</string>
<key>CFBundleExecutable</key>
<string>TigerVNC Viewer</string>
+ <key>NSHighResolutionCapable</key>
+ <string>True</string>
<key>CFBundleGetInfoString</key>
<string>@VERSION@, Copyright © 1998-2011 [many holders]</string>
<key>CFBundleIconFile</key>
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index e99c825a..bfd69dcd 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -13,3 +13,6 @@ target_link_libraries(decperf test_util rfb)
add_executable(encperf encperf.cxx)
target_link_libraries(encperf test_util rfb)
+
+add_executable(hostport hostport.cxx)
+target_link_libraries(hostport rfb)
diff --git a/tests/hostport.cxx b/tests/hostport.cxx
new file mode 100644
index 00000000..00026e61
--- /dev/null
+++ b/tests/hostport.cxx
@@ -0,0 +1,80 @@
+/* Copyright 2016 Pierre Ossman <ossman@cendio.se> for Cendio AB
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ */
+
+#include <stdio.h>
+
+#include <rfb/Hostname.h>
+
+static void doTest(const char* hostAndPort,
+ const char* expectedHost, int expectedPort)
+{
+ char* host;
+ int port;
+
+ printf("\"%s\": ", hostAndPort);
+
+ rfb::getHostAndPort(hostAndPort, &host, &port);
+
+ if (strcmp(host, expectedHost) != 0)
+ printf("FAILED (\"%s\" != \"%s\")", host, expectedHost);
+ else if (port != expectedPort)
+ printf("FAILED (%d != %d)", port, expectedPort);
+ else
+ printf("OK");
+ printf("\n");
+ fflush(stdout);
+
+ rfb::strFree(host);
+}
+
+int main(int argc, char** argv)
+{
+ doTest(":5", "localhost", 5905);
+
+ doTest("1.2.3.4", "1.2.3.4", 5900);
+
+ doTest("1.2.3.4:5", "1.2.3.4", 5905);
+ doTest("1.2.3.4:99", "1.2.3.4", 5999);
+ doTest("1.2.3.4:100", "1.2.3.4", 100);
+ doTest("1.2.3.4:5901", "1.2.3.4", 5901);
+
+ doTest("1.2.3.4::5", "1.2.3.4", 5);
+ doTest("1.2.3.4::99", "1.2.3.4", 99);
+ doTest("1.2.3.4::5901", "1.2.3.4", 5901);
+
+ doTest("[1.2.3.4]", "1.2.3.4", 5900);
+ doTest("[1.2.3.4]:5", "1.2.3.4", 5905);
+ doTest("[1.2.3.4]:100", "1.2.3.4", 100);
+ doTest("[1.2.3.4]::5", "1.2.3.4", 5);
+ doTest("[1.2.3.4]::100", "1.2.3.4", 100);
+
+ // Ambigiuous. For now we'll keep the old behaviour...
+ doTest("::1", "localhost", 1);
+
+ doTest("2001:1234::20:1", "2001:1234::20:1", 5900);
+
+ doTest("[::1]", "::1", 5900);
+ doTest("[2001:1234::20:1]", "2001:1234::20:1", 5900);
+
+ doTest("[2001:1234::20:1]:5", "2001:1234::20:1", 5905);
+ doTest("[2001:1234::20:1]:99", "2001:1234::20:1", 5999);
+ doTest("[2001:1234::20:1]:100", "2001:1234::20:1", 100);
+ doTest("[2001:1234::20:1]:5901", "2001:1234::20:1", 5901);
+
+ return 0;
+}
diff --git a/unix/vncconfig/vncExt.c b/unix/vncconfig/vncExt.c
index e9b948d3..6256d3bf 100644
--- a/unix/vncconfig/vncExt.c
+++ b/unix/vncconfig/vncExt.c
@@ -24,10 +24,6 @@
#define _VNCEXT_PROTO_
#include "vncExt.h"
-static Bool XVncExtClientCutTextNotifyWireToEvent(Display* dpy, XEvent* e,
- xEvent* w);
-static Bool XVncExtSelectionChangeNotifyWireToEvent(Display* dpy, XEvent* e,
- xEvent* w);
static Bool XVncExtQueryConnectNotifyWireToEvent(Display* dpy, XEvent* e,
xEvent* w);
@@ -40,10 +36,6 @@ static Bool checkExtension(Display* dpy)
extensionInited = True;
codes = XInitExtension(dpy, VNCEXTNAME);
if (!codes) return False;
- XESetWireToEvent(dpy, codes->first_event + VncExtClientCutTextNotify,
- XVncExtClientCutTextNotifyWireToEvent);
- XESetWireToEvent(dpy, codes->first_event + VncExtSelectionChangeNotify,
- XVncExtSelectionChangeNotifyWireToEvent);
XESetWireToEvent(dpy, codes->first_event + VncExtQueryConnectNotify,
XVncExtQueryConnectNotifyWireToEvent);
}
@@ -214,53 +206,6 @@ void XVncExtFreeParamList(char** list)
}
}
-Bool XVncExtSetServerCutText(Display* dpy, const char* str, int len)
-{
- xVncExtSetServerCutTextReq* req;
-
- if (!checkExtension(dpy)) return False;
-
- LockDisplay(dpy);
- GetReq(VncExtSetServerCutText, req);
- req->reqType = codes->major_opcode;
- req->vncExtReqType = X_VncExtSetServerCutText;
- req->length += (len + 3) >> 2;
- req->textLen = len;
- Data(dpy, str, len);
- UnlockDisplay(dpy);
- SyncHandle();
- return True;
-}
-
-Bool XVncExtGetClientCutText(Display* dpy, char** str, int* len)
-{
- xVncExtGetClientCutTextReq* req;
- xVncExtGetClientCutTextReply rep;
-
- if (!checkExtension(dpy)) return False;
-
- LockDisplay(dpy);
- GetReq(VncExtGetClientCutText, req);
- req->reqType = codes->major_opcode;
- req->vncExtReqType = X_VncExtGetClientCutText;
- if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
- UnlockDisplay(dpy);
- SyncHandle();
- return False;
- }
- UnlockDisplay(dpy);
- SyncHandle();
- *len = rep.textLen;
- *str = (char*) Xmalloc (*len+1);
- if (!*str) {
- _XEatData(dpy, (*len+1)&~1);
- return False;
- }
- _XReadPad(dpy, *str, *len);
- (*str)[*len] = 0;
- return True;
-}
-
Bool XVncExtSelectInput(Display* dpy, Window w, int mask)
{
xVncExtSelectInputReq* req;
@@ -359,35 +304,6 @@ Bool XVncExtApproveConnect(Display* dpy, void* opaqueId, int approve)
}
-static Bool XVncExtClientCutTextNotifyWireToEvent(Display* dpy, XEvent* e,
- xEvent* w)
-{
- XVncExtClientCutTextEvent* ev = (XVncExtClientCutTextEvent*)e;
- xVncExtClientCutTextNotifyEvent* wire = (xVncExtClientCutTextNotifyEvent*)w;
- ev->type = wire->type & 0x7f;
- ev->serial = _XSetLastRequestRead(dpy,(xGenericReply*)wire);
- ev->send_event = (wire->type & 0x80) != 0;
- ev->display = dpy;
- ev->window = wire->window;
- ev->time = wire->time;
- return True;
-}
-
-static Bool XVncExtSelectionChangeNotifyWireToEvent(Display* dpy, XEvent* e,
- xEvent* w)
-{
- XVncExtSelectionChangeEvent* ev = (XVncExtSelectionChangeEvent*)e;
- xVncExtSelectionChangeNotifyEvent* wire
- = (xVncExtSelectionChangeNotifyEvent*)w;
- ev->type = wire->type & 0x7f;
- ev->serial = _XSetLastRequestRead(dpy,(xGenericReply*)wire);
- ev->send_event = (wire->type & 0x80) != 0;
- ev->display = dpy;
- ev->window = wire->window;
- ev->selection = wire->selection;
- return True;
-}
-
static Bool XVncExtQueryConnectNotifyWireToEvent(Display* dpy, XEvent* e,
xEvent* w)
{
diff --git a/unix/vncconfig/vncExt.h b/unix/vncconfig/vncExt.h
index e41e2e5b..2b24469e 100644
--- a/unix/vncconfig/vncExt.h
+++ b/unix/vncconfig/vncExt.h
@@ -26,18 +26,12 @@ extern "C" {
#define X_VncExtGetParam 1
#define X_VncExtGetParamDesc 2
#define X_VncExtListParams 3
-#define X_VncExtSetServerCutText 4
-#define X_VncExtGetClientCutText 5
#define X_VncExtSelectInput 6
#define X_VncExtConnect 7
#define X_VncExtGetQueryConnect 8
#define X_VncExtApproveConnect 9
-#define VncExtClientCutTextNotify 0
-#define VncExtSelectionChangeNotify 1
#define VncExtQueryConnectNotify 2
-#define VncExtClientCutTextMask (1 << VncExtClientCutTextNotify)
-#define VncExtSelectionChangeMask (1 << VncExtSelectionChangeNotify)
#define VncExtQueryConnectMask (1 << VncExtQueryConnectNotify)
#define VncExtNumberEvents 3
@@ -51,8 +45,6 @@ Bool XVncExtGetParam(Display* dpy, const char* param, char** value, int* len);
char* XVncExtGetParamDesc(Display* dpy, const char* param);
char** XVncExtListParams(Display* dpy, int* nParams);
void XVncExtFreeParamList(char** list);
-Bool XVncExtSetServerCutText(Display* dpy, const char* str, int len);
-Bool XVncExtGetClientCutText(Display* dpy, char** str, int* len);
Bool XVncExtSelectInput(Display* dpy, Window w, int mask);
Bool XVncExtConnect(Display* dpy, const char* hostAndPort);
Bool XVncExtGetQueryConnect(Display* dpy, char** addr,
@@ -66,24 +58,6 @@ typedef struct {
Bool send_event;
Display *display;
Window window;
- Time time;
-} XVncExtClientCutTextEvent;
-
-typedef struct {
- int type;
- unsigned long serial;
- Bool send_event;
- Display *display;
- Window window;
- Atom selection;
-} XVncExtSelectionChangeEvent;
-
-typedef struct {
- int type;
- unsigned long serial;
- Bool send_event;
- Display *display;
- Window window;
} XVncExtQueryConnectEvent;
#endif
@@ -194,37 +168,6 @@ typedef struct {
typedef struct {
CARD8 reqType; /* always VncExtReqCode */
- CARD8 vncExtReqType; /* always VncExtSetServerCutText */
- CARD16 length B16;
- CARD32 textLen B32;
-} xVncExtSetServerCutTextReq;
-#define sz_xVncExtSetServerCutTextReq 8
-
-
-typedef struct {
- CARD8 reqType; /* always VncExtReqCode */
- CARD8 vncExtReqType; /* always VncExtGetClientCutText */
- CARD16 length B16;
-} xVncExtGetClientCutTextReq;
-#define sz_xVncExtGetClientCutTextReq 4
-
-typedef struct {
- BYTE type; /* X_Reply */
- BYTE pad0;
- CARD16 sequenceNumber B16;
- CARD32 length B32;
- CARD32 textLen B32;
- CARD32 pad1 B32;
- CARD32 pad2 B32;
- CARD32 pad3 B32;
- CARD32 pad4 B32;
- CARD32 pad5 B32;
-} xVncExtGetClientCutTextReply;
-#define sz_xVncExtGetClientCutTextReply 32
-
-
-typedef struct {
- CARD8 reqType; /* always VncExtReqCode */
CARD8 vncExtReqType; /* always VncExtSelectInput */
CARD16 length B16;
CARD32 window B32;
@@ -293,34 +236,6 @@ typedef struct {
typedef struct {
- BYTE type; /* always eventBase + VncExtClientCutTextNotify */
- BYTE pad0;
- CARD16 sequenceNumber B16;
- CARD32 window B32;
- CARD32 time B32;
- CARD32 pad1 B32;
- CARD32 pad2 B32;
- CARD32 pad3 B32;
- CARD32 pad4 B32;
- CARD32 pad5 B32;
-} xVncExtClientCutTextNotifyEvent;
-#define sz_xVncExtClientCutTextNotifyEvent 32
-
-typedef struct {
- BYTE type; /* always eventBase + VncExtSelectionChangeNotify */
- BYTE pad0;
- CARD16 sequenceNumber B16;
- CARD32 window B32;
- CARD32 selection B32;
- CARD32 pad1 B32;
- CARD32 pad2 B32;
- CARD32 pad3 B32;
- CARD32 pad4 B32;
- CARD32 pad5 B32;
-} xVncExtSelectionChangeNotifyEvent;
-#define sz_xVncExtSelectionChangeNotifyEvent 32
-
-typedef struct {
BYTE type; /* always eventBase + VncExtQueryConnectNotify */
BYTE pad0;
CARD16 sequenceNumber B16;
diff --git a/unix/vncconfig/vncconfig.cxx b/unix/vncconfig/vncconfig.cxx
index 2d6adf57..2bb299f0 100644
--- a/unix/vncconfig/vncconfig.cxx
+++ b/unix/vncconfig/vncconfig.cxx
@@ -1,4 +1,5 @@
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
+ * Copyright 2012-2016 Pierre Ossman for Cendio AB
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -38,7 +39,6 @@
#include <rfb/Configuration.h>
#include <rfb/Logger_stdio.h>
#include <rfb/LogWriter.h>
-#include <rfb/Timer.h>
#include "TXWindow.h"
#include "TXCheckbox.h"
#include "TXLabel.h"
@@ -51,22 +51,13 @@ LogWriter vlog("vncconfig");
StringParameter displayname("display", "The X display", "");
BoolParameter noWindow("nowin", "Don't display a window", 0);
BoolParameter iconic("iconic", "Start with window iconified", 0);
-BoolParameter setPrimary("SetPrimary", "Set the PRIMARY as well "
- "as the CLIPBOARD selection", true);
-BoolParameter sendPrimary("SendPrimary", "Send the PRIMARY as well as the "
- "CLIPBOARD selection", true);
-IntParameter pollTime("poll",
- "How often to poll for clipboard changes in ms", 0);
-
-inline const char* selectionName(Atom sel) {
- if (sel == xaCLIPBOARD) return "CLIPBOARD";
- if (sel == XA_PRIMARY) return "PRIMARY";
- return "unknown";
-}
#define ACCEPT_CUT_TEXT "AcceptCutText"
#define SEND_CUT_TEXT "SendCutText"
+#define SET_PRIMARY "SetPrimary"
+#define SEND_PRIMARY "SendPrimary"
+
char* programName = 0;
Display* dpy;
int vncExtEventBase, vncExtErrorBase;
@@ -83,90 +74,39 @@ static bool getBoolParam(Display* dpy, const char* param) {
class VncConfigWindow : public TXWindow, public TXEventHandler,
public TXDeleteWindowCallback,
public TXCheckboxCallback,
- public rfb::Timer::Callback,
public QueryResultCallback {
public:
VncConfigWindow(Display* dpy)
- : TXWindow(dpy, 300, 100), cutText(0), cutTextLen(0),
+ : TXWindow(dpy, 300, 100),
acceptClipboard(dpy, "Accept clipboard from viewers", this, false, this),
- setPrimaryCB(dpy, "Also set primary selection",
- this, false, this),
+ setPrimaryCB(dpy, "Also set primary selection", this, false, this),
sendClipboard(dpy, "Send clipboard to viewers", this, false, this),
sendPrimaryCB(dpy, "Send primary selection to viewers", this,false,this),
- pollTimer(this),
queryConnectDialog(0)
{
- selection[0] = selection[1] = 0;
- selectionLen[0] = selectionLen[1] = 0;
int y = yPad;
acceptClipboard.move(xPad, y);
acceptClipboard.checked(getBoolParam(dpy, ACCEPT_CUT_TEXT));
y += acceptClipboard.height();
setPrimaryCB.move(xPad + 10, y);
- setPrimaryCB.checked(setPrimary);
+ setPrimaryCB.checked(getBoolParam(dpy, SET_PRIMARY));
setPrimaryCB.disabled(!acceptClipboard.checked());
y += setPrimaryCB.height();
sendClipboard.move(xPad, y);
sendClipboard.checked(getBoolParam(dpy, SEND_CUT_TEXT));
y += sendClipboard.height();
- sendPrimaryCB.move(xPad, y);
- sendPrimaryCB.checked(sendPrimary);
+ sendPrimaryCB.move(xPad + 10, y);
+ sendPrimaryCB.checked(getBoolParam(dpy, SEND_PRIMARY));
sendPrimaryCB.disabled(!sendClipboard.checked());
y += sendPrimaryCB.height();
setEventHandler(this);
toplevel("VNC config", this, 0, 0, 0, iconic);
- XVncExtSelectInput(dpy, win(),
- VncExtClientCutTextMask|
- VncExtSelectionChangeMask|
- VncExtQueryConnectMask);
- XConvertSelection(dpy, XA_PRIMARY, XA_STRING,
- XA_PRIMARY, win(), CurrentTime);
- XConvertSelection(dpy, xaCLIPBOARD, XA_STRING,
- xaCLIPBOARD, win(), CurrentTime);
- if (pollTime != 0)
- pollTimer.start(pollTime);
+ XVncExtSelectInput(dpy, win(), VncExtQueryConnectMask);
}
- // handleEvent(). If we get a ClientCutTextNotify event from Xvnc, set the
- // primary and clipboard selections to the clientCutText. If we get a
- // SelectionChangeNotify event from Xvnc, set the serverCutText to the value
- // of the new selection.
+ // handleEvent()
virtual void handleEvent(TXWindow* w, XEvent* ev) {
- if (acceptClipboard.checked()) {
- if (ev->type == vncExtEventBase + VncExtClientCutTextNotify) {
- XVncExtClientCutTextEvent* cutEv = (XVncExtClientCutTextEvent*)ev;
- if (cutText)
- XFree(cutText);
- cutText = 0;
- if (XVncExtGetClientCutText(dpy, &cutText, &cutTextLen)) {
- vlog.debug("Got client cut text: '%.*s%s'",
- cutTextLen<9?cutTextLen:8, cutText,
- cutTextLen<9?"":"...");
- XStoreBytes(dpy, cutText, cutTextLen);
- if (setPrimaryCB.checked()) {
- ownSelection(XA_PRIMARY, cutEv->time);
- }
- ownSelection(xaCLIPBOARD, cutEv->time);
- delete [] selection[0];
- delete [] selection[1];
- selection[0] = selection[1] = 0;
- selectionLen[0] = selectionLen[1] = 0;
- }
- }
- }
- if (sendClipboard.checked()) {
- if (ev->type == vncExtEventBase + VncExtSelectionChangeNotify) {
- vlog.debug("selection change event");
- XVncExtSelectionChangeEvent* selEv = (XVncExtSelectionChangeEvent*)ev;
- if (selEv->selection == xaCLIPBOARD ||
- (selEv->selection == XA_PRIMARY && sendPrimaryCB.checked())) {
- if (!selectionOwner(selEv->selection))
- XConvertSelection(dpy, selEv->selection, XA_STRING,
- selEv->selection, win(), CurrentTime);
- }
- }
- }
if (ev->type == vncExtEventBase + VncExtQueryConnectNotify) {
vlog.debug("query connection event");
if (queryConnectDialog)
@@ -188,55 +128,6 @@ public:
}
}
}
-
-
- // selectionRequest() is called when we are the selection owner and another X
- // client has requested the selection. We simply put the server's cut text
- // into the requested property. TXWindow will handle the rest.
- bool selectionRequest(Window requestor, Atom selection, Atom property)
- {
- if (cutText)
- XChangeProperty(dpy, requestor, property, XA_STRING, 8,
- PropModeReplace, (unsigned char*)cutText,
- cutTextLen);
- return cutText;
- }
-
- // selectionNotify() is called when we have requested the selection from the
- // selection owner.
- void selectionNotify(XSelectionEvent* ev, Atom type, int format,
- int nitems, void* data)
- {
- if (ev->requestor != win() || ev->target != XA_STRING)
- return;
-
- if (data && format == 8) {
- int i = (ev->selection == XA_PRIMARY ? 0 : 1);
- if (selectionLen[i] == nitems && memcmp(selection[i], data, nitems) == 0)
- return;
- delete [] selection[i];
- selection[i] = new char[nitems];
- memcpy(selection[i], data, nitems);
- selectionLen[i] = nitems;
- if (cutTextLen == nitems && memcmp(cutText, data, nitems) == 0) {
- vlog.debug("ignoring duplicate cut text");
- return;
- }
- if (cutText)
- XFree(cutText);
- cutText = (char*)malloc(nitems); // assuming XFree() same as free()
- if (!cutText) {
- vlog.error("unable to allocate selection buffer");
- return;
- }
- memcpy(cutText, data, nitems);
- cutTextLen = nitems;
- vlog.debug("sending %s selection as server cut text: '%.*s%s'",
- selectionName(ev->selection),cutTextLen<9?cutTextLen:8,
- cutText, cutTextLen<9?"":"...");
- XVncExtSetServerCutText(dpy, cutText, cutTextLen);
- }
- }
// TXDeleteWindowCallback method
virtual void deleteWindow(TXWindow* w) {
@@ -253,20 +144,15 @@ public:
XVncExtSetParam(dpy, (sendClipboard.checked()
? SEND_CUT_TEXT "=1" : SEND_CUT_TEXT "=0"));
sendPrimaryCB.disabled(!sendClipboard.checked());
+ } else if (checkbox == &setPrimaryCB) {
+ XVncExtSetParam(dpy, (setPrimaryCB.checked()
+ ? SET_PRIMARY "=1" : SET_PRIMARY "=0"));
+ } else if (checkbox == &sendPrimaryCB) {
+ XVncExtSetParam(dpy, (sendPrimaryCB.checked()
+ ? SEND_PRIMARY "=1" : SEND_PRIMARY "=0"));
}
}
- // rfb::Timer::Callback interface
- virtual bool handleTimeout(rfb::Timer* timer) {
- if (sendPrimaryCB.checked() && !selectionOwner(XA_PRIMARY))
- XConvertSelection(dpy, XA_PRIMARY, XA_STRING,
- XA_PRIMARY, win(), CurrentTime);
- if (!selectionOwner(xaCLIPBOARD))
- XConvertSelection(dpy, xaCLIPBOARD, XA_STRING,
- xaCLIPBOARD, win(), CurrentTime);
- return true;
- }
-
// QueryResultCallback interface
virtual void queryApproved() {
XVncExtApproveConnect(dpy, queryConnectId, 1);
@@ -276,12 +162,8 @@ public:
}
private:
- char* cutText;
- int cutTextLen;
- char* selection[2];
- int selectionLen[2];
- TXCheckbox acceptClipboard, setPrimaryCB, sendClipboard, sendPrimaryCB;
- rfb::Timer pollTimer;
+ TXCheckbox acceptClipboard, setPrimaryCB;
+ TXCheckbox sendClipboard, sendPrimaryCB;
QueryConnectDialog* queryConnectDialog;
void* queryConnectId;
diff --git a/unix/vncconfig/vncconfig.man b/unix/vncconfig/vncconfig.man
index 6695be3d..06f9ca97 100644
--- a/unix/vncconfig/vncconfig.man
+++ b/unix/vncconfig/vncconfig.man
@@ -37,14 +37,11 @@ server with the VNC extension. Note that it cannot be used to control VNC
servers prior to version 4.
When run with no options, it runs as a kind of "helper" application for Xvnc.
-Its main purpose when run in this mode is to support clipboard transfer to and
-from the VNC viewer(s). Note that without a running instance of
-\fBvncconfig\fP there will be no clipboard support. It puts up a window with
-some checkboxes which can be used to disable clipboard transfers if required
-(in the future there may be more functions available from this window). The
-\fB-nowin\fP flag can be used if you always want clipboard support but don't
-wish to clutter the desktop with this window - alternatively the \fB-iconic\fP
-option can be used to make it iconified by default.
+Its main purpose when run in this mode is to query the user how new
+connections should be handled (provided this feature is enabled). The
+\fB-nowin\fP flag can be used if you always want the query support but don't
+wish to clutter the desktop with the settings window - alternatively the
+\fB-iconic\fP option can be used to make it iconified by default.
When run in any other mode, \fBvncconfig\fP is a one-shot program used to
configure or control Xvnc as appropriate. It can be used to tell Xvnc to
diff --git a/unix/vncserver b/unix/vncserver
index bb95506d..2ef436a7 100755
--- a/unix/vncserver
+++ b/unix/vncserver
@@ -26,10 +26,7 @@
# vncserver - wrapper script to start an X VNC server.
#
-#
# First make sure we're operating in a sane environment.
-#
-
$exedir = "";
$slashndx = rindex($0, "/");
if($slashndx>=0) {
@@ -41,7 +38,8 @@ $vncClasses = "";
&SanityCheck();
#
-# Global variables. You may want to configure some of these for your site.
+# Global variables. You may want to configure some of these for
+# your site
#
$geometry = "1024x768";
@@ -49,12 +47,18 @@ $geometry = "1024x768";
$vncJavaFiles = (((-d "$vncClasses") && "$vncClasses") ||
((-d "/usr/share/vnc/classes") && "/usr/share/vnc/classes") ||
((-d "/usr/local/vnc/classes") && "/usr/local/vnc/classes"));
-
+
$vncUserDir = "$ENV{HOME}/.vnc";
+$vncUserConfig = "$vncUserDir/config";
+
+$vncSystemConfigDir = "/etc/tigervnc";
+$vncSystemConfigDefaultsFile = "$vncSystemConfigDir/vncserver-config-defaults";
+$vncSystemConfigMandatoryFile = "$vncSystemConfigDir/vncserver-config-mandatory";
+
$skipxstartup = 0;
$xauthorityFile = "$ENV{XAUTHORITY}" || "$ENV{HOME}/.Xauthority";
-$xstartup = $vncUserDir . "/xstartup";
+$xstartupFile = $vncUserDir . "/xstartup";
$defaultXStartup
= ("#!/bin/sh\n\n".
"unset SESSION_MANAGER\n".
@@ -159,7 +163,7 @@ if ($opt{'-noxstartup'}) {
$skipxstartup = 1;
}
if ($opt{'-xstartup'}) {
- $xstartup = $opt{'-xstartup'};
+ $xstartupFile = $opt{'-xstartup'};
}
if ($opt{'-fp'}) {
$fontPath = $opt{'-fp'};
@@ -168,22 +172,89 @@ if ($opt{'-fp'}) {
&CheckGeometryAndDepth();
-
# Create the user's vnc directory if necessary.
-
if (!(-e $vncUserDir)) {
if (!mkdir($vncUserDir,0755)) {
die "$prog: Could not create $vncUserDir.\n";
}
}
-
+
+# Find display number.
+if ((@ARGV > 0) && ($ARGV[0] =~ /^:(\d+)$/)) {
+ $displayNumber = $1;
+ shift(@ARGV);
+ if (!&CheckDisplayNumber($displayNumber)) {
+ die "A VNC server is already running as :$displayNumber\n";
+ }
+} elsif ((@ARGV > 0) && ($ARGV[0] !~ /^-/) && ($ARGV[0] !~ /^\+/)) {
+ &Usage();
+} else {
+ $displayNumber = &GetDisplayNumber();
+}
+
+$vncPort = 5900 + $displayNumber;
+
+if ($opt{'-name'}) {
+ $desktopName = $opt{'-name'};
+} else {
+ $desktopName = "$host:$displayNumber ($ENV{USER})";
+}
+
+my %default_opts;
+my %config;
+
+# We set some reasonable defaults. Config file settings
+# override these where present.
+$default_opts{desktop} = &quotedString($desktopName);
+$default_opts{httpd} = $vncJavaFiles if ($vncJavaFiles);
+$default_opts{auth} = $xauthorityFile;
+$default_opts{geometry} = $geometry if ($geometry);
+$default_opts{depth} = $depth if ($depth);
+$default_opts{pixelformat} = $pixelformat if ($pixelformat);
+$default_opts{rfbwait} = 30000;
+$default_opts{rfbauth} = "$vncUserDir/passwd";
+$default_opts{rfbport} = $vncPort;
+$default_opts{fp} = $fontPath if ($fontPath);
+$default_opts{pn} = "";
+
+# Load user-overrideable system defaults
+LoadConfig($vncSystemConfigDefaultsFile);
+
+# Then the user's settings
+LoadConfig($vncUserConfig);
+
+# And then override anything set above if mandatory settings exist.
+# WARNING: "Mandatory" is used loosely here! As the man page says,
+# there is nothing stopping someone from EASILY subverting the
+# settings in $vncSystemConfigMandatoryFile by simply passing
+# CLI args to vncserver, which trump config files! To properly
+# hard force policy in a non-subvertible way would require major
+# development work that touches Xvnc itself.
+LoadConfig($vncSystemConfigMandatoryFile, 1);
+
+#
# Check whether VNC authentication is enabled, and if so, prompt the user to
# create a VNC password if they don't already have one.
+#
$securityTypeArgSpecified = 0;
$vncAuthEnabled = 0;
$passwordArgSpecified = 0;
+@vncAuthStrings = ("vncauth", "tlsvnc", "x509vnc");
+
+# ...first we check our configuration files' settings
+if ($config{'securitytypes'}) {
+ $securityTypeArgSpecified = 1;
+ foreach $arg2 (split(',', $config{'securitytypes'})) {
+ if (grep {$_ eq lc($arg2)} @vncAuthStrings) {
+ $vncAuthEnabled = 1;
+ }
+ }
+}
+# ...and finally we check CLI args, which in the case of the topic at
+# hand (VNC auth or not), override anything found in configuration files
+# (even so-called "mandatory" settings).
for ($i = 0; $i < @ARGV; ++$i) {
# -SecurityTypes can be followed by a space or "="
my @splitargs = split('=', $ARGV[$i]);
@@ -195,8 +266,7 @@ for ($i = 0; $i < @ARGV; ++$i) {
$securityTypeArgSpecified = 1;
}
foreach $arg2 (split(',', @splitargs[1])) {
- if (lc($arg2) eq "vncauth" || lc($arg2) eq "tlsvnc"
- || lc($arg2) eq "x509vnc") {
+ if (grep {$_ eq lc($arg2)} @vncAuthStrings) {
$vncAuthEnabled = 1;
}
}
@@ -218,81 +288,43 @@ if ((!$securityTypeArgSpecified || $vncAuthEnabled) && !$passwordArgSpecified) {
}
}
}
-
-# Find display number.
-
-if ((@ARGV > 0) && ($ARGV[0] =~ /^:(\d+)$/)) {
- $displayNumber = $1;
- shift(@ARGV);
- if (!&CheckDisplayNumber($displayNumber)) {
- die "A VNC server is already running as :$displayNumber\n";
- }
-} elsif ((@ARGV > 0) && ($ARGV[0] !~ /^-/) && ($ARGV[0] !~ /^\+/)) {
- &Usage();
-} else {
- $displayNumber = &GetDisplayNumber();
-}
-
-$vncPort = 5900 + $displayNumber;
$desktopLog = "$vncUserDir/$host:$displayNumber.log";
unlink($desktopLog);
# Make an X server cookie and set up the Xauthority file
-
+# mcookie is a part of util-linux, usually only GNU/Linux systems have it.
$cookie = `mcookie`;
+# Fallback for non GNU/Linux OS - use /dev/urandom on systems that have it,
+# otherwise use perl's random number generator, seeded with the sum
+# of the current time, our PID and part of the encrypted form of the password.
+if ($cookie eq "" && open(URANDOM, '<', '/dev/urandom')) {
+ my $randata;
+ if (sysread(URANDOM, $randata, 16) == 16) {
+ $cookie = unpack 'h*', $randata;
+ }
+ close(URANDOM);
+}
+if ($cookie eq "") {
+ srand(time+$$+unpack("L",`cat $vncUserDir/passwd`));
+ for (1..16) {
+ $cookie .= sprintf("%02x", int(rand(256)) % 256);
+ }
+}
open(XAUTH, "|xauth -f $xauthorityFile source -");
print XAUTH "add $host:$displayNumber . $cookie\n";
print XAUTH "add $host/unix:$displayNumber . $cookie\n";
close(XAUTH);
-if ($opt{'-name'}) {
- $desktopName = $opt{'-name'};
-} else {
- $desktopName = "$host:$displayNumber ($ENV{USER})";
-}
-
# Now start the X VNC Server
+# We build up our Xvnc command with options
$cmd = $exedir."Xvnc :$displayNumber";
-my %default_opts;
-my %config;
-
-$default_opts{desktop} = &quotedString($desktopName);
-$default_opts{httpd} = $vncJavaFiles if ($vncJavaFiles);
-$default_opts{auth} = $xauthorityFile;
-$default_opts{geometry} = $geometry if ($geometry);
-$default_opts{depth} = $depth if ($depth);
-$default_opts{pixelformat} = $pixelformat if ($pixelformat);
-$default_opts{rfbwait} = 30000;
-$default_opts{rfbauth} = "$vncUserDir/passwd";
-$default_opts{rfbport} = $vncPort;
-$default_opts{fp} = $fontPath if ($fontPath);
-$default_opts{pn} = "";
-
-# if a user configuration file already exists
-if(stat("$vncUserDir/config")) {
-
- # loads and parses configuration file
- if(open(IN, "$vncUserDir/config")) {
- while(<IN>) {
- next if /^#/;
- if(my ($k, $v) = /^\s*(\w+)\s*=\s*(.+)$/) {
- $config{$k} = $v;
- } elsif ($_ =~ m/^\s*(\S+)/) {
- $config{$1} = $k;
- }
- }
- close(IN);
- }
-}
-
foreach my $k (sort keys %config) {
$cmd .= " -$k $config{$k}";
- # user's option takes precedence
- delete $default_opts{$k};
+ delete $default_opts{$k}; # file options take precedence
}
foreach my $k (sort keys %default_opts) {
@@ -300,23 +332,20 @@ foreach my $k (sort keys %default_opts) {
}
# Add color database stuff here, e.g.:
-#
# $cmd .= " -co /usr/lib/X11/rgb";
-#
foreach $arg (@ARGV) {
- $cmd .= " " . &quotedString($arg);
+ $cmd .= " " . &quotedString($arg);
}
$cmd .= " >> " . &quotedString($desktopLog) . " 2>&1";
# Run $cmd and record the process ID.
-
$pidFile = "$vncUserDir/$host:$displayNumber.pid";
system("$cmd & echo \$! >$pidFile");
# Give Xvnc a chance to start up
-sleep(3);
+sleep(3);
if ($fontPath ne $defFontPath) {
unless (kill 0, `cat $pidFile`) {
if ($fpArgSpecified) {
@@ -347,31 +376,28 @@ unless (kill 0, `cat $pidFile`) {
warn "\nNew '$desktopName' desktop is $host:$displayNumber\n\n";
# Create the user's xstartup script if necessary.
-
if (! $skipxstartup) {
- if (!(-e "$xstartup")) {
- warn "Creating default startup script $xstartup\n";
- open(XSTARTUP, ">$xstartup");
+ if (!(-e "$xstartupFile")) {
+ warn "Creating default startup script $xstartupFile\n";
+ open(XSTARTUP, ">$xstartupFile");
print XSTARTUP $defaultXStartup;
close(XSTARTUP);
- chmod 0755, "$xstartup";
+ chmod 0755, "$xstartupFile";
}
}
# Create the user's config file if necessary.
-
if (!(-e "$vncUserDir/config")) {
warn "Creating default config $vncUserDir/config\n";
- open(XSTARTUP, ">$vncUserDir/config");
- print XSTARTUP $defaultConfig;
- close(XSTARTUP);
+ open(VNCUSERCONFIG, ">$vncUserDir/config");
+ print VNCUSERCONFIG $defaultConfig;
+ close(VNCUSERCONFIG);
chmod 0644, "$vncUserDir/config";
}
# Run the X startup script.
-
if (! $skipxstartup) {
- warn "Starting applications specified in $xstartup\n";
+ warn "Starting applications specified in $xstartupFile\n";
}
warn "Log file is $desktopLog\n\n";
@@ -387,11 +413,9 @@ if (-e "/tmp/.X11-unix/X$displayNumber" ||
}
$ENV{VNCDESKTOP}= $desktopName;
-system($exedir."vncconfig -nowin >> " . &quotedString($desktopLog) . " 2>&1 &");
-
if ($opt{'-fg'}) {
if (! $skipxstartup) {
- system("$xstartup >> " . &quotedString($desktopLog) . " 2>&1");
+ system("$xstartupFile >> " . &quotedString($desktopLog) . " 2>&1");
}
if (kill 0, `cat $pidFile`) {
$opt{'-kill'} = ':'.$displayNumber;
@@ -400,12 +424,12 @@ if ($opt{'-fg'}) {
} else {
if ($opt{'-autokill'}) {
if (! $skipxstartup) {
- system("($xstartup; $0 -kill :$displayNumber) >> "
+ system("($xstartupFile; $0 -kill :$displayNumber) >> "
. &quotedString($desktopLog) . " 2>&1 &");
}
} else {
if (! $skipxstartup) {
- system("$xstartup >> " . &quotedString($desktopLog)
+ system("$xstartupFile >> " . &quotedString($desktopLog)
. " 2>&1 &");
}
}
@@ -413,8 +437,46 @@ if ($opt{'-fg'}) {
exit;
-
###############################################################################
+# Functions
+###############################################################################
+
+#
+# Populate the global %config hash with settings from a specified
+# vncserver configuration file if it exists
+#
+# Args: 1. file path
+# 2. optional boolean flag to enable warning when a previously
+# set configuration setting is being overridden
+#
+sub LoadConfig {
+ local ($configFile, $warnoverride) = @_;
+ local ($toggle) = undef;
+
+ if (stat($configFile)) {
+ if (open(IN, $configFile)) {
+ while (<IN>) {
+ next if /^#/;
+ if (my ($k, $v) = /^\s*(\w+)\s*=\s*(.+)$/) {
+ $k = lc($k); # must normalize key case
+ if ($warnoverride && $config{$k}) {
+ print("Warning: $configFile is overriding previously defined '$k' to be '$v'\n");
+ }
+ $config{$k} = $v;
+ } elsif ($_ =~ m/^\s*(\S+)/) {
+ # We can't reasonably warn on override of toggles (e.g. AlwaysShared)
+ # because it would get crazy to do so. We'd have to check if the
+ # current config file being loaded defined the logical opposite setting
+ # (NeverShared vs. AlwaysShared, etc etc).
+ $toggle = lc($1); # must normalize key case
+ $config{$toggle} = $k;
+ }
+ }
+ close(IN);
+ }
+ }
+}
+
#
# CheckGeometryAndDepth simply makes sure that the geometry and depth values
# are sensible.
@@ -453,7 +515,7 @@ sub GetDisplayNumber
return $n+0; # Bruce Mah's workaround for bug in perl 5.005_02
}
}
-
+
die "$prog: no free display number on $host.\n";
}
@@ -697,7 +759,7 @@ sub Kill
} else {
warn "Xvnc process ID $pid already killed\n";
$opt{'-kill'} =~ s/://;
-
+
if (-e "/tmp/.X11-unix/X$opt{'-kill'}") {
print "Xvnc did not appear to shut down cleanly.";
print " Removing /tmp/.X11-unix/X$opt{'-kill'}\n";
@@ -759,18 +821,12 @@ sub ParseOptions
}
-#
# Routine to make sure we're operating in a sane environment.
-#
-
sub SanityCheck
{
local ($cmd);
- #
# Get the program name
- #
-
($prog) = ($0 =~ m|([^/]+)$|);
#
@@ -778,7 +834,7 @@ sub SanityCheck
#
cmd:
- foreach $cmd ("uname","mcookie","xauth") {
+ foreach $cmd ("uname","xauth") {
for (split(/:/,$ENV{PATH})) {
if (-x "$_/$cmd") {
next cmd;
@@ -812,14 +868,9 @@ sub SanityCheck
}
}
- #
- # Check the HOME environment variable is set
- #
-
if (!defined($ENV{HOME})) {
die "$prog: The HOME environment variable is not set.\n";
}
-# chdir($ENV{HOME});
#
# Find socket constants. 'use Socket' is a perl5-ism, so we wrap it in an
diff --git a/unix/vncserver.man b/unix/vncserver.man
index fd7e93a6..9108683c 100644
--- a/unix/vncserver.man
+++ b/unix/vncserver.man
@@ -147,6 +147,26 @@ A shell script specifying X applications to be run when a VNC desktop is
started. If this file does not exist, then vncserver will create a default
xstartup script which attempts to launch your chosen window manager.
.TP
+/etc/tigervnc/vncserver-config-defaults
+The optional system-wide equivalent of $HOME/.vnc/config. If this file exists
+and defines options to be passed to Xvnc, they will be used as defaults for
+users. The user's $HOME/.vnc/config overrides settings configured in this file.
+The overall configuration file load order is: this file, $HOME/.vnc/config,
+and then /etc/tigervnc/vncserver-config-mandatory. None are required to exist.
+.TP
+/etc/tigervnc/vncserver-config-mandatory
+The optional system-wide equivalent of $HOME/.vnc/config. If this file exists
+and defines options to be passed to Xvnc, they will override any of the same
+options defined in a user's $HOME/.vnc/config. This file offers a mechanism
+to establish some basic form of system-wide policy. WARNING! There is
+nothing stopping users from constructing their own vncserver-like script
+that calls Xvnc directly to bypass any options defined in
+/etc/tigervnc/vncserver-config-mandatory. Likewise, any CLI arguments passed
+to vncserver will override ANY config file setting of the same name. The
+overall configuration file load order is:
+/etc/tigervnc/vncserver-config-defaults, $HOME/.vnc/config, and then this file.
+None are required to exist.
+.TP
$HOME/.vnc/config
An optional server config file wherein options to be passed to Xvnc are listed
to avoid hard-coding them to the physical invocation. List options in this file
diff --git a/unix/xserver/hw/vnc/Input.c b/unix/xserver/hw/vnc/Input.c
index 55befa75..64305cbc 100644
--- a/unix/xserver/hw/vnc/Input.c
+++ b/unix/xserver/hw/vnc/Input.c
@@ -33,7 +33,9 @@
#include "inpututils.h"
#endif
#include "mi.h"
+#include "mipointer.h"
#include "exevents.h"
+#include "scrnintstr.h"
#include "xkbsrv.h"
#include "xkbstr.h"
#include "xserver-properties.h"
@@ -186,8 +188,16 @@ void vncPointerMove(int x, int y)
void vncGetPointerPos(int *x, int *y)
{
- if (vncPointerDev != NULL)
- GetSpritePosition(vncPointerDev, &cursorPosX, &cursorPosY);
+ if (vncPointerDev != NULL) {
+ ScreenPtr ptrScreen;
+
+ miPointerGetPosition(vncPointerDev, &cursorPosX, &cursorPosY);
+
+ /* Pointer coordinates are screen relative */
+ ptrScreen = miPointerGetScreen(vncPointerDev);
+ cursorPosX += ptrScreen->x;
+ cursorPosY += ptrScreen->y;
+ }
*x = cursorPosX;
*y = cursorPosY;
diff --git a/unix/xserver/hw/vnc/Makefile.am b/unix/xserver/hw/vnc/Makefile.am
index d7ab2595..0d6a4ac4 100644
--- a/unix/xserver/hw/vnc/Makefile.am
+++ b/unix/xserver/hw/vnc/Makefile.am
@@ -3,18 +3,20 @@ LIB_DIR=${top_builddir}/../../common
RFB_LIB=$(LIB_DIR)/rfb/librfb.la
RDR_LIB=$(LIB_DIR)/rdr/librdr.la
+OS_LIB=$(LIB_DIR)/os/libos.la
NETWORK_LIB=$(LIB_DIR)/network/libnetwork.la
XREGION_LIB=$(LIB_DIR)/Xregion/libXregion.la
-COMMON_LIBS=$(NETWORK_LIB) $(RFB_LIB) $(RDR_LIB) $(XREGION_LIB)
+COMMON_LIBS=$(NETWORK_LIB) $(RFB_LIB) $(RDR_LIB) $(XREGION_LIB) $(OS_LIB)
noinst_LTLIBRARIES = libvnccommon.la
HDRS = vncExtInit.h vncHooks.h \
- vncBlockHandler.h XorgGlue.h \
- XserverDesktop.h xorg-version.h \
+ vncBlockHandler.h vncSelection.h \
+ XorgGlue.h XserverDesktop.h xorg-version.h \
Input.h RFBGlue.h
-libvnccommon_la_SOURCES = $(HDRS) vncExt.c vncExtInit.cc vncHooks.c \
+libvnccommon_la_SOURCES = $(HDRS) \
+ vncExt.c vncExtInit.cc vncHooks.c vncSelection.c \
vncBlockHandler.c XorgGlue.c RFBGlue.cc XserverDesktop.cc \
Input.c InputXKB.c
diff --git a/unix/xserver/hw/vnc/RFBGlue.cc b/unix/xserver/hw/vnc/RFBGlue.cc
index d6c3ef6a..c9153364 100644
--- a/unix/xserver/hw/vnc/RFBGlue.cc
+++ b/unix/xserver/hw/vnc/RFBGlue.cc
@@ -31,6 +31,7 @@ using namespace rfb;
// Loggers used by C code must be created here
static LogWriter inputLog("Input");
+static LogWriter selectionLog("Selection");
void vncInitRFB(void)
{
diff --git a/unix/xserver/hw/vnc/XorgGlue.c b/unix/xserver/hw/vnc/XorgGlue.c
index d7892b18..712ed6af 100644
--- a/unix/xserver/hw/vnc/XorgGlue.c
+++ b/unix/xserver/hw/vnc/XorgGlue.c
@@ -92,6 +92,16 @@ void vncGetScreenFormat(int scrIdx, int *depth, int *bpp,
*blueMask = vis->blueMask;
}
+int vncGetScreenX(int scrIdx)
+{
+ return screenInfo.screens[scrIdx]->x;
+}
+
+int vncGetScreenY(int scrIdx)
+{
+ return screenInfo.screens[scrIdx]->y;
+}
+
int vncGetScreenWidth(int scrIdx)
{
return screenInfo.screens[scrIdx]->width;
diff --git a/unix/xserver/hw/vnc/XorgGlue.h b/unix/xserver/hw/vnc/XorgGlue.h
index 92b0d18d..5cae860a 100644
--- a/unix/xserver/hw/vnc/XorgGlue.h
+++ b/unix/xserver/hw/vnc/XorgGlue.h
@@ -33,6 +33,8 @@ void vncGetScreenFormat(int scrIdx, int *depth, int *bpp,
int *trueColour, int *bigEndian,
int *redMask, int *greenMask, int *blueMask);
+int vncGetScreenX(int scrIdx);
+int vncGetScreenY(int scrIdx);
int vncGetScreenWidth(int scrIdx);
int vncGetScreenHeight(int scrIdx);
diff --git a/unix/xserver/hw/vnc/XserverDesktop.cc b/unix/xserver/hw/vnc/XserverDesktop.cc
index f1c9b747..f6e6a7fe 100644
--- a/unix/xserver/hw/vnc/XserverDesktop.cc
+++ b/unix/xserver/hw/vnc/XserverDesktop.cc
@@ -41,8 +41,10 @@
#include <rfb/ServerCore.h>
#include "XserverDesktop.h"
+#include "vncBlockHandler.h"
#include "vncExtInit.h"
#include "vncHooks.h"
+#include "vncSelection.h"
#include "XorgGlue.h"
#include "Input.h"
@@ -110,15 +112,29 @@ XserverDesktop::XserverDesktop(int screenIndex_,
if (!httpListeners.empty ())
httpServer = new FileHTTPServer(this);
+
+ for (std::list<TcpListener*>::iterator i = listeners.begin();
+ i != listeners.end();
+ i++) {
+ vncSetNotifyFd((*i)->getFd(), screenIndex, true, false);
+ }
+
+ for (std::list<TcpListener*>::iterator i = httpListeners.begin();
+ i != httpListeners.end();
+ i++) {
+ vncSetNotifyFd((*i)->getFd(), screenIndex, true, false);
+ }
}
XserverDesktop::~XserverDesktop()
{
while (!listeners.empty()) {
+ vncRemoveNotifyFd(listeners.back()->getFd());
delete listeners.back();
listeners.pop_back();
}
while (!httpListeners.empty()) {
+ vncRemoveNotifyFd(listeners.back()->getFd());
delete httpListeners.back();
httpListeners.pop_back();
}
@@ -388,215 +404,132 @@ void XserverDesktop::add_copied(const rfb::Region &dest, const rfb::Point &delta
}
}
-void XserverDesktop::readBlockHandler(fd_set* fds, struct timeval ** timeout)
+void XserverDesktop::handleSocketEvent(int fd, bool read, bool write)
{
- // We don't have a good callback for when we can init input devices[1],
- // so we abuse the fact that this routine will be called first thing
- // once the dix is done initialising.
- // [1] Technically Xvnc has InitInput(), but libvnc.so has nothing.
- vncInitInputDevice();
-
try {
- int nextTimeout;
-
- // Add all sockets we want read events for, after purging
- // any closed sockets.
- for (std::list<network::TcpListener*>::iterator i = listeners.begin();
- i != listeners.end();
- i++)
- FD_SET((*i)->getFd(), fds);
- for (std::list<network::TcpListener*>::iterator i = httpListeners.begin();
- i != httpListeners.end();
- i++)
- FD_SET((*i)->getFd(), fds);
-
- std::list<Socket*> sockets;
- std::list<Socket*>::iterator i;
- server->getSockets(&sockets);
- for (i = sockets.begin(); i != sockets.end(); i++) {
- int fd = (*i)->getFd();
- if ((*i)->isShutdown()) {
- vlog.debug("client gone, sock %d",fd);
- server->removeSocket(*i);
- vncClientGone(fd);
- delete (*i);
- } else {
- FD_SET(fd, fds);
- }
- }
- if (httpServer) {
- httpServer->getSockets(&sockets);
- for (i = sockets.begin(); i != sockets.end(); i++) {
- int fd = (*i)->getFd();
- if ((*i)->isShutdown()) {
- vlog.debug("http client gone, sock %d",fd);
- httpServer->removeSocket(*i);
- delete (*i);
- } else {
- FD_SET(fd, fds);
- }
- }
+ if (read) {
+ if (handleListenerEvent(fd, &listeners, server))
+ return;
+ if (handleListenerEvent(fd, &httpListeners, httpServer))
+ return;
}
- // Then check when the next timer will expire.
- // (this unfortunately also triggers any already expired timers)
- nextTimeout = server->checkTimeouts();
- if (nextTimeout > 0) {
- // No timeout specified? Or later timeout than we need?
- if ((*timeout == NULL) ||
- ((*timeout)->tv_sec > (nextTimeout/1000)) ||
- (((*timeout)->tv_sec == (nextTimeout/1000)) &&
- ((*timeout)->tv_usec > ((nextTimeout%1000)*1000)))) {
- dixTimeout.tv_sec = nextTimeout/1000;
- dixTimeout.tv_usec = (nextTimeout%1000)*1000;
- *timeout = &dixTimeout;
- }
- }
+ if (handleSocketEvent(fd, server, read, write))
+ return;
+ if (handleSocketEvent(fd, httpServer, read, write))
+ return;
+ vlog.error("Cannot find file descriptor for socket event");
} catch (rdr::Exception& e) {
- vlog.error("XserverDesktop::blockHandler: %s",e.str());
+ vlog.error("XserverDesktop::handleSocketEvent: %s",e.str());
}
}
-void XserverDesktop::readWakeupHandler(fd_set* fds, int nfds)
+bool XserverDesktop::handleListenerEvent(int fd,
+ std::list<TcpListener*>* sockets,
+ SocketServer* sockserv)
{
- try {
- // First check for file descriptors with something to do
- if (nfds >= 1) {
-
- for (std::list<network::TcpListener*>::iterator i = listeners.begin();
- i != listeners.end();
- i++) {
- if (FD_ISSET((*i)->getFd(), fds)) {
- FD_CLR((*i)->getFd(), fds);
- Socket* sock = (*i)->accept();
- sock->outStream().setBlocking(false);
- server->addSocket(sock);
- vlog.debug("new client, sock %d",sock->getFd());
- }
- }
+ std::list<TcpListener*>::iterator i;
- for (std::list<network::TcpListener*>::iterator i = httpListeners.begin();
- i != httpListeners.end();
- i++) {
- if (FD_ISSET((*i)->getFd(), fds)) {
- FD_CLR((*i)->getFd(), fds);
- Socket* sock = (*i)->accept();
- sock->outStream().setBlocking(false);
- httpServer->addSocket(sock);
- vlog.debug("new http client, sock %d",sock->getFd());
- }
- }
+ for (i = sockets->begin(); i != sockets->end(); i++) {
+ if ((*i)->getFd() == fd)
+ break;
+ }
- std::list<Socket*> sockets;
- server->getSockets(&sockets);
- std::list<Socket*>::iterator i;
- for (i = sockets.begin(); i != sockets.end(); i++) {
- int fd = (*i)->getFd();
- if (FD_ISSET(fd, fds)) {
- FD_CLR(fd, fds);
- server->processSocketReadEvent(*i);
- }
- }
+ if (i == sockets->end())
+ return false;
- if (httpServer) {
- httpServer->getSockets(&sockets);
- for (i = sockets.begin(); i != sockets.end(); i++) {
- int fd = (*i)->getFd();
- if (FD_ISSET(fd, fds)) {
- FD_CLR(fd, fds);
- httpServer->processSocketReadEvent(*i);
- }
- }
- }
+ Socket* sock = (*i)->accept();
+ sock->outStream().setBlocking(false);
+ vlog.debug("new client, sock %d", sock->getFd());
+ sockserv->addSocket(sock);
- // We are responsible for propagating mouse movement between clients
- int cursorX, cursorY;
- vncGetPointerPos(&cursorX, &cursorY);
- if (oldCursorPos.x != cursorX || oldCursorPos.y != cursorY) {
- oldCursorPos.x = cursorX;
- oldCursorPos.y = cursorY;
- server->setCursorPos(oldCursorPos);
- }
- }
+ return true;
+}
- // Then let the timers do some processing. Rescheduling is done in
- // blockHandler().
- server->checkTimeouts();
- } catch (rdr::Exception& e) {
- vlog.error("XserverDesktop::wakeupHandler: %s",e.str());
+bool XserverDesktop::handleSocketEvent(int fd,
+ SocketServer* sockserv,
+ bool read, bool write)
+{
+ std::list<Socket*> sockets;
+ std::list<Socket*>::iterator i;
+
+ sockserv->getSockets(&sockets);
+ for (i = sockets.begin(); i != sockets.end(); i++) {
+ if ((*i)->getFd() == fd)
+ break;
}
+
+ if (i == sockets.end())
+ return false;
+
+ if (read)
+ sockserv->processSocketReadEvent(*i);
+
+ if (write)
+ sockserv->processSocketWriteEvent(*i);
+
+ return true;
}
-void XserverDesktop::writeBlockHandler(fd_set* fds, struct timeval ** timeout)
+void XserverDesktop::blockHandler(int* timeout)
{
+ // We don't have a good callback for when we can init input devices[1],
+ // so we abuse the fact that this routine will be called first thing
+ // once the dix is done initialising.
+ // [1] Technically Xvnc has InitInput(), but libvnc.so has nothing.
+ vncInitInputDevice();
+
try {
std::list<Socket*> sockets;
std::list<Socket*>::iterator i;
-
server->getSockets(&sockets);
for (i = sockets.begin(); i != sockets.end(); i++) {
int fd = (*i)->getFd();
if ((*i)->isShutdown()) {
vlog.debug("client gone, sock %d",fd);
+ vncRemoveNotifyFd(fd);
server->removeSocket(*i);
vncClientGone(fd);
delete (*i);
} else {
- if ((*i)->outStream().bufferUsage() > 0)
- FD_SET(fd, fds);
+ /* Update existing NotifyFD to listen for write (or not) */
+ vncSetNotifyFd(fd, screenIndex, true, (*i)->outStream().bufferUsage() > 0);
}
}
-
if (httpServer) {
httpServer->getSockets(&sockets);
for (i = sockets.begin(); i != sockets.end(); i++) {
int fd = (*i)->getFd();
if ((*i)->isShutdown()) {
vlog.debug("http client gone, sock %d",fd);
+ vncRemoveNotifyFd(fd);
httpServer->removeSocket(*i);
delete (*i);
} else {
- if ((*i)->outStream().bufferUsage() > 0)
- FD_SET(fd, fds);
+ /* Update existing NotifyFD to listen for write (or not) */
+ vncSetNotifyFd(fd, screenIndex, true, (*i)->outStream().bufferUsage() > 0);
}
}
}
- } catch (rdr::Exception& e) {
- vlog.error("XserverDesktop::writeBlockHandler: %s",e.str());
- }
-}
-
-void XserverDesktop::writeWakeupHandler(fd_set* fds, int nfds)
-{
- if (nfds < 1)
- return;
-
- try {
- std::list<Socket*> sockets;
- std::list<Socket*>::iterator i;
- server->getSockets(&sockets);
- for (i = sockets.begin(); i != sockets.end(); i++) {
- int fd = (*i)->getFd();
- if (FD_ISSET(fd, fds)) {
- FD_CLR(fd, fds);
- server->processSocketWriteEvent(*i);
- }
+ // We are responsible for propagating mouse movement between clients
+ int cursorX, cursorY;
+ vncGetPointerPos(&cursorX, &cursorY);
+ cursorX -= vncGetScreenX(screenIndex);
+ cursorY -= vncGetScreenY(screenIndex);
+ if (oldCursorPos.x != cursorX || oldCursorPos.y != cursorY) {
+ oldCursorPos.x = cursorX;
+ oldCursorPos.y = cursorY;
+ server->setCursorPos(oldCursorPos);
}
- if (httpServer) {
- httpServer->getSockets(&sockets);
- for (i = sockets.begin(); i != sockets.end(); i++) {
- int fd = (*i)->getFd();
- if (FD_ISSET(fd, fds)) {
- FD_CLR(fd, fds);
- httpServer->processSocketWriteEvent(*i);
- }
- }
- }
+ // Trigger timers and check when the next will expire
+ int nextTimeout = server->checkTimeouts();
+ if (nextTimeout > 0 && (*timeout == -1 || nextTimeout < *timeout))
+ *timeout = nextTimeout;
} catch (rdr::Exception& e) {
- vlog.error("XserverDesktop::writeWakeupHandler: %s",e.str());
+ vlog.error("XserverDesktop::blockHandler: %s",e.str());
}
}
@@ -604,6 +537,7 @@ void XserverDesktop::addClient(Socket* sock, bool reverse)
{
vlog.debug("new client, sock %d reverse %d",sock->getFd(),reverse);
server->addSocket(sock, reverse);
+ vncSetNotifyFd(sock->getFd(), screenIndex, true, false);
}
void XserverDesktop::disconnectClients()
@@ -647,7 +581,8 @@ void XserverDesktop::approveConnection(uint32_t opaqueId, bool accept,
void XserverDesktop::pointerEvent(const Point& pos, int buttonMask)
{
- vncPointerMove(pos.x, pos.y);
+ vncPointerMove(pos.x + vncGetScreenX(screenIndex),
+ pos.y + vncGetScreenY(screenIndex));
vncPointerButtonAction(buttonMask);
}
diff --git a/unix/xserver/hw/vnc/XserverDesktop.h b/unix/xserver/hw/vnc/XserverDesktop.h
index c0690286..07bd3995 100644
--- a/unix/xserver/hw/vnc/XserverDesktop.h
+++ b/unix/xserver/hw/vnc/XserverDesktop.h
@@ -43,7 +43,7 @@ namespace rfb {
class VNCServerST;
}
-namespace network { class TcpListener; class Socket; }
+namespace network { class TcpListener; class Socket; class SocketServer; }
class XserverDesktop : public rfb::SDesktop, public rfb::FullFramePixelBuffer,
public rdr::Substitutor,
@@ -69,10 +69,8 @@ public:
const unsigned char *rgbaData);
void add_changed(const rfb::Region &region);
void add_copied(const rfb::Region &dest, const rfb::Point &delta);
- void readBlockHandler(fd_set* fds, struct timeval ** timeout);
- void readWakeupHandler(fd_set* fds, int nfds);
- void writeBlockHandler(fd_set* fds, struct timeval ** timeout);
- void writeWakeupHandler(fd_set* fds, int nfds);
+ void handleSocketEvent(int fd, bool read, bool write);
+ void blockHandler(int* timeout);
void addClient(network::Socket* sock, bool reverse);
void disconnectClients();
@@ -107,6 +105,14 @@ public:
const char* userName,
char** reason);
+protected:
+ bool handleListenerEvent(int fd,
+ std::list<network::TcpListener*>* sockets,
+ network::SocketServer* sockserv);
+ bool handleSocketEvent(int fd,
+ network::SocketServer* sockserv,
+ bool read, bool write);
+
private:
rfb::ScreenSet computeScreenLayout();
@@ -117,7 +123,6 @@ private:
std::list<network::TcpListener*> httpListeners;
bool deferredUpdateTimerSet;
bool directFbptr;
- struct timeval dixTimeout;
uint32_t queryConnectId;
network::Socket* queryConnectSocket;
diff --git a/unix/xserver/hw/vnc/Xvnc.man b/unix/xserver/hw/vnc/Xvnc.man
index a4d9f8d3..04e8f94b 100644
--- a/unix/xserver/hw/vnc/Xvnc.man
+++ b/unix/xserver/hw/vnc/Xvnc.man
@@ -126,14 +126,8 @@ screen is updated. Otherwise the delay is from the first update. Default
is off.
.
.TP
-.B \-SendCutText
-Send clipboard changes to clients (default is on). Note that you must also run
-\fBvncconfig\fP(1) to get the clipboard to work.
-.
-.TP
.B \-AcceptCutText
-Accept clipboard updates from clients (default is on). Note that you must also
-run \fBvncconfig\fP(1) to get the clipboard to work.
+Accept clipboard updates from clients (default is on).
.
.TP
.B \-MaxCutText \fIbytes\fP
@@ -141,6 +135,15 @@ The maximum size of a clipboard update that will be accepted from a client.
Default is \fB262144\fP.
.
.TP
+.B \-SendCutText
+Send clipboard changes to clients (default is on).
+.
+.TP
+.B \-SendPrimary
+Send the primary selection and cut buffer to the server as well as the
+clipboard selection. Default is on.
+.
+.TP
.B \-AcceptPointerEvents
Accept pointer press and release events from clients (default is on).
.
@@ -314,7 +317,7 @@ programs allowed to override the parameters.
When \fBNoClipboard\fP parameter is set, allowing override of \fBSendCutText\fP
and \fBAcceptCutText\fP has no effect.
-Default is \fBdesktop,AcceptPointerEvents,SendCutText,AcceptCutText\fP.
+Default is \fBdesktop,AcceptPointerEvents,SendCutText,AcceptCutText,SendPrimary,SetPrimary\fP.
.SH USAGE WITH INETD
By configuring the \fBinetd\fP(1) service appropriately, Xvnc can be launched
diff --git a/unix/xserver/hw/vnc/vncBlockHandler.c b/unix/xserver/hw/vnc/vncBlockHandler.c
index 4e444783..390a9b3c 100644
--- a/unix/xserver/hw/vnc/vncBlockHandler.c
+++ b/unix/xserver/hw/vnc/vncBlockHandler.c
@@ -25,75 +25,224 @@
#include <X11/Xpoll.h>
+#include "os.h"
#include "dix.h"
#include "scrnintstr.h"
#include "vncExtInit.h"
#include "vncBlockHandler.h"
+#include "xorg-version.h"
+#if XORG >= 119
+static void vncBlockHandler(void* data, void* timeout);
+static void vncSocketNotify(int fd, int xevents, void *data);
+#else
static void vncBlockHandler(void * data, OSTimePtr t, void * readmask);
static void vncWakeupHandler(void * data, int nfds, void * readmask);
-void vncWriteBlockHandler(fd_set *fds);
-void vncWriteWakeupHandler(int nfds, fd_set *fds);
+
+struct vncFdEntry {
+ int fd;
+ int read, write;
+ int scrIdx;
+ struct vncFdEntry* next;
+};
+
+static struct vncFdEntry* fdsHead = NULL;
+#endif
void vncRegisterBlockHandlers(void)
{
- if (!RegisterBlockAndWakeupHandlers(vncBlockHandler, vncWakeupHandler, 0))
+ if (!RegisterBlockAndWakeupHandlers(vncBlockHandler,
+#if XORG >= 119
+ (ServerWakeupHandlerProcPtr)NoopDDA,
+#else
+ vncWakeupHandler,
+#endif
+ 0))
FatalError("RegisterBlockAndWakeupHandlers() failed\n");
}
+void vncSetNotifyFd(int fd, int scrIdx, int read, int write)
+{
+#if XORG >= 119
+ int mask = (read ? X_NOTIFY_READ : 0) | (write ? X_NOTIFY_WRITE : 0);
+ SetNotifyFd(fd, vncSocketNotify, mask, (void*)scrIdx);
+#else
+ static struct vncFdEntry* entry;
+
+ entry = fdsHead;
+ while (entry) {
+ if (entry->fd == fd) {
+ assert(entry->scrIdx == scrIdx);
+ entry->read = read;
+ entry->write = write;
+ return;
+ }
+ entry = entry->next;
+ }
+
+ entry = malloc(sizeof(struct vncFdEntry));
+ memset(entry, 0, sizeof(struct vncFdEntry));
+
+ entry->fd = fd;
+ entry->scrIdx = scrIdx;
+ entry->read = read;
+ entry->write = write;
+
+ entry->next = fdsHead;
+ fdsHead = entry;
+#endif
+}
+
+void vncRemoveNotifyFd(int fd)
+{
+#if XORG >= 119
+ RemoveNotifyFd(fd);
+#else
+ static struct vncFdEntry** prev;
+ static struct vncFdEntry* entry;
+
+ prev = &fdsHead;
+ entry = fdsHead;
+ while (entry) {
+ if (entry->fd == fd) {
+ *prev = entry->next;
+ return;
+ }
+ prev = &entry->next;
+ entry = entry->next;
+ }
+
+ assert(FALSE);
+#endif
+}
+
+#if XORG >= 119
+static void vncSocketNotify(int fd, int xevents, void *data)
+{
+ int scrIdx;
+
+ scrIdx = (int)data;
+ vncHandleSocketEvent(fd, scrIdx,
+ xevents & X_NOTIFY_READ,
+ xevents & X_NOTIFY_WRITE);
+}
+#endif
+
+#if XORG < 119
static void vncWriteBlockHandlerFallback(OSTimePtr timeout);
static void vncWriteWakeupHandlerFallback(void);
+void vncWriteBlockHandler(fd_set *fds);
+void vncWriteWakeupHandler(int nfds, fd_set *fds);
+#endif
//
-// vncBlockHandler - called just before the X server goes into select(). Call
-// on to the block handler for each desktop. Then check whether any of the
-// selections have changed, and if so, notify any interested X clients.
+// vncBlockHandler - called just before the X server goes into poll().
+//
+// For older versions of X this also allows us to register file
+// descriptors that we want read events on.
//
-static void vncBlockHandler(void * data, OSTimePtr timeout, void * readmask)
+#if XORG >= 119
+static void vncBlockHandler(void* data, void* timeout)
+#else
+static void vncBlockHandler(void * data, OSTimePtr t, void * readmask)
+#endif
{
- fd_set* fds = (fd_set*)readmask;
+#if XORG < 119
+ int _timeout;
+ int* timeout = &_timeout;
+ static struct timeval tv;
+
+ fd_set* fds;
+ static struct vncFdEntry* entry;
+
+ if (*t == NULL)
+ _timeout = -1;
+ else
+ _timeout = (*t)->tv_sec * 1000 + (*t)->tv_usec / 1000;
+#endif
+
+ vncCallBlockHandlers(timeout);
- vncWriteBlockHandlerFallback(timeout);
+#if XORG < 119
+ if (_timeout != -1) {
+ tv.tv_sec= _timeout / 1000;
+ tv.tv_usec = (_timeout % 1000) * 1000;
+ *t = &tv;
+ }
+
+ fds = (fd_set*)readmask;
+ entry = fdsHead;
+ while (entry) {
+ if (entry->read)
+ FD_SET(entry->fd, fds);
+ entry = entry->next;
+ }
- vncCallReadBlockHandlers(fds, timeout);
+ vncWriteBlockHandlerFallback(t);
+#endif
}
+#if XORG < 119
static void vncWakeupHandler(void * data, int nfds, void * readmask)
{
fd_set* fds = (fd_set*)readmask;
- vncCallReadWakeupHandlers(fds, nfds);
+ static struct vncFdEntry* entry;
+
+ if (nfds <= 0)
+ return;
+
+ entry = fdsHead;
+ while (entry) {
+ if (entry->read && FD_ISSET(entry->fd, fds))
+ vncHandleSocketEvent(entry->fd, entry->scrIdx, TRUE, FALSE);
+ entry = entry->next;
+ }
vncWriteWakeupHandlerFallback();
}
+#endif
//
-// vncWriteBlockHandler - extra hack to be able to get the main select loop
-// to monitor writeable fds and not just readable. This requirers a modified
-// Xorg and might therefore not be called. When it is called though, it will
-// do so before vncBlockHandler (and vncWriteWakeupHandler called after
-// vncWakeupHandler).
+// vncWriteBlockHandler - extra hack to be able to get old versions of the X
+// server to monitor writeable fds and not just readable. This requirers a
+// modified Xorg and might therefore not be called.
//
+#if XORG < 119
static Bool needFallback = TRUE;
static fd_set fallbackFds;
static struct timeval tw;
void vncWriteBlockHandler(fd_set *fds)
{
- struct timeval *dummy;
+ static struct vncFdEntry* entry;
needFallback = FALSE;
- dummy = NULL;
- vncCallWriteBlockHandlers(fds, &dummy);
+ entry = fdsHead;
+ while (entry) {
+ if (entry->write)
+ FD_SET(entry->fd, fds);
+ entry = entry->next;
+ }
}
void vncWriteWakeupHandler(int nfds, fd_set *fds)
{
- vncCallWriteWakeupHandlers(fds, nfds);
+ static struct vncFdEntry* entry;
+
+ if (nfds <= 0)
+ return;
+
+ entry = fdsHead;
+ while (entry) {
+ if (entry->write && FD_ISSET(entry->fd, fds))
+ vncHandleSocketEvent(entry->fd, entry->scrIdx, FALSE, TRUE);
+ entry = entry->next;
+ }
}
static void vncWriteBlockHandlerFallback(OSTimePtr timeout)
@@ -144,3 +293,4 @@ static void vncWriteWakeupHandlerFallback(void)
vncWriteWakeupHandler(ret, &fallbackFds);
}
+#endif
diff --git a/unix/xserver/hw/vnc/vncBlockHandler.h b/unix/xserver/hw/vnc/vncBlockHandler.h
index 556528bd..c1bdaac5 100644
--- a/unix/xserver/hw/vnc/vncBlockHandler.h
+++ b/unix/xserver/hw/vnc/vncBlockHandler.h
@@ -26,6 +26,9 @@ extern "C" {
void vncRegisterBlockHandlers(void);
+void vncSetNotifyFd(int fd, int scrIdx, int read, int write);
+void vncRemoveNotifyFd(int fd);
+
#ifdef __cplusplus
}
#endif
diff --git a/unix/xserver/hw/vnc/vncExt.c b/unix/xserver/hw/vnc/vncExt.c
index b27115f6..0ee32101 100644
--- a/unix/xserver/hw/vnc/vncExt.c
+++ b/unix/xserver/hw/vnc/vncExt.c
@@ -27,7 +27,6 @@
#include "dixstruct.h"
#include "extnsionst.h"
#include "scrnintstr.h"
-#include "selection.h"
#define _VNCEXT_SERVER_
#define _VNCEXT_PROTO_
@@ -44,17 +43,11 @@ static void vncResetProc(ExtensionEntry* extEntry);
static void vncClientStateChange(CallbackListPtr*, void *, void *);
-static void vncSelectionCallback(CallbackListPtr *callbacks,
- void * data, void * args);
-
static int vncErrorBase = 0;
static int vncEventBase = 0;
int vncNoClipboard = 0;
-static char* clientCutText = NULL;
-static int clientCutTextLen = 0;
-
static struct VncInputSelect* vncInputSelectHead = NULL;
struct VncInputSelect {
@@ -83,10 +76,6 @@ int vncAddExtension(void)
FatalError("Add ClientStateCallback failed\n");
}
- if (!AddCallback(&SelectionCallback, vncSelectionCallback, 0)) {
- FatalError("Add SelectionCallback failed\n");
- }
-
return 0;
}
@@ -121,47 +110,6 @@ int vncNotifyQueryConnect(void)
return count;
}
-void vncClientCutText(const char* str, int len)
-{
- xVncExtClientCutTextNotifyEvent ev;
-
- if (clientCutText != NULL)
- free(clientCutText);
- clientCutTextLen = 0;
-
- clientCutText = malloc(len);
- if (clientCutText == NULL) {
- ErrorF("Could not allocate clipboard buffer\n");
- return;
- }
-
- memcpy(clientCutText, str, len);
- clientCutTextLen = len;
-
- ev.type = vncEventBase + VncExtClientCutTextNotify;
- for (struct VncInputSelect* cur = vncInputSelectHead; cur; cur = cur->next) {
- if (cur->mask & VncExtClientCutTextMask) {
- ev.sequenceNumber = cur->client->sequence;
- ev.window = cur->window;
- ev.time = GetTimeInMillis();
- if (cur->client->swapped) {
-#if XORG < 112
- int n;
- swaps(&ev.sequenceNumber, n);
- swapl(&ev.window, n);
- swapl(&ev.time, n);
-#else
- swaps(&ev.sequenceNumber);
- swapl(&ev.window);
- swapl(&ev.time);
-#endif
- }
- WriteToClient(cur->client, sizeof(xVncExtClientCutTextNotifyEvent),
- (char *)&ev);
- }
- }
-}
-
static int ProcVncExtSetParam(ClientPtr client)
{
char *param;
@@ -397,73 +345,6 @@ static int SProcVncExtListParams(ClientPtr client)
return ProcVncExtListParams(client);
}
-static int ProcVncExtSetServerCutText(ClientPtr client)
-{
- REQUEST(xVncExtSetServerCutTextReq);
- REQUEST_FIXED_SIZE(xVncExtSetServerCutTextReq, stuff->textLen);
- vncServerCutText((const char*)&stuff[1], stuff->textLen);
- return (client->noClientException);
-}
-
-static int SProcVncExtSetServerCutText(ClientPtr client)
-{
- REQUEST(xVncExtSetServerCutTextReq);
-#if XORG < 112
- register char n;
- swaps(&stuff->length, n);
-#else
- swaps(&stuff->length);
-#endif
- REQUEST_AT_LEAST_SIZE(xVncExtSetServerCutTextReq);
-#if XORG < 112
- swapl(&stuff->textLen, n);
-#else
- swapl(&stuff->textLen);
-#endif
- return ProcVncExtSetServerCutText(client);
-}
-
-static int ProcVncExtGetClientCutText(ClientPtr client)
-{
- xVncExtGetClientCutTextReply rep;
-
- REQUEST_SIZE_MATCH(xVncExtGetClientCutTextReq);
-
- rep.type = X_Reply;
- rep.length = (clientCutTextLen + 3) >> 2;
- rep.sequenceNumber = client->sequence;
- rep.textLen = clientCutTextLen;
- if (client->swapped) {
-#if XORG < 112
- int n;
- swaps(&rep.sequenceNumber, n);
- swapl(&rep.length, n);
- swapl(&rep.textLen, n);
-#else
- swaps(&rep.sequenceNumber);
- swapl(&rep.length);
- swapl(&rep.textLen);
-#endif
- }
- WriteToClient(client, sizeof(xVncExtGetClientCutTextReply), (char *)&rep);
- if (clientCutText)
- WriteToClient(client, clientCutTextLen, clientCutText);
- return (client->noClientException);
-}
-
-static int SProcVncExtGetClientCutText(ClientPtr client)
-{
- REQUEST(xVncExtGetClientCutTextReq);
-#if XORG < 112
- register char n;
- swaps(&stuff->length, n);
-#else
- swaps(&stuff->length);
-#endif
- REQUEST_SIZE_MATCH(xVncExtGetClientCutTextReq);
- return ProcVncExtGetClientCutText(client);
-}
-
static int ProcVncExtSelectInput(ClientPtr client)
{
struct VncInputSelect** nextPtr;
@@ -667,10 +548,6 @@ static int ProcVncExtDispatch(ClientPtr client)
return ProcVncExtGetParamDesc(client);
case X_VncExtListParams:
return ProcVncExtListParams(client);
- case X_VncExtSetServerCutText:
- return ProcVncExtSetServerCutText(client);
- case X_VncExtGetClientCutText:
- return ProcVncExtGetClientCutText(client);
case X_VncExtSelectInput:
return ProcVncExtSelectInput(client);
case X_VncExtConnect:
@@ -696,10 +573,6 @@ static int SProcVncExtDispatch(ClientPtr client)
return SProcVncExtGetParamDesc(client);
case X_VncExtListParams:
return SProcVncExtListParams(client);
- case X_VncExtSetServerCutText:
- return SProcVncExtSetServerCutText(client);
- case X_VncExtGetClientCutText:
- return SProcVncExtGetClientCutText(client);
case X_VncExtSelectInput:
return SProcVncExtSelectInput(client);
case X_VncExtConnect:
@@ -732,39 +605,3 @@ static void vncClientStateChange(CallbackListPtr * l, void * d, void * p)
}
}
}
-
-static void SendSelectionChangeEvent(Atom selection)
-{
- xVncExtSelectionChangeNotifyEvent ev;
- ev.type = vncEventBase + VncExtSelectionChangeNotify;
- for (struct VncInputSelect* cur = vncInputSelectHead; cur; cur = cur->next) {
- if (cur->mask & VncExtSelectionChangeMask) {
- ev.sequenceNumber = cur->client->sequence;
- ev.window = cur->window;
- ev.selection = selection;
- if (cur->client->swapped) {
-#if XORG < 112
- int n;
- swaps(&ev.sequenceNumber, n);
- swapl(&ev.window, n);
- swapl(&ev.selection, n);
-#else
- swaps(&ev.sequenceNumber);
- swapl(&ev.window);
- swapl(&ev.selection);
-#endif
- }
- WriteToClient(cur->client, sizeof(xVncExtSelectionChangeNotifyEvent),
- (char *)&ev);
- }
- }
-}
-
-static void vncSelectionCallback(CallbackListPtr *callbacks, void * data, void * args)
-{
- SelectionInfoRec *info = (SelectionInfoRec *) args;
- Selection *selection = info->selection;
-
- SendSelectionChangeEvent(selection->selection);
-}
-
diff --git a/unix/xserver/hw/vnc/vncExtInit.cc b/unix/xserver/hw/vnc/vncExtInit.cc
index 1d374938..57bf6d8d 100644
--- a/unix/xserver/hw/vnc/vncExtInit.cc
+++ b/unix/xserver/hw/vnc/vncExtInit.cc
@@ -38,7 +38,9 @@
#include "vncExtInit.h"
#include "vncHooks.h"
#include "vncBlockHandler.h"
+#include "vncSelection.h"
#include "XorgGlue.h"
+#include "xorg-version.h"
using namespace rfb;
@@ -83,7 +85,12 @@ rfb::BoolParameter avoidShiftNumLock("AvoidShiftNumLock",
true);
rfb::StringParameter allowOverride("AllowOverride",
"Comma separated list of parameters that can be modified using VNC extension.",
- "desktop,AcceptPointerEvents,SendCutText,AcceptCutText");
+ "desktop,AcceptPointerEvents,SendCutText,AcceptCutText,SendPrimary,SetPrimary");
+rfb::BoolParameter setPrimary("SetPrimary", "Set the PRIMARY as well "
+ "as the CLIPBOARD selection", true);
+rfb::BoolParameter sendPrimary("SendPrimary",
+ "Send the PRIMARY as well as the CLIPBOARD selection",
+ true);
static PixelFormat vncGetPixelFormat(int scrIdx)
{
@@ -151,6 +158,8 @@ void vncExtensionInit(void)
if (ret == -1)
return;
+ vncSelectionInit();
+
vlog.info("VNC extension running!");
try {
@@ -241,37 +250,31 @@ int vncExtensionIsActive(int scrIdx)
return (desktop[scrIdx] != NULL);
}
-void vncCallReadBlockHandlers(fd_set * fds, struct timeval ** timeout)
+void vncHandleSocketEvent(int fd, int scrIdx, int read, int write)
{
- for (int scr = 0; scr < vncGetScreenCount(); scr++)
- if (desktop[scr])
- desktop[scr]->readBlockHandler(fds, timeout);
+ desktop[scrIdx]->handleSocketEvent(fd, read, write);
}
-void vncCallReadWakeupHandlers(fd_set * fds, int nfds)
+void vncCallBlockHandlers(int* timeout)
{
for (int scr = 0; scr < vncGetScreenCount(); scr++)
if (desktop[scr])
- desktop[scr]->readWakeupHandler(fds, nfds);
+ desktop[scr]->blockHandler(timeout);
}
-void vncCallWriteBlockHandlers(fd_set * fds, struct timeval ** timeout)
+int vncGetAvoidShiftNumLock(void)
{
- for (int scr = 0; scr < vncGetScreenCount(); scr++)
- if (desktop[scr])
- desktop[scr]->writeBlockHandler(fds, timeout);
+ return (bool)avoidShiftNumLock;
}
-void vncCallWriteWakeupHandlers(fd_set * fds, int nfds)
+int vncGetSetPrimary(void)
{
- for (int scr = 0; scr < vncGetScreenCount(); scr++)
- if (desktop[scr])
- desktop[scr]->writeWakeupHandler(fds, nfds);
+ return (bool)setPrimary;
}
-int vncGetAvoidShiftNumLock(void)
+int vncGetSendPrimary(void)
{
- return (bool)avoidShiftNumLock;
+ return (bool)sendPrimary;
}
void vncUpdateDesktopName(void)
@@ -376,10 +379,14 @@ void vncAddCopied(int scrIdx, const struct UpdateRect *extents,
desktop[scrIdx]->add_copied(reg, rfb::Point(dx, dy));
}
-void vncSetCursor(int scrIdx, int width, int height, int hotX, int hotY,
+void vncSetCursor(int width, int height, int hotX, int hotY,
const unsigned char *rgbaData)
{
- desktop[scrIdx]->setCursor(width, height, hotX, hotY, rgbaData);
+ for (int scr = 0; scr < vncGetScreenCount(); scr++) {
+ if (desktop[scr] == NULL)
+ continue;
+ desktop[scr]->setCursor(width, height, hotX, hotY, rgbaData);
+ }
}
void vncPreScreenResize(int scrIdx)
diff --git a/unix/xserver/hw/vnc/vncExtInit.h b/unix/xserver/hw/vnc/vncExtInit.h
index be6487c8..9f8d9e76 100644
--- a/unix/xserver/hw/vnc/vncExtInit.h
+++ b/unix/xserver/hw/vnc/vncExtInit.h
@@ -41,8 +41,6 @@ int vncAddExtension(void);
int vncNotifyQueryConnect(void);
-void vncClientCutText(const char* str, int len);
-
// vncExtInit.cc
extern void* vncFbptr[];
extern int vncFbstride[];
@@ -52,13 +50,14 @@ extern int vncInetdSock;
void vncExtensionInit(void);
int vncExtensionIsActive(int scrIdx);
-void vncCallReadBlockHandlers(fd_set * fds, struct timeval ** timeout);
-void vncCallReadWakeupHandlers(fd_set * fds, int nfds);
-void vncCallWriteBlockHandlers(fd_set * fds, struct timeval ** timeout);
-void vncCallWriteWakeupHandlers(fd_set * fds, int nfds);
+void vncHandleSocketEvent(int fd, int scrIdx, int read, int write);
+void vncCallBlockHandlers(int* timeout);
int vncGetAvoidShiftNumLock(void);
+int vncGetSetPrimary(void);
+int vncGetSendPrimary(void);
+
void vncUpdateDesktopName(void);
void vncServerCutText(const char *text, size_t len);
@@ -83,7 +82,7 @@ void vncAddCopied(int scrIdx, const struct UpdateRect *extents,
int nRects, const struct UpdateRect *rects,
int dx, int dy);
-void vncSetCursor(int scrIdx, int width, int height, int hotX, int hotY,
+void vncSetCursor(int width, int height, int hotX, int hotY,
const unsigned char *rgbaData);
void vncPreScreenResize(int scrIdx);
diff --git a/unix/xserver/hw/vnc/vncHooks.c b/unix/xserver/hw/vnc/vncHooks.c
index b21f4c67..29f3f8b8 100644
--- a/unix/xserver/hw/vnc/vncHooks.c
+++ b/unix/xserver/hw/vnc/vncHooks.c
@@ -128,9 +128,11 @@ static Bool vncHooksDisplayCursor(DeviceIntPtr pDev,
#if XORG <= 112
static void vncHooksBlockHandler(int i, pointer blockData, pointer pTimeout,
pointer pReadmask);
-#else
+#elif XORG <= 118
static void vncHooksBlockHandler(ScreenPtr pScreen, void * pTimeout,
void * pReadmask);
+#else
+static void vncHooksBlockHandler(ScreenPtr pScreen, void * pTimeout);
#endif
#ifdef RENDER
static void vncHooksComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask,
@@ -699,7 +701,7 @@ static Bool vncHooksDisplayCursor(DeviceIntPtr pDev,
}
#endif
- vncSetCursor(pScreen->myNum, width, height, hotX, hotY, rgbaData);
+ vncSetCursor(width, height, hotX, hotY, rgbaData);
free(rgbaData);
}
@@ -716,9 +718,11 @@ out:
#if XORG <= 112
static void vncHooksBlockHandler(int i, pointer blockData, pointer pTimeout,
pointer pReadmask)
-#else
+#elif XORG <= 118
static void vncHooksBlockHandler(ScreenPtr pScreen_, void * pTimeout,
void * pReadmask)
+#else
+static void vncHooksBlockHandler(ScreenPtr pScreen_, void * pTimeout)
#endif
{
#if XORG <= 112
@@ -731,8 +735,10 @@ static void vncHooksBlockHandler(ScreenPtr pScreen_, void * pTimeout,
#if XORG <= 112
(*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
-#else
+#elif XORG <= 118
(*pScreen->BlockHandler) (pScreen, pTimeout, pReadmask);
+#else
+ (*pScreen->BlockHandler) (pScreen, pTimeout);
#endif
vncHooksScreen->ignoreHooks--;
@@ -1033,12 +1039,21 @@ static void vncHooksCopyClip(GCPtr dst, GCPtr src) {
// Unwrap and rewrap helpers
+#if XORG >= 116
+#define GC_OP_PROLOGUE(pGC, name)\
+ vncHooksGCPtr pGCPriv = vncHooksGCPrivate(pGC);\
+ const GCFuncs *oldFuncs = pGC->funcs;\
+ pGC->funcs = pGCPriv->wrappedFuncs;\
+ pGC->ops = pGCPriv->wrappedOps; \
+ DBGPRINT((stderr,"vncHooks" #name " called\n"))
+#else
#define GC_OP_PROLOGUE(pGC, name)\
vncHooksGCPtr pGCPriv = vncHooksGCPrivate(pGC);\
GCFuncs *oldFuncs = pGC->funcs;\
pGC->funcs = pGCPriv->wrappedFuncs;\
pGC->ops = pGCPriv->wrappedOps; \
DBGPRINT((stderr,"vncHooks" #name " called\n"))
+#endif
#define GC_OP_EPILOGUE(pGC)\
pGCPriv->wrappedOps = pGC->ops;\
diff --git a/unix/xserver/hw/vnc/vncSelection.c b/unix/xserver/hw/vnc/vncSelection.c
new file mode 100644
index 00000000..e50548a4
--- /dev/null
+++ b/unix/xserver/hw/vnc/vncSelection.c
@@ -0,0 +1,521 @@
+/* Copyright 2016 Pierre Ossman for Cendio AB
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <X11/Xatom.h>
+
+#include "propertyst.h"
+#include "scrnintstr.h"
+#include "selection.h"
+#include "windowstr.h"
+#include "xace.h"
+
+#include "xorg-version.h"
+
+#include "vncExtInit.h"
+#include "vncSelection.h"
+#include "RFBGlue.h"
+
+#define LOG_NAME "Selection"
+
+#define LOG_ERROR(...) vncLogError(LOG_NAME, __VA_ARGS__)
+#define LOG_STATUS(...) vncLogStatus(LOG_NAME, __VA_ARGS__)
+#define LOG_INFO(...) vncLogInfo(LOG_NAME, __VA_ARGS__)
+#define LOG_DEBUG(...) vncLogDebug(LOG_NAME, __VA_ARGS__)
+
+static Atom xaPRIMARY, xaCLIPBOARD;
+static Atom xaTARGETS, xaTIMESTAMP, xaSTRING, xaTEXT, xaUTF8_STRING;
+
+static WindowPtr pWindow;
+static Window wid;
+
+static char* clientCutText;
+static int clientCutTextLen;
+
+static int vncCreateSelectionWindow(void);
+static int vncOwnSelection(Atom selection);
+static int vncProcConvertSelection(ClientPtr client);
+static int vncProcSendEvent(ClientPtr client);
+static void vncSelectionCallback(CallbackListPtr *callbacks,
+ void * data, void * args);
+
+static int (*origProcConvertSelection)(ClientPtr);
+static int (*origProcSendEvent)(ClientPtr);
+
+void vncSelectionInit(void)
+{
+ xaPRIMARY = MakeAtom("PRIMARY", 7, TRUE);
+ xaCLIPBOARD = MakeAtom("CLIPBOARD", 9, TRUE);
+
+ xaTARGETS = MakeAtom("TARGETS", 7, TRUE);
+ xaTIMESTAMP = MakeAtom("TIMESTAMP", 9, TRUE);
+ xaSTRING = MakeAtom("STRING", 6, TRUE);
+ xaTEXT = MakeAtom("TEXT", 4, TRUE);
+ xaUTF8_STRING = MakeAtom("UTF8_STRING", 11, TRUE);
+
+ /* There are no hooks for when these are internal windows, so
+ * override the relevant handlers. */
+ origProcConvertSelection = ProcVector[X_ConvertSelection];
+ ProcVector[X_ConvertSelection] = vncProcConvertSelection;
+ origProcSendEvent = ProcVector[X_SendEvent];
+ ProcVector[X_SendEvent] = vncProcSendEvent;
+
+ if (!AddCallback(&SelectionCallback, vncSelectionCallback, 0))
+ FatalError("Add VNC SelectionCallback failed\n");
+}
+
+void vncClientCutText(const char* str, int len)
+{
+ int rc;
+
+ if (clientCutText != NULL)
+ free(clientCutText);
+
+ clientCutText = malloc(len);
+ if (clientCutText == NULL) {
+ LOG_ERROR("Could not allocate clipboard buffer");
+ DeleteWindowFromAnySelections(pWindow);
+ return;
+ }
+
+ memcpy(clientCutText, str, len);
+ clientCutTextLen = len;
+
+ if (vncGetSetPrimary()) {
+ rc = vncOwnSelection(xaPRIMARY);
+ if (rc != Success)
+ LOG_ERROR("Could not set PRIMARY selection");
+ }
+
+ vncOwnSelection(xaCLIPBOARD);
+ if (rc != Success)
+ LOG_ERROR("Could not set CLIPBOARD selection");
+}
+
+static int vncCreateSelectionWindow(void)
+{
+ ScreenPtr pScreen;
+ int result;
+
+ if (pWindow != NULL)
+ return Success;
+
+ pScreen = screenInfo.screens[0];
+
+ wid = FakeClientID(0);
+ pWindow = CreateWindow(wid, pScreen->root,
+ 0, 0, 100, 100, 0, InputOnly,
+ 0, NULL, 0, serverClient,
+ CopyFromParent, &result);
+ if (!pWindow)
+ return result;
+
+ if (!AddResource(pWindow->drawable.id, RT_WINDOW, pWindow))
+ return BadAlloc;
+
+ LOG_DEBUG("Created selection window");
+
+ return Success;
+}
+
+static int vncOwnSelection(Atom selection)
+{
+ Selection *pSel;
+ int rc;
+
+ SelectionInfoRec info;
+
+ rc = vncCreateSelectionWindow();
+ if (rc != Success)
+ return rc;
+
+ rc = dixLookupSelection(&pSel, selection, serverClient, DixSetAttrAccess);
+ if (rc == Success) {
+ if (pSel->client && (pSel->client != serverClient)) {
+ xEvent event = {
+ .u.selectionClear.time = currentTime.milliseconds,
+ .u.selectionClear.window = pSel->window,
+ .u.selectionClear.atom = pSel->selection
+ };
+ event.u.u.type = SelectionClear;
+ WriteEventsToClient(pSel->client, 1, &event);
+ }
+ } else if (rc == BadMatch) {
+ pSel = dixAllocateObjectWithPrivates(Selection, PRIVATE_SELECTION);
+ if (!pSel)
+ return BadAlloc;
+
+ pSel->selection = selection;
+
+ rc = XaceHookSelectionAccess(serverClient, &pSel,
+ DixCreateAccess | DixSetAttrAccess);
+ if (rc != Success) {
+ free(pSel);
+ return rc;
+ }
+
+ pSel->next = CurrentSelections;
+ CurrentSelections = pSel;
+ }
+ else
+ return rc;
+
+ pSel->lastTimeChanged = currentTime;
+ pSel->window = wid;
+ pSel->pWin = pWindow;
+ pSel->client = serverClient;
+
+ LOG_DEBUG("Grabbed %s selection", NameForAtom(selection));
+
+ info.selection = pSel;
+ info.client = serverClient;
+ info.kind = SelectionSetOwner;
+ CallCallbacks(&SelectionCallback, &info);
+
+ return Success;
+}
+
+static int vncConvertSelection(ClientPtr client, Atom selection,
+ Atom target, Atom property,
+ Window requestor, TimeStamp time)
+{
+ Selection *pSel;
+ WindowPtr pWin;
+ int rc;
+
+ Atom realProperty;
+
+ xEvent event;
+
+ LOG_DEBUG("Selection request for %s (type %s)",
+ NameForAtom(selection), NameForAtom(target));
+
+ rc = dixLookupSelection(&pSel, selection, client, DixGetAttrAccess);
+ if (rc != Success)
+ return rc;
+
+ if (CompareTimeStamps(time, pSel->lastTimeChanged) != LATER)
+ return BadMatch;
+
+ rc = dixLookupWindow(&pWin, requestor, client, DixSetAttrAccess);
+ if (rc != Success)
+ return rc;
+
+ if (property != None)
+ realProperty = property;
+ else
+ realProperty = target;
+
+ /* FIXME: MULTIPLE target */
+
+ if (target == xaTARGETS) {
+ Atom targets[] = { xaTARGETS, xaTIMESTAMP,
+ xaSTRING, xaTEXT, xaUTF8_STRING };
+
+ rc = ChangeWindowProperty(pWin, realProperty, XA_ATOM, 32,
+ PropModeReplace,
+ sizeof(targets)/sizeof(targets[0]),
+ targets, TRUE);
+ if (rc != Success)
+ return rc;
+ } else if (target == xaTIMESTAMP) {
+ rc = ChangeWindowProperty(pWin, realProperty, XA_INTEGER, 32,
+ PropModeReplace, 1,
+ &pSel->lastTimeChanged.milliseconds,
+ TRUE);
+ if (rc != Success)
+ return rc;
+ } else if ((target == xaSTRING) || (target == xaTEXT)) {
+ rc = ChangeWindowProperty(pWin, realProperty, XA_STRING, 8,
+ PropModeReplace, clientCutTextLen,
+ clientCutText, TRUE);
+ if (rc != Success)
+ return rc;
+ } else if (target == xaUTF8_STRING) {
+ unsigned char* buffer;
+ unsigned char* out;
+ size_t len;
+
+ const unsigned char* in;
+ size_t in_len;
+
+ buffer = malloc(clientCutTextLen*2);
+ if (buffer == NULL)
+ return BadAlloc;
+
+ out = buffer;
+ len = 0;
+ in = clientCutText;
+ in_len = clientCutTextLen;
+ while (in_len > 0) {
+ if (*in & 0x80) {
+ *out++ = 0xc0 | (*in >> 6);
+ *out++ = 0x80 | (*in & 0x3f);
+ len += 2;
+ in++;
+ in_len--;
+ } else {
+ *out++ = *in++;
+ len++;
+ in_len--;
+ }
+ }
+
+ rc = ChangeWindowProperty(pWin, realProperty, xaUTF8_STRING, 8,
+ PropModeReplace, len, buffer, TRUE);
+ free(buffer);
+ if (rc != Success)
+ return rc;
+ } else {
+ return BadMatch;
+ }
+
+ event.u.u.type = SelectionNotify;
+ event.u.selectionNotify.time = time.milliseconds;
+ event.u.selectionNotify.requestor = requestor;
+ event.u.selectionNotify.selection = selection;
+ event.u.selectionNotify.target = target;
+ event.u.selectionNotify.property = property;
+ WriteEventsToClient(client, 1, &event);
+ return Success;
+}
+
+static int vncProcConvertSelection(ClientPtr client)
+{
+ Bool paramsOkay;
+ WindowPtr pWin;
+ Selection *pSel;
+ int rc;
+
+ REQUEST(xConvertSelectionReq);
+ REQUEST_SIZE_MATCH(xConvertSelectionReq);
+
+ rc = dixLookupWindow(&pWin, stuff->requestor, client, DixSetAttrAccess);
+ if (rc != Success)
+ return rc;
+
+ paramsOkay = ValidAtom(stuff->selection) && ValidAtom(stuff->target);
+ paramsOkay &= (stuff->property == None) || ValidAtom(stuff->property);
+ if (!paramsOkay) {
+ client->errorValue = stuff->property;
+ return BadAtom;
+ }
+
+ rc = dixLookupSelection(&pSel, stuff->selection, client, DixReadAccess);
+ if (rc == Success && pSel->client == serverClient &&
+ pSel->window == wid) {
+ TimeStamp time;
+ time = ClientTimeToServerTime(stuff->time);
+ rc = vncConvertSelection(client, stuff->selection,
+ stuff->target, stuff->property,
+ stuff->requestor, time);
+ if (rc != Success) {
+ xEvent event;
+
+ memset(&event, 0, sizeof(xEvent));
+ event.u.u.type = SelectionNotify;
+ event.u.selectionNotify.time = stuff->time;
+ event.u.selectionNotify.requestor = stuff->requestor;
+ event.u.selectionNotify.selection = stuff->selection;
+ event.u.selectionNotify.target = stuff->target;
+ event.u.selectionNotify.property = None;
+ WriteEventsToClient(client, 1, &event);
+ }
+
+ return Success;
+ }
+
+ return origProcConvertSelection(client);
+}
+
+static void vncSelectionRequest(Atom selection, Atom target)
+{
+ Selection *pSel;
+ xEvent event;
+ int rc;
+
+ rc = vncCreateSelectionWindow();
+ if (rc != Success)
+ return;
+
+ LOG_DEBUG("Requesting %s for %s selection",
+ NameForAtom(target), NameForAtom(selection));
+
+ rc = dixLookupSelection(&pSel, selection, serverClient, DixGetAttrAccess);
+ if (rc != Success)
+ return;
+
+ event.u.u.type = SelectionRequest;
+ event.u.selectionRequest.owner = pSel->window;
+ event.u.selectionRequest.time = currentTime.milliseconds;
+ event.u.selectionRequest.requestor = wid;
+ event.u.selectionRequest.selection = selection;
+ event.u.selectionRequest.target = target;
+ event.u.selectionRequest.property = target;
+ WriteEventsToClient(pSel->client, 1, &event);
+}
+
+static Bool vncHasAtom(Atom atom, const Atom list[], size_t size)
+{
+ size_t i;
+
+ for (i = 0;i < size;i++) {
+ if (list[i] == atom)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void vncHandleSelection(Atom selection, Atom target,
+ Atom property, Atom requestor,
+ TimeStamp time)
+{
+ PropertyPtr prop;
+ int rc;
+
+ rc = dixLookupProperty(&prop, pWindow, property,
+ serverClient, DixReadAccess);
+ if (rc != Success)
+ return;
+
+ LOG_DEBUG("Selection notification for %s (target %s, property %s, type %s)",
+ NameForAtom(selection), NameForAtom(target),
+ NameForAtom(property), NameForAtom(prop->type));
+
+ if (target != property)
+ return;
+
+ if (target == xaTARGETS) {
+ if (prop->format != 32)
+ return;
+ if (prop->type != XA_ATOM)
+ return;
+
+ if (vncHasAtom(xaSTRING, (const Atom*)prop->data, prop->size))
+ vncSelectionRequest(selection, xaSTRING);
+ else if (vncHasAtom(xaUTF8_STRING, (const Atom*)prop->data, prop->size))
+ vncSelectionRequest(selection, xaUTF8_STRING);
+ } else if (target == xaSTRING) {
+ if (prop->format != 8)
+ return;
+ if (prop->type != xaSTRING)
+ return;
+
+ vncServerCutText(prop->data, prop->size);
+ } else if (target == xaUTF8_STRING) {
+ unsigned char* buffer;
+ unsigned char* out;
+ size_t len;
+
+ const unsigned char* in;
+ size_t in_len;
+
+ if (prop->format != 8)
+ return;
+ if (prop->type != xaUTF8_STRING)
+ return;
+
+ buffer = malloc(prop->size);
+ if (buffer == NULL)
+ return;
+
+ out = buffer;
+ len = 0;
+ in = prop->data;
+ in_len = prop->size;
+ while (in_len > 0) {
+ if ((*in & 0x80) == 0x00) {
+ *out++ = *in++;
+ len++;
+ in_len--;
+ } else if ((*in & 0xe0) == 0xc0) {
+ unsigned ucs;
+ ucs = (*in++ & 0x1f) << 6;
+ in_len--;
+ if (in_len > 0) {
+ ucs |= (*in++ & 0x3f);
+ in_len--;
+ }
+ if (ucs <= 0xff)
+ *out++ = ucs;
+ else
+ *out++ = '?';
+ len++;
+ } else {
+ *out++ = '?';
+ len++;
+ do {
+ in++;
+ in_len--;
+ } while ((in_len > 0) && ((*in & 0xc0) == 0x80));
+ }
+ }
+
+ vncServerCutText((const char*)buffer, len);
+
+ free(buffer);
+ }
+}
+
+#define SEND_EVENT_BIT 0x80
+
+static int vncProcSendEvent(ClientPtr client)
+{
+ REQUEST(xSendEventReq);
+ REQUEST_SIZE_MATCH(xSendEventReq);
+
+ stuff->event.u.u.type &= ~(SEND_EVENT_BIT);
+
+ if (stuff->event.u.u.type == SelectionNotify &&
+ stuff->event.u.selectionNotify.requestor == wid) {
+ TimeStamp time;
+ time = ClientTimeToServerTime(stuff->event.u.selectionNotify.time);
+ vncHandleSelection(stuff->event.u.selectionNotify.selection,
+ stuff->event.u.selectionNotify.target,
+ stuff->event.u.selectionNotify.property,
+ stuff->event.u.selectionNotify.requestor,
+ time);
+ }
+
+ return origProcSendEvent(client);
+}
+
+static void vncSelectionCallback(CallbackListPtr *callbacks,
+ void * data, void * args)
+{
+ SelectionInfoRec *info = (SelectionInfoRec *) args;
+
+ if (info->kind != SelectionSetOwner)
+ return;
+ if (info->client == serverClient)
+ return;
+
+ if ((info->selection->selection != xaPRIMARY) &&
+ (info->selection->selection != xaCLIPBOARD))
+ return;
+
+ if ((info->selection->selection == xaPRIMARY) &&
+ !vncGetSendPrimary())
+ return;
+
+ vncSelectionRequest(info->selection->selection, xaTARGETS);
+}
diff --git a/common/rfb/Threading.h b/unix/xserver/hw/vnc/vncSelection.h
index 66b3aa0f..969f8958 100644
--- a/common/rfb/Threading.h
+++ b/unix/xserver/hw/vnc/vncSelection.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
+/* Copyright 2016 Pierre Ossman for Cendio AB
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -15,17 +15,19 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
*/
+#ifndef __SELECTION_H__
+#define __SELECTION_H__
-// -=- Threading.h
-// General purpose threading interface.
-// If the current platform supports threading then __RFB_THREADING_IMPL
-// will be defined after this header has been included.
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void vncSelectionInit(void);
-#ifndef __RFB_THREADING_H__
-#define __RFB_THREADING_H__
+void vncClientCutText(const char* str, int len);
-#ifdef WIN32
-#include <rfb_win32/Threading.h>
+#ifdef __cplusplus
+}
#endif
-#endif // __RFB_THREADING_H__
+#endif
diff --git a/unix/xserver/hw/vnc/xorg-version.h b/unix/xserver/hw/vnc/xorg-version.h
index 60610cbd..9d1c0eb8 100644
--- a/unix/xserver/hw/vnc/xorg-version.h
+++ b/unix/xserver/hw/vnc/xorg-version.h
@@ -50,8 +50,10 @@
#define XORG 117
#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (18 * 100000) + (99 * 1000))
#define XORG 118
+#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (19 * 100000) + (99 * 1000))
+#define XORG 119
#else
-#error "X.Org newer than 1.18 is not supported"
+#error "X.Org newer than 1.19 is not supported"
#endif
#endif
diff --git a/unix/xserver/hw/vnc/xvnc.c b/unix/xserver/hw/vnc/xvnc.c
index 57098930..c5b684de 100644
--- a/unix/xserver/hw/vnc/xvnc.c
+++ b/unix/xserver/hw/vnc/xvnc.c
@@ -85,7 +85,7 @@ from the X Consortium.
#include "version-config.h"
#include "site.h"
-#define XVNCVERSION "TigerVNC 1.6.80"
+#define XVNCVERSION "TigerVNC 1.7.80"
#define XVNCCOPYRIGHT ("Copyright (C) 1999-2016 TigerVNC Team and many others (see README.txt)\n" \
"See http://www.tigervnc.org for information on TigerVNC.\n")
@@ -854,6 +854,40 @@ vfbFreeFramebufferMemory(vfbFramebufferInfoPtr pfb)
static Bool
vfbCursorOffScreen (ScreenPtr *ppScreen, int *x, int *y)
{
+ int absX, absY;
+ int i;
+
+ if (screenInfo.numScreens == 1)
+ return FALSE;
+
+ if ((*x >= 0) && (*x < (*ppScreen)->width) &&
+ (*y >= 0) && (*y < (*ppScreen)->height))
+ return FALSE;
+
+ absX = *x + (*ppScreen)->x;
+ absY = *y + (*ppScreen)->y;
+
+ for (i = 0;i < screenInfo.numScreens;i++) {
+ ScreenPtr newScreen;
+
+ newScreen = screenInfo.screens[i];
+
+ if (absX < newScreen->x)
+ continue;
+ if (absY < newScreen->y)
+ continue;
+ if (absX >= (newScreen->x + newScreen->width))
+ continue;
+ if (absY >= (newScreen->y + newScreen->height))
+ continue;
+
+ *ppScreen = newScreen;
+ *x = absX - newScreen->x;
+ *y = absY - newScreen->y;
+
+ return TRUE;
+ }
+
return FALSE;
}
@@ -1456,11 +1490,10 @@ vfbScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
vfbScreenInit(ScreenPtr pScreen, int argc, char **argv)
#endif
{
-#if XORG < 113
- vfbScreenInfoPtr pvfb = &vfbScreens[index];
-#else
- vfbScreenInfoPtr pvfb = &vfbScreens[pScreen->myNum];
+#if XORG >= 113
+ int index = pScreen->myNum;
#endif
+ vfbScreenInfoPtr pvfb = &vfbScreens[index];
int dpi;
int ret;
void *pbits;
@@ -1481,13 +1514,8 @@ vfbScreenInit(ScreenPtr pScreen, int argc, char **argv)
pbits = vfbAllocateFramebufferMemory(&pvfb->fb);
if (!pbits) return FALSE;
-#if XORG < 113
vncFbptr[index] = pbits;
vncFbstride[index] = pvfb->fb.paddedWidth;
-#else
- vncFbptr[pScreen->myNum] = pbits;
- vncFbstride[pScreen->myNum] = pvfb->fb.paddedWidth;
-#endif
miSetPixmapDepths();
@@ -1524,6 +1552,12 @@ vfbScreenInit(ScreenPtr pScreen, int argc, char **argv)
return FALSE;
}
+ if (index > 0) {
+ ScreenPtr prevScreen = screenInfo.screens[index-1];
+ pScreen->x = prevScreen->x + prevScreen->width;
+ pScreen->y = 0;
+ }
+
ret = fbScreenInit(pScreen, pbits, pvfb->fb.width, pvfb->fb.height,
dpi, dpi, pvfb->fb.paddedWidth, pvfb->fb.bitsPerPixel);
diff --git a/unix/xserver113.patch b/unix/xserver113.patch
index da0d590d..85ab2846 100644
--- a/unix/xserver113.patch
+++ b/unix/xserver113.patch
@@ -74,7 +74,7 @@ diff -up xserver/mi/miinitext.c.vnc xserver/mi/miinitext.c
#include "globals.h"
+#ifdef TIGERVNC
-+extern void vncExtensionInit(INITARGS);
++extern void vncExtensionInit(void);
+#endif
+
/* The following is only a small first step towards run-time
diff --git a/unix/xserver114.patch b/unix/xserver114.patch
index 81b1c709..2bfc8fff 100644
--- a/unix/xserver114.patch
+++ b/unix/xserver114.patch
@@ -66,7 +66,7 @@ diff -up xserver/mi/miinitext.c.vnc xserver/mi/miinitext.c
#include "globals.h"
+#ifdef TIGERVNC
-+extern void vncExtensionInit(INITARGS);
++extern void vncExtensionInit(void);
+#endif
+
/* The following is only a small first step towards run-time
diff --git a/unix/xserver115.patch b/unix/xserver115.patch
index 479039d7..31260208 100644
--- a/unix/xserver115.patch
+++ b/unix/xserver115.patch
@@ -66,7 +66,7 @@ diff -up xserver/mi/miinitext.c.vnc xserver/mi/miinitext.c
#include "globals.h"
+#ifdef TIGERVNC
-+extern void vncExtensionInit(INITARGS);
++extern void vncExtensionInit(void);
+#endif
+
/* The following is only a small first step towards run-time
diff --git a/unix/xserver116.patch b/unix/xserver116.patch
index d870ef7a..2edcd307 100644
--- a/unix/xserver116.patch
+++ b/unix/xserver116.patch
@@ -66,7 +66,7 @@ diff -up xorg-server-1.16.0/mi/miinitext.c.vnc xorg-server-1.16.0/mi/miinitext.c
#include "globals.h"
+#ifdef TIGERVNC
-+extern void vncExtensionInit(INITARGS);
++extern void vncExtensionInit(void);
+#endif
+
/* The following is only a small first step towards run-time
diff --git a/unix/xserver117.patch b/unix/xserver117.patch
index 8a21040c..f4cb94c3 100644
--- a/unix/xserver117.patch
+++ b/unix/xserver117.patch
@@ -66,7 +66,7 @@ diff -up xorg-server-1.17.1/mi/miinitext.c.vnc xorg-server-1.17.1/mi/miinitext.c
#include "globals.h"
+#ifdef TIGERVNC
-+extern void vncExtensionInit(INITARGS);
++extern void vncExtensionInit(void);
+#endif
+
/* The following is only a small first step towards run-time
diff --git a/unix/xserver118.patch b/unix/xserver118.patch
index 286a37bc..1c03317f 100644
--- a/unix/xserver118.patch
+++ b/unix/xserver118.patch
@@ -65,7 +65,7 @@ diff -ur xorg-server.orig/mi/miinitext.c xorg-server/mi/miinitext.c
#include "globals.h"
+#ifdef TIGERVNC
-+extern void vncExtensionInit(INITARGS);
++extern void vncExtensionInit(void);
+#endif
+
/* The following is only a small first step towards run-time
diff --git a/unix/xserver119.patch b/unix/xserver119.patch
new file mode 100644
index 00000000..614f104a
--- /dev/null
+++ b/unix/xserver119.patch
@@ -0,0 +1,95 @@
+diff -up xserver/configure.ac.xserver116-rebased xserver/configure.ac
+--- xserver/configure.ac.xserver116-rebased 2016-09-29 13:14:45.595441590 +0200
++++ xserver/configure.ac 2016-09-29 13:14:45.631442006 +0200
+@@ -74,6 +74,7 @@ dnl forcing an entire recompile.x
+ AC_CONFIG_HEADERS(include/version-config.h)
+
+ AM_PROG_AS
++AC_PROG_CXX
+ AC_PROG_LN_S
+ LT_PREREQ([2.2])
+ LT_INIT([disable-static win32-dll])
+@@ -1863,6 +1864,10 @@ if test "x$XVFB" = xyes; then
+ AC_SUBST([XVFB_SYS_LIBS])
+ fi
+
++dnl Xvnc DDX
++AC_SUBST([XVNC_CPPFLAGS], ["-DHAVE_DIX_CONFIG_H $XSERVER_CFLAGS"])
++AC_SUBST([XVNC_LIBS], ["$FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $DRI3_LIB $PRESENT_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $MAIN_LIB"])
++AC_SUBST([XVNC_SYS_LIBS], ["$GLX_SYS_LIBS"])
+
+ dnl Xnest DDX
+
+@@ -1898,6 +1903,8 @@ if test "x$XORG" = xauto; then
+ fi
+ AC_MSG_RESULT([$XORG])
+
++AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version])
++
+ if test "x$XORG" = xyes; then
+ XORG_DDXINCS='-I$(top_srcdir)/hw/xfree86 -I$(top_srcdir)/hw/xfree86/include -I$(top_srcdir)/hw/xfree86/common'
+ XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os'
+@@ -2116,7 +2123,6 @@ if test "x$XORG" = xyes; then
+ AC_DEFINE(XORG_SERVER, 1, [Building Xorg server])
+ AC_DEFINE(XORGSERVER, 1, [Building Xorg server])
+ AC_DEFINE(XFree86Server, 1, [Building XFree86 server])
+- AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version])
+ AC_DEFINE(NEED_XF86_TYPES, 1, [Need XFree86 typedefs])
+ AC_DEFINE(NEED_XF86_PROTOTYPES, 1, [Need XFree86 helper functions])
+ AC_DEFINE(__XSERVERNAME__, "Xorg", [Name of X server])
+@@ -2691,6 +2697,7 @@ hw/dmx/Makefile
+ hw/dmx/man/Makefile
+ hw/vfb/Makefile
+ hw/vfb/man/Makefile
++hw/vnc/Makefile
+ hw/xnest/Makefile
+ hw/xnest/man/Makefile
+ hw/xwin/Makefile
+diff -up xserver/hw/Makefile.am.xserver116-rebased xserver/hw/Makefile.am
+--- xserver/hw/Makefile.am.xserver116-rebased 2016-09-29 13:14:45.601441659 +0200
++++ xserver/hw/Makefile.am 2016-09-29 13:14:45.631442006 +0200
+@@ -38,7 +38,8 @@ SUBDIRS = \
+ $(DMX_SUBDIRS) \
+ $(KDRIVE_SUBDIRS) \
+ $(XQUARTZ_SUBDIRS) \
+- $(XWAYLAND_SUBDIRS)
++ $(XWAYLAND_SUBDIRS) \
++ vnc
+
+ DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xwayland
+
+diff -up xserver/mi/miinitext.c.xserver116-rebased xserver/mi/miinitext.c
+--- xserver/mi/miinitext.c.xserver116-rebased 2016-09-29 13:14:45.618441855 +0200
++++ xserver/mi/miinitext.c 2016-09-29 13:14:45.631442006 +0200
+@@ -114,6 +114,10 @@ SOFTWARE.
+ #include "micmap.h"
+ #include "globals.h"
+
++#ifdef TIGERVNC
++extern void vncExtensionInit(INITARGS);
++#endif
++
+ /* The following is only a small first step towards run-time
+ * configurable extensions.
+ */
+@@ -238,6 +242,9 @@ EnableDisableExtensionError(const char *
+
+ /* List of built-in (statically linked) extensions */
+ static const ExtensionModule staticExtensions[] = {
++#ifdef TIGERVNC
++ {vncExtensionInit, "VNC-EXTENSION", NULL},
++#endif
+ {GEExtensionInit, "Generic Event Extension", &noGEExtension},
+ {ShapeExtensionInit, "SHAPE", NULL},
+ #ifdef MITSHM
+--- xserver/include/os.h~ 2016-10-03 09:07:29.000000000 +0200
++++ xserver/include/os.h 2016-10-03 14:13:00.013654506 +0200
+@@ -621,7 +621,7 @@
+ extern _X_EXPORT void
+ LogClose(enum ExitCode error);
+ extern _X_EXPORT Bool
+-LogSetParameter(LogParameter param, int value);
++LogSetParameter(enum _LogParameter param, int value);
+ extern _X_EXPORT void
+ LogVWrite(int verb, const char *f, va_list args)
+ _X_ATTRIBUTE_PRINTF(2, 0);
diff --git a/vncviewer/vncviewer.man b/vncviewer/vncviewer.man
index 9ee616dc..d6a3708f 100644
--- a/vncviewer/vncviewer.man
+++ b/vncviewer/vncviewer.man
@@ -280,7 +280,10 @@ respectively.
.SH FILES
.TP
$HOME/.vnc/default.tigervnc
-Default configuration options.
+Default configuration options. This file must have a "magic" first line of
+"TigerVNC Configuration file Version 1.0" (without quotes), followed by simple
+<setting>=<value> pairs of your choosing. The available settings are those
+shown in this man page.
.TP
$HOME/.vnc/x509_ca.pem
Default CA certificate for authenticating servers.
diff --git a/win/rfb_win32/CMakeLists.txt b/win/rfb_win32/CMakeLists.txt
index 047b0d86..305247a8 100644
--- a/win/rfb_win32/CMakeLists.txt
+++ b/win/rfb_win32/CMakeLists.txt
@@ -22,7 +22,6 @@ set(RFB_WIN32_SOURCES
SInput.cxx
SocketManager.cxx
TCharArray.cxx
- Threading.cxx
TsSessions.cxx
Win32Util.cxx
WMCursor.cxx
diff --git a/win/rfb_win32/Clipboard.h b/win/rfb_win32/Clipboard.h
index 498f75fe..3da7bfca 100644
--- a/win/rfb_win32/Clipboard.h
+++ b/win/rfb_win32/Clipboard.h
@@ -25,7 +25,6 @@
#define __RFB_WIN32_CLIPBOARD_H__
#include <rfb/SDesktop.h>
-#include <rfb/Threading.h>
#include <rfb_win32/MsgWindow.h>
#include <rfb_win32/DeviceFrameBuffer.h>
diff --git a/win/rfb_win32/RegConfig.cxx b/win/rfb_win32/RegConfig.cxx
index 30cb3102..5c89e780 100644
--- a/win/rfb_win32/RegConfig.cxx
+++ b/win/rfb_win32/RegConfig.cxx
@@ -85,30 +85,29 @@ void RegConfig::processEvent(HANDLE event_) {
}
-RegConfigThread::RegConfigThread() : Thread("RegConfigThread"), config(&eventMgr) {
+RegConfigThread::RegConfigThread() : config(&eventMgr), thread_id(-1) {
}
RegConfigThread::~RegConfigThread() {
- join();
+ PostThreadMessage(thread_id, WM_QUIT, 0, 0);
+ wait();
}
bool RegConfigThread::start(const HKEY rootKey, const TCHAR* keyname) {
if (config.setKey(rootKey, keyname)) {
Thread::start();
+ while (thread_id == (DWORD)-1)
+ Sleep(0);
return true;
}
return false;
}
-void RegConfigThread::run() {
+void RegConfigThread::worker() {
DWORD result = 0;
MSG msg;
+ thread_id = GetCurrentThreadId();
while ((result = eventMgr.getMessage(&msg, 0, 0, 0)) > 0) {}
if (result < 0)
throw rdr::SystemException("RegConfigThread failed", GetLastError());
}
-
-Thread* RegConfigThread::join() {
- PostThreadMessage(getThreadId(), WM_QUIT, 0, 0);
- return Thread::join();
-}
diff --git a/win/rfb_win32/RegConfig.h b/win/rfb_win32/RegConfig.h
index e9c01b1d..c092090d 100644
--- a/win/rfb_win32/RegConfig.h
+++ b/win/rfb_win32/RegConfig.h
@@ -24,7 +24,8 @@
#ifndef __RFB_WIN32_REG_CONFIG_H__
#define __RFB_WIN32_REG_CONFIG_H__
-#include <rfb/Threading.h>
+#include <os/Thread.h>
+
#include <rfb/Configuration.h>
#include <rfb_win32/Registry.h>
#include <rfb_win32/EventManager.h>
@@ -63,7 +64,7 @@ namespace rfb {
RegKey key;
};
- class RegConfigThread : Thread {
+ class RegConfigThread : os::Thread {
public:
RegConfigThread();
~RegConfigThread();
@@ -71,10 +72,10 @@ namespace rfb {
// Start the thread, reading from the specified key
bool start(const HKEY rootkey, const TCHAR* keyname);
protected:
- void run();
- Thread* join();
+ virtual void worker();
EventManager eventMgr;
RegConfig config;
+ DWORD thread_id;
};
};
diff --git a/win/rfb_win32/Service.cxx b/win/rfb_win32/Service.cxx
index d054ce4d..719c44b6 100644
--- a/win/rfb_win32/Service.cxx
+++ b/win/rfb_win32/Service.cxx
@@ -22,7 +22,7 @@
#include <rfb_win32/MsgWindow.h>
#include <rfb_win32/ModuleFileName.h>
#include <rfb_win32/Registry.h>
-#include <rfb/Threading.h>
+#include <rfb_win32/Handle.h>
#include <logmessages/messages.h>
#include <rdr/Exception.h>
#include <rfb/LogWriter.h>
diff --git a/win/rfb_win32/Threading.cxx b/win/rfb_win32/Threading.cxx
deleted file mode 100644
index 5873b58f..00000000
--- a/win/rfb_win32/Threading.cxx
+++ /dev/null
@@ -1,151 +0,0 @@
-/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
- *
- * This is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this software; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- * USA.
- */
-
-// -=- Threading.cxx
-// Win32 Threading interface implementation
-
-#include <malloc.h>
-
-#include <rdr/Exception.h>
-#include <rfb/LogWriter.h>
-#include <rfb/util.h>
-#include <rfb_win32/Threading.h>
-
-using namespace rfb;
-
-static LogWriter vlog("Threading");
-
-static DWORD threadStorage = TlsAlloc();
-
-
-inline void logAction(Thread* t, const char* action) {
- vlog.debug("%-16.16s %s(%p)", action, t->getName(), t);
-}
-
-inline void logError(Thread* t, const char* err) {
- vlog.error("%-16.16s %s(%p):%s", "failed", t->getName(), t, err);
-}
-
-
-DWORD WINAPI
-Thread::threadProc(LPVOID lpParameter) {
- Thread* thread = (Thread*) lpParameter;
- TlsSetValue(threadStorage, thread);
- logAction(thread, "started");
- try {
- thread->run();
- logAction(thread, "stopped");
- } catch (rdr::Exception& e) {
- logError(thread, e.str());
- }
- bool deleteThread = false;
- {
- Lock l(thread->mutex);
- thread->state = ThreadStopped;
- thread->sig->signal();
- deleteThread = thread->deleteAfterRun;
- }
- if (deleteThread)
- delete thread;
- return 0;
-}
-
-Thread::Thread(const char* name_) : name(strDup(name_ ? name_ : "Unnamed")), sig(0), deleteAfterRun(false) {
- sig = new Condition(mutex);
- cond_event.h = CreateEvent(NULL, TRUE, FALSE, NULL);
- thread.h = CreateThread(NULL, 0, threadProc, this, CREATE_SUSPENDED, &thread_id);
- state = ThreadCreated;
- logAction(this, "created");
-}
-
-Thread::Thread(HANDLE thread_, DWORD thread_id_) :
- thread(thread_), thread_id(thread_id_), name(strDup("Native")), sig(0), deleteAfterRun(false) {
- cond_event.h = CreateEvent(NULL, TRUE, FALSE, NULL);
- state = ThreadNative;
- logAction(this, "created");
-}
-
-Thread::~Thread() {
- logAction(this, "destroying");
- if (!deleteAfterRun && state != ThreadNative)
- this->join();
- if (sig)
- delete sig;
- logAction(this, "destroyed");
-}
-
-void
-Thread::run() {
-}
-
-void
-Thread::start() {
- Lock l(mutex);
- if (state == ThreadCreated) {
- state = ThreadStarted;
- sig->signal();
- ResumeThread(thread);
- }
-}
-
-Thread*
-Thread::join() {
- if (deleteAfterRun)
- throw rdr::Exception("attempt to join() with deleteAfterRun thread");
- Lock l(mutex);
- if (state == ThreadJoined) {
- logAction(this, "already joined");
- } else {
- logAction(this, "joining");
- while (state == ThreadStarted) {
- sig->wait();
- logAction(this, "checking");
- }
- state = ThreadJoined;
- logAction(this, "joined");
- }
- return this;
-}
-
-const char*
-Thread::getName() const {
- return name.buf;
-}
-
-ThreadState
-Thread::getState() const {
- return state;
-}
-
-unsigned long
-Thread::getThreadId() const {
- return thread_id;
-}
-
-
-Thread*
-Thread::self() {
- Thread* thread = (Thread*) TlsGetValue(threadStorage);
- if (!thread) {
- // *** memory leak - could use GetExitCodeThread to lazily detect when
- // to clean up native thread objects
- thread = new Thread(GetCurrentThread(), GetCurrentThreadId());
- TlsSetValue(threadStorage, thread);
- }
- return thread;
-}
diff --git a/win/rfb_win32/Threading.h b/win/rfb_win32/Threading.h
deleted file mode 100644
index 70bef416..00000000
--- a/win/rfb_win32/Threading.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
- *
- * This is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this software; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- * USA.
- */
-
-// -=- Threading_win32.h
-// Win32 Threading interface implementation
-
-#ifndef __RFB_THREADING_IMPL_WIN32
-#define __RFB_THREADING_IMPL_WIN32
-
-#define __RFB_THREADING_IMPL WIN32
-
-#include <rfb_win32/Handle.h>
-#include <rfb/util.h>
-#include <rdr/Exception.h>
-//#include <stdio.h>
-
-
-namespace rfb {
- class Condition;
-
- class Mutex {
- public:
- Mutex() {
- InitializeCriticalSection(&crit);
- }
- ~Mutex() {
- DeleteCriticalSection(&crit);
- }
- friend class Lock;
- friend class Condition;
- protected:
- void enter() {EnterCriticalSection(&crit);}
- void exit() {LeaveCriticalSection(&crit);}
- CRITICAL_SECTION crit;
- };
-
- class Lock {
- public:
- Lock(Mutex& m) : mutex(m) {m.enter();}
- ~Lock() {mutex.exit();}
- protected:
- Mutex& mutex;
- };
-
- enum ThreadState {ThreadCreated, ThreadStarted, ThreadStopped, ThreadJoined, ThreadNative};
-
- class Thread {
- public:
- Thread(const char* name_=0);
- virtual ~Thread();
-
- virtual void run();
-
- virtual void start();
- virtual Thread* join();
-
- const char* getName() const;
- ThreadState getState() const;
-
- // Determines whether the thread should delete itself when run() returns
- // If you set this, you must NEVER call join()!
- void setDeleteAfterRun() {deleteAfterRun = true;};
-
- unsigned long getThreadId() const;
-
- static Thread* self();
-
- friend class Condition;
-
- protected:
- Thread(HANDLE thread_, DWORD thread_id_);
- static DWORD WINAPI threadProc(LPVOID lpParameter);
-
- win32::Handle thread;
- DWORD thread_id;
- CharArray name;
- ThreadState state;
- Condition* sig;
- Mutex mutex;
-
- win32::Handle cond_event;
- Thread* cond_next;
-
- bool deleteAfterRun;
- };
-
- class Condition {
- public:
- Condition(Mutex& m) : mutex(m), waiting(0) {
- }
- ~Condition() {
- }
-
- // Wake up the specified number of threads that are waiting
- // on this Condition, or all of them if -1 is specified.
- void signal(int howMany=1) {
- Lock l(cond_lock);
- while (waiting && howMany!=0) {
- SetEvent(waiting->cond_event);
- waiting = waiting->cond_next;
- if (howMany>0) --howMany;
- }
- }
-
- // NB: Must hold "mutex" to call wait()
- // Wait until either the Condition is signalled or the timeout
- // expires.
- void wait(DWORD timeout=INFINITE) {
- Thread* self = Thread::self();
- ResetEvent(self->cond_event);
- { Lock l(cond_lock);
- self->cond_next = waiting;
- waiting = self;
- }
- mutex.exit();
- DWORD result = WaitForSingleObject(self->cond_event, timeout);
- mutex.enter();
- if (result == WAIT_TIMEOUT) {
- Lock l(cond_lock);
- // Remove this thread from the Condition
- for (Thread** removeFrom = &waiting; *removeFrom; removeFrom = &(*removeFrom)->cond_next) {
- if (*removeFrom == self) {
- *removeFrom = self->cond_next;
- break;
- }
- }
- } else if (result == WAIT_FAILED) {
- throw rdr::SystemException("failed to wait on Condition", GetLastError());
- }
- }
-
- protected:
- Mutex& mutex;
- Mutex cond_lock;
- Thread* waiting;
- };
-
-};
-
-#endif // __RFB_THREADING_IMPL
diff --git a/win/rfb_win32/WMHooks.cxx b/win/rfb_win32/WMHooks.cxx
index 0e5e70a4..bbc15088 100644
--- a/win/rfb_win32/WMHooks.cxx
+++ b/win/rfb_win32/WMHooks.cxx
@@ -18,11 +18,13 @@
// -=- WMHooks.cxx
+#include <os/Mutex.h>
+#include <os/Thread.h>
+
#include <rfb_win32/WMHooks.h>
#include <rfb_win32/Service.h>
#include <rfb_win32/MsgWindow.h>
#include <rfb_win32/IntervalTimer.h>
-#include <rfb/Threading.h>
#include <rfb/LogWriter.h>
#include <list>
@@ -108,20 +110,21 @@ error:
}
-class WMHooksThread : public Thread {
+class WMHooksThread : public os::Thread {
public:
- WMHooksThread() : Thread("WMHookThread"),
- active(true) {
- }
- virtual void run();
- virtual Thread* join();
+ WMHooksThread() : active(true), thread_id(-1) { }
+ void stop();
+ DWORD getThreadId() { return thread_id; }
+protected:
+ virtual void worker();
protected:
bool active;
+ DWORD thread_id;
};
static WMHooksThread* hook_mgr = 0;
static std::list<WMHooks*> hooks;
-static Mutex hook_mgr_lock;
+static os::Mutex hook_mgr_lock;
static bool StartHookThread() {
@@ -131,15 +134,17 @@ static bool StartHookThread() {
return false;
vlog.debug("creating thread");
hook_mgr = new WMHooksThread();
+ hook_mgr->start();
+ while (hook_mgr->getThreadId() == (DWORD)-1)
+ Sleep(0);
vlog.debug("installing hooks");
if (!WM_Hooks_Install(hook_mgr->getThreadId(), 0)) {
vlog.error("failed to initialise hooks");
- delete hook_mgr->join();
+ hook_mgr->stop();
+ delete hook_mgr;
hook_mgr = 0;
return false;
}
- vlog.debug("starting thread");
- hook_mgr->start();
return true;
}
@@ -149,14 +154,15 @@ static void StopHookThread() {
if (!hooks.empty())
return;
vlog.debug("closing thread");
- delete hook_mgr->join();
+ hook_mgr->stop();
+ delete hook_mgr;
hook_mgr = 0;
}
static bool AddHook(WMHooks* hook) {
vlog.debug("adding hook");
- Lock l(hook_mgr_lock);
+ os::AutoMutex a(&hook_mgr_lock);
if (!StartHookThread())
return false;
hooks.push_back(hook);
@@ -166,7 +172,7 @@ static bool AddHook(WMHooks* hook) {
static bool RemHook(WMHooks* hook) {
{
vlog.debug("removing hook");
- Lock l(hook_mgr_lock);
+ os::AutoMutex a(&hook_mgr_lock);
hooks.remove(hook);
}
StopHookThread();
@@ -174,7 +180,7 @@ static bool RemHook(WMHooks* hook) {
}
static void NotifyHooksRegion(const Region& r) {
- Lock l(hook_mgr_lock);
+ os::AutoMutex a(&hook_mgr_lock);
std::list<WMHooks*>::iterator i;
for (i=hooks.begin(); i!=hooks.end(); i++)
(*i)->NotifyHooksRegion(r);
@@ -182,7 +188,7 @@ static void NotifyHooksRegion(const Region& r) {
void
-WMHooksThread::run() {
+WMHooksThread::worker() {
// Obtain message ids for all supported hook messages
UINT windowMsg = WM_Hooks_WindowChanged();
UINT clientAreaMsg = WM_Hooks_WindowClientAreaChanged();
@@ -208,6 +214,8 @@ WMHooksThread::run() {
vlog.debug("starting hook thread");
+ thread_id = GetCurrentThreadId();
+
while (active && GetMessage(&msg, NULL, 0, 0)) {
count++;
@@ -283,13 +291,13 @@ WMHooksThread::run() {
WM_Hooks_Remove(getThreadId());
}
-Thread*
-WMHooksThread::join() {
+void
+WMHooksThread::stop() {
vlog.debug("stopping WMHooks thread");
active = false;
PostThreadMessage(thread_id, WM_QUIT, 0, 0);
- vlog.debug("joining WMHooks thread");
- return Thread::join();
+ vlog.debug("waiting for WMHooks thread");
+ wait();
}
// -=- WMHooks class
@@ -311,7 +319,7 @@ bool rfb::win32::WMHooks::setEvent(HANDLE ue) {
bool rfb::win32::WMHooks::getUpdates(UpdateTracker* ut) {
if (!updatesReady) return false;
- Lock l(hook_mgr_lock);
+ os::AutoMutex a(&hook_mgr_lock);
updates.copyTo(ut);
updates.clear();
updatesReady = false;
@@ -363,12 +371,12 @@ static bool blockRealInputs(bool block_) {
return block_ == blocking;
}
-Mutex blockMutex;
-int blockCount = 0;
+static os::Mutex blockMutex;
+static int blockCount = 0;
bool rfb::win32::WMBlockInput::blockInputs(bool on) {
if (active == on) return true;
- Lock l(blockMutex);
+ os::AutoMutex a(&blockMutex);
int newCount = on ? blockCount+1 : blockCount-1;
if (!blockRealInputs(newCount > 0))
return false;
diff --git a/win/rfb_win32/WMNotifier.h b/win/rfb_win32/WMNotifier.h
index ada45d09..3855430b 100644
--- a/win/rfb_win32/WMNotifier.h
+++ b/win/rfb_win32/WMNotifier.h
@@ -28,7 +28,6 @@
#define __RFB_WIN32_NOTIFIER_H__
#include <rfb/SDesktop.h>
-#include <rfb/Threading.h>
#include <rfb_win32/MsgWindow.h>
#include <rfb_win32/DeviceFrameBuffer.h>
#include <rfb_win32/SInput.h>
diff --git a/win/winvnc/QueryConnectDialog.cxx b/win/winvnc/QueryConnectDialog.cxx
index 8e506966..103621ee 100644
--- a/win/winvnc/QueryConnectDialog.cxx
+++ b/win/winvnc/QueryConnectDialog.cxx
@@ -41,7 +41,7 @@ static IntParameter timeout("QueryConnectTimeout",
QueryConnectDialog::QueryConnectDialog(network::Socket* sock_,
const char* userName_,
VNCServerWin32* s)
-: Thread("QueryConnectDialog"), Dialog(GetModuleHandle(0)),
+: Dialog(GetModuleHandle(0)),
sock(sock_), approve(false), server(s) {
peerIp.buf = sock->getPeerAddress();
userName.buf = strDup(userName_);
@@ -54,7 +54,7 @@ void QueryConnectDialog::startDialog() {
// - Thread overrides
-void QueryConnectDialog::run() {
+void QueryConnectDialog::worker() {
countdown = timeout;
try {
if (desktopChangeRequired() && !changeDesktop())
diff --git a/win/winvnc/QueryConnectDialog.h b/win/winvnc/QueryConnectDialog.h
index b28de198..de5e31ee 100644
--- a/win/winvnc/QueryConnectDialog.h
+++ b/win/winvnc/QueryConnectDialog.h
@@ -21,24 +21,26 @@
#ifndef __WINVNC_QUERY_CONNECT_DIALOG_H__
#define __WINVNC_QUERY_CONNECT_DIALOG_H__
-#include <rfb/Threading.h>
#include <rfb_win32/Dialog.h>
#include <rfb/util.h>
+namespace os { class Thread; }
+
namespace network { class Socket; }
namespace winvnc {
class VNCServerWin32;
- class QueryConnectDialog : public rfb::Thread, rfb::win32::Dialog {
+ class QueryConnectDialog : public os::Thread, rfb::win32::Dialog {
public:
QueryConnectDialog(network::Socket* sock, const char* userName, VNCServerWin32* s);
virtual void startDialog();
- virtual void run();
network::Socket* getSock() {return sock;}
bool isAccepted() const {return approve;}
protected:
+ // Thread methods
+ virtual void worker();
// Dialog methods (protected)
virtual void initDialog();
diff --git a/win/winvnc/STrayIcon.cxx b/win/winvnc/STrayIcon.cxx
index 762a56af..05a38d6e 100644
--- a/win/winvnc/STrayIcon.cxx
+++ b/win/winvnc/STrayIcon.cxx
@@ -22,14 +22,19 @@
#include <winvnc/VNCServerService.h>
#include <winvnc/resource.h>
+#include <os/Mutex.h>
+#include <os/Thread.h>
+
#include <rfb/LogWriter.h>
#include <rfb/Configuration.h>
+
#include <rfb_win32/LaunchProcess.h>
#include <rfb_win32/TrayIcon.h>
#include <rfb_win32/AboutDialog.h>
#include <rfb_win32/MsgBox.h>
#include <rfb_win32/Service.h>
#include <rfb_win32/CurrentUser.h>
+
#include <winvnc/ControlPanel.h>
using namespace rfb;
@@ -209,7 +214,7 @@ public:
case WM_SET_TOOLTIP:
{
- rfb::Lock l(thread.lock);
+ os::AutoMutex a(thread.lock);
if (thread.toolTip.buf)
setToolTip(thread.toolTip.buf);
}
@@ -231,15 +236,24 @@ protected:
STrayIconThread::STrayIconThread(VNCServerWin32& sm, UINT inactiveIcon_, UINT activeIcon_,
UINT dis_inactiveIcon_, UINT dis_activeIcon_, UINT menu_)
-: Thread("TrayIcon"), windowHandle(0), server(sm),
+: thread_id(-1), windowHandle(0), server(sm),
inactiveIcon(inactiveIcon_), activeIcon(activeIcon_),
dis_inactiveIcon(dis_inactiveIcon_), dis_activeIcon(dis_activeIcon_),
menu(menu_), runTrayIcon(true) {
+ lock = new os::Mutex;
start();
+ while (thread_id == (DWORD)-1)
+ Sleep(0);
}
+STrayIconThread::~STrayIconThread() {
+ runTrayIcon = false;
+ PostThreadMessage(thread_id, WM_QUIT, 0, 0);
+ delete lock;
+}
-void STrayIconThread::run() {
+void STrayIconThread::worker() {
+ thread_id = GetCurrentThreadId();
while (runTrayIcon) {
if (rfb::win32::desktopChangeRequired() &&
!rfb::win32::changeDesktop())
@@ -260,7 +274,7 @@ void STrayIconThread::run() {
void STrayIconThread::setToolTip(const TCHAR* text) {
if (!windowHandle) return;
- Lock l(lock);
+ os::AutoMutex a(lock);
delete [] toolTip.buf;
toolTip.buf = tstrDup(text);
PostMessage(windowHandle, WM_SET_TOOLTIP, 0, 0);
diff --git a/win/winvnc/STrayIcon.h b/win/winvnc/STrayIcon.h
index 309d3f4a..09066362 100644
--- a/win/winvnc/STrayIcon.h
+++ b/win/winvnc/STrayIcon.h
@@ -22,20 +22,19 @@
#include <winvnc/VNCServerWin32.h>
#include <rfb_win32/TCharArray.h>
#include <rfb/Configuration.h>
-#include <rfb/Threading.h>
+
+namespace os {
+ class Mutex;
+ class Thread;
+}
namespace winvnc {
- class STrayIconThread : rfb::Thread {
+ class STrayIconThread : os::Thread {
public:
STrayIconThread(VNCServerWin32& sm, UINT inactiveIcon,
UINT activeIcon, UINT dis_inactiveIcon, UINT dis_activeIcon, UINT menu);
- virtual ~STrayIconThread() {
- runTrayIcon = false;
- PostThreadMessage(getThreadId(), WM_QUIT, 0, 0);
- }
-
- virtual void run();
+ virtual ~STrayIconThread();
void setToolTip(const TCHAR* text);
@@ -44,7 +43,10 @@ namespace winvnc {
friend class STrayIcon;
protected:
- rfb::Mutex lock;
+ virtual void worker();
+
+ os::Mutex* lock;
+ DWORD thread_id;
HWND windowHandle;
rfb::TCharArray toolTip;
VNCServerWin32& server;
diff --git a/win/winvnc/VNCServerWin32.cxx b/win/winvnc/VNCServerWin32.cxx
index 27aea9f6..d86384da 100644
--- a/win/winvnc/VNCServerWin32.cxx
+++ b/win/winvnc/VNCServerWin32.cxx
@@ -21,9 +21,13 @@
#include <winvnc/VNCServerWin32.h>
#include <winvnc/resource.h>
#include <winvnc/STrayIcon.h>
+
+#include <os/Mutex.h>
+
#include <rfb_win32/ComputerName.h>
#include <rfb_win32/CurrentUser.h>
#include <rfb_win32/Service.h>
+
#include <rfb/Hostname.h>
#include <rfb/LogWriter.h>
@@ -53,16 +57,21 @@ static BoolParameter showTrayIcon("ShowTrayIcon",
VNCServerWin32::VNCServerWin32()
- : command(NoCommand), commandSig(commandLock),
+ : command(NoCommand),
commandEvent(CreateEvent(0, TRUE, FALSE, 0)),
sessionEvent(isServiceProcess() ?
CreateEvent(0, FALSE, FALSE, "Global\\SessionEventTigerVNC") : 0),
vncServer(CStr(ComputerName().buf), &desktop),
- hostThread(0), runServer(false), isDesktopStarted(false),
+ thread_id(-1), runServer(false), isDesktopStarted(false),
httpServer(&vncServer), config(&sockMgr),
rfbSock(&sockMgr), httpSock(&sockMgr), trayIcon(0),
queryConnectDialog(0)
{
+ commandLock = new os::Mutex;
+ commandSig = new os::Condition(commandLock);
+
+ runLock = new os::Mutex;
+
// Initialise the desktop
desktop.setStatusLocation(&isDesktopStarted);
@@ -85,8 +94,15 @@ VNCServerWin32::~VNCServerWin32() {
desktop.setStatusLocation(0);
// Join the Accept/Reject dialog thread
- if (queryConnectDialog)
- delete queryConnectDialog->join();
+ if (queryConnectDialog) {
+ queryConnectDialog->wait();
+ delete queryConnectDialog;
+ }
+
+ delete runLock;
+
+ delete commandSig;
+ delete commandLock;
}
@@ -149,8 +165,9 @@ void VNCServerWin32::regConfigChanged() {
int VNCServerWin32::run() {
- { Lock l(runLock);
- hostThread = Thread::self();
+ {
+ os::AutoMutex a(runLock);
+ thread_id = GetCurrentThreadId();
runServer = true;
}
@@ -195,19 +212,20 @@ int VNCServerWin32::run() {
vlog.error("%s", e.str());
}
- { Lock l(runLock);
+ {
+ os::AutoMutex a(runLock);
runServer = false;
- hostThread = 0;
+ thread_id = (DWORD)-1;
}
return result;
}
void VNCServerWin32::stop() {
- Lock l(runLock);
+ os::AutoMutex a(runLock);
runServer = false;
- if (hostThread)
- PostThreadMessage(hostThread->getThreadId(), WM_QUIT, 0, 0);
+ if (thread_id != (DWORD)-1)
+ PostThreadMessage(thread_id, WM_QUIT, 0, 0);
}
@@ -261,17 +279,17 @@ void VNCServerWin32::queryConnectionComplete() {
bool VNCServerWin32::queueCommand(Command cmd, const void* data, int len, bool wait) {
- Lock l(commandLock);
+ os::AutoMutex a(commandLock);
while (command != NoCommand)
- commandSig.wait();
+ commandSig->wait();
command = cmd;
commandData = data;
commandDataLen = len;
SetEvent(commandEvent);
if (wait) {
while (command != NoCommand)
- commandSig.wait();
- commandSig.signal();
+ commandSig->wait();
+ commandSig->signal();
}
return true;
}
@@ -282,7 +300,7 @@ void VNCServerWin32::processEvent(HANDLE event_) {
if (event_ == commandEvent.h) {
// If there is no command queued then return immediately
{
- Lock l(commandLock);
+ os::AutoMutex a(commandLock);
if (command == NoCommand)
return;
}
@@ -312,7 +330,8 @@ void VNCServerWin32::processEvent(HANDLE event_) {
vncServer.approveConnection(queryConnectDialog->getSock(),
queryConnectDialog->isAccepted(),
"Connection rejected by user");
- delete queryConnectDialog->join();
+ queryConnectDialog->wait();
+ delete queryConnectDialog;
queryConnectDialog = 0;
break;
@@ -322,9 +341,9 @@ void VNCServerWin32::processEvent(HANDLE event_) {
// Clear the command and signal completion
{
- Lock l(commandLock);
+ os::AutoMutex a(commandLock);
command = NoCommand;
- commandSig.signal();
+ commandSig->signal();
}
} else if (event_ == sessionEvent.h) {
stop();
diff --git a/win/winvnc/VNCServerWin32.h b/win/winvnc/VNCServerWin32.h
index b85814a4..225e6342 100644
--- a/win/winvnc/VNCServerWin32.h
+++ b/win/winvnc/VNCServerWin32.h
@@ -30,6 +30,12 @@
#include <winvnc/JavaViewer.h>
#include <winvnc/ManagedListener.h>
+namespace os {
+ class Mutex;
+ class Condition;
+ class Thread;
+}
+
namespace winvnc {
class STrayIconThread;
@@ -99,16 +105,16 @@ namespace winvnc {
Command command;
const void* commandData;
int commandDataLen;
- rfb::Mutex commandLock;
- rfb::Condition commandSig;
+ os::Mutex* commandLock;
+ os::Condition* commandSig;
rfb::win32::Handle commandEvent;
rfb::win32::Handle sessionEvent;
// VNCServerWin32 Server-internal state
rfb::win32::SDisplay desktop;
rfb::VNCServerST vncServer;
- rfb::Mutex runLock;
- rfb::Thread* hostThread;
+ os::Mutex* runLock;
+ DWORD thread_id;
bool runServer;
bool isDesktopStarted;
JavaViewerServer httpServer;
diff --git a/win/winvnc/winvnc.cxx b/win/winvnc/winvnc.cxx
index ff16aacd..aa41bcbf 100644
--- a/win/winvnc/winvnc.cxx
+++ b/win/winvnc/winvnc.cxx
@@ -168,6 +168,19 @@ static void processParams(int argc, char** argv) {
runServer = false;
int j = i;
i = argc;
+
+ // Try to clean up earlier services we've had
+ try {
+ rfb::win32::unregisterService("WinVNC4");
+ } catch (rdr::SystemException) {
+ // Do nothing as we might fail simply because there was no
+ // service to remove
+ }
+ try {
+ rfb::win32::unregisterService("TigerVNC Server");
+ } catch (rdr::SystemException) {
+ }
+
if (rfb::win32::registerService(VNCServerService::Name,
_T("TigerVNC Server"),
_T("Provides remote access to this machine via the VNC/RFB protocol."),