aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt10
-rw-r--r--common/network/TcpSocket.cxx257
-rw-r--r--common/rfb/CConnection.cxx2
-rw-r--r--common/rfb/CSecurityVeNCrypt.cxx2
-rw-r--r--common/rfb/SConnection.cxx18
-rw-r--r--common/rfb/SConnection.h17
-rw-r--r--common/rfb/SSecurity.h5
-rw-r--r--common/rfb/SSecurityStack.cxx17
-rw-r--r--common/rfb/SSecurityStack.h1
-rw-r--r--common/rfb/SSecurityVeNCrypt.cxx15
-rw-r--r--common/rfb/SSecurityVeNCrypt.h5
-rw-r--r--common/rfb/SSecurityVncAuth.cxx64
-rw-r--r--common/rfb/SSecurityVncAuth.h12
-rw-r--r--common/rfb/Security.h1
-rw-r--r--common/rfb/SecurityServer.cxx2
-rw-r--r--common/rfb/SecurityServer.h3
-rw-r--r--common/rfb/ServerCore.cxx4
-rw-r--r--common/rfb/ServerCore.h1
-rw-r--r--common/rfb/VNCSConnectionST.cxx6
-rw-r--r--config.h.in1
-rw-r--r--java/CMakeLists.txt2
-rw-r--r--java/com/tigervnc/network/SSLEngineManager.java88
-rw-r--r--java/com/tigervnc/network/Socket.java27
-rw-r--r--java/com/tigervnc/network/SocketListener.java5
-rw-r--r--java/com/tigervnc/network/TcpListener.java43
-rw-r--r--java/com/tigervnc/network/TcpSocket.java5
-rw-r--r--java/com/tigervnc/vncviewer/ClipboardDialog.java127
-rw-r--r--java/com/tigervnc/vncviewer/DesktopWindow.java32
-rw-r--r--java/com/tigervnc/vncviewer/VncViewer.java2
-rw-r--r--po/CMakeLists.txt7
-rw-r--r--po/de.po438
-rw-r--r--po/nl.po373
-rw-r--r--po/tigervnc.pot114
-rw-r--r--po/uk.po753
-rw-r--r--unix/vncpasswd/vncpasswd.cxx68
-rw-r--r--unix/xserver/hw/vnc/xvnc.cc2
-rw-r--r--vncviewer/CConn.cxx12
-rw-r--r--vncviewer/DesktopWindow.cxx16
-rw-r--r--vncviewer/FLTKPixelBuffer.cxx2
-rw-r--r--vncviewer/X11PixelBuffer.cxx8
-rw-r--r--vncviewer/parameters.cxx142
-rw-r--r--vncviewer/vncviewer.cxx4
-rw-r--r--win/vncconfig/Authentication.h3
43 files changed, 1840 insertions, 876 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1dcfd9ed..3091d7b2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,10 +18,10 @@ include(CheckCSourceRuns)
include(CMakeMacroLibtoolFile)
project(tigervnc)
-set(VERSION 1.3.80)
+set(VERSION 1.4.80)
# The RC version must always be four comma-separated numbers
-set(RCVERSION 1,3,80,0)
+set(RCVERSION 1,4,80,0)
# Installation paths
set(BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin")
@@ -321,6 +321,12 @@ else()
set(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h)
endif()
check_function_exists(inet_aton HAVE_INET_ATON)
+# This might give a false positive on Windows as it is also guarded by
+# a version check that we do not satisfy (requires Vista, but we target
+# Windows 2000).
+if(NOT WIN32)
+check_function_exists(inet_pton HAVE_INET_PTON)
+endif()
check_function_exists(getaddrinfo HAVE_GETADDRINFO)
set(CMAKE_EXTRA_INCLUDE_FILES)
set(CMAKE_REQUIRED_LIBRARIES)
diff --git a/common/network/TcpSocket.cxx b/common/network/TcpSocket.cxx
index d9e9376a..f2d76bfa 100644
--- a/common/network/TcpSocket.cxx
+++ b/common/network/TcpSocket.cxx
@@ -239,27 +239,66 @@ int TcpSocket::getMyPort() {
}
char* TcpSocket::getPeerAddress() {
- struct sockaddr_in info;
- struct in_addr addr;
- socklen_t info_size = sizeof(info);
+ vnc_sockaddr_t sa;
+ socklen_t sa_size = sizeof(sa);
+
+ if (getpeername(getFd(), &sa.u.sa, &sa_size) != 0) {
+ vlog.error("unable to get peer name for socket");
+ return rfb::strDup("");
+ }
+
+#if defined(HAVE_GETADDRINFO) && defined(HAVE_INET_PTON)
+ if (sa.u.sa.sa_family == AF_INET6) {
+ char buffer[INET6_ADDRSTRLEN + 2];
+ const char *name;
+
+ buffer[0] = '[';
+
+ name = inet_ntop(sa.u.sa.sa_family, &sa.u.sin6.sin6_addr,
+ buffer + 1, sizeof(buffer) - 2);
+ if (name == NULL) {
+ vlog.error("unable to convert peer name to a string");
+ return rfb::strDup("");
+ }
- getpeername(getFd(), (struct sockaddr *)&info, &info_size);
- memcpy(&addr, &info.sin_addr, sizeof(addr));
+ strcat(buffer, "]");
+
+ return rfb::strDup(buffer);
+ }
+#endif
+
+ if (sa.u.sa.sa_family == AF_INET) {
+ char *name;
+
+ name = inet_ntoa(sa.u.sin.sin_addr);
+ if (name == NULL) {
+ vlog.error("unable to convert peer name to a string");
+ return rfb::strDup("");
+ }
- char* name = inet_ntoa(addr);
- if (name) {
return rfb::strDup(name);
- } else {
- return rfb::strDup("");
}
+
+ vlog.error("unknown address family for socket");
+ return rfb::strDup("");
}
int TcpSocket::getPeerPort() {
- struct sockaddr_in info;
- socklen_t info_size = sizeof(info);
+ vnc_sockaddr_t sa;
+ socklen_t sa_size = sizeof(sa);
+
+ getpeername(getFd(), &sa.u.sa, &sa_size);
- getpeername(getFd(), (struct sockaddr *)&info, &info_size);
- return ntohs(info.sin_port);
+ switch (sa.u.sa.sa_family) {
+#ifdef HAVE_GETADDRINFO
+ case AF_INET6:
+ return ntohs(sa.u.sin6.sin6_port);
+#endif /* HAVE_GETADDRINFO */
+ case AF_INET:
+ return ntohs(sa.u.sin.sin_port);
+ default:
+ return 0;
+ }
}
char* TcpSocket::getPeerEndpoint() {
@@ -293,7 +332,11 @@ bool TcpSocket::sameMachine() {
&myaddr.u.sin6.sin6_addr);
#endif
- return (peeraddr.u.sin.sin_addr.s_addr == myaddr.u.sin.sin_addr.s_addr);
+ if (peeraddr.u.sa.sa_family == AF_INET)
+ return (peeraddr.u.sin.sin_addr.s_addr == myaddr.u.sin.sin_addr.s_addr);
+
+ // No idea what this is. Assume we're on different machines.
+ return false;
}
void TcpSocket::shutdown()
@@ -326,27 +369,126 @@ bool TcpSocket::cork(int sock, bool enable) {
bool TcpSocket::isSocket(int sock)
{
- struct sockaddr_in info;
- socklen_t info_size = sizeof(info);
- return getsockname(sock, (struct sockaddr *)&info, &info_size) >= 0;
+ vnc_sockaddr_t sa;
+ socklen_t sa_size = sizeof(sa);
+ return getsockname(sock, &sa.u.sa, &sa_size) >= 0;
}
bool TcpSocket::isConnected(int sock)
{
- struct sockaddr_in info;
- socklen_t info_size = sizeof(info);
- return getpeername(sock, (struct sockaddr *)&info, &info_size) >= 0;
+ vnc_sockaddr_t sa;
+ socklen_t sa_size = sizeof(sa);
+ return getpeername(sock, &sa.u.sa, &sa_size) >= 0;
}
int TcpSocket::getSockPort(int sock)
{
- struct sockaddr_in info;
- socklen_t info_size = sizeof(info);
- if (getsockname(sock, (struct sockaddr *)&info, &info_size) < 0)
+ vnc_sockaddr_t sa;
+ socklen_t sa_size = sizeof(sa);
+ if (getsockname(sock, &sa.u.sa, &sa_size) < 0)
return 0;
- return ntohs(info.sin_port);
+
+ switch (sa.u.sa.sa_family) {
+#ifdef HAVE_GETADDRINFO
+ case AF_INET6:
+ return ntohs(sa.u.sin6.sin6_port);
+#endif /* HAVE_GETADDRINFO */
+
+ default:
+ return ntohs(sa.u.sin.sin_port);
+ }
}
+static int bindIPv6 (const char *listenaddr,
+ int port,
+ bool localhostOnly)
+{
+#ifdef HAVE_GETADDRINFO
+ struct sockaddr_in6 addr6;
+ socklen_t sa_len;
+ int fd;
+
+ if ((fd = socket(AF_INET6, SOCK_STREAM, 0)) < 0)
+ return -1;
+
+#ifdef IPV6_V6ONLY
+ // - We made an IPv6-capable socket, and we need it to do IPv4 too
+ int opt = 0;
+ setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (char *)&opt, sizeof(opt));
+#else
+ vlog.error("IPV6_V6ONLY support is missing. "
+ "IPv4 clients may not be able to connect.");
+#endif
+
+ memset(&addr6, 0, (sa_len = sizeof(addr6)));
+ addr6.sin6_family = AF_INET6;
+ addr6.sin6_port = htons(port);
+
+ if (localhostOnly)
+ addr6.sin6_addr = in6addr_loopback;
+ else if (listenaddr != NULL) {
+#ifdef HAVE_INET_PTON
+ if (inet_pton(AF_INET6, listenaddr, &addr6.sin6_addr) != 1) {
+ closesocket(fd);
+ return -1;
+ }
+#else
+ // Unable to parse without inet_pton
+ closesocket(fd);
+ return -1;
+#endif
+ }
+
+ if (bind(fd, (struct sockaddr *) &addr6, sa_len) == -1) {
+ closesocket(fd);
+ return -1;
+ }
+
+ return fd;
+#else
+ return -1;
+#endif /* HAVE_GETADDRINFO */
+}
+
+static int bindIPv4 (const char *listenaddr,
+ int port,
+ bool localhostOnly)
+{
+ struct sockaddr_in addr;
+ socklen_t sa_len;
+ int fd;
+
+ if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+ return -1;
+
+ memset(&addr, 0, (sa_len = sizeof(addr)));
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(port);
+
+ if (localhostOnly)
+ addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ else if (listenaddr != NULL) {
+#ifdef HAVE_INET_ATON
+ if (inet_aton(listenaddr, &addr.sin_addr) == 0)
+#else
+ /* Some systems (e.g. Windows) do not have inet_aton, sigh */
+ if ((addr.sin_addr.s_addr = inet_addr(listenaddr)) == INADDR_NONE)
+#endif
+ {
+ closesocket(fd);
+ throw Exception("invalid network interface address: %s", listenaddr);
+ }
+ } else
+ /* Bind to 0.0.0.0 by default. */
+ addr.sin_addr.s_addr = htonl(INADDR_ANY);
+
+ if (bind(fd, (struct sockaddr *) &addr, sa_len) == -1) {
+ closesocket(fd);
+ return -1;
+ }
+
+ return fd;
+}
TcpListener::TcpListener(const char *listenaddr, int port, bool localhostOnly,
int sock, bool close_) : closeFd(close_)
@@ -357,8 +499,9 @@ TcpListener::TcpListener(const char *listenaddr, int port, bool localhostOnly,
}
initSockets();
- if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
- throw SocketException("unable to create listening socket", errorNumber);
+ if ((fd = bindIPv6 (listenaddr, port, localhostOnly)) < 0)
+ if ((fd = bindIPv4 (listenaddr, port, localhostOnly)) < 0)
+ throw SocketException("unable to create listening socket", errorNumber);
#ifndef WIN32
// - By default, close the socket on exec()
@@ -373,34 +516,6 @@ TcpListener::TcpListener(const char *listenaddr, int port, bool localhostOnly,
}
#endif
- // - Bind it to the desired port
- struct sockaddr_in addr;
- memset(&addr, 0, sizeof(addr));
- addr.sin_family = AF_INET;
-
- if (localhostOnly) {
- addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
- } else if (listenaddr != NULL) {
-#ifdef HAVE_INET_ATON
- if (inet_aton(listenaddr, &addr.sin_addr) == 0)
-#else
- /* Some systems (e.g. Windows) do not have inet_aton, sigh */
- if ((addr.sin_addr.s_addr = inet_addr(listenaddr)) == INADDR_NONE)
-#endif
- {
- closesocket(fd);
- throw Exception("invalid network interface address: %s", listenaddr);
- }
- } else
- addr.sin_addr.s_addr = htonl(INADDR_ANY); /* Bind to 0.0.0.0 by default. */
-
- addr.sin_port = htons(port);
- if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
- int e = errorNumber;
- closesocket(fd);
- throw SocketException("unable to bind listening socket", e);
- }
-
// - Set it to be a listening socket
if (listen(fd, 5) < 0) {
int e = errorNumber;
@@ -449,6 +564,30 @@ TcpListener::accept() {
}
void TcpListener::getMyAddresses(std::list<char*>* result) {
+#if defined(HAVE_GETADDRINFO) && defined(HAVE_INET_PTON)
+ vnc_sockaddr_t sa;
+ struct addrinfo *ai, *current, hints;
+
+ memset(&hints, 0, sizeof(struct addrinfo));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_canonname = NULL;
+ hints.ai_addr = NULL;
+ hints.ai_next = NULL;
+
+ if ((getaddrinfo(NULL, NULL, &hints, &ai)) != 0)
+ return;
+
+ for (current= ai; current != NULL; current = current->ai_next) {
+ if (current->ai_family != AF_INET && current->ai_family != AF_INET6)
+ continue;
+
+ char *addr = new char[INET6_ADDRSTRLEN];
+ inet_ntop(current->ai_family, current->ai_addr, addr, INET6_ADDRSTRLEN);
+ result->push_back(addr);
+ }
+ freeaddrinfo(ai);
+#else
const hostent* addrs = gethostbyname(0);
if (addrs == 0)
throw rdr::SystemException("gethostbyname", errorNumber);
@@ -460,6 +599,7 @@ void TcpListener::getMyAddresses(std::list<char*>* result) {
strcpy(addr, addrC);
result->push_back(addr);
}
+#endif /* defined(HAVE_GETADDRINFO) && defined(HAVE_INET_PTON) */
}
int TcpListener::getMyPort() {
@@ -493,6 +633,15 @@ bool
TcpFilter::verifyConnection(Socket* s) {
rfb::CharArray name;
+#ifdef HAVE_GETADDRINFO
+ vnc_sockaddr_t sa;
+ socklen_t sa_size = sizeof(sa);
+ if (getpeername(s->getFd(), &sa.u.sa, &sa_size) != 0 ||
+ sa.u.sa.sa_family != AF_INET)
+ /* Matching only works for IPv4 */
+ return false;
+#endif /* HAVE_GETADDRINFO */
+
name.buf = s->getPeerAddress();
std::list<TcpFilter::Pattern>::iterator i;
for (i=filter.begin(); i!=filter.end(); i++) {
diff --git a/common/rfb/CConnection.cxx b/common/rfb/CConnection.cxx
index 1695c3a6..e0a23b5a 100644
--- a/common/rfb/CConnection.cxx
+++ b/common/rfb/CConnection.cxx
@@ -181,7 +181,7 @@ void CConnection::processSecurityTypesMsg()
if (secType != secTypeInvalid) {
os->writeU8(secType);
os->flush();
- vlog.debug("Choosing security type %s(%d)",secTypeName(secType),secType);
+ vlog.info("Choosing security type %s(%d)",secTypeName(secType),secType);
}
}
diff --git a/common/rfb/CSecurityVeNCrypt.cxx b/common/rfb/CSecurityVeNCrypt.cxx
index 77eeef9a..a15da4a6 100644
--- a/common/rfb/CSecurityVeNCrypt.cxx
+++ b/common/rfb/CSecurityVeNCrypt.cxx
@@ -164,7 +164,7 @@ bool CSecurityVeNCrypt::processMsg(CConnection* cc)
break;
}
- vlog.debug("Choosing security type %s (%d)", secTypeName(chosenType),
+ vlog.info("Choosing security type %s (%d)", secTypeName(chosenType),
chosenType);
/* Set up the stack according to the chosen type: */
diff --git a/common/rfb/SConnection.cxx b/common/rfb/SConnection.cxx
index eeaeafe4..99a4850c 100644
--- a/common/rfb/SConnection.cxx
+++ b/common/rfb/SConnection.cxx
@@ -28,6 +28,7 @@
#include <rfb/ServerCore.h>
#include <rfb/encodings.h>
#include <rfb/EncodeManager.h>
+#include <rfb/SSecurity.h>
#include <rfb/LogWriter.h>
@@ -36,13 +37,15 @@ using namespace rfb;
static LogWriter vlog("SConnection");
// AccessRights values
-const SConnection::AccessRights SConnection::AccessView = 0x0001;
-const SConnection::AccessRights SConnection::AccessKeyEvents = 0x0002;
-const SConnection::AccessRights SConnection::AccessPtrEvents = 0x0004;
-const SConnection::AccessRights SConnection::AccessCutText = 0x0008;
-const SConnection::AccessRights SConnection::AccessDefault = 0x03ff;
-const SConnection::AccessRights SConnection::AccessNoQuery = 0x0400;
-const SConnection::AccessRights SConnection::AccessFull = 0xffff;
+const SConnection::AccessRights SConnection::AccessView = 0x0001;
+const SConnection::AccessRights SConnection::AccessKeyEvents = 0x0002;
+const SConnection::AccessRights SConnection::AccessPtrEvents = 0x0004;
+const SConnection::AccessRights SConnection::AccessCutText = 0x0008;
+const SConnection::AccessRights SConnection::AccessSetDesktopSize = 0x0010;
+const SConnection::AccessRights SConnection::AccessNonShared = 0x0020;
+const SConnection::AccessRights SConnection::AccessDefault = 0x03ff;
+const SConnection::AccessRights SConnection::AccessNoQuery = 0x0400;
+const SConnection::AccessRights SConnection::AccessFull = 0xffff;
SConnection::SConnection(bool reverseConnection_)
@@ -223,6 +226,7 @@ void SConnection::processSecurityMsg()
if (done) {
state_ = RFBSTATE_QUERYING;
queryConnection(ssecurity->getUserName());
+ setAccessRights(ssecurity->getAccessRights());
}
} catch (AuthFailureException& e) {
vlog.error("AuthFailureException: %s", e.str());
diff --git a/common/rfb/SConnection.h b/common/rfb/SConnection.h
index 7718f4c1..005a7a85 100644
--- a/common/rfb/SConnection.h
+++ b/common/rfb/SConnection.h
@@ -28,7 +28,6 @@
#include <rdr/OutStream.h>
#include <rfb/SMsgHandler.h>
#include <rfb/SecurityServer.h>
-#include <rfb/SSecurity.h>
namespace rfb {
@@ -123,13 +122,15 @@ namespace rfb {
// is up to the derived class.
typedef rdr::U16 AccessRights;
- static const AccessRights AccessView; // View display contents
- static const AccessRights AccessKeyEvents; // Send key events
- static const AccessRights AccessPtrEvents; // Send pointer events
- static const AccessRights AccessCutText; // Send/receive clipboard events
- static const AccessRights AccessDefault; // The default rights, INCLUDING FUTURE ONES
- static const AccessRights AccessNoQuery; // Connect without local user accepting
- static const AccessRights AccessFull; // All of the available AND FUTURE rights
+ static const AccessRights AccessView; // View display contents
+ static const AccessRights AccessKeyEvents; // Send key events
+ static const AccessRights AccessPtrEvents; // Send pointer events
+ static const AccessRights AccessCutText; // Send/receive clipboard events
+ static const AccessRights AccessSetDesktopSize; // Change desktop size
+ static const AccessRights AccessNonShared; // Exclusive access to the server
+ static const AccessRights AccessDefault; // The default rights, INCLUDING FUTURE ONES
+ static const AccessRights AccessNoQuery; // Connect without local user accepting
+ static const AccessRights AccessFull; // All of the available AND FUTURE rights
virtual void setAccessRights(AccessRights ar) = 0;
// Other methods
diff --git a/common/rfb/SSecurity.h b/common/rfb/SSecurity.h
index afc744e4..6da63c3c 100644
--- a/common/rfb/SSecurity.h
+++ b/common/rfb/SSecurity.h
@@ -44,13 +44,12 @@
#define __RFB_SSECURITY_H__
#include <rdr/types.h>
+#include <rfb/SConnection.h>
#include <rfb/util.h>
#include <list>
namespace rfb {
- class SConnection;
-
class SSecurity {
public:
virtual ~SSecurity() {}
@@ -63,6 +62,8 @@ namespace rfb {
// necessary. Null may be returned to indicate that there is no user name
// for this security type.
virtual const char* getUserName() const = 0;
+
+ virtual SConnection::AccessRights getAccessRights() const { return SConnection::AccessDefault; }
};
}
diff --git a/common/rfb/SSecurityStack.cxx b/common/rfb/SSecurityStack.cxx
index 9ddc9f2f..478ce4f6 100644
--- a/common/rfb/SSecurityStack.cxx
+++ b/common/rfb/SSecurityStack.cxx
@@ -65,3 +65,20 @@ const char* SSecurityStack::getUserName() const
return c;
}
+
+SConnection::AccessRights SSecurityStack::getAccessRights() const
+{
+ SConnection::AccessRights accessRights;
+
+ if (!state0 && !state1)
+ return SSecurity::getAccessRights();
+
+ accessRights = SConnection::AccessFull;
+
+ if (state0)
+ accessRights &= state0->getAccessRights();
+ if (state1)
+ accessRights &= state1->getAccessRights();
+
+ return accessRights;
+}
diff --git a/common/rfb/SSecurityStack.h b/common/rfb/SSecurityStack.h
index c80a3b9f..dd743d28 100644
--- a/common/rfb/SSecurityStack.h
+++ b/common/rfb/SSecurityStack.h
@@ -31,6 +31,7 @@ namespace rfb {
virtual bool processMsg(SConnection* cc);
virtual int getType() const { return type; };
virtual const char* getUserName() const;
+ virtual SConnection::AccessRights getAccessRights() const;
protected:
short state;
SSecurity* state0;
diff --git a/common/rfb/SSecurityVeNCrypt.cxx b/common/rfb/SSecurityVeNCrypt.cxx
index 9e4260f4..7c137498 100644
--- a/common/rfb/SSecurityVeNCrypt.cxx
+++ b/common/rfb/SSecurityVeNCrypt.cxx
@@ -157,7 +157,7 @@ bool SSecurityVeNCrypt::processMsg(SConnection* sc)
if (!haveChosenType)
chosenType = secTypeInvalid;
- vlog.debug("Choosing security type %s (%d)", secTypeName(chosenType),
+ vlog.info("Client requests security type %s (%d)", secTypeName(chosenType),
chosenType);
/* Set up the stack according to the chosen type */
@@ -171,3 +171,16 @@ bool SSecurityVeNCrypt::processMsg(SConnection* sc)
return ssecurity->processMsg(sc);
}
+const char* SSecurityVeNCrypt::getUserName() const
+{
+ if (ssecurity == NULL)
+ return NULL;
+ return ssecurity->getUserName();
+}
+
+SConnection::AccessRights SSecurityVeNCrypt::getAccessRights() const
+{
+ if (ssecurity == NULL)
+ return SSecurity::getAccessRights();
+ return ssecurity->getAccessRights();
+}
diff --git a/common/rfb/SSecurityVeNCrypt.h b/common/rfb/SSecurityVeNCrypt.h
index 849a702f..f9c753f0 100644
--- a/common/rfb/SSecurityVeNCrypt.h
+++ b/common/rfb/SSecurityVeNCrypt.h
@@ -39,8 +39,9 @@ namespace rfb {
SSecurityVeNCrypt(SecurityServer *sec);
~SSecurityVeNCrypt();
virtual bool processMsg(SConnection* sc);// { return true; }
- virtual int getType() const { return secTypeVeNCrypt; }
- virtual const char* getUserName() const { return NULL; }
+ virtual int getType() const { return chosenType; }
+ virtual const char* getUserName() const;
+ virtual SConnection::AccessRights getAccessRights() const;
protected:
SSecurity *ssecurity;
diff --git a/common/rfb/SSecurityVncAuth.cxx b/common/rfb/SSecurityVncAuth.cxx
index ca81bf33..05488f67 100644
--- a/common/rfb/SSecurityVncAuth.cxx
+++ b/common/rfb/SSecurityVncAuth.cxx
@@ -49,10 +49,27 @@ VncAuthPasswdParameter SSecurityVncAuth::vncAuthPasswd
"access the server", &SSecurityVncAuth::vncAuthPasswdFile);
SSecurityVncAuth::SSecurityVncAuth(void)
- : sentChallenge(false), responsePos(0), pg(&vncAuthPasswd)
+ : sentChallenge(false), responsePos(0), pg(&vncAuthPasswd), accessRights(0)
{
}
+bool SSecurityVncAuth::verifyResponse(const PlainPasswd &password)
+{
+ rdr::U8 expectedResponse[vncAuthChallengeSize];
+
+ // Calculate the expected response
+ rdr::U8 key[8];
+ int pwdLen = strlen(password.buf);
+ for (int i=0; i<8; i++)
+ key[i] = i<pwdLen ? password.buf[i] : 0;
+ deskey(key, EN0);
+ for (int j = 0; j < vncAuthChallengeSize; j += 8)
+ des(challenge+j, expectedResponse+j);
+
+ // Check the actual response
+ return memcmp(response, expectedResponse, vncAuthChallengeSize) == 0;
+}
+
bool SSecurityVncAuth::processMsg(SConnection* sc)
{
rdr::InStream* is = sc->getInStream();
@@ -72,25 +89,23 @@ bool SSecurityVncAuth::processMsg(SConnection* sc)
if (responsePos < vncAuthChallengeSize) return false;
- PlainPasswd passwd(pg->getVncAuthPasswd());
+ PlainPasswd passwd, passwdReadOnly;
+ pg->getVncAuthPasswd(&passwd, &passwdReadOnly);
if (!passwd.buf)
throw AuthFailureException("No password configured for VNC Auth");
- // Calculate the expected response
- rdr::U8 key[8];
- int pwdLen = strlen(passwd.buf);
- for (int i=0; i<8; i++)
- key[i] = i<pwdLen ? passwd.buf[i] : 0;
- deskey(key, EN0);
- for (int j = 0; j < vncAuthChallengeSize; j += 8)
- des(challenge+j, challenge+j);
+ if (verifyResponse(passwd)) {
+ accessRights = SConnection::AccessDefault;
+ return true;
+ }
- // Check the actual response
- if (memcmp(challenge, response, vncAuthChallengeSize) != 0)
- throw AuthFailureException();
+ if (passwdReadOnly.buf && verifyResponse(passwdReadOnly)) {
+ accessRights = SConnection::AccessView;
+ return true;
+ }
- return true;
+ throw AuthFailureException();
}
VncAuthPasswdParameter::VncAuthPasswdParameter(const char* name,
@@ -99,8 +114,8 @@ VncAuthPasswdParameter::VncAuthPasswdParameter(const char* name,
: BinaryParameter(name, desc, 0, 0, ConfServer), passwdFile(passwdFile_) {
}
-char* VncAuthPasswdParameter::getVncAuthPasswd() {
- ObfuscatedPasswd obfuscated;
+void VncAuthPasswdParameter::getVncAuthPasswd(PlainPasswd *password, PlainPasswd *readOnlyPassword) {
+ ObfuscatedPasswd obfuscated, obfuscatedReadOnly;
getData((void**)&obfuscated.buf, &obfuscated.length);
if (obfuscated.length == 0) {
@@ -108,18 +123,20 @@ char* VncAuthPasswdParameter::getVncAuthPasswd() {
CharArray fname(passwdFile->getData());
if (!fname.buf[0]) {
vlog.info("neither %s nor %s params set", getName(), passwdFile->getName());
- return 0;
+ return;
}
FILE* fp = fopen(fname.buf, "r");
if (!fp) {
vlog.error("opening password file '%s' failed",fname.buf);
- return 0;
+ return;
}
vlog.debug("reading password file");
- obfuscated.buf = new char[128];
- obfuscated.length = fread(obfuscated.buf, 1, 128, fp);
+ obfuscated.buf = new char[8];
+ obfuscated.length = fread(obfuscated.buf, 1, 8, fp);
+ obfuscatedReadOnly.buf = new char[8];
+ obfuscatedReadOnly.length = fread(obfuscatedReadOnly.buf, 1, 8, fp);
fclose(fp);
} else {
vlog.info("%s parameter not set", getName());
@@ -127,10 +144,11 @@ char* VncAuthPasswdParameter::getVncAuthPasswd() {
}
try {
- PlainPasswd password(obfuscated);
- return password.takeBuf();
+ PlainPasswd plainPassword(obfuscated);
+ password->replaceBuf(plainPassword.takeBuf());
+ PlainPasswd plainPasswordReadOnly(obfuscatedReadOnly);
+ readOnlyPassword->replaceBuf(plainPasswordReadOnly.takeBuf());
} catch (...) {
- return 0;
}
}
diff --git a/common/rfb/SSecurityVncAuth.h b/common/rfb/SSecurityVncAuth.h
index 8a2d0f62..e9f379ba 100644
--- a/common/rfb/SSecurityVncAuth.h
+++ b/common/rfb/SSecurityVncAuth.h
@@ -25,6 +25,7 @@
#define __RFB_SSECURITYVNCAUTH_H__
#include <rfb/Configuration.h>
+#include <rfb/Password.h>
#include <rfb/SSecurity.h>
#include <rfb/Security.h>
#include <rdr/types.h>
@@ -33,15 +34,15 @@ namespace rfb {
class VncAuthPasswdGetter {
public:
- // getPasswd() returns a string or null if unsuccessful. The
- // SSecurityVncAuth object delete[]s the string when done.
- virtual char* getVncAuthPasswd()=0;
+ // getVncAuthPasswd() fills buffer of given password and readOnlyPassword.
+ // If there was no read only password in the file, readOnlyPassword buffer is null.
+ virtual void getVncAuthPasswd(PlainPasswd *password, PlainPasswd *readOnlyPassword)=0;
};
class VncAuthPasswdParameter : public VncAuthPasswdGetter, BinaryParameter {
public:
VncAuthPasswdParameter(const char* name, const char* desc, StringParameter* passwdFile_);
- virtual char* getVncAuthPasswd();
+ virtual void getVncAuthPasswd(PlainPasswd *password, PlainPasswd *readOnlyPassword);
protected:
StringParameter* passwdFile;
};
@@ -52,15 +53,18 @@ namespace rfb {
virtual bool processMsg(SConnection* sc);
virtual int getType() const {return secTypeVncAuth;}
virtual const char* getUserName() const {return 0;}
+ virtual SConnection::AccessRights getAccessRights() const { return accessRights; }
static StringParameter vncAuthPasswdFile;
static VncAuthPasswdParameter vncAuthPasswd;
private:
+ bool verifyResponse(const PlainPasswd &password);
enum {vncAuthChallengeSize = 16};
rdr::U8 challenge[vncAuthChallengeSize];
rdr::U8 response[vncAuthChallengeSize];
bool sentChallenge;
int responsePos;
VncAuthPasswdGetter* pg;
+ SConnection::AccessRights accessRights;
};
}
#endif
diff --git a/common/rfb/Security.h b/common/rfb/Security.h
index 196eb429..85bc325a 100644
--- a/common/rfb/Security.h
+++ b/common/rfb/Security.h
@@ -25,7 +25,6 @@
#include <rdr/types.h>
#include <rfb/Configuration.h>
#include <rfb/CSecurity.h>
-#include <rfb/SSecurity.h>
#include <list>
diff --git a/common/rfb/SecurityServer.cxx b/common/rfb/SecurityServer.cxx
index 5bd7b2c9..e0aee137 100644
--- a/common/rfb/SecurityServer.cxx
+++ b/common/rfb/SecurityServer.cxx
@@ -43,7 +43,7 @@ StringParameter SecurityServer::secTypes
#endif
")",
#ifdef HAVE_GNUTLS
- "VncAuth,TLSVnc",
+ "TLSVnc,VncAuth",
#else
"VncAuth",
#endif
diff --git a/common/rfb/SecurityServer.h b/common/rfb/SecurityServer.h
index 0986619a..019d67fc 100644
--- a/common/rfb/SecurityServer.h
+++ b/common/rfb/SecurityServer.h
@@ -22,9 +22,10 @@
#include <rfb/Configuration.h>
#include <rfb/Security.h>
-#include <rfb/SSecurity.h>
namespace rfb {
+
+ class SSecurity;
class SecurityServer : public Security {
public:
diff --git a/common/rfb/ServerCore.cxx b/common/rfb/ServerCore.cxx
index ae2fd247..b11a352a 100644
--- a/common/rfb/ServerCore.cxx
+++ b/common/rfb/ServerCore.cxx
@@ -89,6 +89,10 @@ rfb::BoolParameter rfb::Server::sendCutText
("SendCutText",
"Send clipboard changes to clients.",
true);
+rfb::BoolParameter rfb::Server::acceptSetDesktopSize
+("AcceptSetDesktopSize",
+ "Accept set desktop size events from clients.",
+ true);
rfb::BoolParameter rfb::Server::queryConnect
("QueryConnect",
"Prompt the local user to accept or reject incoming connections.",
diff --git a/common/rfb/ServerCore.h b/common/rfb/ServerCore.h
index e12a8bc8..5fc996ff 100644
--- a/common/rfb/ServerCore.h
+++ b/common/rfb/ServerCore.h
@@ -46,6 +46,7 @@ namespace rfb {
static BoolParameter acceptPointerEvents;
static BoolParameter acceptCutText;
static BoolParameter sendCutText;
+ static BoolParameter acceptSetDesktopSize;
static BoolParameter queryConnect;
};
diff --git a/common/rfb/VNCSConnectionST.cxx b/common/rfb/VNCSConnectionST.cxx
index 618048a5..e30b4f42 100644
--- a/common/rfb/VNCSConnectionST.cxx
+++ b/common/rfb/VNCSConnectionST.cxx
@@ -445,9 +445,10 @@ void VNCSConnectionST::clientInit(bool shared)
{
lastEventTime = time(0);
if (rfb::Server::alwaysShared || reverseConnection) shared = true;
+ if (!(accessRights & AccessNonShared)) shared = true;
if (rfb::Server::neverShared) shared = false;
if (!shared) {
- if (rfb::Server::disconnectClients) {
+ if (rfb::Server::disconnectClients && (accessRights & AccessNonShared)) {
// - Close all the other connected clients
vlog.debug("non-shared connection - closing clients");
server->closeClients("Non-shared connection requested", getSock());
@@ -584,6 +585,9 @@ void VNCSConnectionST::setDesktopSize(int fb_width, int fb_height,
{
unsigned int result;
+ if (!(accessRights & AccessSetDesktopSize)) return;
+ if (!rfb::Server::acceptSetDesktopSize) return;
+
// Don't bother the desktop with an invalid configuration
if (!layout.validate(fb_width, fb_height)) {
writer()->writeExtendedDesktopSize(reasonClient, resultInvalid,
diff --git a/config.h.in b/config.h.in
index a50e723d..490d7f6d 100644
--- a/config.h.in
+++ b/config.h.in
@@ -2,6 +2,7 @@
#define PACKAGE_VERSION "@VERSION@"
#cmakedefine HAVE_INET_ATON
+#cmakedefine HAVE_INET_PTON
#cmakedefine HAVE_GETADDRINFO
#cmakedefine HAVE_GNUTLS_SET_GLOBAL_ERRNO
#cmakedefine HAVE_GNUTLS_SET_ERRNO
diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt
index c98c69c0..bf1cffb5 100644
--- a/java/CMakeLists.txt
+++ b/java/CMakeLists.txt
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.8)
project(tigervnc-java Java)
if(NOT VERSION)
- set(VERSION 1.3.80)
+ set(VERSION 1.4.80)
endif()
find_package(Java)
diff --git a/java/com/tigervnc/network/SSLEngineManager.java b/java/com/tigervnc/network/SSLEngineManager.java
index cb1f7c42..c0110995 100644
--- a/java/com/tigervnc/network/SSLEngineManager.java
+++ b/java/com/tigervnc/network/SSLEngineManager.java
@@ -41,14 +41,14 @@ public class SSLEngineManager {
private ByteBuffer peerNetData;
private Executor executor;
- private FdInStream inStream;
- private FdOutStream outStream;
+ private FdInStream in;
+ private FdOutStream os;
- public SSLEngineManager(SSLEngine sslEngine, FdInStream is,
- FdOutStream os) throws IOException {
+ public SSLEngineManager(SSLEngine sslEngine, FdInStream is_,
+ FdOutStream os_) throws IOException {
- inStream = is;
- outStream = os;
+ in = is_;
+ os = os_;
engine = sslEngine;
executor = Executors.newSingleThreadExecutor();
@@ -56,7 +56,8 @@ public class SSLEngineManager {
pktBufSize = engine.getSession().getPacketBufferSize();
appBufSize = engine.getSession().getApplicationBufferSize();
- myAppData = ByteBuffer.allocate(appBufSize);
+ myAppData =
+ ByteBuffer.allocate(Math.max(appBufSize, os.getBufSize()));
myNetData = ByteBuffer.allocate(pktBufSize);
peerAppData = ByteBuffer.allocate(appBufSize);
peerNetData = ByteBuffer.allocate(pktBufSize);
@@ -80,13 +81,14 @@ public class SSLEngineManager {
SSLEngineResult res = engine.unwrap(peerNetData, peerAppData);
peerNetData.compact();
hs = res.getHandshakeStatus();
+ // Check status
switch (res.getStatus()) {
case BUFFER_UNDERFLOW:
- int len = Math.min(peerNetData.remaining(), inStream.getBufSize());
- int m = inStream.check(1, len, false);
- byte[] buf = new byte[m];
- inStream.readBytes(buf, 0, m);
- peerNetData.put(buf, 0, m);
+ int max = Math.min(peerNetData.remaining(), in.getBufSize());
+ int m = in.check(1, max, true);
+ int pos = peerNetData.position();
+ in.readBytes(peerNetData.array(), pos, m);
+ peerNetData.position(pos+m);
peerNetData.flip();
peerNetData.compact();
break;
@@ -102,7 +104,7 @@ public class SSLEngineManager {
}
break;
- case NEED_WRAP :
+ case NEED_WRAP:
// Empty the local network packet buffer.
myNetData.clear();
@@ -112,20 +114,17 @@ public class SSLEngineManager {
// Check status
switch (res.getStatus()) {
- case OK :
+ case OK:
myAppData.compact();
myNetData.flip();
- int n = myNetData.remaining();
- byte[] b = new byte[n];
- myNetData.get(b);
+ os.writeBytes(myNetData.array(), 0, myNetData.remaining());
+ os.flush();
myNetData.clear();
- outStream.writeBytes(b, 0, n);
- outStream.flush();
break;
case BUFFER_OVERFLOW:
// FIXME: How much larger should the buffer be?
- // fallthrough
+ break;
case CLOSED:
engine.closeOutbound();
@@ -133,7 +132,8 @@ public class SSLEngineManager {
}
break;
- case NEED_TASK :
+
+ case NEED_TASK:
// Handle blocking tasks
executeTasks();
break;
@@ -151,29 +151,28 @@ public class SSLEngineManager {
public int read(byte[] data, int dataPtr, int length) throws IOException {
// Read SSL/TLS encoded data from peer
- int len = Math.min(pktBufSize,inStream.getBufSize());
- int bytesRead = inStream.check(1,len,false);
- byte[] buf = new byte[bytesRead];
- inStream.readBytes(buf, 0, bytesRead);
- if (peerNetData.remaining() < bytesRead) {
- peerNetData.flip();
- ByteBuffer b = ByteBuffer.allocate(peerNetData.remaining() + bytesRead);
- b.put(peerNetData);
- peerNetData = b;
- }
- peerNetData.put(buf);
+ int bytesRead = 0;
peerNetData.flip();
SSLEngineResult res = engine.unwrap(peerNetData, peerAppData);
peerNetData.compact();
switch (res.getStatus()) {
case OK :
+ bytesRead = Math.min(length, res.bytesProduced());
peerAppData.flip();
- peerAppData.get(data, dataPtr, res.bytesProduced());
+ peerAppData.get(data, dataPtr, bytesRead);
peerAppData.compact();
break;
case BUFFER_UNDERFLOW:
- // normal (need more net data)
+ // need more net data
+ int pos = peerNetData.position();
+ // attempt to drain the underlying buffer first
+ int need = peerNetData.remaining();
+ int avail = in.check(1, in.getBufSize(), false);
+ if (avail < need)
+ avail = in.check(1, Math.min(need, in.getBufSize()), true);
+ in.readBytes(peerNetData.array(), pos, Math.min(need, avail));
+ peerNetData.position(pos+Math.min(need, avail));
break;
case CLOSED:
@@ -181,24 +180,28 @@ public class SSLEngineManager {
break;
}
- return res.bytesProduced();
+ return bytesRead;
}
public int write(byte[] data, int dataPtr, int length) throws IOException {
int n = 0;
- // FIXME: resize myAppData if necessary
myAppData.put(data, dataPtr, length);
myAppData.flip();
while (myAppData.hasRemaining()) {
SSLEngineResult res = engine.wrap(myAppData, myNetData);
n += res.bytesConsumed();
switch (res.getStatus()) {
+ case OK:
+ break;
+
case BUFFER_OVERFLOW:
- ByteBuffer b = ByteBuffer.allocate(myNetData.capacity() + myAppData.remaining());
+ // Make room in the buffer by flushing the outstream
myNetData.flip();
- b.put(myNetData);
- myNetData = b;
+ os.writeBytes(myNetData.array(), 0, myNetData.remaining());
+ os.flush();
+ myNetData.clear();
break;
+
case CLOSED:
engine.closeOutbound();
break;
@@ -206,12 +209,9 @@ public class SSLEngineManager {
}
myAppData.clear();
myNetData.flip();
- int len = myNetData.remaining();
- byte[] buf = new byte[len];
- myNetData.get(buf);
+ os.writeBytes(myNetData.array(), 0, myNetData.remaining());
+ os.flush();
myNetData.clear();
- outStream.writeBytes(buf, 0, len);
- outStream.flush();
return n;
}
diff --git a/java/com/tigervnc/network/Socket.java b/java/com/tigervnc/network/Socket.java
index bcc920de..651dc05a 100644
--- a/java/com/tigervnc/network/Socket.java
+++ b/java/com/tigervnc/network/Socket.java
@@ -58,7 +58,6 @@ abstract public class Socket {
// Is the remote end on the same machine?
abstract public boolean sameMachine();
- // Was there a "?" in the ConnectionFilter used to accept this Socket?
public void setRequiresQuery() {queryConnection = true;}
public final boolean requiresQuery() {return queryConnection;}
@@ -78,29 +77,3 @@ abstract public class Socket {
boolean isShutdown_;
boolean queryConnection;
}
-
-/*
-abstract class ConnectionFilter {
- public abstract boolean verifyConnection(Socket s);
-};
-
-abstract class SocketListener {
- public SocketListener() {
- fd = null; filter = null;
- }
-
- // shutdown() stops the socket from accepting further connections
- public abstract void shutdown();
-
- // accept() returns a new Socket object if there is a connection
- // attempt in progress AND if the connection passes the filter
- // if one is installed. Otherwise, returns 0.
- public abstract Socket accept();
-
- // setFilter() applies the specified filter to all new connections
- public void setFilter(ConnectionFilter f) {filter = f;}
- //public SocketDescriptor getFd() {return fd;}
- protected FileDescriptor fd;
- protected ConnectionFilter filter;
-};
-*/
diff --git a/java/com/tigervnc/network/SocketListener.java b/java/com/tigervnc/network/SocketListener.java
index a1b2c122..a1f5ea1b 100644
--- a/java/com/tigervnc/network/SocketListener.java
+++ b/java/com/tigervnc/network/SocketListener.java
@@ -29,18 +29,15 @@ abstract public class SocketListener {
public SocketListener() {}
// shutdown() stops the socket from accepting further connections
- abstract public void shutdown();
+ abstract public void shutdown() throws Exception;
// accept() returns a new Socket object if there is a connection
// attempt in progress AND if the connection passes the filter
// if one is installed. Otherwise, returns 0.
abstract public Socket accept();
- // setFilter() applies the specified filter to all new connections
- //public void setFilter(ConnectionFilter* f) {filter = f;}
public FileDescriptor getFd() {return fd;}
protected FileDescriptor fd;
- //protected ConnectionFilter* filter;
}
diff --git a/java/com/tigervnc/network/TcpListener.java b/java/com/tigervnc/network/TcpListener.java
index bab9e4c5..45ee8a4d 100644
--- a/java/com/tigervnc/network/TcpListener.java
+++ b/java/com/tigervnc/network/TcpListener.java
@@ -84,12 +84,21 @@ public class TcpListener extends SocketListener {
this(listenaddr, port, false, null, true);
}
-// TcpListener::~TcpListener() {
-// if (closeFd) closesocket(fd);
-// }
+ protected void finalize() throws Exception {
+ if (closeFd)
+ try {
+ ((SocketDescriptor)getFd()).close();
+ } catch (IOException e) {
+ throw new Exception(e.getMessage());
+ }
+ }
- public void shutdown() {
- //shutdown(getFd(), 2);
+ public void shutdown() throws Exception {
+ try {
+ ((SocketDescriptor)getFd()).shutdown();
+ } catch (IOException e) {
+ throw new Exception(e.getMessage());
+ }
}
public TcpSocket accept() {
@@ -132,32 +141,12 @@ public class TcpListener extends SocketListener {
}
fd.setChannel(new_sock);
TcpSocket s = new TcpSocket(fd);
- //if (filter && !filter->verifyConnection(s)) {
- // delete s;
- // return 0;
- //}
return s;
}
-/*
-void TcpListener::getMyAddresses(std::list<char*>* result) {
- const hostent* addrs = gethostbyname(0);
- if (addrs == 0)
- throw rdr::SystemException("gethostbyname", errorNumber);
- if (addrs->h_addrtype != AF_INET)
- throw rdr::Exception("getMyAddresses: bad family");
- for (int i=0; addrs->h_addr_list[i] != 0; i++) {
- const char* addrC = inet_ntoa(*((struct in_addr*)addrs->h_addr_list[i]));
- char* addr = new char[strlen(addrC)+1];
- strcpy(addr, addrC);
- result->push_back(addr);
+ public int getMyPort() {
+ return ((SocketDescriptor)getFd()).socket().getLocalPort();
}
-}
- */
-
- //public int getMyPort() {
- // return TcpSocket.getSockPort();
- //}
private boolean closeFd;
private ServerSocketChannel channel;
diff --git a/java/com/tigervnc/network/TcpSocket.java b/java/com/tigervnc/network/TcpSocket.java
index 051a9d82..43787e4d 100644
--- a/java/com/tigervnc/network/TcpSocket.java
+++ b/java/com/tigervnc/network/TcpSocket.java
@@ -113,8 +113,7 @@ public class TcpSocket extends Socket {
}
public int getMyPort() {
- SocketAddress address = ((SocketDescriptor)getFd()).socket().getLocalSocketAddress();
- return ((InetSocketAddress)address).getPort();
+ return getSockPort();
}
public String getPeerAddress() {
@@ -184,7 +183,7 @@ public class TcpSocket extends Socket {
}
public int getSockPort() {
- return ((InetSocketAddress)((SocketDescriptor)getFd()).socket().getRemoteSocketAddress()).getPort();
+ return ((SocketDescriptor)getFd()).socket().getLocalPort();
}
/* Tunnelling support. */
diff --git a/java/com/tigervnc/vncviewer/ClipboardDialog.java b/java/com/tigervnc/vncviewer/ClipboardDialog.java
index d4cde6e1..e7aa7e96 100644
--- a/java/com/tigervnc/vncviewer/ClipboardDialog.java
+++ b/java/com/tigervnc/vncviewer/ClipboardDialog.java
@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
- * Copyright (C) 2011 Brian P. Hinz
+ * Copyright (C) 2011-2014 Brian P. Hinz
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,27 +21,91 @@ package com.tigervnc.vncviewer;
import java.awt.*;
import java.awt.event.*;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.*;
+import java.io.*;
+import java.nio.*;
import javax.swing.*;
import javax.swing.border.*;
+import javax.swing.text.*;
+
import com.tigervnc.rfb.LogWriter;
class ClipboardDialog extends Dialog implements ActionListener {
+ private class VncTransferHandler extends TransferHandler {
+ // Custom TransferHandler designed to limit the size of outbound
+ // clipboard transfers to VncViewer.maxCutText.getValue() bytes.
+ private LogWriter vlog = new LogWriter("VncTransferHandler");
+
+ public void exportToClipboard(JComponent c, Clipboard clip, int a)
+ throws IllegalStateException {
+ if (!(c instanceof JTextComponent)) return;
+ StringSelection selection =
+ new StringSelection(((JTextComponent)c).getText());
+ clip.setContents(selection, null);
+ }
+
+ public boolean importData(JComponent c, Transferable t) {
+ if (canImport(c, t.getTransferDataFlavors())) {
+ try {
+ DataFlavor VncFlavor = null;
+ for (DataFlavor f : t.getTransferDataFlavors())
+ if (f.isFlavorTextType() && f.isRepresentationClassInputStream())
+ VncFlavor = f;
+ if (VncFlavor == null) return false;
+ Reader reader = (Reader)VncFlavor.getReaderForText(t);
+ CharBuffer cbuf =
+ CharBuffer.allocate(VncViewer.maxCutText.getValue());
+ cbuf.limit(reader.read(cbuf.array(), 0, cbuf.length()));
+ reader.close();
+ if (c instanceof JTextComponent)
+ ((JTextComponent)c).setText(cbuf.toString());
+ return true;
+ } catch (OutOfMemoryError oome) {
+ vlog.error("ERROR: Too much data on local clipboard!");
+ } catch (UnsupportedFlavorException ufe) {
+ // Skip import
+ vlog.info(ufe.toString());
+ } catch (IOException ioe) {
+ // Skip import
+ vlog.info(ioe.toString());
+ }
+ }
+ return false;
+ }
+
+ public boolean canImport(JComponent c, DataFlavor[] flavors) {
+ for (DataFlavor f : flavors)
+ if (f.isFlavorTextType() && f.isRepresentationClassReader())
+ return true;
+ return false;
+ }
+ }
+
public ClipboardDialog(CConn cc_) {
super(false);
+ setTitle("VNC Clipboard Viewer");
+ setPreferredSize(new Dimension(640, 480));
+ addWindowFocusListener(new WindowAdapter() {
+ // Necessary to ensure that updates from the system clipboard
+ // still occur when the ClipboardDialog has the focus.
+ public void WindowGainedFocus(WindowEvent e) {
+ clientCutText();
+ }
+ });
cc = cc_;
- setTitle("VNC clipboard");
- JPanel pt = new JPanel();
- textArea = new JTextArea(5,50);
- textArea.setBorder(BorderFactory.createLineBorder(Color.gray));
- textArea.setLineWrap(true);
+ textArea = new JTextArea();
+ textArea.setTransferHandler(new VncTransferHandler());
+ // If the textArea can receive the focus, then text within the textArea
+ // can be selected. On platforms that don't support separate selection
+ // and clipboard buffers, this triggers a replacement of the textAra's
+ // contents with the selected text.
+ textArea.setFocusable(false);
+ textArea.setLineWrap(false);
textArea.setWrapStyleWord(true);
JScrollPane sp = new JScrollPane(textArea);
- pt.add(sp, BorderLayout.CENTER);
- getContentPane().add("North", pt);
-
+ getContentPane().add(sp, BorderLayout.CENTER);
+ // button panel placed below the scrollpane
JPanel pb = new JPanel();
clearButton = new JButton("Clear");
pb.add(clearButton);
@@ -53,40 +117,22 @@ class ClipboardDialog extends Dialog implements ActionListener {
pb.add(cancelButton);
cancelButton.addActionListener(this);
getContentPane().add("South", pb);
-
pack();
}
- public boolean compareContentsTo(String str) {
- return str.equals(textArea.getText());
-
- }
-
- public void setContents(String str) {
+ public void serverCutText(String str, int len) {
textArea.setText(str);
+ textArea.copy();
}
- public String getContents() {
- return textArea.getText();
- }
-
- public void serverCutText(String str, int len) {
- setContents(str);
- SecurityManager sm = System.getSecurityManager();
- try {
- if (sm != null) sm.checkSystemClipboardAccess();
- Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
- if (cb != null) {
- StringSelection ss = new StringSelection(str);
- try {
- cb.setContents(ss, null);
- } catch(Exception e) {
- vlog.debug(e.getMessage());
- }
- }
- } catch(SecurityException e) {
- vlog.debug("Cannot access the system clipboard: "+e.getMessage());
- }
+ public void clientCutText() {
+ int hc = textArea.getText().hashCode();
+ textArea.paste();
+ textArea.setCaretPosition(0);
+ String text = textArea.getText();
+ if (cc.viewer.sendClipboard.getValue())
+ if (hc != text.hashCode())
+ cc.writeClientCutText(text, text.length());
}
public void setSendingEnabled(boolean b) {
@@ -98,7 +144,8 @@ class ClipboardDialog extends Dialog implements ActionListener {
if (s instanceof JButton && (JButton)s == clearButton) {
serverCutText(new String(""), 0);
} else if (s instanceof JButton && (JButton)s == sendButton) {
- cc.writeClientCutText(textArea.getText(), textArea.getText().length());
+ String text = textArea.getText();
+ cc.writeClientCutText(text, text.length());
endDialog();
} else if (s instanceof JButton && (JButton)s == cancelButton) {
endDialog();
diff --git a/java/com/tigervnc/vncviewer/DesktopWindow.java b/java/com/tigervnc/vncviewer/DesktopWindow.java
index e78ee277..10d158c4 100644
--- a/java/com/tigervnc/vncviewer/DesktopWindow.java
+++ b/java/com/tigervnc/vncviewer/DesktopWindow.java
@@ -85,7 +85,7 @@ class DesktopWindow extends JPanel implements Runnable, MouseListener,
addKeyListener(this);
addFocusListener(new FocusAdapter() {
public void focusGained(FocusEvent e) {
- checkClipboard();
+ cc.clipboardDialog.clientCutText();
}
public void focusLost(FocusEvent e) {
cc.releaseDownKeys();
@@ -359,36 +359,6 @@ class DesktopWindow extends JPanel implements Runnable, MouseListener,
g2.dispose();
}
- public synchronized void checkClipboard() {
- SecurityManager sm = System.getSecurityManager();
- try {
- if (sm != null) sm.checkSystemClipboardAccess();
- Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
- if (cb != null) {
- Transferable t = cb.getContents(null);
- if (t == null) return;
- DataFlavor flavor =
- DataFlavor.selectBestTextFlavor(t.getTransferDataFlavors());
- if (flavor == null) return;
- BufferedReader br = new BufferedReader(flavor.getReaderForText(t));
- CharBuffer cbuf =
- CharBuffer.allocate(VncViewer.maxCutText.getValue());
- br.read(cbuf);
- cbuf.flip();
- String newContents = cbuf.toString();
- if (!cc.clipboardDialog.compareContentsTo(newContents)) {
- cc.clipboardDialog.setContents(newContents);
- if (cc.viewer.sendClipboard.getValue())
- cc.writeClientCutText(newContents, newContents.length());
- }
- br.close();
- System.gc();
- }
- } catch(java.lang.Exception e) {
- vlog.debug("Exception getting clipboard data: " + e.getMessage());
- }
- }
-
// Mouse-Motion callback function
private void mouseMotionCB(MouseEvent e) {
if (!cc.viewer.viewOnly.getValue() &&
diff --git a/java/com/tigervnc/vncviewer/VncViewer.java b/java/com/tigervnc/vncviewer/VncViewer.java
index 0df39c87..1e0f2230 100644
--- a/java/com/tigervnc/vncviewer/VncViewer.java
+++ b/java/com/tigervnc/vncviewer/VncViewer.java
@@ -457,7 +457,7 @@ public class VncViewer extends javax.swing.JApplet
while (true) {
Socket new_sock = listener.accept();
if (new_sock != null)
- newViewer(this, new_sock);
+ newViewer(this, new_sock, true);
}
}
diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
index 793089ca..513cfcc8 100644
--- a/po/CMakeLists.txt
+++ b/po/CMakeLists.txt
@@ -1,7 +1,7 @@
# Gettext support - mostly borrowed from the Licq project
set(po_FILES
- de es fr it nl pl pt_BR ru sk sv tr
+ de es fr it nl pl pt_BR ru sk sv tr uk
)
if (NOT GETTEXT_MSGMERGE_EXECUTABLE AND NOT GETTEXT_MSGFMT_EXECUTABLE)
@@ -25,8 +25,9 @@ if (GETTEXT_XGETTEXT_EXECUTABLE)
--keyword=N_
"--copyright-holder=TigerVNC Team and many others \(see README.txt\)"
--msgid-bugs-address=tigervnc-devel@googlegroups.com
- --sort-output
+ --sort-by-file
--add-location
+ --add-comments
${po_source}
COMMENT "Updating tigervnc.pot"
VERBATIM
@@ -40,7 +41,7 @@ foreach(lang ${po_FILES})
# Update po files after pot file
add_custom_command(TARGET translations_update POST_BUILD
COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none
- --sort-output ${po} ${CMAKE_CURRENT_SOURCE_DIR}/tigervnc.pot
+ --sort-by-file ${po} ${CMAKE_CURRENT_SOURCE_DIR}/tigervnc.pot
COMMENT "Updating ${lang}.po"
)
diff --git a/po/de.po b/po/de.po
index 5c532929..52e000f6 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1,52 +1,57 @@
-# Copyright (C) 2011 TigerVNC Team
+# German translation of tigervnc.
+# 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.
msgid ""
msgstr ""
-"Project-Id-Version: TigerVNC 0.0.91\n"
+"Project-Id-Version: tigervnc 1.3.90\n"
"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2014-09-22 11:15+0000\n"
-"PO-Revision-Date: 2005-03-01 20:41+0100\n"
-"Last-Translator: Klaus Franken <Klaus.Franken@StrukturPunkt.de>\n"
-"Language-Team: German\n"
-"Language: \n"
+"POT-Creation-Date: 2014-11-19 12:46+0000\n"
+"PO-Revision-Date: 2014-11-28 21:47+0100\n"
+"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
+"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"Language: de\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"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.5.4\n"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:194
#, c-format
msgid "(server default %s)"
-msgstr ""
+msgstr "(Server-Vorgabe %s)"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:227
msgid "About"
-msgstr "Über"
+msgstr "Info"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:103
msgid "About TigerVNC Viewer"
-msgstr "Über TigerVNC-Viewer"
+msgstr "Info zu TigerVNC-Betrachter"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1097
msgid "About TigerVNC viewer..."
-msgstr "Über TigerVNC-Viewer..."
+msgstr "Info zu TigerVNC-Betrachter …"
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:86
msgid "About..."
-msgstr "Über..."
+msgstr "Info …"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:704
msgid "Accept clipboard from server"
-msgstr "Akzeptiere Zwischenablage vom Server"
+msgstr "Zwischenablage vom Server akzeptieren"
#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:327
msgid "Adjusting window size to avoid accidental full screen request"
-msgstr ""
+msgstr "Fenstergröße anpassen, um zufällige Vollbild-Anforderung zu vermeiden"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:563
msgid "Allow JPEG compression:"
-msgstr "Erlaube JPEG-Kompression:"
+msgstr "JPEG-Kompression erlauben:"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1081
msgid "Alt"
msgstr "Alt"
@@ -65,11 +70,11 @@ msgstr "Automatisch auswählen"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:651
#, c-format
msgid "Bad Name/Value pair on line: %d in file: %s"
-msgstr ""
+msgstr "Falsches Name/Wert-Paar in Zeile: %d in Datei: %s"
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:92
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:91
msgid "BitBlt failed"
-msgstr ""
+msgstr "BitBlt fehlgeschlagen"
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:91
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:221
@@ -79,7 +84,7 @@ msgstr "Abbrechen"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:116
msgid "CleanupSignalHandler called"
-msgstr ""
+msgstr "CleanupSignalHandler aufgerufen"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:222
msgid "Close"
@@ -87,103 +92,107 @@ msgstr "Schließen"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:499
msgid "Color level"
-msgstr "Farblevel"
+msgstr "Farbstufe"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:421
-#, fuzzy
msgid "Compression"
-msgstr "individueller Kompressionslevel:"
+msgstr "Kompression"
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:96
msgid "Connect"
msgstr "Verbinden"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1085
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1096
msgid "Connection info..."
-msgstr "Verbindungsinformationen..."
+msgstr "Verbindungsinformationen …"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:362
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:404
#, c-format
-msgid ""
-"Could not convert the parameter-name %s to wchar_t* when reading from the "
-"Registry, the buffersize is to small."
-msgstr ""
+msgid "Could not convert the parameter-name %s to wchar_t* when reading from the Registry, the buffersize is to small."
+msgstr "Der Parametername %s konnte beim Lesen der Registrierungsdatenbank nicht in wchar_t* umgewandelt werden, die Größe des Puffers ist zu gering."
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:302
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:340
#, c-format
-msgid ""
-"Could not convert the parameter-name %s to wchar_t* when writing to the "
-"Registry, the buffersize is to small."
-msgstr ""
+msgid "Could not convert the parameter-name %s to wchar_t* when writing to the Registry, the buffersize is to small."
+msgstr "Der Parametername %s konnte beim Schreiben in die Registrierungsdatenbank nicht in wchar_t* umgewandelt werden, die Größe des Puffers ist zu gering."
#: /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 ""
+msgid "Could not convert the parameter-value %s to wchar_t* when writing to the Registry, the buffersize is to small."
+msgstr "Der Parameterwert %s konnte beim Schreiben in die Registrierungsdatenbank nicht in wchar_t* umgewandelt werden, die Größe des Puffers ist zu gering."
#: /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 ""
+msgid "Could not convert the parameter-value for %s to utf8 char* when reading from the Registry, the buffer dest is to small."
+msgstr "Der Parameterwert für %s konnte beim Lesen der Registrierungsdatenbank nicht in UTF-8 umgewandelt werden, die Größe des Puffers ist zu gering."
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:256
#, c-format
msgid "Could not create VNC home directory: %s."
-msgstr "VNC-Benutzerverzeichnis %s konnte nicht erstellt werden"
+msgstr "VNC-Benutzerverzeichnis konnte nicht erstellt werden: %s."
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:251
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."
+msgstr "VNC-Benutzerverzeichnis konnte nicht angelegt werden: auf Benutzerverzeichnispfad kann nicht zugegriffen werden."
+
+#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:58
+msgid "Could not create framebuffer bitmap"
+msgstr "Framebuffer-Bitmap konnte nicht erstellt werden"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:52
+msgid "Could not create framebuffer device"
+msgstr "Framebuffer-Gerät konnte nicht erstellt werden"
+
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:107
+msgid "Could not create framebuffer image"
+msgstr "Framebuffer-Image konnte nicht erstellt werden"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:310
#, c-format
msgid "Could not encode the parameter-value %s when writing to the Registry."
-msgstr ""
+msgstr "Der Parameterwert %s konnte beim Schreiben in die Registrierungsdatenbank nicht kodiert werden."
#: /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 ""
+msgid "Could not read the line(%d) in the configuration file,the buffersize is to small."
+msgstr "Die Zeile(%d) in der Konfigurationsdatei konnte nicht gelesen werden, die Puffergröße ist zu gering."
+
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:68
+msgid "Couldn't find suitable pixmap format"
+msgstr "Es konnte kein geeignetes Pixmap-Format gefunden werden"
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:80
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:79
msgid "CreateCompatibleDC failed"
-msgstr ""
+msgstr "CreateCompatibleDC fehlgeschlagen"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1068
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1079
msgid "Ctrl"
msgstr "Strg"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:550
msgid "Custom compression level:"
-msgstr "individueller Kompressionslevel:"
+msgstr "Individuelle Kompressionsstufe:"
#: /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 ""
+msgid "Decoding: The size of the buffer dest is to small, it needs to be 1 byte bigger."
+msgstr "Dekodierung: Das Puffer-Ziel ist zu klein, es muss 1 Byte größer sein."
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:172
#, c-format
msgid "Desktop name: %.80s"
-msgstr ""
+msgstr "Desktop-Name: %.80s"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1088
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1099
msgid "Dismiss menu"
msgstr "Menü verlassen"
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:59
+msgid "Display lacks pixmap format for default depth"
+msgstr "Anzeige hat kein Pixmap-Format für die vorgegebene Tiefe"
+
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:778
-#, fuzzy
msgid "Enable full-screen mode over all monitors"
msgstr "Vollbildmodus für alle Monitore aktivieren"
@@ -193,24 +202,18 @@ msgstr "Fortlaufende Aktualisierungen aktivieren"
#: /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 ""
+msgid "Encoding backslash: The size of the buffer dest is to small, it needs to be more than %d bytes bigger."
+msgstr "Kodierung des Rückschrägstrichs: Das Puffer-Ziel ist zu klein, es muss %d Bytes größer sein."
#: /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 ""
+msgid "Encoding escape sequence: The size of the buffer dest is to small, it needs to be more than %d bytes bigger."
+msgstr "Kodierung der Escape-Sequenz: Das Puffer-Ziel ist zu klein, es muss %d Bytes größer sein."
#: /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 ""
+msgid "Encoding normal character: The size of the buffer dest is to small, it needs to be more than %d bytes bigger."
+msgstr "Kodierung des gewöhnlichen Zeichens: Das Puffer-Ziel ist zu klein, es muss %d Bytes größer sein."
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:595
msgid "Encryption"
@@ -219,88 +222,65 @@ msgstr "Verschlüsselung"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:503
#, c-format
msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer"
-msgstr ""
+msgstr "Fehler(%d) beim Schließen des Schlüssels: Software\\TigerVNC\\vncviewer"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:455
#, c-format
msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer"
-msgstr ""
+msgstr "Fehler(%d) beim Schließen des Schlüssels: Software\\TigerVNC\\vncviewer"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:434
#, c-format
msgid "Error(%d) creating key: Software\\TigerVNC\\vncviewer"
-msgstr ""
+msgstr "Fehler(%d) beim Erstellen des Schlüssels: Software\\TigerVNC\\vncviewer"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:471
#, c-format
msgid "Error(%d) opening key: Software\\TigerVNC\\vncviewer"
-msgstr ""
+msgstr "Fehler(%d) beim Öffnen des Schlüssels: Software\\TigerVNC\\vncviewer"
#: /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 ""
+msgstr "Fehler(%d) beim Lesen von %s aus der Registrierungsdatenbank."
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:348
#, c-format
msgid "Error(%d) writing %d(REG_DWORD) to Registry."
-msgstr ""
+msgstr "Fehler(%d) beim Schreiben von %d(REG_DWORD) in die Registrierungsdatenbank."
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:326
#, c-format
msgid "Error(%d) writing %s(REG_SZ) to Registry."
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:50
-#: /home/ossman/devel/tigervnc/vncviewer/FLTKPixelBuffer.cxx:33
-msgid "Error: Not enough memory for framebuffer"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:69
-msgid "Error: couldn't find suitable pixmap format"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:60
-msgid "Error: display lacks pixmap format for default depth"
-msgstr ""
+msgstr "Fehler(%d) beim Schreiben von %s(REG_SZ) in die Registrierungsdatenbank."
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:78
-msgid "Error: only true colour displays supported"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1056
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1067
msgid "Exit viewer"
-msgstr "Viewer beenden"
+msgstr "Betrachter beenden"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:588
-#, fuzzy
msgid "Failed to read configuration file, can't obtain home directory path."
-msgstr ""
-"VNC-Benutzerverzeichnis konnte nicht angelegt werden: auf "
-"Benutzerverzeichnispfad kann nicht zugegriffen werden."
+msgstr "Konfigurationsdatei konnte nicht gelesen werden, auf Benutzerverzeichnispfad kann nicht zugegriffen werden."
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:602
#, c-format
msgid "Failed to read configuration file, can't open %s"
-msgstr ""
+msgstr "Konfigurationsdatei kann nicht gelesen werden, %s lässt sich nicht öffnen"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:621
#, c-format
msgid "Failed to read line %d in file %s"
-msgstr ""
+msgstr "Zeile %d in Datei %s konnte nicht gelesen werden"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:528
-#, fuzzy
msgid "Failed to write configuration file, can't obtain home directory path."
-msgstr ""
-"VNC-Benutzerverzeichnis konnte nicht angelegt werden: auf "
-"Benutzerverzeichnispfad kann nicht zugegriffen werden."
+msgstr "Konfigurationsdatei konnte nicht geschrieben werden, auf Benutzerverzeichnispfad kann nicht zugegriffen werden."
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:542
#, c-format
msgid "Failed to write configuration file, can't open %s"
-msgstr ""
+msgstr "Konfigurationsdatei kann nicht geschrieben werden, %s lässt sich nicht öffnen"
#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:526
#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:538
@@ -316,14 +296,13 @@ msgstr "Fehler beim Erkennen der Maus"
msgid "Full (all available colors)"
msgstr "Voll (alle verfügbaren Farben)"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1059
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070
msgid "Full screen"
msgstr "Vollbildmodus"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:770
-#, fuzzy
msgid "Full-screen mode"
-msgstr "Vollbild-Modus"
+msgstr "Vollbildmodus"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:230
msgid "Hide"
@@ -331,43 +310,42 @@ msgstr "Verbergen"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:238
msgid "Hide Others"
-msgstr "Andere Verbergen"
+msgstr "Andere verbergen"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:177
#, c-format
msgid "Host: %.80s port: %d"
-msgstr ""
+msgstr "Rechner: %.80s Port: %d"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:690
-#, fuzzy
msgid "Input"
-msgstr "Eingaben:"
+msgstr "Eingabe"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:510
msgid "Internal FLTK error. Exiting."
-msgstr "Interner FLTK-Fehler. Beenden."
+msgstr "Interner FLTK-Fehler. Abbruch."
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:384
msgid "Invalid SetColourMapEntries from server!"
-msgstr ""
+msgstr "Ungültige SetColourMapEntries vom Server!"
#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:106
msgid "Invalid geometry specified!"
-msgstr ""
+msgstr "Unzulässige Geometrie wurde angegeben!"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:708
#, c-format
msgid "Invalid parameter name on line: %d in file: %s"
-msgstr ""
+msgstr "Ungültiger Parametername in Zeile: %d in Datei: %s"
-#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:797
+#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:805
msgid "Invalid screen layout computed for resize request!"
-msgstr ""
+msgstr "Ungültige Bildschirmanordnung wurde für die Größenänderungsanforderung ermittelt!"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:204
-#, fuzzy, c-format
+#, c-format
msgid "Last used encoding: %s"
-msgstr "%s Verschlüsselung wird verwendet"
+msgstr "Zuletzt verwendete Zeichenkodierung: %s"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:631
#, c-format
@@ -376,16 +354,19 @@ msgid ""
"must contain the TigerVNC configuration file identifier string:\n"
"\"%s\""
msgstr ""
+"Zeile 1 in Datei %s\n"
+"muss den Dateibezeichner der TigerVNC-Konfigurationsdatei enthalten:\n"
+"»%s«"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:209
#, c-format
msgid "Line speed estimate: %d kbit/s"
-msgstr ""
+msgstr "Geschätzte Verbindungsgeschwindigkeit: %d kbit/s"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:478
#, c-format
msgid "Listening on port %d\n"
-msgstr ""
+msgstr "Am Port %d wird gelauscht\n"
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:69
msgid "Load..."
@@ -397,55 +378,54 @@ msgstr "Niedrig (64 Farben)"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:519
msgid "Medium (256 colors)"
-msgstr "Medium (256 Farben)"
+msgstr "Mittel (256 Farben)"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:725
-#, fuzzy
msgid "Menu key"
-msgstr "Taste für Kontextmenü"
+msgstr "Menü-Taste"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:791
msgid "Misc."
msgstr "Sonstiges"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1026
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1037
#, c-format
msgid "Multiple characters given for key code %d (0x%04x): '%s'"
-msgstr "Mehrere Zeichen für Schlüsselcode %d (0x%04x) eingegeben: '%s'"
+msgstr "Mehrere Zeichen für Schlüsselcode %d (0x%04x) eingegeben: »%s«"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:218
msgid "No"
msgstr "Nein"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:688
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:691
#, c-format
msgid "No scan code for extended virtual key 0x%02x"
-msgstr ""
+msgstr "Kein Scan-Code für erweiterte virtuelle Taste 0x%02x"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:690
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:693
#, c-format
msgid "No scan code for virtual key 0x%02x"
-msgstr ""
+msgstr "Kein Scan-Code für virtuelle Taste 0x%02x"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:701
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:710
#, c-format
msgid "No symbol for extended virtual key 0x%02x"
-msgstr ""
+msgstr "Kein Symbol für erweiterte virtuelle Taste 0x%02x"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:765
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:776
#, c-format
msgid "No symbol for key code %d (in the current state)"
-msgstr ""
+msgstr "Kein Symbol für Tastencode %d (im aktuellen Zustand)"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:739
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:750
#, c-format
msgid "No symbol for key code 0x%02x (in the current state)"
-msgstr ""
+msgstr "Kein Symbol für Tastencode 0x%02x (im aktuellen Zustand)"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:703
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:712
#, c-format
msgid "No symbol for virtual key 0x%02x"
-msgstr ""
+msgstr "Kein Symbol für virtuelle Taste 0x%02x"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:606
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:659
@@ -453,28 +433,38 @@ msgstr ""
msgid "None"
msgstr "Keine"
+#: /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 "Nicht genügend Speicher für Framebuffer"
+
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:220
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:88
msgid "OK"
-msgstr "Ok"
+msgstr "OK"
+
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:77
+msgid "Only true colour displays supported"
+msgstr "Nur True-Color-Anzeigen werden unterstützt"
#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:74
msgid "Opening password file failed"
msgstr "Öffnen der Passwortdatei fehlgeschlagen"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1084
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1095
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:64
msgid "Options..."
-msgstr "Optionen..."
+msgstr "Optionen …"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:463
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:464
msgid "Parameters -listen and -via are incompatible"
-msgstr ""
+msgstr "Die Parameter -listen und -via schließen sich gegenseitig aus"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:722
msgid "Pass system keys directly to server (full screen)"
-msgstr ""
+msgstr "Systemtasten direkt an den Server übergeben (Vollbild)"
#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:87
#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:102
@@ -483,16 +473,16 @@ msgstr "Passwort:"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:625
msgid "Path to X509 CA certificate"
-msgstr "Pfad zum X509 CA Zertifikat"
+msgstr "Pfad zum X509-CA-Zertifikat"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:632
msgid "Path to X509 CRL file"
-msgstr "Pfad zur X509 CRL Datei"
+msgstr "Pfad zur X509-CRL-Datei"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:188
-#, fuzzy, c-format
+#, c-format
msgid "Pixel format: %s"
-msgstr "Pixelformat %s wird verwendet"
+msgstr "Pixelformat: %s"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:449
msgid "Preferred encoding"
@@ -501,37 +491,36 @@ msgstr "Bevorzugte Kodierung"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:214
#, c-format
msgid "Protocol version: %d.%d"
-msgstr ""
+msgstr "Protokollversion: %d.%d"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:233
msgid "Quit"
msgstr "Beenden"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1082
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1093
msgid "Refresh screen"
-msgstr "Bildschirm auffrischen"
+msgstr "Bildschirm aktualisieren"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:199
-#, fuzzy, c-format
+#, c-format
msgid "Requested encoding: %s"
-msgstr "Bevorzugte Kodierung"
+msgstr "Angeforderte Zeichenkodierung: %s"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:749
-#, fuzzy
msgid "Resize remote session on connect"
-msgstr "Remote-Session an das lokale Fenster anpassen"
+msgstr "Ferne Sitzung beim Verbinden an das lokale Fenster anpassen"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:762
msgid "Resize remote session to the local window"
-msgstr "Remote-Session an das lokale Fenster anpassen"
+msgstr "Ferne Sitzung an das lokale Fenster anpassen"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1062
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1073
msgid "Resize window to session"
-msgstr "Fenster an Session anpassen"
+msgstr "Fenster an Sitzung anpassen"
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:74
msgid "Save As..."
-msgstr "Speichern unter..."
+msgstr "Speichern unter …"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:741
msgid "Screen"
@@ -544,29 +533,28 @@ msgstr "Sicherheit"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:219
#, c-format
msgid "Security method: %s"
-msgstr ""
+msgstr "Sicherheitsmethode: %s"
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:83
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:82
msgid "SelectObject failed"
-msgstr ""
+msgstr "SelectObject fehlgeschlagen"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1075
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086
#, c-format
msgid "Send %s"
-msgstr "Sende %s"
+msgstr "%s senden"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1080
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1091
msgid "Send Ctrl-Alt-Del"
-msgstr "Sende Strg-Alt-Del"
+msgstr "Strg-Alt-Del senden"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:710
msgid "Send clipboard to server"
-msgstr "Sende Zwischenablage zum Server"
+msgstr "Zwischenablage zum Server senden"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:716
-#, fuzzy
msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Sende primary selection & cut buffer als Zwischenablage"
+msgstr "Primäre Auswahl und Ausschneidepuffer als Zwischenablage senden"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:237
msgid "Services"
@@ -583,16 +571,16 @@ msgstr "Gemeinsamer Zugriff (andere VNC-Viewer nicht trennen)"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:239
msgid "Show All"
-msgstr "Alle Zeigen"
+msgstr "Alle zeigen"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:805
msgid "Show dot when no cursor"
-msgstr "Zeige Punkt wenn kein Cursor"
+msgstr "Punkt zeigen, wenn kein Cursor"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:182
#, c-format
msgid "Size: %d x %d"
-msgstr ""
+msgstr "Größe: %d x %d"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:665
msgid "Standard VNC (insecure without encryption)"
@@ -612,72 +600,76 @@ msgstr "TLS mit anonymen Zertifikaten"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:701
#, c-format
msgid "The parameterArray contains a object of a invalid type at line %d."
-msgstr ""
+msgstr "Das ParameterArray enthält ein Objekt ungültigen Typs in Zeile %d."
#: /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 ""
+msgstr "Der Wert des Parameters %s in Zeile %d in Datei %s ist ungültig."
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:539
#, c-format
msgid "Throughput %d kbit/s - changing to quality %d"
-msgstr "Durchsatz %d kbit/s - Ändern der Qualität auf %d"
+msgstr "Durchsatz %d kbit/s - Qualität wird auf %d geändert"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:561
#, c-format
msgid "Throughput %d kbit/s - full color is now %s"
-msgstr "Durchsatz %d kbit/s - Full Color jetzt %s"
+msgstr "Durchsatz %d kbit/s - Vollfarbmodus ist jetzt %s"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:210
msgid "TigerVNC Viewer"
-msgstr "TigerVNC-Viewer"
+msgstr "TigerVNC-Betrachter"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:80
-#, fuzzy, c-format
+#, 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 version %s (%s)\n"
-"%s\n"
-"Copyright (C) 1999-2011 TigerVNC Team and many others (see README.txt)\n"
+"TigerVNC-Betrachter (%d-bit) Version %s\n"
+"Erstellt auf: %s\n"
+"Copyright (C) 1999-%d TigerVNC Team und viele andere (siehe README.txt)\n"
"Copyright (C) 2005 Klaus Franken, StrukturPunkt\n"
"Siehe http://www.tigervnc.org für Informationen über TigerVNC."
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1004
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:456
+#, c-format
+msgid "Unable to create platform specific framebuffer: %s"
+msgstr "Plattformspezifischer Framebuffer konnte nicht erstellt werden: %s"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1015
#, c-format
msgid "Unknown FLTK key code %d (0x%04x)"
msgstr "Unbekannter FLTK-Tastencode %d (0x%04x)"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:878
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:889
#, c-format
msgid "Unknown decimal separator: '%s'"
-msgstr "Unbekanntes Dezimaltrennzeichen:'%s'"
+msgstr "Unbekanntes Dezimaltrennzeichen: »%s«"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:271
-#, fuzzy, c-format
+#, c-format
msgid "Unknown escape sequence at character %d"
-msgstr "Unbekanntes Dezimaltrennzeichen:'%s'"
+msgstr "Unbekannte Escape-Sequenz bei Zeichen %d"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:430
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:437
-#, fuzzy
msgid "Unknown rect encoding"
-msgstr "%s Verschlüsselung wird verwendet"
+msgstr "Unbekannte rect-Kodierung"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:429
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:436
#, c-format
msgid "Unknown rect encoding %d"
-msgstr ""
+msgstr "Unbekannte rect-Kodierung %d"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:671
msgid "Username and password (insecure without encryption)"
-msgstr "Benutzername und Passwort (unsicher ohne VerschlÃŒsselung)"
+msgstr "Benutzername und Passwort (unsicher ohne Verschlüsselung)"
#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:99
msgid "Username:"
@@ -686,34 +678,38 @@ msgstr "Benutzername:"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:573
#, c-format
msgid "Using %s encoding"
-msgstr "%s Verschlüsselung wird verwendet"
+msgstr "%s-Verschlüsselung wird verwendet"
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:80
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:79
#, c-format
msgid "Using default colormap and visual, %sdepth %d."
-msgstr ""
+msgstr "Vorgegebene Farbzuweisung und Anzeige wird verwendet, %sTiefe %d."
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:620
#, c-format
msgid "Using pixel format %s"
msgstr "Pixelformat %s wird verwendet"
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:457
+msgid "Using platform independent framebuffer"
+msgstr "Plattformunabhängiger Framebuffer wird verwendet"
+
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:42
msgid "VNC Viewer: Connection Details"
-msgstr "VNC-Viewer: Verbindungsdetails"
+msgstr "VNC-Betrachter: Verbindungsdetails"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:57
msgid "VNC Viewer: Connection Options"
-msgstr "VNC-Viewer: Verbindungsoptionen"
+msgstr "VNC-Betrachter: Verbindungsoptionen"
#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:86
#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:96
msgid "VNC authentication"
msgstr "VNC-Autorisierung"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1176
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1187
msgid "VNC connection info"
-msgstr "VNC Verbindungsinformation"
+msgstr "VNC-Verbindungsinformation"
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:49
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:54
@@ -725,9 +721,8 @@ msgid "Very low (8 colors)"
msgstr "Sehr gering (8 Farben)"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:698
-#, fuzzy
msgid "View only (ignore mouse and keyboard)"
-msgstr "nur Ansicht (ignoriere Maus und Tastatur)"
+msgstr "Nur Ansicht (Maus und Tastatur ignorieren)"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:219
msgid "Yes"
@@ -736,7 +731,7 @@ msgstr "Ja"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:111
#, c-format
msgid "connected to host %s port %d"
-msgstr "verbunden mit Host %s Port %d"
+msgstr "verbunden mit Rechner %s, Port %d"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:563
msgid "disabled"
@@ -748,35 +743,12 @@ msgstr "aktiviert"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:556
msgid "level (1=fast, 6=best [4-6 are rarely useful])"
-msgstr "Level (1=schnell, 9=beste) [4-6 sind selten sinnvoll]"
+msgstr "Stufe (1=schnell, 9=beste) [4-6 sind selten sinnvoll]"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:569
msgid "quality (0=poor, 9=best)"
msgstr "Qualität (0=schlechte, 9=beste)"
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:63
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:62
msgid "unable to create DIB section"
-msgstr ""
-
-#~ msgid ""
-#~ "Desktop name: %.80s\n"
-#~ "Host: %.80s port: %d\n"
-#~ "Size: %d x %d\n"
-#~ "Pixel format: %s\n"
-#~ "(server default %s)\n"
-#~ "Requested encoding: %s\n"
-#~ "Last used encoding: %s\n"
-#~ "Line speed estimate: %d kbit/s\n"
-#~ "Protocol version: %d.%d\n"
-#~ "Security method: %s\n"
-#~ msgstr ""
-#~ "Desktopname: %.80s\n"
-#~ "Host: %.80s port: %d\n"
-#~ "Größe: %d x %d\n"
-#~ "Pixelformat: %s\n"
-#~ "(Server Standard %s)\n"
-#~ "gewünschte Kodierung: %s\n"
-#~ "letzte benutzte Kodierung: %s\n"
-#~ "Leitungsgeschwindigkeit (geschätzt): %d kbit/s\n"
-#~ "Protokollversion: %d.%d\n"
-#~ "Sicherheitsmethode: %s\n"
+msgstr "DIB-Abschnitt konnte nicht erstellt werden"
diff --git a/po/nl.po b/po/nl.po
index e13329c3..9d90fa0e 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,50 +1,59 @@
-# Copyright (C) TigerVNC Team
+# Dutch translations for TigerVNC.
+# Copyright (C) the TigerVNC Team (msgids)
+# This file is distributed under the same license as the tigervnc package.
+#
+# Benno Schulenberg <benno@vertaalt.nl>, 2014.
msgid ""
msgstr ""
-"Project-Id-Version: TigerVNC 1.3.80\n"
+"Project-Id-Version: tigervnc 1.3.90\n"
"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2014-09-22 11:15+0000\n"
+"POT-Creation-Date: 2014-11-19 12:46+0000\n"
+"PO-Revision-Date: 2014-11-22 12:02+0100\n"
+"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:194
#, c-format
msgid "(server default %s)"
-msgstr ""
+msgstr "(serverstandaard is %s)"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:227
msgid "About"
-msgstr "Over"
+msgstr "Info"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:103
msgid "About TigerVNC Viewer"
-msgstr ""
+msgstr "Info over TigerVNC-viewer"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1097
msgid "About TigerVNC viewer..."
-msgstr ""
+msgstr "Info over TigerVNC-viewer..."
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:86
msgid "About..."
-msgstr "Over..."
+msgstr "Info..."
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:704
msgid "Accept clipboard from server"
-msgstr ""
+msgstr "Klembord van server accepteren"
#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:327
msgid "Adjusting window size to avoid accidental full screen request"
-msgstr ""
+msgstr "Venstergrootte wordt aangepast om onbedoeld volledigschermverzoek te vermijden"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:563
msgid "Allow JPEG compression:"
-msgstr "JPEG compressie toestaan:"
+msgstr "JPEG-compressie toestaan:"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1081
msgid "Alt"
-msgstr ""
+msgstr "Alt"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:648
msgid "Authentication"
@@ -52,7 +61,7 @@ msgstr "Authenticatie"
#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:89
msgid "Authentication cancelled"
-msgstr "Authenticatie geannuleerd"
+msgstr "Authenticatie is geannuleerd"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:437
msgid "Auto select"
@@ -61,11 +70,11 @@ msgstr "Automatisch selecteren"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:651
#, c-format
msgid "Bad Name/Value pair on line: %d in file: %s"
-msgstr ""
+msgstr "Ongeldig naam-waardepaar op regel %d in bestand %s"
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:92
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:91
msgid "BitBlt failed"
-msgstr ""
+msgstr "### BitBlt is mislukt"
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:91
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:221
@@ -75,7 +84,7 @@ msgstr "Annuleren"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:116
msgid "CleanupSignalHandler called"
-msgstr ""
+msgstr "### CleanupSignalHandler is aangeroepen"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:222
msgid "Close"
@@ -83,105 +92,109 @@ msgstr "Sluiten"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:499
msgid "Color level"
-msgstr "Kleur diepte"
+msgstr "Kleurdiepte"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:421
-#, fuzzy
msgid "Compression"
-msgstr "SSH compressie"
+msgstr "Compressie"
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:96
msgid "Connect"
msgstr "Verbinden"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1085
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1096
msgid "Connection info..."
-msgstr "Connectie info..."
+msgstr "Verbindingsinfo..."
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:362
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:404
#, c-format
-msgid ""
-"Could not convert the parameter-name %s to wchar_t* when reading from the "
-"Registry, the buffersize is to small."
+msgid "Could not convert the parameter-name %s to wchar_t* when reading from the Registry, the buffersize is to small."
msgstr ""
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:302
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:340
#, c-format
-msgid ""
-"Could not convert the parameter-name %s to wchar_t* when writing to the "
-"Registry, the buffersize is to small."
+msgid "Could not convert the parameter-name %s to wchar_t* when writing to the Registry, the buffersize is to small."
msgstr ""
#: /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."
+msgid "Could not convert the parameter-value %s to wchar_t* when writing to the Registry, the buffersize is to small."
msgstr ""
#: /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."
+msgid "Could not convert the parameter-value for %s to utf8 char* when reading from the Registry, the buffer dest is to small."
msgstr ""
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:256
#, c-format
msgid "Could not create VNC home directory: %s."
-msgstr "Kon de directory VNC home: %s niet aanmaken"
+msgstr "Kan de VNC-thuismap niet aanmaken: %s."
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:251
msgid "Could not create VNC home directory: can't obtain home directory path."
-msgstr ""
-"Kon de directory VNC home niet aanmaken: kan geen informatie vinden over "
-"home directory pad."
+msgstr "Kan de VNC-thuismap niet aanmaken: kan pad van thuismap niet verkrijgen."
+
+#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:58
+msgid "Could not create framebuffer bitmap"
+msgstr "Kan framebuffer-bitkaart niet aanmaken"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:52
+msgid "Could not create framebuffer device"
+msgstr "Kan framebuffer-apparaat niet aanmaken"
+
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:107
+msgid "Could not create framebuffer image"
+msgstr "Kan framebuffer-afbeelding niet aanmaken"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:310
#, c-format
msgid "Could not encode the parameter-value %s when writing to the Registry."
-msgstr ""
+msgstr "Kan parameterwaarde %s niet coderen tijdens schrijven naar de Registry."
#: /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."
+msgid "Could not read the line(%d) in the configuration file,the buffersize is to small."
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:80
-msgid "CreateCompatibleDC failed"
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:68
+msgid "Couldn't find suitable pixmap format"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1068
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:79
+msgid "CreateCompatibleDC failed"
+msgstr "### CreateCompatibleDC is mislukt"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1079
msgid "Ctrl"
-msgstr ""
+msgstr "Ctrl"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:550
msgid "Custom compression level:"
-msgstr "Handmatige compressie niveau's:"
+msgstr "Aangepast compressieniveau:"
#: /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."
+msgid "Decoding: The size of the buffer dest is to small, it needs to be 1 byte bigger."
msgstr ""
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:172
#, c-format
msgid "Desktop name: %.80s"
-msgstr ""
+msgstr "Bureaubladnaam: %.80s"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1088
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1099
msgid "Dismiss menu"
msgstr "Menu verlaten"
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:59
+msgid "Display lacks pixmap format for default depth"
+msgstr ""
+
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:778
-#, fuzzy
msgid "Enable full-screen mode over all monitors"
-msgstr "Activeer volledige full screen modus voor alle beeldschermen"
+msgstr "Volledigscherm-modus over alle beeldschermen inschakelen"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:469
msgid "Enabling continuous updates"
@@ -189,28 +202,22 @@ msgstr "Continue updates inschakelen"
#: /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."
+msgid "Encoding backslash: The size of the buffer dest is to small, it needs to be more than %d bytes bigger."
msgstr ""
#: /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."
+msgid "Encoding escape sequence: The size of the buffer dest is to small, it needs to be more than %d bytes bigger."
msgstr ""
#: /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."
+msgid "Encoding normal character: The size of the buffer dest is to small, it needs to be more than %d bytes bigger."
msgstr ""
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:595
msgid "Encryption"
-msgstr "Encryptie"
+msgstr "Versleuteling"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:503
#, c-format
@@ -248,78 +255,54 @@ msgstr ""
msgid "Error(%d) writing %s(REG_SZ) to Registry."
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:50
-#: /home/ossman/devel/tigervnc/vncviewer/FLTKPixelBuffer.cxx:33
-msgid "Error: Not enough memory for framebuffer"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:69
-msgid "Error: couldn't find suitable pixmap format"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:60
-msgid "Error: display lacks pixmap format for default depth"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:78
-msgid "Error: only true colour displays supported"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1056
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1067
msgid "Exit viewer"
-msgstr ""
+msgstr "Viewer verlaten"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:588
-#, fuzzy
msgid "Failed to read configuration file, can't obtain home directory path."
-msgstr ""
-"Kon de directory VNC home niet aanmaken: kan geen informatie vinden over "
-"home directory pad."
+msgstr "Lezen van configuratiebestand is mislukt; kan pad van thuismap niet verkrijgen."
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:602
#, c-format
msgid "Failed to read configuration file, can't open %s"
-msgstr ""
+msgstr "Lezen van configuratiebestand is mislukt; kan %s niet openen"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:621
#, c-format
msgid "Failed to read line %d in file %s"
-msgstr ""
+msgstr "Lezen van regel %d in bestand %s is mislukt"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:528
-#, fuzzy
msgid "Failed to write configuration file, can't obtain home directory path."
-msgstr ""
-"Kon de directory VNC home niet aanmaken: kan geen informatie vinden over "
-"home directory pad."
+msgstr "Schrijven van configuratiebestand is mislukt; kan pad van thuismap niet verkrijgen."
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:542
#, c-format
msgid "Failed to write configuration file, can't open %s"
-msgstr ""
+msgstr "Schrijven van configuratiebestand is mislukt; kan %s niet openen"
#: /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 "Mislukt toetsenbord te pakken"
+msgstr "Het pakken van het toetsenbord is mislukt"
#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:563
msgid "Failure grabbing mouse"
-msgstr "Fout bij muis ophalen"
+msgstr "Het pakken van de muis is mislukt"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:512
msgid "Full (all available colors)"
msgstr "Alles (alle beschikbare kleuren)"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1059
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070
msgid "Full screen"
msgstr "Volledig scherm"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:770
-#, fuzzy
msgid "Full-screen mode"
-msgstr "Volledig scherm modus"
+msgstr "Volledigscherm-modus"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:230
msgid "Hide"
@@ -332,15 +315,15 @@ msgstr "Andere verbergen"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:177
#, c-format
msgid "Host: %.80s port: %d"
-msgstr ""
+msgstr "Host: %.80s poort: %d"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:690
msgid "Input"
-msgstr ""
+msgstr "Invoer"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:510
msgid "Internal FLTK error. Exiting."
-msgstr "Interne FLTK fout. Bezig met afsluiten"
+msgstr "Interne FLTK-fout. Bezig met afsluiten."
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:384
msgid "Invalid SetColourMapEntries from server!"
@@ -353,16 +336,16 @@ msgstr ""
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:708
#, c-format
msgid "Invalid parameter name on line: %d in file: %s"
-msgstr ""
+msgstr "Ongeldige parameternaam op regel %d in bestand %s"
-#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:797
+#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:805
msgid "Invalid screen layout computed for resize request!"
msgstr ""
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:204
-#, fuzzy, c-format
+#, c-format
msgid "Last used encoding: %s"
-msgstr "encoding %s wordt nu gebruikt"
+msgstr "Laatst gebruikte codering: %s"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:631
#, c-format
@@ -388,59 +371,58 @@ msgstr "Laden..."
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:526
msgid "Low (64 colors)"
-msgstr "Laag (64 kleuren)"
+msgstr "laag (64 kleuren)"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:519
msgid "Medium (256 colors)"
-msgstr "Medium (256 kleuren)"
+msgstr "medium (256 kleuren)"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:725
-#, fuzzy
msgid "Menu key"
-msgstr "Popup menutoets"
+msgstr "Menutoets"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:791
msgid "Misc."
msgstr "Overige"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1026
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1037
#, c-format
msgid "Multiple characters given for key code %d (0x%04x): '%s'"
-msgstr "Meerdere karakters opgegeven voor toetscode %d (0x%04x): '%s'"
+msgstr "Meerdere tekens opgegeven voor toetscode %d (0x%04x): '%s'"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:218
msgid "No"
msgstr "Nee"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:688
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:691
#, c-format
msgid "No scan code for extended virtual key 0x%02x"
-msgstr ""
+msgstr "Geen scancode voor uitgebreide virtuele toets 0x%02x"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:690
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:693
#, c-format
msgid "No scan code for virtual key 0x%02x"
-msgstr ""
+msgstr "Geen scancode voor virtuele toets 0x%02x"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:701
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:710
#, c-format
msgid "No symbol for extended virtual key 0x%02x"
-msgstr ""
+msgstr "Geen symbool voor uitgebreide virtuele toets 0x%02x"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:765
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:776
#, c-format
msgid "No symbol for key code %d (in the current state)"
-msgstr ""
+msgstr "Geen symbool voor toetscode %d (in de huidige toestand)"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:739
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:750
#, c-format
msgid "No symbol for key code 0x%02x (in the current state)"
-msgstr ""
+msgstr "Geen symbool voor toetscode 0x%02x (in de huidige toestand)"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:703
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:712
#, c-format
msgid "No symbol for virtual key 0x%02x"
-msgstr ""
+msgstr "Geen symbool voor virtuele toets 0x%02x"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:606
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:659
@@ -448,24 +430,35 @@ msgstr ""
msgid "None"
msgstr "Geen"
+#: /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 "Onvoldoende geheugen beschikbaar voor framebuffer"
+
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:220
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:88
msgid "OK"
msgstr "OK"
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:77
+msgid "Only true colour displays supported"
+msgstr ""
+
#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:74
msgid "Opening password file failed"
-msgstr "Openen van het wachtwoord bestand mislukt"
+msgstr "Openen van wachtwoordbestand is mislukt"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1084
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1095
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:64
msgid "Options..."
msgstr "Opties..."
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:463
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:464
+#, fuzzy
msgid "Parameters -listen and -via are incompatible"
-msgstr ""
+msgstr "de opties '-listen' en '-via' gaan niet samen"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:722
msgid "Pass system keys directly to server (full screen)"
@@ -478,51 +471,50 @@ msgstr "Wachtwoord:"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:625
msgid "Path to X509 CA certificate"
-msgstr "Pad naar X509 CA certificaat"
+msgstr "Pad naar X509 CA-certificaat"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:632
msgid "Path to X509 CRL file"
-msgstr "Pad naar X509 CRL bestand"
+msgstr "Pad naar X509 CRL-bestand"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:188
-#, fuzzy, c-format
+#, c-format
msgid "Pixel format: %s"
-msgstr "Pixel formaat %s wordt nu gebruikt"
+msgstr "Pixel-indeling: %s"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:449
msgid "Preferred encoding"
-msgstr "Aanbevolen codering"
+msgstr "Voorkeurscodering"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:214
#, c-format
msgid "Protocol version: %d.%d"
-msgstr ""
+msgstr "Protocolversie: %d.%d"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:233
msgid "Quit"
msgstr "Afsluiten"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1082
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1093
msgid "Refresh screen"
-msgstr ""
+msgstr "Scherm verversen"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:199
-#, fuzzy, c-format
+#, c-format
msgid "Requested encoding: %s"
-msgstr "Aanbevolen codering"
+msgstr "Gevraagde codering: %s"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:749
-#, fuzzy
msgid "Resize remote session on connect"
-msgstr "Wijzig externe sessie naar het lokale venster"
+msgstr "Grootte van gindse sessie aanpassen bij verbinden"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:762
msgid "Resize remote session to the local window"
-msgstr "Wijzig externe sessie naar het lokale venster"
+msgstr "Gindse sessie aan het lokale venster aanpassen"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1062
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1073
msgid "Resize window to session"
-msgstr "Wijzig venster naar sessie"
+msgstr "Venster aan sessie aanpassen"
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:74
msgid "Save As..."
@@ -539,37 +531,37 @@ msgstr "Beveiliging"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:219
#, c-format
msgid "Security method: %s"
-msgstr ""
+msgstr "Beveiligingsmethode: %s"
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:83
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:82
msgid "SelectObject failed"
-msgstr ""
+msgstr "### SelectObject is mislukt"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1075
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086
#, c-format
msgid "Send %s"
-msgstr "Stuur %s"
+msgstr "%s zenden"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1080
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1091
msgid "Send Ctrl-Alt-Del"
-msgstr "Stuur Ctrl-Alt-Del"
+msgstr "Ctrl-Alt-Del zenden"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:710
msgid "Send clipboard to server"
-msgstr ""
+msgstr "Klembord naar server zenden"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:716
msgid "Send primary selection and cut buffer as clipboard"
-msgstr ""
+msgstr "Hoofdselectie en knipbuffer als klembord verzenden"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:237
msgid "Services"
-msgstr "Services"
+msgstr "Diensten"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:319
#, c-format
msgid "SetDesktopSize failed: %d"
-msgstr "SetDesktopSize mislukt: %d"
+msgstr "### SetDesktopSize is mislukt: %d"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:799
msgid "Shared (don't disconnect other viewers)"
@@ -577,24 +569,24 @@ msgstr ""
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:239
msgid "Show All"
-msgstr "Alles alten zien"
+msgstr "Alles tonen"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:805
msgid "Show dot when no cursor"
-msgstr ""
+msgstr "Punt tonen als er geen cursor is"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:182
#, c-format
msgid "Size: %d x %d"
-msgstr ""
+msgstr "Grootte: %d x %d"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:665
msgid "Standard VNC (insecure without encryption)"
-msgstr "Standaard VNC (onveilig zonder encryptie)"
+msgstr "Standaard VNC (onveilig zonder versleuteling)"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:618
msgid "TLS with X509 certificates"
-msgstr "TLS met X509 certificaten"
+msgstr "TLS met X509-certificaten"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:612
msgid "TLS with anonymous certificates"
@@ -626,7 +618,7 @@ msgstr "Throughput %d kbit/s - volledige kleuren is nu %s"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:210
msgid "TigerVNC Viewer"
-msgstr ""
+msgstr "TigerVNC-viewer"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:80
#, c-format
@@ -637,36 +629,40 @@ msgid ""
"See http://www.tigervnc.org for information on TigerVNC."
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1004
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:456
+#, c-format
+msgid "Unable to create platform specific framebuffer: %s"
+msgstr ""
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1015
#, c-format
msgid "Unknown FLTK key code %d (0x%04x)"
-msgstr "Onbekende FLTK toetscode %d (0x%04x)"
+msgstr "Onbekende FLTK-toetscode %d (0x%04x)"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:878
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:889
#, c-format
msgid "Unknown decimal separator: '%s'"
msgstr "Onbekend decimaal scheidingsteken: '%s'"
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:271
-#, fuzzy, c-format
+#, c-format
msgid "Unknown escape sequence at character %d"
-msgstr "Onbekend decimaal scheidingsteken: '%s'"
+msgstr "Onbekende stuurcodereeks bij teken %d"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:430
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:437
-#, fuzzy
msgid "Unknown rect encoding"
-msgstr "encoding %s wordt nu gebruikt"
+msgstr "Onbekende rect-codering"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:429
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:436
#, c-format
msgid "Unknown rect encoding %d"
-msgstr ""
+msgstr "Onbekende rect-codering %d"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:671
msgid "Username and password (insecure without encryption)"
-msgstr "Gebruikersnaam en wachtwoord (onveilig zonder encryptie)"
+msgstr "Gebruikersnaam en wachtwoord (onveilig zonder versleuteling)"
#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:99
msgid "Username:"
@@ -675,9 +671,10 @@ msgstr "Gebruikersnaam:"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:573
#, c-format
msgid "Using %s encoding"
-msgstr "encoding %s wordt nu gebruikt"
+msgstr "Codering %s wordt gebruikt"
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:80
+# FIXME: what is filled in for %s?
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:79
#, c-format
msgid "Using default colormap and visual, %sdepth %d."
msgstr ""
@@ -685,39 +682,41 @@ msgstr ""
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:620
#, c-format
msgid "Using pixel format %s"
-msgstr "Pixel formaat %s wordt nu gebruikt"
+msgstr "Pixel-indeling %s wordt gebruikt"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:457
+msgid "Using platform independent framebuffer"
+msgstr "Platform-onafhankelijk framebuffer wordt gebruikt"
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:42
msgid "VNC Viewer: Connection Details"
-msgstr "VNC Viewer: Connectie Details"
+msgstr "VNC-viewer: Verbindingsdetails"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:57
-#, fuzzy
msgid "VNC Viewer: Connection Options"
-msgstr "VNC Viewer: Connectie Details"
+msgstr "VNC-viewer: Verbindingsopties"
#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:86
#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:96
msgid "VNC authentication"
-msgstr "VNC authenticatie"
+msgstr "VNC-authenticatie"
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1176
-#, fuzzy
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1187
msgid "VNC connection info"
-msgstr "Connectie info..."
+msgstr "VNC-verbindingsinfo"
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:49
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:54
msgid "VNC server:"
-msgstr "VNC server:"
+msgstr "VNC-server:"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:533
msgid "Very low (8 colors)"
-msgstr "Heel laag (8 kleuren)"
+msgstr "heel laag (8 kleuren)"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:698
msgid "View only (ignore mouse and keyboard)"
-msgstr ""
+msgstr "Alleen kijken (muis en toetsenbord negeren)"
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:219
msgid "Yes"
@@ -726,7 +725,7 @@ msgstr "Ja"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:111
#, c-format
msgid "connected to host %s port %d"
-msgstr "Verbinden met host %s poort %d"
+msgstr "verbonden met host %s poort %d"
#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:563
msgid "disabled"
@@ -738,15 +737,15 @@ msgstr "ingeschakeld"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:556
msgid "level (1=fast, 6=best [4-6 are rarely useful])"
-msgstr "level (1=snel, 6=best [4-6 zijn zelden bruikbaar])"
+msgstr "niveau (1=snel, 6=best [4-6 zijn zelden nuttig])"
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:569
msgid "quality (0=poor, 9=best)"
msgstr "kwaliteit (0=slecht, 9=best)"
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:63
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:62
msgid "unable to create DIB section"
-msgstr ""
+msgstr "kan geen DIB-sectie aanmaken"
#, fuzzy
#~ msgid ""
diff --git a/po/tigervnc.pot b/po/tigervnc.pot
index 5df36392..5a918040 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: 2014-09-22 11:15+0000\n"
+"POT-Creation-Date: 2014-11-19 12:46+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"
@@ -30,7 +30,7 @@ msgstr ""
msgid "About TigerVNC Viewer"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1097
msgid "About TigerVNC viewer..."
msgstr ""
@@ -50,7 +50,7 @@ msgstr ""
msgid "Allow JPEG compression:"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1081
msgid "Alt"
msgstr ""
@@ -71,7 +71,7 @@ msgstr ""
msgid "Bad Name/Value pair on line: %d in file: %s"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:92
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:91
msgid "BitBlt failed"
msgstr ""
@@ -101,7 +101,7 @@ msgstr ""
msgid "Connect"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1085
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1096
msgid "Connection info..."
msgstr ""
@@ -144,6 +144,18 @@ msgstr ""
msgid "Could not create VNC home directory: can't obtain home directory path."
msgstr ""
+#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:58
+msgid "Could not create framebuffer bitmap"
+msgstr ""
+
+#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:52
+msgid "Could not create framebuffer device"
+msgstr ""
+
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:107
+msgid "Could not create framebuffer image"
+msgstr ""
+
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:310
#, c-format
msgid "Could not encode the parameter-value %s when writing to the Registry."
@@ -156,11 +168,15 @@ msgid ""
"small."
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:80
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:68
+msgid "Couldn't find suitable pixmap format"
+msgstr ""
+
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:79
msgid "CreateCompatibleDC failed"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1068
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1079
msgid "Ctrl"
msgstr ""
@@ -179,10 +195,14 @@ msgstr ""
msgid "Desktop name: %.80s"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1088
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1099
msgid "Dismiss menu"
msgstr ""
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:59
+msgid "Display lacks pixmap format for default depth"
+msgstr ""
+
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:778
msgid "Enable full-screen mode over all monitors"
msgstr ""
@@ -252,24 +272,7 @@ msgstr ""
msgid "Error(%d) writing %s(REG_SZ) to Registry."
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:50
-#: /home/ossman/devel/tigervnc/vncviewer/FLTKPixelBuffer.cxx:33
-msgid "Error: Not enough memory for framebuffer"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:69
-msgid "Error: couldn't find suitable pixmap format"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:60
-msgid "Error: display lacks pixmap format for default depth"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:78
-msgid "Error: only true colour displays supported"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1056
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1067
msgid "Exit viewer"
msgstr ""
@@ -310,7 +313,7 @@ msgstr ""
msgid "Full (all available colors)"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1059
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070
msgid "Full screen"
msgstr ""
@@ -352,7 +355,7 @@ msgstr ""
msgid "Invalid parameter name on line: %d in file: %s"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:797
+#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:805
msgid "Invalid screen layout computed for resize request!"
msgstr ""
@@ -399,7 +402,7 @@ msgstr ""
msgid "Misc."
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1026
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1037
#, c-format
msgid "Multiple characters given for key code %d (0x%04x): '%s'"
msgstr ""
@@ -408,32 +411,32 @@ msgstr ""
msgid "No"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:688
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:691
#, c-format
msgid "No scan code for extended virtual key 0x%02x"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:690
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:693
#, c-format
msgid "No scan code for virtual key 0x%02x"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:701
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:710
#, c-format
msgid "No symbol for extended virtual key 0x%02x"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:765
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:776
#, c-format
msgid "No symbol for key code %d (in the current state)"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:739
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:750
#, c-format
msgid "No symbol for key code 0x%02x (in the current state)"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:703
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:712
#, c-format
msgid "No symbol for virtual key 0x%02x"
msgstr ""
@@ -444,16 +447,26 @@ msgstr ""
msgid "None"
msgstr ""
+#: /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 ""
+
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:220
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:88
msgid "OK"
msgstr ""
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:77
+msgid "Only true colour displays supported"
+msgstr ""
+
#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:74
msgid "Opening password file failed"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1084
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1095
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:64
msgid "Options..."
msgstr ""
@@ -498,7 +511,7 @@ msgstr ""
msgid "Quit"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1082
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1093
msgid "Refresh screen"
msgstr ""
@@ -515,7 +528,7 @@ msgstr ""
msgid "Resize remote session to the local window"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1062
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1073
msgid "Resize window to session"
msgstr ""
@@ -536,16 +549,16 @@ msgstr ""
msgid "Security method: %s"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:83
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:82
msgid "SelectObject failed"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1075
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086
#, c-format
msgid "Send %s"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1080
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1091
msgid "Send Ctrl-Alt-Del"
msgstr ""
@@ -632,12 +645,17 @@ msgid ""
"See http://www.tigervnc.org for information on TigerVNC."
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1004
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:456
+#, c-format
+msgid "Unable to create platform specific framebuffer: %s"
+msgstr ""
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1015
#, c-format
msgid "Unknown FLTK key code %d (0x%04x)"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:878
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:889
#, c-format
msgid "Unknown decimal separator: '%s'"
msgstr ""
@@ -671,7 +689,7 @@ msgstr ""
msgid "Using %s encoding"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:80
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:79
#, c-format
msgid "Using default colormap and visual, %sdepth %d."
msgstr ""
@@ -681,6 +699,10 @@ msgstr ""
msgid "Using pixel format %s"
msgstr ""
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:457
+msgid "Using platform independent framebuffer"
+msgstr ""
+
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:42
msgid "VNC Viewer: Connection Details"
msgstr ""
@@ -694,7 +716,7 @@ msgstr ""
msgid "VNC authentication"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1176
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1187
msgid "VNC connection info"
msgstr ""
@@ -736,6 +758,6 @@ msgstr ""
msgid "quality (0=poor, 9=best)"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:63
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:62
msgid "unable to create DIB section"
msgstr ""
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 00000000..731859fe
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,753 @@
+# Ukrainian translation of tigervnc
+# 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.
+msgid ""
+msgstr ""
+"Project-Id-Version: tigervnc 1.3.90\n"
+"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
+"POT-Creation-Date: 2014-11-19 12:46+0000\n"
+"PO-Revision-Date: 2014-11-22 10:05+0200\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"Language: uk\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: Lokalize 1.5\n"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:194
+#, c-format
+msgid "(server default %s)"
+msgstr "(типовий для сервера %s)"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:227
+msgid "About"
+msgstr "Про програму"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:103
+msgid "About TigerVNC Viewer"
+msgstr "Про засіб перегляду TigerVNC"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1097
+msgid "About TigerVNC viewer..."
+msgstr "Про засіб перегляду TigerVNC…"
+
+#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:86
+msgid "About..."
+msgstr "Про програму…"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:704
+msgid "Accept clipboard from server"
+msgstr "Приймати вміст буфера з сервера"
+
+#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:327
+msgid "Adjusting window size to avoid accidental full screen request"
+msgstr "Коригувати розміри вікна, щоб уникнути випадкового запиту щодо переходу у повноекранний режим"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:563
+msgid "Allow JPEG compression:"
+msgstr "Дозволити стискання JPEG:"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1081
+msgid "Alt"
+msgstr "Alt"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:648
+msgid "Authentication"
+msgstr "Розпізнавання"
+
+#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:89
+msgid "Authentication cancelled"
+msgstr "Розпізнавання скасовано"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:437
+msgid "Auto select"
+msgstr "Автовибір"
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:651
+#, c-format
+msgid "Bad Name/Value pair on line: %d in file: %s"
+msgstr "Помилкова пара назва/значення у рядку %d файла %s"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:91
+msgid "BitBlt failed"
+msgstr "Помилка BitBlt"
+
+#: /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 "Скасувати"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:116
+msgid "CleanupSignalHandler called"
+msgstr "Викликано CleanupSignalHandler"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:222
+msgid "Close"
+msgstr "Закрити"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:499
+msgid "Color level"
+msgstr "Рівень відтворення кольору"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:421
+msgid "Compression"
+msgstr "Стискання"
+
+#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:96
+msgid "Connect"
+msgstr "З'єднатися"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1096
+msgid "Connection info..."
+msgstr "Дані щодо з’єднання…"
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:362
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:404
+#, c-format
+msgid "Could not convert the parameter-name %s to wchar_t* when reading from the Registry, the buffersize is to small."
+msgstr "Не вдалося перетворити назву параметра %s на wchar_t* під час читання даних з реєстру. Розмір буфера є надто малим."
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:302
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:340
+#, c-format
+msgid "Could not convert the parameter-name %s to wchar_t* when writing to the Registry, the buffersize is to small."
+msgstr "Не вдалося перетворити назву параметра %s на wchar_t* під час запису даних до реєстру. Розмір буфера є надто малим."
+
+#: /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 "Не вдалося перетворити значення параметра %s на wchar_t* під час запису даних до реєстру. Розмір буфера є надто малим."
+
+#: /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 "Не вдалося перетворити значення параметра %s на utf8 char* під час читання з реєстру. Буфер призначення є надто малим."
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:256
+#, c-format
+msgid "Could not create VNC home directory: %s."
+msgstr "Не вдалося створити домашній каталог VNC: %s."
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:251
+msgid "Could not create VNC home directory: can't obtain home directory path."
+msgstr "Не вдалося створити домашній каталог VNC: не вдалося отримати шлях до домашнього каталогу."
+
+#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:58
+msgid "Could not create framebuffer bitmap"
+msgstr "Не вдалося створити растрові дані буфера кадрів"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:52
+msgid "Could not create framebuffer device"
+msgstr "Не вдалося створити пристрій буфера кадрів"
+
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:107
+msgid "Could not create framebuffer image"
+msgstr "Не вдалося створити зображення буфера кадрів"
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:310
+#, c-format
+msgid "Could not encode the parameter-value %s when writing to the Registry."
+msgstr "Не вдалося виконати кодування значення параметра %s під час запису до реєстру."
+
+#: /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 "Не вдалося прочитати рядок %d у файлі налаштувань. Розмір буфера є надто малим."
+
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:68
+msgid "Couldn't find suitable pixmap format"
+msgstr "Не вдалося визначити відповідний формат зображення"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:79
+msgid "CreateCompatibleDC failed"
+msgstr "Помилка CreateCompatibleDC"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1079
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:550
+msgid "Custom compression level:"
+msgstr "Нетиповий рівень стискання:"
+
+#: /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 "Декодування: розмір буфера призначення є надто малим. Його слід збільшити на 1 байт."
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:172
+#, c-format
+msgid "Desktop name: %.80s"
+msgstr "Назва робочої станції: %.80s"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1099
+msgid "Dismiss menu"
+msgstr "Закрити меню"
+
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:59
+msgid "Display lacks pixmap format for default depth"
+msgstr "Для дисплея не вказано формат у пікселях для типової глибини"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:778
+msgid "Enable full-screen mode over all monitors"
+msgstr "Увімкнути повноекранний режим на усіх моніторах"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:469
+msgid "Enabling continuous updates"
+msgstr "Увімкнути неперервне оновлення"
+
+#: /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 "Кодування зворотної похилої риски: розмір буфера призначення є надто малим. Його слід збільшити на понад %d байтів."
+
+#: /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 "Кодування екранованої послідовності: розмір буфера призначення є надто малим. Його слід збільшити на понад %d байтів."
+
+#: /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 "Кодування звичайного символу: розмір буфера призначення є надто малим. Його слід збільшити на понад %d байтів."
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:595
+msgid "Encryption"
+msgstr "Шифрування"
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:503
+#, c-format
+msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer"
+msgstr "Помилка (%d) закриття ключа: Software\\TigerVNC\\vncviewer"
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:455
+#, c-format
+msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer"
+msgstr "Помилка (%d) закриття ключа: Software\\TigerVNC\\vncviewer"
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:434
+#, c-format
+msgid "Error(%d) creating key: Software\\TigerVNC\\vncviewer"
+msgstr "Помилка (%d) під час створення ключа: Software\\TigerVNC\\vncviewer"
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:471
+#, c-format
+msgid "Error(%d) opening key: Software\\TigerVNC\\vncviewer"
+msgstr "Помилка (%d) під час відкриття ключа: Software\\TigerVNC\\vncviewer"
+
+#: /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 "Помилка (%d) під час читання %s з реєстру."
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:348
+#, c-format
+msgid "Error(%d) writing %d(REG_DWORD) to Registry."
+msgstr "Помилка (%d) під час запису %d(REG_DWORD) до реєстру."
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:326
+#, c-format
+msgid "Error(%d) writing %s(REG_SZ) to Registry."
+msgstr "Помилка (%d) під час запису %s(REG_SZ) до реєстру."
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1067
+msgid "Exit viewer"
+msgstr "Вийти із засобу перегляду"
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:588
+msgid "Failed to read configuration file, can't obtain home directory path."
+msgstr "Не вдалося прочитати файл налаштувань, оскільки не вдалося визначити шлях до домашнього каталогу."
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:602
+#, c-format
+msgid "Failed to read configuration file, can't open %s"
+msgstr "Не вдалося прочитати файл налаштувань, оскільки не вдалося відкрити %s"
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:621
+#, c-format
+msgid "Failed to read line %d in file %s"
+msgstr "Не вдалося прочитати рядок %d у файлі %s"
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:528
+msgid "Failed to write configuration file, can't obtain home directory path."
+msgstr "Не вдалося записати файл налаштувань, оскільки не вдалося визначити шлях до домашнього каталогу."
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:542
+#, c-format
+msgid "Failed to write configuration file, can't open %s"
+msgstr "Не вдалося записати файл налаштувань, оскільки не вдалося відкрити %s"
+
+#: /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 "Помилка під час спроби перехопити клавіатуру"
+
+#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:563
+msgid "Failure grabbing mouse"
+msgstr "Помилка під час спроби перехопити мишу"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:512
+msgid "Full (all available colors)"
+msgstr "Повністю (усі доступні кольори)"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070
+msgid "Full screen"
+msgstr "На весь екран"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:770
+msgid "Full-screen mode"
+msgstr "Повноекранний режим"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:230
+msgid "Hide"
+msgstr "Сховати"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:238
+msgid "Hide Others"
+msgstr "Сховати решту"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:177
+#, c-format
+msgid "Host: %.80s port: %d"
+msgstr "Вузол: %.80s порт: %d"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:690
+msgid "Input"
+msgstr "Введення"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:510
+msgid "Internal FLTK error. Exiting."
+msgstr "Внутрішня помилка FLTK. Завершуємо роботу."
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:384
+msgid "Invalid SetColourMapEntries from server!"
+msgstr "Некоректне значення SetColourMapEntries від сервера!"
+
+#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:106
+msgid "Invalid geometry specified!"
+msgstr "Вказано некоректні геометричні параметри!"
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:708
+#, c-format
+msgid "Invalid parameter name on line: %d in file: %s"
+msgstr "Некоректна назва параметра у рядку %d файла %s"
+
+#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:805
+msgid "Invalid screen layout computed for resize request!"
+msgstr "Результати обчислення компонування вікна для запиту щодо зміни розмірів є некоректними!"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:204
+#, c-format
+msgid "Last used encoding: %s"
+msgstr "Останнє використане кодування: %s"
+
+#: /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 ""
+"Рядок 1 у файлі %s\n"
+"має містити рядок ідентифікатор файла налаштувань TigerVNC:\n"
+"«%s»"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:209
+#, c-format
+msgid "Line speed estimate: %d kbit/s"
+msgstr "Оцінка швидкості лінії: %d кбіт/с"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:478
+#, c-format
+msgid "Listening on port %d\n"
+msgstr "Очікуємо на дані на порту %d\n"
+
+#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:69
+msgid "Load..."
+msgstr "Завантажити…"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:526
+msgid "Low (64 colors)"
+msgstr "Низький (64 кольори)"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:519
+msgid "Medium (256 colors)"
+msgstr "Середній (256 кольори)"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:725
+msgid "Menu key"
+msgstr "Клавіша меню"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:791
+msgid "Misc."
+msgstr "Інше"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1037
+#, c-format
+msgid "Multiple characters given for key code %d (0x%04x): '%s'"
+msgstr "З клавішею з кодом %d (0x%04x) пов’язано декілька символів: «%s»"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:218
+msgid "No"
+msgstr "Ні"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:691
+#, c-format
+msgid "No scan code for extended virtual key 0x%02x"
+msgstr "Немає коду сканування для віртуальної клавіші розширення 0x%02x"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:693
+#, c-format
+msgid "No scan code for virtual key 0x%02x"
+msgstr "Немає коду сканування для віртуальної клавіші 0x%02x"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:710
+#, c-format
+msgid "No symbol for extended virtual key 0x%02x"
+msgstr "Немає символу для віртуальної клавіші розширення 0x%02x"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:776
+#, c-format
+msgid "No symbol for key code %d (in the current state)"
+msgstr "Немає символу для клавіші з кодом %d (у поточному стані)"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:750
+#, c-format
+msgid "No symbol for key code 0x%02x (in the current state)"
+msgstr "Немає символу для клавіші з кодом 0x%02x (у поточному стані)"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:712
+#, c-format
+msgid "No symbol for virtual key 0x%02x"
+msgstr "Немає символу для віртуальної клавіші 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 "Немає"
+
+#: /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 "Недостатньо пам’яті для буфера кадрів"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:220
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:88
+msgid "OK"
+msgstr "Гаразд"
+
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:77
+msgid "Only true colour displays supported"
+msgstr "Передбачено підтримку лише дисплеїв з True Color"
+
+#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:74
+msgid "Opening password file failed"
+msgstr "Спроба відкриття файла паролів зазнала невдачі"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1095
+#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:64
+msgid "Options..."
+msgstr "Параметри…"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:463
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:464
+msgid "Parameters -listen and -via are incompatible"
+msgstr "Параметри -listen і -via є несумісними"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:722
+msgid "Pass system keys directly to server (full screen)"
+msgstr "Передавати натискання системних клавіш безпосередньо до сервера (повноекранний режим)"
+
+#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:87
+#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:102
+msgid "Password:"
+msgstr "Пароль:"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:625
+msgid "Path to X509 CA certificate"
+msgstr "Шлях до сертифіката CA X509"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:632
+msgid "Path to X509 CRL file"
+msgstr "Шлях до файла CRL X509"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:188
+#, c-format
+msgid "Pixel format: %s"
+msgstr "Формат у пікселях: %s"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:449
+msgid "Preferred encoding"
+msgstr "Бажане кодування"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:214
+#, c-format
+msgid "Protocol version: %d.%d"
+msgstr "Версія протоколу: %d.%d"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:233
+msgid "Quit"
+msgstr "Вийти"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1093
+msgid "Refresh screen"
+msgstr "Оновити вміст екрана"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:199
+#, c-format
+msgid "Requested encoding: %s"
+msgstr "Запит щодо кодування: %s"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:749
+msgid "Resize remote session on connect"
+msgstr "Змінювати розміри віддаленого сеансу під час з’єднання"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:762
+msgid "Resize remote session to the local window"
+msgstr "Змінювати розміри віддаленого сеансу відповідно до локального вікна"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1073
+msgid "Resize window to session"
+msgstr "Змінити розміри вікна відповідно до сеансу"
+
+#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:74
+msgid "Save As..."
+msgstr "Зберегти як…"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:741
+msgid "Screen"
+msgstr "Екран"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:580
+msgid "Security"
+msgstr "Захист"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:219
+#, c-format
+msgid "Security method: %s"
+msgstr "Метод захисту: %s"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:82
+msgid "SelectObject failed"
+msgstr "Помилка SelectObject"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086
+#, c-format
+msgid "Send %s"
+msgstr "Надіслати %s"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1091
+msgid "Send Ctrl-Alt-Del"
+msgstr "Надіслати Ctrl-Alt-Del"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:710
+msgid "Send clipboard to server"
+msgstr "Надіслати вміст буфера обміну до сервера"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:716
+msgid "Send primary selection and cut buffer as clipboard"
+msgstr "Надіслати основне позначене і вирізати буфер до буфера обміну"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:237
+msgid "Services"
+msgstr "Служби"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:319
+#, c-format
+msgid "SetDesktopSize failed: %d"
+msgstr "Помилка SetDesktopSize: %d"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:799
+msgid "Shared (don't disconnect other viewers)"
+msgstr "Спільний (не від’єднувати інші засоби перегляду)"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:239
+msgid "Show All"
+msgstr "Показати всі"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:805
+msgid "Show dot when no cursor"
+msgstr "Показувати крапку, якщо немає курсора"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:182
+#, c-format
+msgid "Size: %d x %d"
+msgstr "Розмір: %d x %d"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:665
+msgid "Standard VNC (insecure without encryption)"
+msgstr "Стандартний VNC (без захисту і шифрування)"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:618
+msgid "TLS with X509 certificates"
+msgstr "TLS з сертифікатами X509"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:612
+msgid "TLS with anonymous certificates"
+msgstr "TLS із анонімними сертифікатами"
+
+#: /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
+#, c-format
+msgid "The parameterArray contains a object of a invalid type at line %d."
+msgstr "Змінна parameterArray містить об’єкт некоректного типу у рядку %d."
+
+#: /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 "Значення параметра %s у рядку %d файла %s є некоректним."
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:539
+#, c-format
+msgid "Throughput %d kbit/s - changing to quality %d"
+msgstr "Пропускна здатність %d кбіт/с — змінюємо якість на %d"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:561
+#, c-format
+msgid "Throughput %d kbit/s - full color is now %s"
+msgstr "Пропускна здатність %d кбіт/с — змінюємо колірність на %s"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:210
+msgid "TigerVNC Viewer"
+msgstr "Засіб перегляду TigerVNC"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:80
+#, 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, %d-бітовий, v%s\n"
+"Зібрано: %s\n"
+"Авторські права належать команді TigerVNC та багатьом іншим (див. файл README.txt), 1999–%d\n"
+"Докладніший опис TigerVNC можна знайти на http://www.tigervnc.org."
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:456
+#, c-format
+msgid "Unable to create platform specific framebuffer: %s"
+msgstr "Не вдалося створити специфічний для платформи буфер кадрів: %s"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1015
+#, c-format
+msgid "Unknown FLTK key code %d (0x%04x)"
+msgstr "Невідомий код клавіші FLTK, %d (0x%04x)"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:889
+#, c-format
+msgid "Unknown decimal separator: '%s'"
+msgstr "Невідомий десятковий роздільник: «%s»"
+
+#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:271
+#, c-format
+msgid "Unknown escape sequence at character %d"
+msgstr "Невідома послідовність екранування на позиції %d"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:430
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:437
+msgid "Unknown rect encoding"
+msgstr "Невідоме кодування rect"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:429
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:436
+#, c-format
+msgid "Unknown rect encoding %d"
+msgstr "Невідоме кодування rect, %d"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:671
+msgid "Username and password (insecure without encryption)"
+msgstr "Ім’я користувача і пароль (без захисту і шифрування)"
+
+#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:99
+msgid "Username:"
+msgstr "Користувач:"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:573
+#, c-format
+msgid "Using %s encoding"
+msgstr "Використовуємо кодування %s"
+
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:79
+#, c-format
+msgid "Using default colormap and visual, %sdepth %d."
+msgstr "Використовуємо типову карту кольорів і відтворення, %sглибина %d."
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:620
+#, c-format
+msgid "Using pixel format %s"
+msgstr "Використовуємо формат у пікселях %s"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:457
+msgid "Using platform independent framebuffer"
+msgstr "Використовуємо незалежний від платформи буфер кадрів"
+
+#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:42
+msgid "VNC Viewer: Connection Details"
+msgstr "Засіб перегляду VNC: подробиці з’єднання"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:57
+msgid "VNC Viewer: Connection Options"
+msgstr "Засіб перегляду VNC: параметри з’єднання"
+
+#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:86
+#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:96
+msgid "VNC authentication"
+msgstr "Розпізнавання VNC"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1187
+msgid "VNC connection info"
+msgstr "Дані щодо з’єднання VNC"
+
+#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:49
+#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:54
+msgid "VNC server:"
+msgstr "Сервер VNC:"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:533
+msgid "Very low (8 colors)"
+msgstr "Дуже низький (8 кольорів)"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:698
+msgid "View only (ignore mouse and keyboard)"
+msgstr "Лише перегляд (ігнорувати сигнали від миші і клавіатури)"
+
+#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:219
+msgid "Yes"
+msgstr "Так"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:111
+#, c-format
+msgid "connected to host %s port %d"
+msgstr "з’єднано з вузлом %s, порт %d"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:563
+msgid "disabled"
+msgstr "вимкнено"
+
+#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:563
+msgid "enabled"
+msgstr "увімкнено"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:556
+msgid "level (1=fast, 6=best [4-6 are rarely useful])"
+msgstr "рівень (1=швидко, 6=найякісніше [4-6 використовувати не варто])"
+
+#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:569
+msgid "quality (0=poor, 9=best)"
+msgstr "якість (0=найгірша, 9=найкраща)"
+
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:62
+msgid "unable to create DIB section"
+msgstr "не вдалося створити розділ DIB"
diff --git a/unix/vncpasswd/vncpasswd.cxx b/unix/vncpasswd/vncpasswd.cxx
index 7ba0b225..16c925ee 100644
--- a/unix/vncpasswd/vncpasswd.cxx
+++ b/unix/vncpasswd/vncpasswd.cxx
@@ -81,6 +81,36 @@ static int encrypt_pipe() {
else return 1;
}
+static ObfuscatedPasswd* readpassword() {
+ while (true) {
+ PlainPasswd passwd(getpassword("Password:"));
+ if (!passwd.buf) {
+ perror("getpassword error");
+ exit(1);
+ }
+ if (strlen(passwd.buf) < 6) {
+ if (strlen(passwd.buf) == 0) {
+ fprintf(stderr,"Password not changed\n");
+ exit(1);
+ }
+ fprintf(stderr,"Password must be at least 6 characters - try again\n");
+ continue;
+ }
+
+ PlainPasswd passwd2(getpassword("Verify:"));
+ if (!passwd2.buf) {
+ perror("getpass error");
+ exit(1);
+ }
+ if (strcmp(passwd.buf, passwd2.buf) != 0) {
+ fprintf(stderr,"Passwords don't match - try again\n");
+ continue;
+ }
+
+ return new ObfuscatedPasswd(passwd);
+ }
+}
+
int main(int argc, char** argv)
{
prog = argv[0];
@@ -113,28 +143,13 @@ int main(int argc, char** argv)
}
while (true) {
- PlainPasswd passwd(getpassword("Password:"));
- if (!passwd.buf) {
- perror("getpassword error");
- exit(1);
- }
- if (strlen(passwd.buf) < 6) {
- if (strlen(passwd.buf) == 0) {
- fprintf(stderr,"Password not changed\n");
- exit(1);
- }
- fprintf(stderr,"Password must be at least 6 characters - try again\n");
- continue;
- }
+ ObfuscatedPasswd* obfuscated = readpassword();
+ ObfuscatedPasswd* obfuscatedReadOnly = 0;
- PlainPasswd passwd2(getpassword("Verify:"));
- if (!passwd2.buf) {
- perror("getpass error");
- exit(1);
- }
- if (strcmp(passwd.buf, passwd2.buf) != 0) {
- fprintf(stderr,"Passwords don't match - try again\n");
- continue;
+ fprintf(stderr, "Would you like to enter a view-only password (y/n)? ");
+ char yesno[3];
+ if (fgets(yesno, 3, stdin) != NULL && (yesno[0] == 'y' || yesno[0] == 'Y')) {
+ obfuscatedReadOnly = readpassword();
}
FILE* fp = fopen(fname,"w");
@@ -144,13 +159,18 @@ int main(int argc, char** argv)
}
chmod(fname, S_IRUSR|S_IWUSR);
- ObfuscatedPasswd obfuscated(passwd);
-
- if (fwrite(obfuscated.buf, obfuscated.length, 1, fp) != 1) {
+ if (fwrite(obfuscated->buf, obfuscated->length, 1, fp) != 1) {
fprintf(stderr,"Writing to %s failed\n",fname);
exit(1);
}
+ if (obfuscatedReadOnly) {
+ if (fwrite(obfuscatedReadOnly->buf, obfuscatedReadOnly->length, 1, fp) != 1) {
+ fprintf(stderr,"Writing to %s failed\n",fname);
+ exit(1);
+ }
+ }
+
fclose(fp);
return 0;
diff --git a/unix/xserver/hw/vnc/xvnc.cc b/unix/xserver/hw/vnc/xvnc.cc
index 2ef888dd..0fd7b0cb 100644
--- a/unix/xserver/hw/vnc/xvnc.cc
+++ b/unix/xserver/hw/vnc/xvnc.cc
@@ -98,7 +98,7 @@ extern "C" {
#define Xfree free
#endif
-#define XVNCVERSION "TigerVNC 1.3.80"
+#define XVNCVERSION "TigerVNC 1.4.80"
#define XVNCCOPYRIGHT ("Copyright (C) 1999-2013 TigerVNC Team and many others (see README.txt)\n" \
"See http://www.tigervnc.org for information on TigerVNC.\n")
diff --git a/vncviewer/CConn.cxx b/vncviewer/CConn.cxx
index 23f07b4d..cf4f31b9 100644
--- a/vncviewer/CConn.cxx
+++ b/vncviewer/CConn.cxx
@@ -183,12 +183,15 @@ const char *CConn::connectionInfo()
strcat(infoText, scratch);
strcat(infoText, "\n");
+ // TRANSLATORS: Will be filled in with a string describing the
+ // protocol pixel format in a fairly language neutral way
cp.pf().print(pfStr, 100);
snprintf(scratch, sizeof(scratch),
_("Pixel format: %s"), pfStr);
strcat(infoText, scratch);
strcat(infoText, "\n");
+ // TRANSLATORS: Similar to the earlier "Pixel format" string
serverPF.print(pfStr, 100);
snprintf(scratch, sizeof(scratch),
_("(server default %s)"), pfStr);
@@ -426,15 +429,16 @@ void CConn::dataRect(const Rect& r, int encoding)
lastServerEncoding = encoding;
if (!Decoder::supported(encoding)) {
- vlog.error(_("Unknown rect encoding %d"), encoding);
- throw Exception(_("Unknown rect encoding"));
+ // TRANSLATORS: Refers to a VNC protocol encoding type
+ vlog.error(_("Unknown encoding %d"), encoding);
+ throw Exception(_("Unknown encoding"));
}
if (!decoders[encoding]) {
decoders[encoding] = Decoder::createDecoder(encoding, this);
if (!decoders[encoding]) {
- vlog.error(_("Unknown rect encoding %d"), encoding);
- throw Exception(_("Unknown rect encoding"));
+ vlog.error(_("Unknown encoding %d"), encoding);
+ throw Exception(_("Unknown encoding"));
}
}
decoders[encoding]->readRect(r, desktop->getFramebuffer());
diff --git a/vncviewer/DesktopWindow.cxx b/vncviewer/DesktopWindow.cxx
index 3579618e..423d2df3 100644
--- a/vncviewer/DesktopWindow.cxx
+++ b/vncviewer/DesktopWindow.cxx
@@ -658,12 +658,20 @@ void DesktopWindow::maximizeWindow()
void DesktopWindow::handleDesktopSize()
{
- int width, height;
+ if (desktopSize.hasBeenSet()) {
+ int width, height;
- if (sscanf(desktopSize.getValueStr(), "%dx%d", &width, &height) != 2)
- return;
+ // An explicit size has been requested
+
+ if (sscanf(desktopSize.getValueStr(), "%dx%d", &width, &height) != 2)
+ return;
- remoteResize(width, height);
+ remoteResize(width, height);
+ } else if (::remoteResize) {
+ // No explicit size, but remote resizing is on so make sure it
+ // matches whatever size the window ended up being
+ remoteResize(w(), h());
+ }
}
diff --git a/vncviewer/FLTKPixelBuffer.cxx b/vncviewer/FLTKPixelBuffer.cxx
index 1eafe103..ab116d1a 100644
--- a/vncviewer/FLTKPixelBuffer.cxx
+++ b/vncviewer/FLTKPixelBuffer.cxx
@@ -30,7 +30,7 @@ FLTKPixelBuffer::FLTKPixelBuffer(int width, int height) :
{
data = new rdr::U8[width * height * format.bpp/8];
if (data == NULL)
- throw rfb::Exception(_("Error: Not enough memory for framebuffer"));
+ throw rfb::Exception(_("Not enough memory for framebuffer"));
}
FLTKPixelBuffer::~FLTKPixelBuffer()
diff --git a/vncviewer/X11PixelBuffer.cxx b/vncviewer/X11PixelBuffer.cxx
index a7794277..7e89a60b 100644
--- a/vncviewer/X11PixelBuffer.cxx
+++ b/vncviewer/X11PixelBuffer.cxx
@@ -56,6 +56,8 @@ static PixelFormat display_pf()
if (format[i].depth == fl_visual->depth) break;
if (i == nformats)
+ // TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
+ // to translate.
throw rfb::Exception(_("Display lacks pixmap format for default depth"));
switch (format[i].bits_per_pixel) {
@@ -65,6 +67,8 @@ static PixelFormat display_pf()
bpp = format[i].bits_per_pixel;
break;
default:
+ // TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
+ // to translate.
throw rfb::Exception(_("Couldn't find suitable pixmap format"));
}
@@ -76,9 +80,7 @@ static PixelFormat display_pf()
if (!trueColour)
throw rfb::Exception(_("Only true colour displays supported"));
- vlog.info(_("Using default colormap and visual, %sdepth %d."),
- (fl_visual->c_class == TrueColor) ? "TrueColor, " :
- ((fl_visual->c_class == PseudoColor) ? "PseudoColor, " : ""),
+ vlog.info(_("Using default colormap and visual, TrueColor, depth %d."),
fl_visual->depth);
redShift = ffs(fl_visual->red_mask) - 1;
diff --git a/vncviewer/parameters.cxx b/vncviewer/parameters.cxx
index 9a164813..c975e99a 100644
--- a/vncviewer/parameters.cxx
+++ b/vncviewer/parameters.cxx
@@ -43,6 +43,7 @@
#include <stdio.h>
#include <string.h>
#include <limits.h>
+#include <errno.h>
#include "i18n.h"
@@ -142,9 +143,9 @@ BoolParameter fullscreenSystemKeys("FullscreenSystemKeys",
StringParameter via("via", "Gateway to tunnel via", "");
#endif
-const char* IDENTIFIER_STRING = "TigerVNC Configuration file Version 1.0";
+static const char* IDENTIFIER_STRING = "TigerVNC Configuration file Version 1.0";
-VoidParameter* parameterArray[] = {
+static VoidParameter* parameterArray[] = {
#ifdef HAVE_GNUTLS
&CSecurityTLS::X509CA,
&CSecurityTLS::X509CRL,
@@ -184,7 +185,7 @@ static struct {
} replaceMap[] = {'\n', 'n',
'\r', 'r'};
-bool encodeValue(const char* val, char* dest, size_t destSize) {
+static bool encodeValue(const char* val, char* dest, size_t destSize) {
bool normalCharacter = true;
size_t pos = 0;
@@ -196,12 +197,8 @@ bool encodeValue(const char* val, char* dest, size_t destSize) {
strncpy(dest+pos, "\\\\", 2);
pos++;
- if (pos >= destSize) {
- vlog.error(_("Encoding backslash: The size of the buffer dest "
- "is to small, it needs to be more than %d bytes bigger."),
- (destSize - 1 - i));
+ if (pos >= destSize)
return false;
- }
} else {
@@ -210,12 +207,8 @@ bool encodeValue(const char* val, char* dest, size_t destSize) {
if (val[i] == replaceMap[j].first) {
dest[pos] = '\\';
pos++;
- if (pos >= destSize) {
- vlog.error(_("Encoding escape sequence: The size of the buffer "
- "dest is to small, it needs to be more than %d bytes "
- "bigger."), (destSize - 1 - i));
+ if (pos >= destSize)
return false;
- }
dest[pos] = replaceMap[j].second;
normalCharacter = false;
@@ -230,13 +223,8 @@ bool encodeValue(const char* val, char* dest, size_t destSize) {
normalCharacter = true; // Reset for next loop
pos++;
- if (pos >= destSize) {
- vlog.error(_("Encoding normal character: The size of the buffer dest "
- "is to small, it needs to be more than %d bytes bigger."),
- (destSize - 1 - i));
+ if (pos >= destSize)
return false;
- }
-
}
dest[pos] = '\0';
@@ -244,7 +232,7 @@ bool encodeValue(const char* val, char* dest, size_t destSize) {
}
-bool decodeValue(const char* val, char* dest, size_t destSize) {
+static bool decodeValue(const char* val, char* dest, size_t destSize) {
size_t pos = 0;
bool escapedCharacter = false;
@@ -268,7 +256,6 @@ bool decodeValue(const char* val, char* dest, size_t destSize) {
dest[pos] = val[i];
i++;
} else {
- vlog.error(_("Unknown escape sequence at character %d"), i);
return false;
}
}
@@ -280,8 +267,6 @@ bool decodeValue(const char* val, char* dest, size_t destSize) {
escapedCharacter = false; // Reset for next loop
pos++;
if (pos >= destSize) {
- vlog.error(_("Decoding: The size of the buffer dest is to small, "
- "it needs to be 1 byte bigger."));
return false;
}
}
@@ -292,44 +277,40 @@ bool decodeValue(const char* val, char* dest, size_t destSize) {
#ifdef _WIN32
-void setKeyString(const char *_name, const char *_value, HKEY* hKey) {
+static void setKeyString(const char *_name, const char *_value, HKEY* hKey) {
const DWORD buffersize = 256;
wchar_t name[buffersize];
unsigned size = fl_utf8towc(_name, strlen(_name)+1, name, buffersize);
if (size >= buffersize) {
- vlog.error(_("Could not convert the parameter-name %s to wchar_t* when "
- "writing to the Registry, the buffersize is to small."),
- _name);
+ vlog.error(_("The name of the parameter %s was too large to write to the registry"), _name);
return;
}
char encodingBuffer[buffersize];
if (!encodeValue(_value, encodingBuffer, buffersize)) {
- vlog.error(_("Could not encode the parameter-value %s when "
- "writing to the Registry."), _value);
+ vlog.error(_("The parameter %s was too large to write to the registry"), _name);
return;
}
wchar_t value[buffersize];
size = fl_utf8towc(encodingBuffer, strlen(encodingBuffer)+1, value, buffersize);
if (size >= buffersize) {
- vlog.error(_("Could not convert the parameter-value %s to wchar_t* when "
- "writing to the Registry, the buffersize is to small."),
- _value);
+ vlog.error(_("The parameter %s was too large to write to the registry"), _name);
return;
}
LONG res = RegSetValueExW(*hKey, name, 0, REG_SZ, (BYTE*)&value, (wcslen(value)+1)*2);
if (res != ERROR_SUCCESS) {
- vlog.error(_("Error(%d) writing %s(REG_SZ) to Registry."), res, _value);
+ vlog.error(_("Failed to write parameter %s of type %s to the registry: %d"),
+ _name, "REG_SZ", res);
return;
}
}
-void setKeyInt(const char *_name, const int _value, HKEY* hKey) {
+static void setKeyInt(const char *_name, const int _value, HKEY* hKey) {
const DWORD buffersize = 256;
wchar_t name[buffersize];
@@ -337,21 +318,20 @@ void setKeyInt(const char *_name, const int _value, HKEY* hKey) {
unsigned size = fl_utf8towc(_name, strlen(_name)+1, name, buffersize);
if (size >= buffersize) {
- vlog.error(_("Could not convert the parameter-name %s to wchar_t* when "
- "writing to the Registry, the buffersize is to small."),
- _name);
+ vlog.error(_("The name of the parameter %s was too large to write to the registry"), _name);
return;
}
LONG res = RegSetValueExW(*hKey, name, 0, REG_DWORD, (BYTE*)&value, sizeof(DWORD));
if (res != ERROR_SUCCESS) {
- vlog.error(_("Error(%d) writing %d(REG_DWORD) to Registry."), res, _value);
+ vlog.error(_("Failed to write parameter %s of type %s to the registry: %d"),
+ _name, "REG_DWORD", res);
return;
}
}
-bool getKeyString(const char* _name, char* dest, size_t destSize, HKEY* hKey) {
+static bool getKeyString(const char* _name, char* dest, size_t destSize, HKEY* hKey) {
DWORD buffersize = 256;
WCHAR value[destSize];
@@ -359,9 +339,7 @@ bool getKeyString(const char* _name, char* dest, size_t destSize, HKEY* hKey) {
unsigned size = fl_utf8towc(_name, strlen(_name)+1, name, buffersize);
if (size >= buffersize) {
- vlog.error(_("Could not convert the parameter-name %s to wchar_t* when "
- "reading from the Registry, the buffersize is to small."),
- _name);
+ vlog.error(_("The name of the parameter %s was too large to read from the registry"), _name);
return false;
}
@@ -370,7 +348,8 @@ bool getKeyString(const char* _name, char* dest, size_t destSize, HKEY* hKey) {
if (res == ERROR_FILE_NOT_FOUND) {
// The value does not exist, defaults will be used.
} else {
- vlog.error(_("Error(%d) reading %s from Registry."), res, _name);
+ vlog.error(_("Failed to read parameter %s from the registry: %d"),
+ _name, res);
}
return false;
}
@@ -378,9 +357,7 @@ bool getKeyString(const char* _name, char* dest, size_t destSize, HKEY* hKey) {
char utf8val[destSize];
size = fl_utf8fromwc(utf8val, sizeof(utf8val), value, wcslen(value)+1);
if (size >= sizeof(utf8val)) {
- vlog.error(_("Could not convert the parameter-value for %s to utf8 "
- "char* when reading from the Registry, the buffer dest is "
- "to small."), _name);
+ vlog.error(_("The parameter %s was too large to read from the registry"), _name);
return false;
}
const char *ret = utf8val;
@@ -392,7 +369,7 @@ bool getKeyString(const char* _name, char* dest, size_t destSize, HKEY* hKey) {
}
-bool getKeyInt(const char* _name, int* dest, HKEY* hKey) {
+static bool getKeyInt(const char* _name, int* dest, HKEY* hKey) {
const DWORD buffersize = 256;
DWORD dwordsize = sizeof(DWORD);
@@ -401,9 +378,7 @@ bool getKeyInt(const char* _name, int* dest, HKEY* hKey) {
unsigned size = fl_utf8towc(_name, strlen(_name)+1, name, buffersize);
if (size >= buffersize) {
- vlog.error(_("Could not convert the parameter-name %s to wchar_t* when "
- "reading from the Registry, the buffersize is to small."),
- _name);
+ vlog.error(_("The name of the parameter %s was too large to read from the registry"), _name);
return false;
}
@@ -412,7 +387,8 @@ bool getKeyInt(const char* _name, int* dest, HKEY* hKey) {
if (res == ERROR_FILE_NOT_FOUND) {
// The value does not exist, defaults will be used.
} else {
- vlog.error(_("Error(%d) reading %s from Registry."), res, _name);
+ vlog.error(_("Failed to read parameter %s from the registry: %d"),
+ _name, res);
}
return false;
}
@@ -422,7 +398,7 @@ bool getKeyInt(const char* _name, int* dest, HKEY* hKey) {
}
-void saveToReg(const char* servername) {
+static void saveToReg(const char* servername) {
HKEY hKey;
@@ -431,7 +407,7 @@ void saveToReg(const char* servername) {
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,
&hKey, NULL);
if (res != ERROR_SUCCESS) {
- vlog.error(_("Error(%d) creating key: Software\\TigerVNC\\vncviewer"), res);
+ vlog.error(_("Failed to create registry key: %d"), res);
return;
}
@@ -445,19 +421,19 @@ void saveToReg(const char* servername) {
} else if (dynamic_cast<BoolParameter*>(parameterArray[i]) != NULL) {
setKeyInt(parameterArray[i]->getName(), (int)*(BoolParameter*)parameterArray[i], &hKey);
} else {
- vlog.info(_("The parameterArray contains a object of a invalid type "
- "at line %d."), i);
+ vlog.error(_("Unknown parameter type for parameter %s"),
+ parameterArray[i]->getName());
}
}
res = RegCloseKey(hKey);
if (res != ERROR_SUCCESS) {
- vlog.error(_("Error(%d) closing key: Software\\TigerVNC\\vncviewer"), res);
+ vlog.error(_("Failed to close registry key: %d"), res);
}
}
-char* loadFromReg() {
+static char* loadFromReg() {
HKEY hKey;
@@ -468,7 +444,7 @@ char* loadFromReg() {
if (res == ERROR_FILE_NOT_FOUND) {
// The key does not exist, defaults will be used.
} else {
- vlog.error(_("Error(%d) opening key: Software\\TigerVNC\\vncviewer"), res);
+ vlog.error(_("Failed to open registry key: %d"), res);
}
return NULL;
}
@@ -494,13 +470,14 @@ char* loadFromReg() {
if (getKeyInt(parameterArray[i]->getName(), &intValue, &hKey))
((BoolParameter*)parameterArray[i])->setParam(intValue);
} else {
- vlog.info(_("The parameterArray contains a object of a invalid type at line %d."), i);
+ vlog.error(_("Unknown parameter type for parameter %s"),
+ parameterArray[i]->getName());
}
}
res = RegCloseKey(hKey);
if (res != ERROR_SUCCESS){
- vlog.error(_("Error(%d) closing key: Software\\TigerVNC\\vncviewer"), res);
+ vlog.error(_("Failed to close registry key: %d"), res);
}
return servername;
@@ -539,7 +516,8 @@ void saveViewerParameters(const char *filename, const char *servername) {
FILE* f = fopen(filepath, "w+");
if (!f) {
snprintf(write_error, sizeof(write_error),
- _("Failed to write configuration file, can't open %s"), filepath);
+ _("Failed to write configuration file, can't open %s: %s"),
+ filepath, strerror(errno));
throw Exception(write_error);
}
@@ -558,8 +536,8 @@ void saveViewerParameters(const char *filename, const char *servername) {
} else if (dynamic_cast<BoolParameter*>(parameterArray[i]) != NULL) {
fprintf(f, "%s=%d\n", ((BoolParameter*)parameterArray[i])->getName(), (int)*(BoolParameter*)parameterArray[i]);
} else {
- vlog.info(_("The parameterArray contains a object of a invalid type "
- "at line %d."), i);
+ vlog.error(_("Unknown parameter type for parameter %s"),
+ parameterArray[i]->getName());
}
}
fclose(f);
@@ -599,7 +577,8 @@ char* loadViewerParameters(const char *filename) {
if (!filename)
return NULL; // Use defaults.
snprintf(readError, sizeof(readError),
- _("Failed to read configuration file, can't open %s"), filepath);
+ _("Failed to read configuration file, can't open %s: %s"),
+ filepath, strerror(errno));
throw Exception(readError);
}
@@ -610,15 +589,17 @@ char* loadViewerParameters(const char *filename) {
lineNr++;
if (!fgets(line, sizeof(line), f)) {
if (line[sizeof(line) -1] != '\0') {
- vlog.error(_("Could not read the line(%d) in the configuration file,"
- "the buffersize is to small."), lineNr);
- return NULL;
+ snprintf(readError, sizeof(readError),
+ _("Failed to read line %d in file %s: %s"),
+ lineNr, filepath, _("Line too long"));
+ throw Exception(readError);
}
if (feof(f))
break;
snprintf(readError, sizeof(readError),
- _("Failed to read line %d in file %s"), lineNr, filepath);
+ _("Failed to read line %d in file %s: %s"),
+ lineNr, filepath, strerror(errno));
throw Exception(readError);
}
@@ -628,9 +609,8 @@ char* loadViewerParameters(const char *filename) {
continue;
} else {
snprintf(readError, sizeof(readError),
- _("Line 1 in file %s\nmust contain the TigerVNC "
- "configuration file identifier string:\n"
- "\"%s\""), filepath, IDENTIFIER_STRING);
+ _("Configuration file %s is in an invalid format"),
+ filepath);
throw Exception(readError);
}
}
@@ -648,8 +628,8 @@ char* loadViewerParameters(const char *filename) {
// Find the parameter value
char *value = strchr(line, '=');
if (value == NULL) {
- vlog.info(_("Bad Name/Value pair on line: %d in file: %s"),
- lineNr, filepath);
+ vlog.error(_("Failed to read line %d in file %s: %s"),
+ lineNr, filepath, _("Invalid format"));
continue;
}
*value = '\0'; // line only contains the parameter name below.
@@ -661,8 +641,8 @@ char* loadViewerParameters(const char *filename) {
if (strcasecmp(line, "ServerName") == 0) {
if(!decodeValue(value, decodingBuffer, sizeof(decodingBuffer))) {
- vlog.info(_("The value of the parameter %s on line %d in file %s "
- "is invalid."), line, lineNr, filepath);
+ vlog.error(_("Failed to read line %d in file %s: %s"),
+ lineNr, filepath, _("Invalid format or too large value"));
continue;
}
snprintf(servername, sizeof(decodingBuffer), "%s", decodingBuffer);
@@ -677,8 +657,8 @@ char* loadViewerParameters(const char *filename) {
if (strcasecmp(line, ((StringParameter*)parameterArray[i])->getName()) == 0) {
if(!decodeValue(value, decodingBuffer, sizeof(decodingBuffer))) {
- vlog.info(_("The value of the parameter %s on line %d in file %s "
- "is invalid."), line, lineNr, filepath);
+ vlog.error(_("Failed to read line %d in file %s: %s"),
+ lineNr, filepath, _("Invalid format or too large value"));
continue;
}
((StringParameter*)parameterArray[i])->setParam(decodingBuffer);
@@ -698,15 +678,15 @@ char* loadViewerParameters(const char *filename) {
}
} else {
- vlog.info(_("The parameterArray contains a object of a invalid type "
- "at line %d."), lineNr);
+ vlog.error(_("Unknown parameter type for parameter %s"),
+ parameterArray[i]->getName());
}
}
}
if (invalidParameterName)
- vlog.info(_("Invalid parameter name on line: %d in file: %s"),
- lineNr, filepath);
+ vlog.info(_("Unknown parameter %s on line %d in file %s"),
+ line, lineNr, filepath);
}
fclose(f); f=0;
diff --git a/vncviewer/vncviewer.cxx b/vncviewer/vncviewer.cxx
index cf52de5b..7fb712ab 100644
--- a/vncviewer/vncviewer.cxx
+++ b/vncviewer/vncviewer.cxx
@@ -113,7 +113,7 @@ static void CleanupSignalHandler(int sig)
{
// CleanupSignalHandler allows C++ object cleanup to happen because it calls
// exit() rather than the default which is to abort.
- vlog.info(_("CleanupSignalHandler called"));
+ vlog.info(_("Termination signal %d has been received. TigerVNC Viewer will now exit."), sig);
exit(1);
}
@@ -460,6 +460,8 @@ int main(int argc, char** argv)
#ifndef WIN32
/* Specifying -via and -listen together is nonsense */
if (listenMode && strlen(via.getValueStr()) > 0) {
+ // TRANSLATORS: "Parameters" are command line arguments, or settings
+ // from a file or the Windows registry.
vlog.error(_("Parameters -listen and -via are incompatible"));
fl_alert(_("Parameters -listen and -via are incompatible"));
exit_vncviewer();
diff --git a/win/vncconfig/Authentication.h b/win/vncconfig/Authentication.h
index 534646c5..c2aba91e 100644
--- a/win/vncconfig/Authentication.h
+++ b/win/vncconfig/Authentication.h
@@ -92,7 +92,8 @@ namespace rfb {
static bool haveVncPassword() {
- PlainPasswd password(SSecurityVncAuth::vncAuthPasswd.getVncAuthPasswd());
+ PlainPasswd password, passwordReadOnly;
+ SSecurityVncAuth::vncAuthPasswd.getVncAuthPasswd(&password, &passwordReadOnly);
return password.buf && strlen(password.buf) != 0;
}