diff options
95 files changed, 4454 insertions, 3316 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index cd5a23b9..a9e7f4e0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,10 +21,10 @@ include(CheckCSourceRuns) include(CMakeMacroLibtoolFile) project(tigervnc) -set(VERSION 1.6.80) +set(VERSION 1.7.80) # The RC version must always be four comma-separated numbers -set(RCVERSION 1,6,80,0) +set(RCVERSION 1,7,80,0) # Installation paths set(BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin") @@ -104,8 +104,9 @@ else() message(STATUS "32-bit build") endif() -# CMake doesn't properly support resource compilation with MinGW. Boo! -if(MINGW) +# Versions of CMake before 2.8.7 do not properly support resource compilation +# with MinGW. Boo! +if(MINGW AND "${CMAKE_VERSION}" VERSION_LESS "2.8.7") if(NOT DEFINED RC) set(CMAKE_RC_COMPILER_INIT windres) else() diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index e0431e62..e4489f6f 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -9,7 +9,7 @@ add_subdirectory(rfb) # because PIC code does not exist on that platform and MinGW complains if -fPIC # is passed (additionally, libvnc is not used on Windows.) -if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) +if(NOT WIN32) set_target_properties(os rdr network Xregion rfb PROPERTIES COMPILE_FLAGS -fPIC) endif() diff --git a/common/network/Socket.h b/common/network/Socket.h index 13b12d1d..53f957e6 100644 --- a/common/network/Socket.h +++ b/common/network/Socket.h @@ -21,6 +21,8 @@ #ifndef __NETWORK_SOCKET_H__ #define __NETWORK_SOCKET_H__ +#include <list> + #include <limits.h> #include <rdr/FdInStream.h> #include <rdr/FdOutStream.h> @@ -125,6 +127,10 @@ namespace network { // resources to be freed. virtual void removeSocket(network::Socket* sock) = 0; + // getSockets() gets a list of sockets. This can be used to generate an + // fd_set for calling select(). + virtual void getSockets(std::list<network::Socket*>* sockets) = 0; + // processSocketReadEvent() tells the server there is a Socket read event. // The implementation can indicate that the Socket is no longer active // by calling shutdown() on it. The caller will then call removeSocket() diff --git a/common/os/Thread.h b/common/os/Thread.h index 1a9aa54b..4c39884b 100644 --- a/common/os/Thread.h +++ b/common/os/Thread.h @@ -17,7 +17,9 @@ */ #ifndef __OS_THREAD_H__ -#define __OP_THREAD_H__ +#define __OS_THREAD_H__ + +#include <stddef.h> namespace os { class Mutex; diff --git a/common/rdr/FdOutStream.cxx b/common/rdr/FdOutStream.cxx index e6d081a3..29e864fc 100644 --- a/common/rdr/FdOutStream.cxx +++ b/common/rdr/FdOutStream.cxx @@ -101,8 +101,13 @@ void FdOutStream::flush() blocking? timeoutms : 0); // Timeout? - if ((n == 0) && blocking) + if (n == 0) { + // If non-blocking then we're done here + if (!blocking) + break; + throw TimedOut(); + } sentUpTo += n; offset += n; diff --git a/common/rfb/CConnection.cxx b/common/rfb/CConnection.cxx index 7e9fd310..35be9468 100644 --- a/common/rfb/CConnection.cxx +++ b/common/rfb/CConnection.cxx @@ -86,7 +86,7 @@ void CConnection::setFramebuffer(ModifiablePixelBuffer* fb) if (fb->width() > framebuffer->width()) { rect.setXYWH(framebuffer->width(), 0, - fb->width() - fb->width(), + fb->width() - framebuffer->width(), fb->height()); fb->fillRect(rect, black); } diff --git a/common/rfb/CSecurityTLS.cxx b/common/rfb/CSecurityTLS.cxx index 3dcededb..8a053e3d 100644 --- a/common/rfb/CSecurityTLS.cxx +++ b/common/rfb/CSecurityTLS.cxx @@ -67,21 +67,14 @@ StringParameter CSecurityTLS::X509CRL("X509CRL", "X509 CRL file", "", ConfViewer static LogWriter vlog("TLS"); -void CSecurityTLS::initGlobal() -{ - static bool globalInitDone = false; - - if (!globalInitDone) { - gnutls_global_init(); - globalInitDone = true; - } -} - CSecurityTLS::CSecurityTLS(bool _anon) : session(0), anon_cred(0), anon(_anon), fis(0), fos(0) { cafile = X509CA.getData(); crlfile = X509CRL.getData(); + + if (gnutls_global_init() != GNUTLS_E_SUCCESS) + throw AuthFailureException("gnutls_global_init failed"); } void CSecurityTLS::setDefaults() @@ -125,8 +118,6 @@ void CSecurityTLS::shutdown(bool needbye) if (session) { gnutls_deinit(session); session = 0; - - gnutls_global_deinit(); } } @@ -142,6 +133,8 @@ CSecurityTLS::~CSecurityTLS() delete[] cafile; delete[] crlfile; + + gnutls_global_deinit(); } bool CSecurityTLS::processMsg(CConnection* cc) @@ -150,8 +143,6 @@ bool CSecurityTLS::processMsg(CConnection* cc) rdr::OutStream* os = cc->getOutStream(); client = cc; - initGlobal(); - if (!session) { if (!is->checkNoWait(1)) return false; diff --git a/common/rfb/CSecurityTLS.h b/common/rfb/CSecurityTLS.h index b147d802..57d964d7 100644 --- a/common/rfb/CSecurityTLS.h +++ b/common/rfb/CSecurityTLS.h @@ -62,8 +62,6 @@ namespace rfb { CConnection *client; private: - static void initGlobal(); - gnutls_session_t session; gnutls_anon_client_credentials_t anon_cred; gnutls_certificate_credentials_t cert_cred; diff --git a/common/rfb/ComparingUpdateTracker.cxx b/common/rfb/ComparingUpdateTracker.cxx index 1d27f3c4..237adc41 100644 --- a/common/rfb/ComparingUpdateTracker.cxx +++ b/common/rfb/ComparingUpdateTracker.cxx @@ -20,12 +20,16 @@ #include <vector> #include <rdr/types.h> #include <rfb/Exception.h> +#include <rfb/LogWriter.h> #include <rfb/ComparingUpdateTracker.h> using namespace rfb; +static LogWriter vlog("ComparingUpdateTracker"); + ComparingUpdateTracker::ComparingUpdateTracker(PixelBuffer* buffer) - : fb(buffer), oldFb(fb->getPF(), 0, 0), firstCompare(true), enabled(true) + : fb(buffer), oldFb(fb->getPF(), 0, 0), firstCompare(true), + enabled(true), totalPixels(0), missedPixels(0) { changed.assign_union(fb->getRect()); } @@ -72,6 +76,13 @@ bool ComparingUpdateTracker::compare() for (i = rects.begin(); i != rects.end(); i++) compareRect(*i, &newChanged); + changed.get_rects(&rects); + for (i = rects.begin(); i != rects.end(); i++) + totalPixels += i->area(); + newChanged.get_rects(&rects); + for (i = rects.begin(); i != rects.end(); i++) + missedPixels += i->area(); + if (changed.equals(newChanged)) return false; @@ -165,3 +176,19 @@ void ComparingUpdateTracker::compareRect(const Rect& r, Region* newChanged) newChanged->assign_union(temp); } } + +void ComparingUpdateTracker::logStats() +{ + double ratio; + char a[1024], b[1024]; + + siPrefix(totalPixels, "pixels", a, sizeof(a)); + siPrefix(missedPixels, "pixels", b, sizeof(b)); + + ratio = (double)totalPixels / missedPixels; + + vlog.info("%s in / %s out", a, b); + vlog.info("(1:%g ratio)", ratio); + + totalPixels = missedPixels = 0; +} diff --git a/common/rfb/ComparingUpdateTracker.h b/common/rfb/ComparingUpdateTracker.h index fccc2222..e62f2b23 100644 --- a/common/rfb/ComparingUpdateTracker.h +++ b/common/rfb/ComparingUpdateTracker.h @@ -40,12 +40,17 @@ namespace rfb { virtual void enable(); virtual void disable(); + + void logStats(); + private: void compareRect(const Rect& r, Region* newchanged); PixelBuffer* fb; ManagedPixelBuffer oldFb; bool firstCompare; bool enabled; + + rdr::U32 totalPixels, missedPixels; }; } diff --git a/common/rfb/Configuration.cxx b/common/rfb/Configuration.cxx index 8e1ea6e9..a5c23028 100644 --- a/common/rfb/Configuration.cxx +++ b/common/rfb/Configuration.cxx @@ -23,24 +23,14 @@ #include <ctype.h> #include <string.h> +#include <os/Mutex.h> + #include <rfb/util.h> #include <rfb/Configuration.h> #include <rfb/LogWriter.h> #include <rfb/Exception.h> -#include <rfb/Threading.h> -#ifdef __RFB_THREADING_IMPL -// On platforms that support Threading, we use Locks to make getData safe -#define LOCK_CONFIG Lock l(*configLock()) -rfb::Mutex* configLock_ = 0; -static rfb::Mutex* configLock() { - if (!configLock_) - configLock_ = new rfb::Mutex; - return configLock_; -} -#else -#define LOCK_CONFIG -#endif +#define LOCK_CONFIG os::AutoMutex a(mutex) #include <rdr/HexOutStream.h> #include <rdr/HexInStream.h> @@ -195,9 +185,12 @@ VoidParameter::VoidParameter(const char* name_, const char* desc_, _next = conf->head; conf->head = this; + + mutex = new os::Mutex(); } VoidParameter::~VoidParameter() { + delete mutex; } const char* diff --git a/common/rfb/Configuration.h b/common/rfb/Configuration.h index da93fddf..fbf161db 100644 --- a/common/rfb/Configuration.h +++ b/common/rfb/Configuration.h @@ -45,6 +45,8 @@ #include <rfb/util.h> +namespace os { class Mutex; } + namespace rfb { class VoidParameter; struct ParameterIterator; @@ -174,6 +176,8 @@ namespace rfb { bool immutable; const char* name; const char* description; + + os::Mutex* mutex; }; class AliasParameter : public VoidParameter { diff --git a/common/rfb/HTTPServer.h b/common/rfb/HTTPServer.h index d7ca69ad..04ef4993 100644 --- a/common/rfb/HTTPServer.h +++ b/common/rfb/HTTPServer.h @@ -26,8 +26,6 @@ #ifndef __RFB_HTTP_SERVER_H__ #define __RFB_HTTP_SERVER_H__ -#include <list> - #include <rdr/MemInStream.h> #include <rfb/UpdateTracker.h> #include <rfb/Configuration.h> @@ -58,6 +56,10 @@ namespace rfb { // Could clean up socket-specific resources here. virtual void removeSocket(network::Socket* sock); + // getSockets() gets a list of sockets. This can be used to generate an + // fd_set for calling select(). + virtual void getSockets(std::list<network::Socket*>* sockets); + // processSocketReadEvent() // The platform-specific side of the server implementation calls // this method whenever data arrives on one of the active @@ -73,12 +75,6 @@ namespace rfb { virtual int checkTimeouts(); - // getSockets() gets a list of sockets. This can be used to generate an - // fd_set for calling select(). - - virtual void getSockets(std::list<network::Socket*>* sockets); - - // -=- File interface // - getFile is passed the path portion of a URL and returns an diff --git a/common/rfb/Hostname.h b/common/rfb/Hostname.h index f70347f9..bd68dc02 100644 --- a/common/rfb/Hostname.h +++ b/common/rfb/Hostname.h @@ -19,6 +19,7 @@ #ifndef __RFB_HOSTNAME_H__ #define __RFB_HOSTNAME_H__ +#include <assert.h> #include <stdlib.h> #include <rdr/Exception.h> #include <rfb/util.h> @@ -26,30 +27,72 @@ namespace rfb { static void getHostAndPort(const char* hi, char** host, int* port, int basePort=5900) { - CharArray portBuf; - CharArray hostBuf; + const char* hostStart; + const char* hostEnd; + const char* portStart; + if (hi == NULL) throw rdr::Exception("NULL host specified"); + + assert(host); + assert(port); + if (hi[0] == '[') { - if (!strSplit(&hi[1], ']', &hostBuf.buf, &portBuf.buf)) + hostStart = &hi[1]; + hostEnd = strchr(hostStart, ']'); + if (hostEnd == NULL) throw rdr::Exception("unmatched [ in host"); + + portStart = hostEnd + 1; + if (*portStart == '\0') + portStart = NULL; } else { - portBuf.buf = strDup(hi); - } - if (strSplit(portBuf.buf, ':', hostBuf.buf ? 0 : &hostBuf.buf, &portBuf.buf)) { - if (portBuf.buf[0] == ':') { - *port = atoi(&portBuf.buf[1]); + hostStart = &hi[0]; + hostEnd = strrchr(hostStart, ':'); + + if (hostEnd == NULL) { + hostEnd = hostStart + strlen(hostStart); + portStart = NULL; } else { - *port = atoi(portBuf.buf); - if (*port < 100) *port += basePort; + if ((hostEnd > hostStart) && (hostEnd[-1] == ':')) + hostEnd--; + portStart = strchr(hostStart, ':'); + if (portStart != hostEnd) { + // We found more : in the host. This is probably an IPv6 address + hostEnd = hostStart + strlen(hostStart); + portStart = NULL; + } } - } else { - *port = basePort; } - if (strlen(hostBuf.buf) == 0) + + if (hostStart == hostEnd) *host = strDup("localhost"); - else - *host = hostBuf.takeBuf(); + else { + size_t len; + len = hostEnd - hostStart + 1; + *host = new char[len]; + strncpy(*host, hostStart, len-1); + (*host)[len-1] = '\0'; + } + + if (portStart == NULL) + *port = basePort; + else { + char* end; + + if (portStart[0] != ':') + throw rdr::Exception("invalid port specified"); + + if (portStart[1] != ':') + *port = strtol(portStart + 1, &end, 10); + else + *port = strtol(portStart + 2, &end, 10); + if (*end != '\0') + throw rdr::Exception("invalid port specified"); + + if ((portStart[1] != ':') && (*port < 100)) + *port += basePort; + } } }; diff --git a/common/rfb/KeyRemapper.cxx b/common/rfb/KeyRemapper.cxx index d33f0a45..b4c2793c 100644 --- a/common/rfb/KeyRemapper.cxx +++ b/common/rfb/KeyRemapper.cxx @@ -17,6 +17,9 @@ */ #include <stdio.h> + +#include <os/Mutex.h> + #include <rfb/KeyRemapper.h> #include <rfb/Configuration.h> #include <rfb/LogWriter.h> @@ -27,14 +30,21 @@ static LogWriter vlog("KeyRemapper"); KeyRemapper KeyRemapper::defInstance; -#ifdef __RFB_THREADING_IMPL -static Mutex mappingLock; -#endif +KeyRemapper::KeyRemapper(const char* m) +{ + mutex = new os::Mutex; + + setMapping(m); +} + +KeyRemapper::~KeyRemapper() +{ + delete mutex; +} void KeyRemapper::setMapping(const char* m) { -#ifdef __RFB_THREADING_IMPL - Lock l(mappingLock); -#endif + os::AutoMutex a(mutex); + mapping.clear(); while (m[0]) { int from, to; @@ -59,9 +69,8 @@ void KeyRemapper::setMapping(const char* m) { } rdr::U32 KeyRemapper::remapKey(rdr::U32 key) const { -#ifdef __RFB_THREADING_IMPL - Lock l(mappingLock); -#endif + os::AutoMutex a(mutex); + std::map<rdr::U32,rdr::U32>::const_iterator i = mapping.find(key); if (i != mapping.end()) return i->second; diff --git a/common/rfb/KeyRemapper.h b/common/rfb/KeyRemapper.h index a4b7aa01..1406bad2 100644 --- a/common/rfb/KeyRemapper.h +++ b/common/rfb/KeyRemapper.h @@ -22,16 +22,20 @@ #include <map> #include <rdr/types.h> +namespace os { class Mutex; } + namespace rfb { class KeyRemapper { public: - KeyRemapper(const char* m="") { setMapping(m); } + KeyRemapper(const char* m=""); + ~KeyRemapper(); void setMapping(const char* m); rdr::U32 remapKey(rdr::U32 key) const; static KeyRemapper defInstance; private: std::map<rdr::U32,rdr::U32> mapping; + os::Mutex* mutex; }; }; diff --git a/common/rfb/Logger_file.cxx b/common/rfb/Logger_file.cxx index ebe15d52..149ad404 100644 --- a/common/rfb/Logger_file.cxx +++ b/common/rfb/Logger_file.cxx @@ -21,36 +21,30 @@ #include <stdlib.h> #include <string.h> +#include <os/Mutex.h> + #include <rfb/util.h> #include <rfb/Logger_file.h> -#include <rfb/Threading.h> using namespace rfb; - -// If threading is available then protect the write() operation -// from concurrent accesses -#ifdef __RFB_THREADING_IMPL -static Mutex logLock; -#endif - - Logger_File::Logger_File(const char* loggerName) : Logger(loggerName), indent(13), width(79), m_filename(0), m_file(0), m_lastLogTime(0) { + mutex = new os::Mutex(); } Logger_File::~Logger_File() { closeFile(); + delete mutex; } void Logger_File::write(int level, const char *logname, const char *message) { -#ifdef __RFB_THREADING_IMPL - Lock l(logLock); -#endif + os::AutoMutex a(mutex); + if (!m_file) { if (!m_filename) return; CharArray bakFilename(strlen(m_filename) + 1 + 4); diff --git a/common/rfb/Logger_file.h b/common/rfb/Logger_file.h index 5e0c917b..5b5c34e1 100644 --- a/common/rfb/Logger_file.h +++ b/common/rfb/Logger_file.h @@ -24,6 +24,8 @@ #include <time.h> #include <rfb/Logger.h> +namespace os { class Mutex; } + namespace rfb { class Logger_File : public Logger { @@ -43,6 +45,7 @@ namespace rfb { char* m_filename; FILE* m_file; time_t m_lastLogTime; + os::Mutex* mutex; }; bool initFileLogger(const char* filename); diff --git a/common/rfb/Logger_syslog.cxx b/common/rfb/Logger_syslog.cxx index 291d36cd..dc1d0c1a 100644 --- a/common/rfb/Logger_syslog.cxx +++ b/common/rfb/Logger_syslog.cxx @@ -25,7 +25,6 @@ #include <rfb/util.h> #include <rfb/Logger_syslog.h> #include <rfb/LogWriter.h> -#include <rfb/Threading.h> using namespace rfb; diff --git a/common/rfb/SSecurityTLS.cxx b/common/rfb/SSecurityTLS.cxx index 0f52d34b..b9460223 100644 --- a/common/rfb/SSecurityTLS.cxx +++ b/common/rfb/SSecurityTLS.cxx @@ -48,23 +48,15 @@ StringParameter SSecurityTLS::X509_KeyFile static LogWriter vlog("TLS"); -void SSecurityTLS::initGlobal() -{ - static bool globalInitDone = false; - - if (!globalInitDone) { - if (gnutls_global_init() != GNUTLS_E_SUCCESS) - throw AuthFailureException("gnutls_global_init failed"); - globalInitDone = true; - } -} - SSecurityTLS::SSecurityTLS(bool _anon) : session(0), dh_params(0), anon_cred(0), cert_cred(0), anon(_anon), fis(0), fos(0) { certfile = X509_CertFile.getData(); keyfile = X509_KeyFile.getData(); + + if (gnutls_global_init() != GNUTLS_E_SUCCESS) + throw AuthFailureException("gnutls_global_init failed"); } void SSecurityTLS::shutdown() @@ -94,8 +86,6 @@ void SSecurityTLS::shutdown() if (session) { gnutls_deinit(session); session = 0; - - gnutls_global_deinit(); } } @@ -111,6 +101,8 @@ SSecurityTLS::~SSecurityTLS() delete[] keyfile; delete[] certfile; + + gnutls_global_deinit(); } bool SSecurityTLS::processMsg(SConnection *sc) @@ -121,8 +113,6 @@ bool SSecurityTLS::processMsg(SConnection *sc) vlog.debug("Process security message (session %p)", session); if (!session) { - initGlobal(); - if (gnutls_init(&session, GNUTLS_SERVER) != GNUTLS_E_SUCCESS) throw AuthFailureException("gnutls_init failed"); diff --git a/common/rfb/SSecurityTLS.h b/common/rfb/SSecurityTLS.h index a7932054..30242a24 100644 --- a/common/rfb/SSecurityTLS.h +++ b/common/rfb/SSecurityTLS.h @@ -54,8 +54,6 @@ namespace rfb { void setParams(gnutls_session_t session); private: - static void initGlobal(); - gnutls_session_t session; gnutls_dh_params_t dh_params; gnutls_anon_server_credentials_t anon_cred; diff --git a/common/rfb/VNCServerST.cxx b/common/rfb/VNCServerST.cxx index d5010854..e15cd701 100644 --- a/common/rfb/VNCServerST.cxx +++ b/common/rfb/VNCServerST.cxx @@ -110,6 +110,8 @@ VNCServerST::~VNCServerST() desktop->stop(); } + if (comparer) + comparer->logStats(); delete comparer; } @@ -155,6 +157,10 @@ void VNCServerST::removeSocket(network::Socket* sock) { desktopStarted = false; desktop->stop(); } + + if (comparer) + comparer->logStats(); + return; } } @@ -292,6 +298,9 @@ void VNCServerST::unblockUpdates() void VNCServerST::setPixelBuffer(PixelBuffer* pb_, const ScreenSet& layout) { + if (comparer) + comparer->logStats(); + pb = pb_; delete comparer; comparer = 0; diff --git a/common/rfb/VNCServerST.h b/common/rfb/VNCServerST.h index bd84c452..0ced12a4 100644 --- a/common/rfb/VNCServerST.h +++ b/common/rfb/VNCServerST.h @@ -25,8 +25,6 @@ #include <sys/time.h> -#include <list> - #include <rfb/SDesktop.h> #include <rfb/VNCServer.h> #include <rfb/Configuration.h> @@ -67,6 +65,10 @@ namespace rfb { // Clean up any resources associated with the Socket virtual void removeSocket(network::Socket* sock); + // getSockets() gets a list of sockets. This can be used to generate an + // fd_set for calling select(). + virtual void getSockets(std::list<network::Socket*>* sockets); + // processSocketReadEvent // Read more RFB data from the Socket. If an error occurs during // processing then shutdown() is called on the Socket, causing @@ -111,11 +113,6 @@ namespace rfb { // any), and logs the specified reason for closure. void closeClients(const char* reason, network::Socket* sock); - // getSockets() gets a list of sockets. This can be used to generate an - // fd_set for calling select(). - - void getSockets(std::list<network::Socket*>* sockets); - // getSConnection() gets the SConnection for a particular Socket. If // the Socket is not recognised then null is returned. diff --git a/common/rfb/ZRLEDecoder.cxx b/common/rfb/ZRLEDecoder.cxx index c13f2861..b891ba52 100644 --- a/common/rfb/ZRLEDecoder.cxx +++ b/common/rfb/ZRLEDecoder.cxx @@ -86,10 +86,9 @@ void ZRLEDecoder::decodeRect(const Rect& r, const void* buffer, { rdr::MemInStream is(buffer, buflen); const rfb::PixelFormat& pf = cp.pf(); - rdr::U8* buf[64 * 64 * 4 * pf.bpp/8]; switch (pf.bpp) { - case 8: zrleDecode8 (r, &is, &zis, (rdr::U8*) buf, pf, pb); break; - case 16: zrleDecode16(r, &is, &zis, (rdr::U16*)buf, pf, pb); break; + case 8: zrleDecode8 (r, &is, &zis, pf, pb); break; + case 16: zrleDecode16(r, &is, &zis, pf, pb); break; case 32: { Pixel maxPixel = pf.pixelFromRGB((rdr::U16)-1, (rdr::U16)-1, (rdr::U16)-1); @@ -99,16 +98,16 @@ void ZRLEDecoder::decodeRect(const Rect& r, const void* buffer, if ((fitsInLS3Bytes && pf.isLittleEndian()) || (fitsInMS3Bytes && pf.isBigEndian())) { - zrleDecode24A(r, &is, &zis, (rdr::U32*)buf, pf, pb); + zrleDecode24A(r, &is, &zis, pf, pb); } else if ((fitsInLS3Bytes && pf.isBigEndian()) || (fitsInMS3Bytes && pf.isLittleEndian())) { - zrleDecode24B(r, &is, &zis, (rdr::U32*)buf, pf, pb); + zrleDecode24B(r, &is, &zis, pf, pb); } else { - zrleDecode32(r, &is, &zis, (rdr::U32*)buf, pf, pb); + zrleDecode32(r, &is, &zis, pf, pb); } break; } diff --git a/common/rfb/hextileDecode.h b/common/rfb/hextileDecode.h index 7affa157..402cd031 100644 --- a/common/rfb/hextileDecode.h +++ b/common/rfb/hextileDecode.h @@ -22,6 +22,7 @@ // BPP - 8, 16 or 32 #include <rdr/InStream.h> +#include <rfb/Exception.h> #include <rfb/hextileConstants.h> namespace rfb { @@ -44,7 +45,7 @@ static void HEXTILE_DECODE (const Rect& r, rdr::InStream* is, Rect t; PIXEL_T bg = 0; PIXEL_T fg = 0; - PIXEL_T buf[16 * 16 * 4]; + PIXEL_T buf[16 * 16]; for (t.tl.y = r.tl.y; t.tl.y < r.br.y; t.tl.y += 16) { @@ -87,6 +88,9 @@ static void HEXTILE_DECODE (const Rect& r, rdr::InStream* is, int y = (xy & 15); int w = ((wh >> 4) & 15) + 1; int h = (wh & 15) + 1; + if (x + w > 16 || y + h > 16) { + throw rfb::Exception("HEXTILE_DECODE: Hextile out of bounds"); + } PIXEL_T* ptr = buf + y * t.width() + x; int rowAdd = t.width() - w; while (h-- > 0) { diff --git a/common/rfb/zrleDecode.h b/common/rfb/zrleDecode.h index 07d6795a..0bfbbe15 100644 --- a/common/rfb/zrleDecode.h +++ b/common/rfb/zrleDecode.h @@ -47,12 +47,13 @@ namespace rfb { #endif void ZRLE_DECODE (const Rect& r, rdr::InStream* is, - rdr::ZlibInStream* zis, PIXEL_T* buf, + rdr::ZlibInStream* zis, const PixelFormat& pf, ModifiablePixelBuffer* pb) { int length = is->readU32(); zis->setUnderlying(is, length); Rect t; + PIXEL_T buf[64 * 64]; for (t.tl.y = r.tl.y; t.tl.y < r.br.y; t.tl.y += 64) { diff --git a/contrib/packages/deb/ubuntu-precise/debian/control b/contrib/packages/deb/ubuntu-precise/debian/control index e2797ed3..b29222e7 100644 --- a/contrib/packages/deb/ubuntu-precise/debian/control +++ b/contrib/packages/deb/ubuntu-precise/debian/control @@ -9,7 +9,7 @@ Homepage: http://www.tigervnc.com Package: tigervncserver Architecture: any Provides: xserver, vnc-server -Depends: x11-common | xserver-common, x11-utils, xauth, libbz2-1.0, libc6, libfontenc1, libfreetype6, libgcc1, libgl1-mesa-dri, libgnutls28, libjpeg-turbo8, libp11-kit0, libpam0g, libpixman-1-0, libstdc++6, libtasn1-3, libx11-6, libxau6, libxcb1, libxdmcp6, libxext6, libxfont1, libxtst6, zlib1g, libglu1-mesa, libxcursor1, libxinerama1, libxfixes3, x11-xkb-utils +Depends: x11-common | xserver-common, x11-utils, xauth, libbz2-1.0, libc6, libfontenc1, libfreetype6, libgcc1, libgl1-mesa-dri, libgnutls28, libjpeg-turbo8, libp11-kit0, libpam0g, libpixman-1-0, libstdc++6, libtasn1-3, libx11-6, libxau6, libxcb1, libxdmcp6, libxext6, libxfont1, libxtst6, zlib1g, libglu1-mesa, libxcursor1, libxinerama1, libxfixes3, x11-xkb-utils, libgcrypt11 Recommends: xfonts-base, x11-xserver-utils Suggests: xtigervncviewer, tigervnc-java Description: virtual network computing server software diff --git a/contrib/packages/deb/ubuntu-trusty/debian/control b/contrib/packages/deb/ubuntu-trusty/debian/control index ec671034..022f69fa 100644 --- a/contrib/packages/deb/ubuntu-trusty/debian/control +++ b/contrib/packages/deb/ubuntu-trusty/debian/control @@ -9,7 +9,7 @@ Homepage: http://www.tigervnc.com Package: tigervncserver Architecture: any Provides: xserver, vnc-server -Depends: x11-common | xserver-common, x11-utils, xauth, libbz2-1.0, libc6, libfontenc1, libfreetype6, libgcc1, libgl1-mesa-dri, libgnutls28, libjpeg-turbo8, libp11-kit0, libpam0g, libpixman-1-0, libstdc++6, libtasn1-3-bin, libx11-6, libxau6, libxcb1, libxdmcp6, libxext6, libxfont1, libxtst6, zlib1g, libglu1-mesa, libxcursor1, libxinerama1, libxfixes3, x11-xkb-utils +Depends: x11-common | xserver-common, x11-utils, xauth, libbz2-1.0, libc6, libfontenc1, libfreetype6, libgcc1, libgl1-mesa-dri, libgnutls28, libjpeg-turbo8, libp11-kit0, libpam0g, libpixman-1-0, libstdc++6, libtasn1-3-bin, libx11-6, libxau6, libxcb1, libxdmcp6, libxext6, libxfont1, libxtst6, zlib1g, libglu1-mesa, libxcursor1, libxinerama1, libxfixes3, x11-xkb-utils, libgcrypt20 Recommends: xfonts-base, x11-xserver-utils Suggests: xtigervncviewer, tigervnc-java Description: virtual network computing server software diff --git a/contrib/packages/deb/ubuntu-xenial/debian/control b/contrib/packages/deb/ubuntu-xenial/debian/control index 87a78d62..626efeeb 100644 --- a/contrib/packages/deb/ubuntu-xenial/debian/control +++ b/contrib/packages/deb/ubuntu-xenial/debian/control @@ -3,13 +3,13 @@ Section: x11 Priority: optional Maintainer: Brian P. Hinz <bphinz@users.sourceforge.net> Standards-Version: 3.8.4 -Build-Depends: debhelper (>> 7.1), zlib1g-dev, libjpeg-turbo8-dev, libxaw7-dev (>> 4.1.0), perl-modules, xfonts-base, xutils-dev, libx11-dev, libxau-dev, libxext-dev, libxi-dev, libxkbfile-dev, libxmu-dev, libxt-dev, x11proto-core-dev, cmake (>> 2.8), libgnutls-dev, libpam0g-dev, libpng12-dev, automake, autoconf, libtool, pkg-config, libpixman-1-dev, x11proto-bigreqs-dev, x11proto-composite-dev, x11proto-damage-dev, x11proto-dri2-dev, x11proto-fixes-dev, x11proto-fonts-dev, x11proto-gl-dev, x11proto-input-dev, x11proto-kb-dev, x11proto-randr-dev, x11proto-render-dev, x11proto-resource-dev, x11proto-scrnsaver-dev, x11proto-video-dev, x11proto-xext-dev, x11proto-xf86bigfont-dev, x11proto-xf86dga-dev, x11proto-xf86dri-dev, x11proto-xf86vidmode-dev, x11proto-xinerama-dev, libosmesa6-dev, libgl1-mesa-dev, libgl1-mesa-dri, libgl1-mesa-glx, libxfont-dev, x11proto-record-dev, default-jdk, libxtst-dev, libxft-dev, libexpat1-dev, libfontconfig1-dev, libxrender-dev, libpciaccess-dev, curl, bzip2, quilt, libglu1-mesa-dev, libxcursor-dev, libxinerama-dev, libxfixes-dev, libcairo2-dev, x11proto-dri3-dev, libgcrypt20-dev, x11proto-xcmisc-dev, x11proto-present-dev, xorg-server-source, libfltk1.3-dev +Build-Depends: debhelper (>> 7.1), zlib1g-dev, libjpeg-turbo8-dev, libxaw7-dev (>> 4.1.0), perl-modules, xfonts-base, xutils-dev, libx11-dev, libxau-dev, libxext-dev, libxi-dev, libxkbfile-dev, libxmu-dev, libxt-dev, x11proto-core-dev, cmake (>> 2.8), libgnutls-dev, libpam0g-dev, libpng12-dev, automake, autoconf, libtool, pkg-config, libpixman-1-dev, x11proto-bigreqs-dev, x11proto-composite-dev, x11proto-damage-dev, x11proto-dri2-dev, x11proto-fixes-dev, x11proto-fonts-dev, x11proto-gl-dev, x11proto-input-dev, x11proto-kb-dev, x11proto-randr-dev, x11proto-render-dev, x11proto-resource-dev, x11proto-scrnsaver-dev, x11proto-video-dev, x11proto-xext-dev, x11proto-xf86bigfont-dev, x11proto-xf86dga-dev, x11proto-xf86dri-dev, x11proto-xf86vidmode-dev, x11proto-xinerama-dev, libosmesa6-dev, libgl1-mesa-dev, libgl1-mesa-dri, libgl1-mesa-glx, libxfont-dev, x11proto-record-dev, default-jdk, libxtst-dev, libxft-dev, libexpat1-dev, libfontconfig1-dev, libxrender-dev, libpciaccess-dev, curl, bzip2, quilt, libglu1-mesa-dev, libxcursor-dev, libxinerama-dev, libxfixes-dev, libcairo2-dev, x11proto-dri3-dev, libgcrypt20-dev, x11proto-xcmisc-dev, x11proto-present-dev, xorg-server-source, libfltk1.3-dev, fluid Homepage: http://www.tigervnc.com Package: tigervncserver Architecture: any Provides: xserver, vnc-server -Depends: x11-common | xserver-common, x11-utils, xauth, libbz2-1.0, libc6, libfontenc1, libfreetype6, libgcc1, libgl1-mesa-dri, libgnutls30, libjpeg-turbo8, libp11-kit0, libpam0g, libpixman-1-0, libstdc++6, libtasn1-3-bin, libx11-6, libxau6, libxcb1, libxdmcp6, libxext6, libxfont1, libxtst6, zlib1g, libglu1-mesa, libxcursor1, libxinerama1, libxfixes3, x11-xkb-utils +Depends: x11-common | xserver-common, x11-utils, xauth, libbz2-1.0, libc6, libfontenc1, libfreetype6, libgcc1, libgl1-mesa-dri, libgnutls30, libjpeg-turbo8, libp11-kit0, libpam0g, libpixman-1-0, libstdc++6, libtasn1-3-bin, libx11-6, libxau6, libxcb1, libxdmcp6, libxext6, libxfont1, libxtst6, zlib1g, libglu1-mesa, libxcursor1, libxinerama1, libxfixes3, x11-xkb-utils, libgcrypt20 Recommends: xfonts-base, x11-xserver-utils Suggests: xtigervncviewer, tigervnc-java Description: virtual network computing server software diff --git a/contrib/packages/rpm/el6/SPECS/tigervnc.spec b/contrib/packages/rpm/el6/SPECS/tigervnc.spec index 16d1ba57..447eb7fb 100644 --- a/contrib/packages/rpm/el6/SPECS/tigervnc.spec +++ b/contrib/packages/rpm/el6/SPECS/tigervnc.spec @@ -10,7 +10,7 @@ Name: tigervnc Version: @VERSION@ -Release: 4%{?snap:.%{snap}}%{?dist} +Release: 5%{?snap:.%{snap}}%{?dist} Summary: A TigerVNC remote display system Group: User Interface/Desktops @@ -177,7 +177,7 @@ pushd unix/xserver for all in `find . -type f -perm -001`; do chmod -x "$all" done -patch -p1 -b --suffix .vnc < ../xserver115.patch +patch -p1 -b --suffix .vnc < ../xserver117.patch popd %patch16 -p0 -b .man @@ -339,7 +339,7 @@ pushd java -DJAVA_KEY_ALIAS=%{_key_alias} \ -DJAVA_STOREPASS=":env STOREPASS" \ -DJAVA_KEYPASS=":env KEYPASS" \ - -DJAVA_TSA_URL=https://timestamp.geotrust.com/tsa . + -DJAVA_TSA_URL=http://timestamp.geotrust.com/tsa . %endif JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8" make @@ -460,6 +460,9 @@ fi %endif %changelog +* Mon Jun 20 2016 Brian P. Hinz <bphinz@users.sourceforge.net> 1.6.80-5 +- Patch for Xorg 1.17 due to vendor bump of Xorg version + * Sat Apr 02 2016 Brian P. Hinz <bphinz@users.sourceforge.net> 1.6.80-4 - Fixed CVE-2015-8803 CVE-2015-8804 CVE-2015-8805 secp256r1 and secp384r1 bugs diff --git a/contrib/packages/rpm/el7/SPECS/tigervnc.spec b/contrib/packages/rpm/el7/SPECS/tigervnc.spec index c440d983..ac58d5b4 100644 --- a/contrib/packages/rpm/el7/SPECS/tigervnc.spec +++ b/contrib/packages/rpm/el7/SPECS/tigervnc.spec @@ -259,7 +259,7 @@ pushd java -DJAVA_KEY_ALIAS=%{_key_alias} \ -DJAVA_STOREPASS=":env STOREPASS" \ -DJAVA_KEYPASS=":env KEYPASS" \ - -DJAVA_TSA_URL=https://timestamp.geotrust.com/tsa . + -DJAVA_TSA_URL=http://timestamp.geotrust.com/tsa . %endif JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8" make diff --git a/doc/keyboard-test.txt b/doc/keyboard-test.txt index 800faeca..89b5088d 100644 --- a/doc/keyboard-test.txt +++ b/doc/keyboard-test.txt @@ -3,6 +3,15 @@ Test protocol for keyboard handling Platform specific tests/issues are marked with []. +These tests are primarily about what is sent over the protocol and some +may be difficult or impossible to test using normal applications. In +these cases you can turn on debug logging in either the client or the +server by specifying "-Log *:stderr:100". + +We currently have a limitation in Xvnc where it can run out of symbols, +resulting in nothing being sent to the applications. Just run setxkbmap +with any layout to reset the symbol table. + Client ------ @@ -11,74 +20,95 @@ Client - ASCII characters - Latin 1 character - Unicode BMP characters - - Unicode non-BMP characters + - Unicode non-BMP characters (does any layout actually have these?) - Dead keys: + These are not available on a single layout, so you need to switch to + test everything. The useful layouts also differ per platform: + + X11: US International for most, Greek for some specific diacretics + Win: US International, Czech, Greek Polytonic, Vietnamese + OS X: ABC Extended (FIXME: lots of broken keys), + Greek (FIXME: cannot be used with TigerVNC) + - Grave - Acute - Circumflex - Tilde - - Macron + - Macron (FIXME: broken on Win) - Breve - Dot above + - Dot below - Diaeresis - Ring above - Double acute - Caron - Cedilla - Ogonek - - Ypogegrammeni - - Katakana voiced mark - - Katakana semi-voiced mark - - Dialytika tonos + - Ypogegrammeni (iota below) (FIXME: broken on Win) + - Dialytika tonos [Win] (Diaresis on X11, and maybe OS X?) + - Comma above (FIXME: broken on Win) + - Reversed comma above (FIXME: broken on Win) + - Horn [X11?] + - Hook above [Win?] + - Hook below [X11?, Win?] + - Dakuten (Katakana voiced mark) (Only Input Methods layouts?) + - Handakuten (Katakana semi-voiced mark) (Only Input Methods layouts?) - FIXME: Many more that we currently probably don't support - No composition on client - Modifiers: + X11: You can usually toggle Hyper/Super and Compose/Scroll_Lock using + XKB options. + - CapsLock, NumLock (sent but ignored by server) - Shift, Ctrl - Alt, AltGr, Super [Win, X11] (FIXME: AltGr broken on Win) + - Meta [X11] - Left/right identification (FIXME: broken for Shift on Win) - - CmdL => AltL, CmdR => SuperL, AltL => ModeSwitch, AltR => Level3Shift [Mac] + - CmdL => AltL, CmdR => SuperL, AltL => ModeSwitch, AltR => Level3Shift [OS X] - Hyper sends Super [X11] - CapsLock, Shift and AltGr affect symbol lookup - - NumLock affects symbol lookup [Win, X11] - Ctrl does not affect symbol lookup - - Shift inverts NumLock behaviour [X11] - - Shift turns NumLock off, but not on [Win] (FIXME: fake Shifts also sent) - - CtrlL+AltR fake release [Win] - - Ctrl+Alt+any (note behaviour above though) - - Ctrl+AltGr+any (FIXME: broken on Win) + - CtrlL+AltR is fake released to compensate for Windows' AltGr magic [Win] + - Ctrl+Alt+<ANY> sends the same symbol as <ANY> (note behaviour above though) + - Ctrl+AltGr+<ANY> sends the same symbol as AltGr+<ANY> (FIXME: broken on Win) - "Shift press, A press, Shift release, A release" should not send "a release" - Numpad: + - NumLock affects symbol lookup [Win, X11] - Numpad specific symbols are sent - - Affected by NumLock - Decimal key should send Decimal for layouts with . as a symbol, and Separator for layouts with , as a symbol + - Shift inverts NumLock behaviour [X11] + - Shift turns NumLock off, but not on [Win] (FIXME: fake Shifts also sent) - Multimedia keys: + OS X: FIXME: all broken + - Back, Forward, Refresh, Stop - - HomePage, Search, Favourites + - HomePage, Search, Favourites (FIXME: broken on Win) - Mail, Calculator - Volume up, down, mute - Media next, previous, stop, play - - Sleep + - Sleep (FIXME: broken on Win) - FIXME: probably more keys exist - Non-character keys: - - F1-F24 - - Tab, Space, Backspace, Return - - LeftTab sends Tab - - Esc, PrntScrn, ScrollLock, Pause - - Insert, Delete, Home, End, PageUp, PageDown + - F1-F24 (FIXME: F14-F15 broken on OS X) + - Tab, Space, Backspace, Return, Esc + - LeftTab sends Tab [X11?] + - PrntScrn, ScrollLock, Pause [X11, Win] + - Help [X11?, OS X] + - Insert [X11, Win] + - Delete, Home, End, PageUp, PageDown - Arrow keys - Menu - Alt+PrntScrn sends Sys_Req [Win] @@ -93,7 +123,7 @@ Client - Local input methods are disabled/enabled with focus -- System keys should be grabbed in full screen +- System keys should be grabbed in full screen (FIXME: lots missing on Win) The exact keys depends on the system and configuration, but it is usually variants of these: diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt index 887174bb..8fcb64e5 100644 --- a/po/CMakeLists.txt +++ b/po/CMakeLists.txt @@ -1,7 +1,7 @@ # Gettext support - mostly borrowed from the Licq project set(po_FILES - bg da de el eo es fi fr it nl pl pt_BR ru sk sr sv tr uk zh_CN + bg da de el eo es fi fr it nl pl pt_BR ru sk sr sv tr uk vi zh_CN ) if (NOT GETTEXT_MSGMERGE_EXECUTABLE AND NOT GETTEXT_MSGFMT_EXECUTABLE) @@ -1,14 +1,14 @@ # Danish translation of tigervnc. -# Copyright (C) 2015 the TigerVNC Team (msgids) +# Copyright (C) 2016 the TigerVNC Team (msgids) # This file is distributed under the same license as the tigervnc package. -# Joe Hansen <joedalton2@yahoo.dk>, 2015. +# Joe Hansen <joedalton2@yahoo.dk>, 2015, 2016. # msgid "" msgstr "" -"Project-Id-Version: tigervnc 1.5.90\n" +"Project-Id-Version: tigervnc 1.6.90\n" "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" -"POT-Creation-Date: 2015-11-26 11:33+0000\n" -"PO-Revision-Date: 2015-12-08 15:00+0000\n" +"POT-Creation-Date: 2016-07-01 10:15+0000\n" +"PO-Revision-Date: 2016-07-04 15:00+0000\n" "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n" "Language-Team: Danish <dansk@dansk-gruppen.dk>\n" "Language: da\n" @@ -17,108 +17,98 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vncviewer/CConn.cxx:111 +#: vncviewer/CConn.cxx:110 #, c-format msgid "connected to host %s port %d" msgstr "forbundet til værten %s på port %d" -#: vncviewer/CConn.cxx:173 +#: vncviewer/CConn.cxx:169 #, c-format msgid "Desktop name: %.80s" msgstr "Skrivebordsnavn: %.80s" -#: vncviewer/CConn.cxx:178 +#: vncviewer/CConn.cxx:174 #, c-format msgid "Host: %.80s port: %d" msgstr "Vært: %.80s port: %d" -#: vncviewer/CConn.cxx:183 +#: vncviewer/CConn.cxx:179 #, c-format msgid "Size: %d x %d" msgstr "Størrelse: %d x %d" -#: vncviewer/CConn.cxx:191 +#: vncviewer/CConn.cxx:187 #, c-format msgid "Pixel format: %s" msgstr "Billedformat: %s" -#: vncviewer/CConn.cxx:198 +#: vncviewer/CConn.cxx:194 #, c-format msgid "(server default %s)" msgstr "(serverstandard %s)" -#: vncviewer/CConn.cxx:203 +#: vncviewer/CConn.cxx:199 #, c-format msgid "Requested encoding: %s" msgstr "Anmodt kodning: %s" -#: vncviewer/CConn.cxx:208 +#: vncviewer/CConn.cxx:204 #, c-format msgid "Last used encoding: %s" msgstr "Sidst anvendt kodning: %s" -#: vncviewer/CConn.cxx:213 +#: vncviewer/CConn.cxx:209 #, c-format msgid "Line speed estimate: %d kbit/s" msgstr "Linjehastighedsestimat: %d kbit/s" -#: vncviewer/CConn.cxx:218 +#: vncviewer/CConn.cxx:214 #, c-format msgid "Protocol version: %d.%d" msgstr "Protokolversion: %d.%d" -#: vncviewer/CConn.cxx:223 +#: vncviewer/CConn.cxx:219 #, c-format msgid "Security method: %s" msgstr "Sikkerhedsmetode: %s" -#: vncviewer/CConn.cxx:329 +#: vncviewer/CConn.cxx:319 #, c-format msgid "SetDesktopSize failed: %d" msgstr "SetDesktopSize fejlede: %d" -#: vncviewer/CConn.cxx:398 +#: vncviewer/CConn.cxx:411 msgid "Invalid SetColourMapEntries from server!" msgstr "Ugyldig SetColourMapEntries fra server!" -#. TRANSLATORS: Refers to a VNC protocol encoding type -#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451 -#, c-format -msgid "Unknown encoding %d" -msgstr "Ukendt kodning %d" - -#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452 -msgid "Unknown encoding" -msgstr "Ukendt kodning" - -#: vncviewer/CConn.cxx:484 +#: vncviewer/CConn.cxx:485 msgid "Enabling continuous updates" msgstr "Aktiverer fortsættende opdateringer" -#: vncviewer/CConn.cxx:554 +#: vncviewer/CConn.cxx:555 #, c-format msgid "Throughput %d kbit/s - changing to quality %d" msgstr "Gennemløb %d kbit/s - ændrer til kvalitet %d" -#: vncviewer/CConn.cxx:576 +#: vncviewer/CConn.cxx:577 #, c-format msgid "Throughput %d kbit/s - full color is now %s" msgstr "Gennemløb %d kbit/s - fuld farve er nu %s" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "disabled" msgstr "deaktiveret" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "enabled" msgstr "aktiveret" -#: vncviewer/CConn.cxx:588 +#: vncviewer/CConn.cxx:589 #, c-format msgid "Using %s encoding" msgstr "Bruger %s-kodning" -#: vncviewer/CConn.cxx:635 +#: vncviewer/CConn.cxx:636 #, c-format msgid "Using pixel format %s" msgstr "Bruger billedpunktsformat %s" @@ -127,25 +117,25 @@ msgstr "Bruger billedpunktsformat %s" msgid "Invalid geometry specified!" msgstr "Ugyldig geometri angivet!" -#: vncviewer/DesktopWindow.cxx:309 +#: vncviewer/DesktopWindow.cxx:303 msgid "Adjusting window size to avoid accidental full screen request" msgstr "Justerer vinduesstørrelse for at undgå utilsigtet anmodning om fuld skærm" -#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497 -#: vncviewer/DesktopWindow.cxx:510 +#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491 +#: vncviewer/DesktopWindow.cxx:504 msgid "Failure grabbing keyboard" msgstr "Kunne ikke fange tastatur" -#: vncviewer/DesktopWindow.cxx:522 +#: vncviewer/DesktopWindow.cxx:516 msgid "Failure grabbing mouse" msgstr "Kunne ikke fange mus" -#: vncviewer/DesktopWindow.cxx:752 +#: vncviewer/DesktopWindow.cxx:746 msgid "Invalid screen layout computed for resize request!" msgstr "Ugyldig skærmlayout beregnet for anmodning om ny størrelse!" #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48 -#: vncviewer/X11PixelBuffer.cxx:113 +#: vncviewer/X11PixelBuffer.cxx:117 msgid "Not enough memory for framebuffer" msgstr "Ikke nok hukommelse for framebuffer" @@ -162,160 +152,164 @@ msgid "VNC Viewer: Connection Options" msgstr "VNC-fremviser: Forbindelsesindstillinger" #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91 -#: vncviewer/vncviewer.cxx:268 +#: vncviewer/vncviewer.cxx:282 msgid "Cancel" msgstr "Afbryd" -#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267 +#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281 msgid "OK" msgstr "O.k." -#: vncviewer/OptionsDialog.cxx:413 +#: vncviewer/OptionsDialog.cxx:423 msgid "Compression" msgstr "Komprimering" -#: vncviewer/OptionsDialog.cxx:429 +#: vncviewer/OptionsDialog.cxx:439 msgid "Auto select" msgstr "Vælg automatisk" -#: vncviewer/OptionsDialog.cxx:441 +#: vncviewer/OptionsDialog.cxx:451 msgid "Preferred encoding" msgstr "Foretrukken kodning" -#: vncviewer/OptionsDialog.cxx:489 +#: vncviewer/OptionsDialog.cxx:499 msgid "Color level" msgstr "Farveniveau" -#: vncviewer/OptionsDialog.cxx:500 +#: vncviewer/OptionsDialog.cxx:510 msgid "Full (all available colors)" msgstr "Fuld (alle tilgængelige farver)" -#: vncviewer/OptionsDialog.cxx:507 +#: vncviewer/OptionsDialog.cxx:517 msgid "Medium (256 colors)" msgstr "Mellem (256 farver)" -#: vncviewer/OptionsDialog.cxx:514 +#: vncviewer/OptionsDialog.cxx:524 msgid "Low (64 colors)" msgstr "Lav (64 farver)" -#: vncviewer/OptionsDialog.cxx:521 +#: vncviewer/OptionsDialog.cxx:531 msgid "Very low (8 colors)" msgstr "Meget lav (8 farver)" -#: vncviewer/OptionsDialog.cxx:538 +#: vncviewer/OptionsDialog.cxx:548 msgid "Custom compression level:" msgstr "Tilpasset komprimeringsniveau:" -#: vncviewer/OptionsDialog.cxx:544 +#: vncviewer/OptionsDialog.cxx:554 msgid "level (1=fast, 6=best [4-6 are rarely useful])" msgstr "niveau (1=hurtig, 6=bedst [4-6 bruges sjældent])" -#: vncviewer/OptionsDialog.cxx:551 +#: vncviewer/OptionsDialog.cxx:561 msgid "Allow JPEG compression:" msgstr "Tillad JPEG-komprimering:" -#: vncviewer/OptionsDialog.cxx:557 +#: vncviewer/OptionsDialog.cxx:567 msgid "quality (0=poor, 9=best)" msgstr "kvalitet (0=dårlig, 9=bedst)" -#: vncviewer/OptionsDialog.cxx:568 +#: vncviewer/OptionsDialog.cxx:578 msgid "Security" msgstr "Sikkerhed" -#: vncviewer/OptionsDialog.cxx:583 +#: vncviewer/OptionsDialog.cxx:593 msgid "Encryption" msgstr "Kryptering" -#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647 -#: vncviewer/OptionsDialog.cxx:715 +#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657 +#: vncviewer/OptionsDialog.cxx:735 msgid "None" msgstr "Ingen" -#: vncviewer/OptionsDialog.cxx:600 +#: vncviewer/OptionsDialog.cxx:610 msgid "TLS with anonymous certificates" msgstr "TLS med anonyme certifikater" -#: vncviewer/OptionsDialog.cxx:606 +#: vncviewer/OptionsDialog.cxx:616 msgid "TLS with X509 certificates" msgstr "TLS med X509-certifikater" -#: vncviewer/OptionsDialog.cxx:613 +#: vncviewer/OptionsDialog.cxx:623 msgid "Path to X509 CA certificate" msgstr "Sti til X509 CA-certifikat" -#: vncviewer/OptionsDialog.cxx:620 +#: vncviewer/OptionsDialog.cxx:630 msgid "Path to X509 CRL file" msgstr "Sti til X509 CRL-fil" -#: vncviewer/OptionsDialog.cxx:636 +#: vncviewer/OptionsDialog.cxx:646 msgid "Authentication" msgstr "Godkendelse" -#: vncviewer/OptionsDialog.cxx:653 +#: vncviewer/OptionsDialog.cxx:663 msgid "Standard VNC (insecure without encryption)" msgstr "Standard-VNC (usikker uden kryptering)" -#: vncviewer/OptionsDialog.cxx:659 +#: vncviewer/OptionsDialog.cxx:669 msgid "Username and password (insecure without encryption)" msgstr "Bruernavn og adgangskode (usikker uden kryptering)" -#: vncviewer/OptionsDialog.cxx:678 +#: vncviewer/OptionsDialog.cxx:688 msgid "Input" msgstr "Inddata" -#: vncviewer/OptionsDialog.cxx:686 +#: vncviewer/OptionsDialog.cxx:696 msgid "View only (ignore mouse and keyboard)" msgstr "Vis kun (ignorer mus og tastatur)" -#: vncviewer/OptionsDialog.cxx:692 +#: vncviewer/OptionsDialog.cxx:702 msgid "Accept clipboard from server" msgstr "Accepter udklipsholderen fra serveren" -#: vncviewer/OptionsDialog.cxx:698 +#: vncviewer/OptionsDialog.cxx:709 +msgid "Also set primary selection" +msgstr "Angiv også primær markering" + +#: vncviewer/OptionsDialog.cxx:716 msgid "Send clipboard to server" msgstr "Send udklipsholderen til serveren" -#: vncviewer/OptionsDialog.cxx:704 -msgid "Send primary selection and cut buffer as clipboard" -msgstr "Send primær markering og klip mellemlager som udklipsholder" +#: vncviewer/OptionsDialog.cxx:723 +msgid "Send primary selection as clipboard" +msgstr "Send primær markering som udklipsholder" -#: vncviewer/OptionsDialog.cxx:710 +#: vncviewer/OptionsDialog.cxx:730 msgid "Pass system keys directly to server (full screen)" msgstr "Videresend systemnøgler direkte til serveren (fuld skærm)" -#: vncviewer/OptionsDialog.cxx:713 +#: vncviewer/OptionsDialog.cxx:733 msgid "Menu key" msgstr "Menutast" -#: vncviewer/OptionsDialog.cxx:729 +#: vncviewer/OptionsDialog.cxx:749 msgid "Screen" msgstr "Skærm" -#: vncviewer/OptionsDialog.cxx:737 +#: vncviewer/OptionsDialog.cxx:757 msgid "Resize remote session on connect" msgstr "Ændr størrelse for ekstern session ved forbind" -#: vncviewer/OptionsDialog.cxx:750 +#: vncviewer/OptionsDialog.cxx:770 msgid "Resize remote session to the local window" msgstr "Ændr størrelse for ekstern session til det lokale vindue" -#: vncviewer/OptionsDialog.cxx:756 +#: vncviewer/OptionsDialog.cxx:776 msgid "Full-screen mode" msgstr "Tilstand for fuld skærm" -#: vncviewer/OptionsDialog.cxx:762 +#: vncviewer/OptionsDialog.cxx:782 msgid "Enable full-screen mode over all monitors" msgstr "Aktiver tilstand for fuld skærm over alle skærme" -#: vncviewer/OptionsDialog.cxx:771 +#: vncviewer/OptionsDialog.cxx:791 msgid "Misc." msgstr "Div." -#: vncviewer/OptionsDialog.cxx:779 +#: vncviewer/OptionsDialog.cxx:799 msgid "Shared (don't disconnect other viewers)" msgstr "Delt (afbryd ikke andre fremvisere)" -#: vncviewer/OptionsDialog.cxx:785 +#: vncviewer/OptionsDialog.cxx:805 msgid "Show dot when no cursor" msgstr "Vis punktum når ingen markør" @@ -367,112 +361,112 @@ msgstr "Godkendelse afbrudt" msgid "Username:" msgstr "Brugernavn:" -#: vncviewer/Viewport.cxx:433 +#: vncviewer/Viewport.cxx:391 #, c-format msgid "Unable to create platform specific framebuffer: %s" msgstr "Kan ikke oprette platformspecifik framebuffer: %s" -#: vncviewer/Viewport.cxx:434 +#: vncviewer/Viewport.cxx:392 msgid "Using platform independent framebuffer" msgstr "Bruger framebuffer uafhængig af platform" -#: vncviewer/Viewport.cxx:668 +#: vncviewer/Viewport.cxx:628 #, c-format msgid "No scan code for extended virtual key 0x%02x" msgstr "Ingen skanningskode for udvidet virtuel nøgle 0x%02x" -#: vncviewer/Viewport.cxx:670 +#: vncviewer/Viewport.cxx:630 #, c-format msgid "No scan code for virtual key 0x%02x" msgstr "Ingen skanningskode for virtuel nøgle 0x%02x" -#: vncviewer/Viewport.cxx:687 +#: vncviewer/Viewport.cxx:647 #, c-format msgid "No symbol for extended virtual key 0x%02x" msgstr "Intet symbol for udvidet virtuel nøgle 0x%02x" -#: vncviewer/Viewport.cxx:689 +#: vncviewer/Viewport.cxx:649 #, c-format msgid "No symbol for virtual key 0x%02x" msgstr "Intet symbol for virtuel nøgle 0x%02x" -#: vncviewer/Viewport.cxx:727 +#: vncviewer/Viewport.cxx:687 #, c-format msgid "No symbol for key code 0x%02x (in the current state)" msgstr "Intet symbol for nøglekode 0x%02x (i den nuværende tilstand)" -#: vncviewer/Viewport.cxx:753 +#: vncviewer/Viewport.cxx:713 #, c-format msgid "No symbol for key code %d (in the current state)" msgstr "Intet symbol for nøglekode %d (i den nuværende tilstand)" -#: vncviewer/Viewport.cxx:790 +#: vncviewer/Viewport.cxx:750 msgctxt "ContextMenu|" msgid "E&xit viewer" msgstr "&Afslut fremviser" -#: vncviewer/Viewport.cxx:793 +#: vncviewer/Viewport.cxx:753 msgctxt "ContextMenu|" msgid "&Full screen" msgstr "&Fuld skærm" -#: vncviewer/Viewport.cxx:796 +#: vncviewer/Viewport.cxx:756 msgctxt "ContextMenu|" msgid "Minimi&ze" msgstr "&Minimer" -#: vncviewer/Viewport.cxx:798 +#: vncviewer/Viewport.cxx:758 msgctxt "ContextMenu|" msgid "Resize &window to session" msgstr "Ændr størrelse for &vindue til session" -#: vncviewer/Viewport.cxx:803 +#: vncviewer/Viewport.cxx:763 msgctxt "ContextMenu|" msgid "&Ctrl" msgstr "&Ctrl" -#: vncviewer/Viewport.cxx:806 +#: vncviewer/Viewport.cxx:766 msgctxt "ContextMenu|" msgid "&Alt" msgstr "&Alt" -#: vncviewer/Viewport.cxx:812 +#: vncviewer/Viewport.cxx:772 #, c-format msgctxt "ContextMenu|" msgid "Send %s" msgstr "Send %s" -#: vncviewer/Viewport.cxx:818 +#: vncviewer/Viewport.cxx:778 msgctxt "ContextMenu|" msgid "Send Ctrl-Alt-&Del" msgstr "Send Ctrl-Alt-&Slet" -#: vncviewer/Viewport.cxx:821 +#: vncviewer/Viewport.cxx:781 msgctxt "ContextMenu|" msgid "&Refresh screen" msgstr "&Opdater skærm" -#: vncviewer/Viewport.cxx:824 +#: vncviewer/Viewport.cxx:784 msgctxt "ContextMenu|" msgid "&Options..." msgstr "&Indstillinger ..." -#: vncviewer/Viewport.cxx:826 +#: vncviewer/Viewport.cxx:786 msgctxt "ContextMenu|" msgid "Connection &info..." msgstr "Forbindelses&info ..." -#: vncviewer/Viewport.cxx:828 +#: vncviewer/Viewport.cxx:788 msgctxt "ContextMenu|" msgid "About &TigerVNC viewer..." msgstr "Om &TigerVNC-fremviseren ..." -#: vncviewer/Viewport.cxx:831 +#: vncviewer/Viewport.cxx:791 msgctxt "ContextMenu|" msgid "Dismiss &menu" msgstr "Fjern %menu" -#: vncviewer/Viewport.cxx:915 +#: vncviewer/Viewport.cxx:875 msgid "VNC connection info" msgstr "VNC-forbindelsesinfo" @@ -494,123 +488,123 @@ msgstr "BitBlt mislykkedes" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:61 +#: vncviewer/X11PixelBuffer.cxx:65 msgid "Display lacks pixmap format for default depth" msgstr "Skærm mangler pixmap-format for standarddybde" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:72 +#: vncviewer/X11PixelBuffer.cxx:76 msgid "Couldn't find suitable pixmap format" msgstr "Kunne ikke finde et egnet pixmap-format" -#: vncviewer/X11PixelBuffer.cxx:81 +#: vncviewer/X11PixelBuffer.cxx:85 msgid "Only true colour displays supported" msgstr "Kun skærme med »true colour« er understøttet" -#: vncviewer/X11PixelBuffer.cxx:83 +#: vncviewer/X11PixelBuffer.cxx:87 #, c-format msgid "Using default colormap and visual, TrueColor, depth %d." msgstr "Bruger standardfarvekort og visuel, TrueColor, dybde %d." -#: vncviewer/X11PixelBuffer.cxx:109 +#: vncviewer/X11PixelBuffer.cxx:113 msgid "Could not create framebuffer image" msgstr "Kunne ikke oprette framebuffer-billede" -#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313 +#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320 #, c-format msgid "The name of the parameter %s was too large to write to the registry" msgstr "Navnet på parameteren %s var for lang til at kunne skrives til registret" -#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292 +#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299 #, c-format msgid "The parameter %s was too large to write to the registry" msgstr "Parameteren %s var for lang til at kunne skrives til registret" -#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319 +#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326 #, c-format msgid "Failed to write parameter %s of type %s to the registry: %ld" msgstr "Kunne ikke skrive parameteren %s af typen %s til registret: %ld" -#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373 +#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380 #, c-format msgid "The name of the parameter %s was too large to read from the registry" msgstr "Navnet for parameteren %s var for lang til at kunne læses fra registret" -#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382 +#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389 #, c-format msgid "Failed to read parameter %s from the registry: %ld" msgstr "Kunne ikke læse parameteren %s fra registret: %ld" -#: vncviewer/parameters.cxx:352 +#: vncviewer/parameters.cxx:359 #, c-format msgid "The parameter %s was too large to read from the registry" msgstr "Parameteren %s var for lang til at kunne læses fra registret" -#: vncviewer/parameters.cxx:402 +#: vncviewer/parameters.cxx:409 #, c-format msgid "Failed to create registry key: %ld" msgstr "Kunne ikke oprette registernøgle: %ld" -#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465 -#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658 +#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665 #, c-format msgid "Unknown parameter type for parameter %s" msgstr "Ukendt parametertype for parameteren %s" -#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479 #, c-format msgid "Failed to close registry key: %ld" msgstr "Kunne ikke lukke registernøgle: %ld" -#: vncviewer/parameters.cxx:439 +#: vncviewer/parameters.cxx:446 #, c-format msgid "Failed to open registry key: %ld" msgstr "Kunne ikke åbne registernøgle: %ld" -#: vncviewer/parameters.cxx:496 +#: vncviewer/parameters.cxx:503 msgid "Failed to write configuration file, can't obtain home directory path." msgstr "Kunne ikke skrive konfigurationsfil, kan ikke indhente hjemmemappens sti." -#: vncviewer/parameters.cxx:509 +#: vncviewer/parameters.cxx:516 #, c-format msgid "Failed to write configuration file, can't open %s: %s" msgstr "Kunne ikke skrive konfigurationsfil, kan ikke åbne %s: %s" -#: vncviewer/parameters.cxx:552 +#: vncviewer/parameters.cxx:559 msgid "Failed to read configuration file, can't obtain home directory path." msgstr "Kunne ikke læse konfigurationsfil, kan ikke indhente hjemmemappens sti." -#: vncviewer/parameters.cxx:565 +#: vncviewer/parameters.cxx:572 #, c-format msgid "Failed to read configuration file, can't open %s: %s" msgstr "Kunne ikke læse konfigurationsfil, kan ikke åbne %s: %s" -#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583 -#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621 -#: vncviewer/parameters.cxx:637 +#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590 +#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628 +#: vncviewer/parameters.cxx:644 #, c-format msgid "Failed to read line %d in file %s: %s" msgstr "Kunne ikke læse linje %d i filen %s: %s" -#: vncviewer/parameters.cxx:584 +#: vncviewer/parameters.cxx:591 msgid "Line too long" msgstr "Linjen er for lang" -#: vncviewer/parameters.cxx:591 +#: vncviewer/parameters.cxx:598 #, c-format msgid "Configuration file %s is in an invalid format" msgstr "Konfigurationsfilen %s er i et ugyldigt format" -#: vncviewer/parameters.cxx:609 +#: vncviewer/parameters.cxx:616 msgid "Invalid format" msgstr "Ugyldigt format" -#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638 +#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645 msgid "Invalid format or too large value" msgstr "Ugyldigt format eller for stor værdi" -#: vncviewer/parameters.cxx:665 +#: vncviewer/parameters.cxx:672 #, c-format msgid "Unknown parameter %s on line %d in file %s" msgstr "Ukendt parameter %s på linje %d i filen %s" @@ -632,86 +626,92 @@ msgstr "" msgid "About TigerVNC Viewer" msgstr "Om TigerVNC-fremviseren" -#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156 +#: vncviewer/vncviewer.cxx:140 +msgid "Internal FLTK error. Exiting." +msgstr "Intern FLTK-fejl. Afbryder." + +#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170 #, c-format msgid "Error starting new TigerVNC Viewer: %s" msgstr "Fejl ved start af ny TigerVNC-fremviser: %s" -#: vncviewer/vncviewer.cxx:165 +#: vncviewer/vncviewer.cxx:179 #, c-format msgid "Termination signal %d has been received. TigerVNC Viewer will now exit." msgstr "Opsigelsessignalet %d er blevet modtaget. TigerVNC-fremviseren vil nu afslutte." -#: vncviewer/vncviewer.cxx:257 +#: vncviewer/vncviewer.cxx:271 msgid "TigerVNC Viewer" msgstr "TigerVNC-fremviser" -#: vncviewer/vncviewer.cxx:265 +#: vncviewer/vncviewer.cxx:279 msgid "No" msgstr "Nej" -#: vncviewer/vncviewer.cxx:266 +#: vncviewer/vncviewer.cxx:280 msgid "Yes" msgstr "Ja" -#: vncviewer/vncviewer.cxx:269 +#: vncviewer/vncviewer.cxx:283 msgid "Close" msgstr "Luk" -#: vncviewer/vncviewer.cxx:274 +#: vncviewer/vncviewer.cxx:288 msgid "About" msgstr "Om" -#: vncviewer/vncviewer.cxx:277 +#: vncviewer/vncviewer.cxx:291 msgid "Hide" msgstr "Skjul" -#: vncviewer/vncviewer.cxx:280 +#: vncviewer/vncviewer.cxx:294 msgid "Quit" msgstr "Afslut" -#: vncviewer/vncviewer.cxx:284 +#: vncviewer/vncviewer.cxx:298 msgid "Services" msgstr "Tjenester" -#: vncviewer/vncviewer.cxx:285 +#: vncviewer/vncviewer.cxx:299 msgid "Hide Others" msgstr "Skjul andre" -#: vncviewer/vncviewer.cxx:286 +#: vncviewer/vncviewer.cxx:300 msgid "Show All" msgstr "Vis alle" -#: vncviewer/vncviewer.cxx:295 +#: vncviewer/vncviewer.cxx:309 msgctxt "SysMenu|" msgid "&File" msgstr "&Fil" -#: vncviewer/vncviewer.cxx:298 +#: vncviewer/vncviewer.cxx:312 msgctxt "SysMenu|File|" msgid "&New Connection" msgstr "&Ny forbindelse" -#: vncviewer/vncviewer.cxx:310 +#: vncviewer/vncviewer.cxx:324 msgid "Could not create VNC home directory: can't obtain home directory path." msgstr "Kunne ikke oprette VNC-hjemmemappen: Kan ikke indhente hjemmemappens sti." -#: vncviewer/vncviewer.cxx:315 +#: vncviewer/vncviewer.cxx:329 #, c-format msgid "Could not create VNC home directory: %s." msgstr "Kunne ikke oprette VNC-hjemmemappe: %s." #. TRANSLATORS: "Parameters" are command line arguments, or settings #. from a file or the Windows registry. -#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521 +#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535 msgid "Parameters -listen and -via are incompatible" msgstr "Parameterne -listen og -via er ikke kompatible" -#: vncviewer/vncviewer.cxx:536 +#: vncviewer/vncviewer.cxx:550 #, c-format msgid "Listening on port %d" msgstr "Lytter på port %d" -#: vncviewer/vncviewer.cxx:601 -msgid "Internal FLTK error. Exiting." -msgstr "Intern FLTK-fejl. Afbryder." +#~ msgid "Unknown encoding %d" +#~ msgstr "Ukendt kodning %d" + +#~ msgid "Unknown encoding" +#~ msgstr "Ukendt kodning" @@ -2,13 +2,13 @@ # Copyright (C) 2014 the TigerVNC Team (msgids) # This file is distributed under the same license as the tigervnc package. # Klaus Franken <Klaus.Franken@StrukturPunkt.de>, 2005. -# Mario Blättermann <mario.blaettermann@gmail.com>, 2014, 2015. +# Mario Blättermann <mario.blaettermann@gmail.com>, 2014, 2015, 2016. msgid "" msgstr "" -"Project-Id-Version: tigervnc 1.5.90\n" +"Project-Id-Version: tigervnc 1.6.90\n" "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" -"POT-Creation-Date: 2015-11-26 11:33+0000\n" -"PO-Revision-Date: 2015-12-05 22:02+0100\n" +"POT-Creation-Date: 2016-07-01 10:15+0000\n" +"PO-Revision-Date: 2016-07-07 22:49+0200\n" "Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language: de\n" @@ -16,110 +16,100 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.8.5\n" +"X-Generator: Poedit 1.8.7.1\n" -#: vncviewer/CConn.cxx:111 +#: vncviewer/CConn.cxx:110 #, c-format msgid "connected to host %s port %d" msgstr "verbunden mit Rechner %s, Port %d" -#: vncviewer/CConn.cxx:173 +#: vncviewer/CConn.cxx:169 #, c-format msgid "Desktop name: %.80s" msgstr "Desktop-Name: %.80s" -#: vncviewer/CConn.cxx:178 +#: vncviewer/CConn.cxx:174 #, c-format msgid "Host: %.80s port: %d" msgstr "Rechner: %.80s Port: %d" -#: vncviewer/CConn.cxx:183 +#: vncviewer/CConn.cxx:179 #, c-format msgid "Size: %d x %d" msgstr "Größe: %d x %d" -#: vncviewer/CConn.cxx:191 +#: vncviewer/CConn.cxx:187 #, c-format msgid "Pixel format: %s" msgstr "Pixelformat: %s" -#: vncviewer/CConn.cxx:198 +#: vncviewer/CConn.cxx:194 #, c-format msgid "(server default %s)" msgstr "(Server-Vorgabe %s)" -#: vncviewer/CConn.cxx:203 +#: vncviewer/CConn.cxx:199 #, c-format msgid "Requested encoding: %s" msgstr "Angeforderte Zeichenkodierung: %s" -#: vncviewer/CConn.cxx:208 +#: vncviewer/CConn.cxx:204 #, c-format msgid "Last used encoding: %s" msgstr "Zuletzt verwendete Zeichenkodierung: %s" -#: vncviewer/CConn.cxx:213 +#: vncviewer/CConn.cxx:209 #, c-format msgid "Line speed estimate: %d kbit/s" msgstr "Geschätzte Verbindungsgeschwindigkeit: %d kbit/s" -#: vncviewer/CConn.cxx:218 +#: vncviewer/CConn.cxx:214 #, c-format msgid "Protocol version: %d.%d" msgstr "Protokollversion: %d.%d" -#: vncviewer/CConn.cxx:223 +#: vncviewer/CConn.cxx:219 #, c-format msgid "Security method: %s" msgstr "Sicherheitsmethode: %s" -#: vncviewer/CConn.cxx:329 +#: vncviewer/CConn.cxx:319 #, c-format msgid "SetDesktopSize failed: %d" msgstr "SetDesktopSize fehlgeschlagen: %d" -#: vncviewer/CConn.cxx:398 +#: vncviewer/CConn.cxx:411 msgid "Invalid SetColourMapEntries from server!" msgstr "Ungültige SetColourMapEntries vom Server!" -#. TRANSLATORS: Refers to a VNC protocol encoding type -#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451 -#, c-format -msgid "Unknown encoding %d" -msgstr "Unbekannte Kodierung %d" - -#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452 -msgid "Unknown encoding" -msgstr "Unbekannte Kodierung" - -#: vncviewer/CConn.cxx:484 +#: vncviewer/CConn.cxx:485 msgid "Enabling continuous updates" msgstr "Fortlaufende Aktualisierungen aktivieren" -#: vncviewer/CConn.cxx:554 +#: vncviewer/CConn.cxx:555 #, c-format msgid "Throughput %d kbit/s - changing to quality %d" msgstr "Durchsatz %d kbit/s - Qualität wird auf %d geändert" -#: vncviewer/CConn.cxx:576 +#: vncviewer/CConn.cxx:577 #, c-format msgid "Throughput %d kbit/s - full color is now %s" msgstr "Durchsatz %d kbit/s - Vollfarbmodus ist jetzt %s" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "disabled" msgstr "deaktiviert" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "enabled" msgstr "aktiviert" -#: vncviewer/CConn.cxx:588 +#: vncviewer/CConn.cxx:589 #, c-format msgid "Using %s encoding" msgstr "%s-Verschlüsselung wird verwendet" -#: vncviewer/CConn.cxx:635 +#: vncviewer/CConn.cxx:636 #, c-format msgid "Using pixel format %s" msgstr "Pixelformat %s wird verwendet" @@ -128,25 +118,25 @@ msgstr "Pixelformat %s wird verwendet" msgid "Invalid geometry specified!" msgstr "Unzulässige Geometrie wurde angegeben!" -#: vncviewer/DesktopWindow.cxx:309 +#: vncviewer/DesktopWindow.cxx:303 msgid "Adjusting window size to avoid accidental full screen request" msgstr "Fenstergröße anpassen, um zufällige Vollbild-Anforderung zu vermeiden" -#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497 -#: vncviewer/DesktopWindow.cxx:510 +#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491 +#: vncviewer/DesktopWindow.cxx:504 msgid "Failure grabbing keyboard" msgstr "Fehler beim Erkennen der Tastatur" -#: vncviewer/DesktopWindow.cxx:522 +#: vncviewer/DesktopWindow.cxx:516 msgid "Failure grabbing mouse" msgstr "Fehler beim Erkennen der Maus" -#: vncviewer/DesktopWindow.cxx:752 +#: vncviewer/DesktopWindow.cxx:746 msgid "Invalid screen layout computed for resize request!" msgstr "Ungültige Bildschirmanordnung wurde für die Größenänderungsanforderung ermittelt!" #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48 -#: vncviewer/X11PixelBuffer.cxx:113 +#: vncviewer/X11PixelBuffer.cxx:117 msgid "Not enough memory for framebuffer" msgstr "Nicht genügend Speicher für Framebuffer" @@ -163,160 +153,164 @@ msgid "VNC Viewer: Connection Options" msgstr "VNC-Betrachter: Verbindungsoptionen" #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91 -#: vncviewer/vncviewer.cxx:268 +#: vncviewer/vncviewer.cxx:282 msgid "Cancel" msgstr "Abbrechen" -#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267 +#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281 msgid "OK" msgstr "OK" -#: vncviewer/OptionsDialog.cxx:413 +#: vncviewer/OptionsDialog.cxx:423 msgid "Compression" msgstr "Kompression" -#: vncviewer/OptionsDialog.cxx:429 +#: vncviewer/OptionsDialog.cxx:439 msgid "Auto select" msgstr "Automatisch auswählen" -#: vncviewer/OptionsDialog.cxx:441 +#: vncviewer/OptionsDialog.cxx:451 msgid "Preferred encoding" msgstr "Bevorzugte Kodierung" -#: vncviewer/OptionsDialog.cxx:489 +#: vncviewer/OptionsDialog.cxx:499 msgid "Color level" msgstr "Farbstufe" -#: vncviewer/OptionsDialog.cxx:500 +#: vncviewer/OptionsDialog.cxx:510 msgid "Full (all available colors)" msgstr "Voll (alle verfügbaren Farben)" -#: vncviewer/OptionsDialog.cxx:507 +#: vncviewer/OptionsDialog.cxx:517 msgid "Medium (256 colors)" msgstr "Mittel (256 Farben)" -#: vncviewer/OptionsDialog.cxx:514 +#: vncviewer/OptionsDialog.cxx:524 msgid "Low (64 colors)" msgstr "Niedrig (64 Farben)" -#: vncviewer/OptionsDialog.cxx:521 +#: vncviewer/OptionsDialog.cxx:531 msgid "Very low (8 colors)" msgstr "Sehr gering (8 Farben)" -#: vncviewer/OptionsDialog.cxx:538 +#: vncviewer/OptionsDialog.cxx:548 msgid "Custom compression level:" msgstr "Individuelle Kompressionsstufe:" -#: vncviewer/OptionsDialog.cxx:544 +#: vncviewer/OptionsDialog.cxx:554 msgid "level (1=fast, 6=best [4-6 are rarely useful])" msgstr "Stufe (1=schnell, 9=beste) [4-6 sind selten sinnvoll]" -#: vncviewer/OptionsDialog.cxx:551 +#: vncviewer/OptionsDialog.cxx:561 msgid "Allow JPEG compression:" msgstr "JPEG-Kompression erlauben:" -#: vncviewer/OptionsDialog.cxx:557 +#: vncviewer/OptionsDialog.cxx:567 msgid "quality (0=poor, 9=best)" msgstr "Qualität (0=schlechte, 9=beste)" -#: vncviewer/OptionsDialog.cxx:568 +#: vncviewer/OptionsDialog.cxx:578 msgid "Security" msgstr "Sicherheit" -#: vncviewer/OptionsDialog.cxx:583 +#: vncviewer/OptionsDialog.cxx:593 msgid "Encryption" msgstr "Verschlüsselung" -#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647 -#: vncviewer/OptionsDialog.cxx:715 +#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657 +#: vncviewer/OptionsDialog.cxx:735 msgid "None" msgstr "Keine" -#: vncviewer/OptionsDialog.cxx:600 +#: vncviewer/OptionsDialog.cxx:610 msgid "TLS with anonymous certificates" msgstr "TLS mit anonymen Zertifikaten" -#: vncviewer/OptionsDialog.cxx:606 +#: vncviewer/OptionsDialog.cxx:616 msgid "TLS with X509 certificates" msgstr "TLS mit X509-Zertifikaten" -#: vncviewer/OptionsDialog.cxx:613 +#: vncviewer/OptionsDialog.cxx:623 msgid "Path to X509 CA certificate" msgstr "Pfad zum X509-CA-Zertifikat" -#: vncviewer/OptionsDialog.cxx:620 +#: vncviewer/OptionsDialog.cxx:630 msgid "Path to X509 CRL file" msgstr "Pfad zur X509-CRL-Datei" -#: vncviewer/OptionsDialog.cxx:636 +#: vncviewer/OptionsDialog.cxx:646 msgid "Authentication" msgstr "Authentifizierung" -#: vncviewer/OptionsDialog.cxx:653 +#: vncviewer/OptionsDialog.cxx:663 msgid "Standard VNC (insecure without encryption)" msgstr "Standard-VNC (unsicher ohne Verschlüsselung)" -#: vncviewer/OptionsDialog.cxx:659 +#: vncviewer/OptionsDialog.cxx:669 msgid "Username and password (insecure without encryption)" msgstr "Benutzername und Passwort (unsicher ohne Verschlüsselung)" -#: vncviewer/OptionsDialog.cxx:678 +#: vncviewer/OptionsDialog.cxx:688 msgid "Input" msgstr "Eingabe" -#: vncviewer/OptionsDialog.cxx:686 +#: vncviewer/OptionsDialog.cxx:696 msgid "View only (ignore mouse and keyboard)" msgstr "Nur Ansicht (Maus und Tastatur ignorieren)" -#: vncviewer/OptionsDialog.cxx:692 +#: vncviewer/OptionsDialog.cxx:702 msgid "Accept clipboard from server" msgstr "Zwischenablage vom Server akzeptieren" -#: vncviewer/OptionsDialog.cxx:698 +#: vncviewer/OptionsDialog.cxx:709 +msgid "Also set primary selection" +msgstr "Primäre Auswahl ebenfalls setzen" + +#: vncviewer/OptionsDialog.cxx:716 msgid "Send clipboard to server" msgstr "Zwischenablage zum Server senden" -#: vncviewer/OptionsDialog.cxx:704 -msgid "Send primary selection and cut buffer as clipboard" -msgstr "Primäre Auswahl und Ausschneidepuffer als Zwischenablage senden" +#: vncviewer/OptionsDialog.cxx:723 +msgid "Send primary selection as clipboard" +msgstr "Primäre Auswahl als Zwischenablage senden" -#: vncviewer/OptionsDialog.cxx:710 +#: vncviewer/OptionsDialog.cxx:730 msgid "Pass system keys directly to server (full screen)" msgstr "Systemtasten direkt an den Server übergeben (Vollbild)" -#: vncviewer/OptionsDialog.cxx:713 +#: vncviewer/OptionsDialog.cxx:733 msgid "Menu key" msgstr "Menü-Taste" -#: vncviewer/OptionsDialog.cxx:729 +#: vncviewer/OptionsDialog.cxx:749 msgid "Screen" msgstr "Bildschirm" -#: vncviewer/OptionsDialog.cxx:737 +#: vncviewer/OptionsDialog.cxx:757 msgid "Resize remote session on connect" msgstr "Ferne Sitzung beim Verbinden an das lokale Fenster anpassen" -#: vncviewer/OptionsDialog.cxx:750 +#: vncviewer/OptionsDialog.cxx:770 msgid "Resize remote session to the local window" msgstr "Ferne Sitzung an das lokale Fenster anpassen" -#: vncviewer/OptionsDialog.cxx:756 +#: vncviewer/OptionsDialog.cxx:776 msgid "Full-screen mode" msgstr "Vollbildmodus" -#: vncviewer/OptionsDialog.cxx:762 +#: vncviewer/OptionsDialog.cxx:782 msgid "Enable full-screen mode over all monitors" msgstr "Vollbildmodus für alle Monitore aktivieren" -#: vncviewer/OptionsDialog.cxx:771 +#: vncviewer/OptionsDialog.cxx:791 msgid "Misc." msgstr "Sonstiges" -#: vncviewer/OptionsDialog.cxx:779 +#: vncviewer/OptionsDialog.cxx:799 msgid "Shared (don't disconnect other viewers)" msgstr "Gemeinsamer Zugriff (andere VNC-Viewer nicht trennen)" -#: vncviewer/OptionsDialog.cxx:785 +#: vncviewer/OptionsDialog.cxx:805 msgid "Show dot when no cursor" msgstr "Punkt zeigen, wenn kein Cursor" @@ -368,112 +362,112 @@ msgstr "Authentifizierung abgebrochen" msgid "Username:" msgstr "Benutzername:" -#: vncviewer/Viewport.cxx:433 +#: vncviewer/Viewport.cxx:391 #, c-format msgid "Unable to create platform specific framebuffer: %s" msgstr "Plattformspezifischer Framebuffer konnte nicht erstellt werden: %s" -#: vncviewer/Viewport.cxx:434 +#: vncviewer/Viewport.cxx:392 msgid "Using platform independent framebuffer" msgstr "Plattformunabhängiger Framebuffer wird verwendet" -#: vncviewer/Viewport.cxx:668 +#: vncviewer/Viewport.cxx:628 #, c-format msgid "No scan code for extended virtual key 0x%02x" msgstr "Kein Scan-Code für erweiterte virtuelle Taste 0x%02x" -#: vncviewer/Viewport.cxx:670 +#: vncviewer/Viewport.cxx:630 #, c-format msgid "No scan code for virtual key 0x%02x" msgstr "Kein Scan-Code für virtuelle Taste 0x%02x" -#: vncviewer/Viewport.cxx:687 +#: vncviewer/Viewport.cxx:647 #, c-format msgid "No symbol for extended virtual key 0x%02x" msgstr "Kein Symbol für erweiterte virtuelle Taste 0x%02x" -#: vncviewer/Viewport.cxx:689 +#: vncviewer/Viewport.cxx:649 #, c-format msgid "No symbol for virtual key 0x%02x" msgstr "Kein Symbol für virtuelle Taste 0x%02x" -#: vncviewer/Viewport.cxx:727 +#: vncviewer/Viewport.cxx:687 #, c-format msgid "No symbol for key code 0x%02x (in the current state)" msgstr "Kein Symbol für Tastencode 0x%02x (im aktuellen Zustand)" -#: vncviewer/Viewport.cxx:753 +#: vncviewer/Viewport.cxx:713 #, c-format msgid "No symbol for key code %d (in the current state)" msgstr "Kein Symbol für Tastencode %d (im aktuellen Zustand)" -#: vncviewer/Viewport.cxx:790 +#: vncviewer/Viewport.cxx:750 msgctxt "ContextMenu|" msgid "E&xit viewer" msgstr "Betrachter be&enden" -#: vncviewer/Viewport.cxx:793 +#: vncviewer/Viewport.cxx:753 msgctxt "ContextMenu|" msgid "&Full screen" msgstr "&Vollbildmodus" -#: vncviewer/Viewport.cxx:796 +#: vncviewer/Viewport.cxx:756 msgctxt "ContextMenu|" msgid "Minimi&ze" msgstr "M&inimieren" -#: vncviewer/Viewport.cxx:798 +#: vncviewer/Viewport.cxx:758 msgctxt "ContextMenu|" msgid "Resize &window to session" msgstr "&Fenster an Sitzung anpassen" -#: vncviewer/Viewport.cxx:803 +#: vncviewer/Viewport.cxx:763 msgctxt "ContextMenu|" msgid "&Ctrl" msgstr "&Strg" -#: vncviewer/Viewport.cxx:806 +#: vncviewer/Viewport.cxx:766 msgctxt "ContextMenu|" msgid "&Alt" msgstr "&Alt" -#: vncviewer/Viewport.cxx:812 +#: vncviewer/Viewport.cxx:772 #, c-format msgctxt "ContextMenu|" msgid "Send %s" msgstr "%s senden" -#: vncviewer/Viewport.cxx:818 +#: vncviewer/Viewport.cxx:778 msgctxt "ContextMenu|" msgid "Send Ctrl-Alt-&Del" msgstr "Strg-Alt-E&ntf senden" -#: vncviewer/Viewport.cxx:821 +#: vncviewer/Viewport.cxx:781 msgctxt "ContextMenu|" msgid "&Refresh screen" msgstr "Bildschirm &aktualisieren" -#: vncviewer/Viewport.cxx:824 +#: vncviewer/Viewport.cxx:784 msgctxt "ContextMenu|" msgid "&Options..." msgstr "&Optionen …" -#: vncviewer/Viewport.cxx:826 +#: vncviewer/Viewport.cxx:786 msgctxt "ContextMenu|" msgid "Connection &info..." msgstr "Verbindungs&informationen …" -#: vncviewer/Viewport.cxx:828 +#: vncviewer/Viewport.cxx:788 msgctxt "ContextMenu|" msgid "About &TigerVNC viewer..." msgstr "Info zu &TigerVNC-Betrachter …" -#: vncviewer/Viewport.cxx:831 +#: vncviewer/Viewport.cxx:791 msgctxt "ContextMenu|" msgid "Dismiss &menu" msgstr "Menü &verlassen" -#: vncviewer/Viewport.cxx:915 +#: vncviewer/Viewport.cxx:875 msgid "VNC connection info" msgstr "VNC-Verbindungsinformation" @@ -495,123 +489,123 @@ msgstr "BitBlt fehlgeschlagen" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:61 +#: vncviewer/X11PixelBuffer.cxx:65 msgid "Display lacks pixmap format for default depth" msgstr "Anzeige hat kein Pixmap-Format für die vorgegebene Tiefe" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:72 +#: vncviewer/X11PixelBuffer.cxx:76 msgid "Couldn't find suitable pixmap format" msgstr "Es konnte kein geeignetes Pixmap-Format gefunden werden" -#: vncviewer/X11PixelBuffer.cxx:81 +#: vncviewer/X11PixelBuffer.cxx:85 msgid "Only true colour displays supported" msgstr "Nur True-Color-Anzeigen werden unterstützt" -#: vncviewer/X11PixelBuffer.cxx:83 +#: vncviewer/X11PixelBuffer.cxx:87 #, c-format msgid "Using default colormap and visual, TrueColor, depth %d." msgstr "Vorgegebene Farbzuweisung und Anzeige wird verwendet,Tiefe %d." -#: vncviewer/X11PixelBuffer.cxx:109 +#: vncviewer/X11PixelBuffer.cxx:113 msgid "Could not create framebuffer image" msgstr "Framebuffer-Image konnte nicht erstellt werden" -#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313 +#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320 #, c-format msgid "The name of the parameter %s was too large to write to the registry" msgstr "Der Parameterwert %s war beim Schreiben in die Registrierungsdatenbank zu groß" -#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292 +#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299 #, c-format msgid "The parameter %s was too large to write to the registry" msgstr "Der Parameterwert %s war zu groß zum Schreiben in die Registrierungsdatenbank." -#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319 +#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326 #, c-format msgid "Failed to write parameter %s of type %s to the registry: %ld" msgstr "Der Parameterwert %s des Typs %s konnte nicht in die Registrierungsdatenbank geschrieben werden: %ld" -#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373 +#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380 #, c-format msgid "The name of the parameter %s was too large to read from the registry" msgstr "Der Parametername %s war zu groß zum Lesen aus der Registrierungsdatenbank." -#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382 +#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389 #, c-format msgid "Failed to read parameter %s from the registry: %ld" msgstr "Der Parameter %s konnte nicht aus der Registrierungsdatenbank gelesen werden %ld" -#: vncviewer/parameters.cxx:352 +#: vncviewer/parameters.cxx:359 #, c-format msgid "The parameter %s was too large to read from the registry" msgstr "Der Parameterwert %s war zu groß zum Lesen aus der Registrierungsdatenbank." -#: vncviewer/parameters.cxx:402 +#: vncviewer/parameters.cxx:409 #, c-format msgid "Failed to create registry key: %ld" msgstr "Registrierungsschlüssel konnte nicht erzeugt werden: %ld" -#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465 -#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658 +#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665 #, c-format msgid "Unknown parameter type for parameter %s" msgstr "Unbekannter Parametertyp für Parameter %s" -#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479 #, c-format msgid "Failed to close registry key: %ld" msgstr "Registrierungsschlüssel konnte nicht geschlossen werden: %ld" -#: vncviewer/parameters.cxx:439 +#: vncviewer/parameters.cxx:446 #, c-format msgid "Failed to open registry key: %ld" msgstr "Registrierungsschlüssel konnte nicht geöffnet werden: %ld" -#: vncviewer/parameters.cxx:496 +#: vncviewer/parameters.cxx:503 msgid "Failed to write configuration file, can't obtain home directory path." msgstr "Konfigurationsdatei konnte nicht geschrieben werden, auf Benutzerverzeichnispfad kann nicht zugegriffen werden." -#: vncviewer/parameters.cxx:509 +#: vncviewer/parameters.cxx:516 #, c-format msgid "Failed to write configuration file, can't open %s: %s" msgstr "Konfigurationsdatei kann nicht geschrieben werden, %s lässt sich nicht öffnen: %s" -#: vncviewer/parameters.cxx:552 +#: vncviewer/parameters.cxx:559 msgid "Failed to read configuration file, can't obtain home directory path." msgstr "Konfigurationsdatei konnte nicht gelesen werden, auf Benutzerverzeichnispfad kann nicht zugegriffen werden." -#: vncviewer/parameters.cxx:565 +#: vncviewer/parameters.cxx:572 #, c-format msgid "Failed to read configuration file, can't open %s: %s" msgstr "Konfigurationsdatei kann nicht gelesen werden, %s lässt sich nicht öffnen: %s" -#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583 -#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621 -#: vncviewer/parameters.cxx:637 +#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590 +#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628 +#: vncviewer/parameters.cxx:644 #, c-format msgid "Failed to read line %d in file %s: %s" msgstr "Zeile %d in Datei %s konnte nicht gelesen werden: %s" -#: vncviewer/parameters.cxx:584 +#: vncviewer/parameters.cxx:591 msgid "Line too long" msgstr "Zeile ist zu lang" -#: vncviewer/parameters.cxx:591 +#: vncviewer/parameters.cxx:598 #, c-format msgid "Configuration file %s is in an invalid format" msgstr "Format der Konfigurationsdatei %s ist ungültig" -#: vncviewer/parameters.cxx:609 +#: vncviewer/parameters.cxx:616 msgid "Invalid format" msgstr "Ungültiges Format" -#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638 +#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645 msgid "Invalid format or too large value" msgstr "Ungültiges Format oder zu großer Wert" -#: vncviewer/parameters.cxx:665 +#: vncviewer/parameters.cxx:672 #, c-format msgid "Unknown parameter %s on line %d in file %s" msgstr "Ungültiger Parametername %s in Zeile %d in Datei %s" @@ -634,89 +628,95 @@ msgstr "" msgid "About TigerVNC Viewer" msgstr "Info zu TigerVNC-Betrachter" -#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156 +#: vncviewer/vncviewer.cxx:140 +msgid "Internal FLTK error. Exiting." +msgstr "Interner FLTK-Fehler. Abbruch." + +#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170 #, c-format msgid "Error starting new TigerVNC Viewer: %s" msgstr "Fehler beim Starten des neuen TigerVNC-Betrachters: %s" -#: vncviewer/vncviewer.cxx:165 +#: vncviewer/vncviewer.cxx:179 #, c-format msgid "Termination signal %d has been received. TigerVNC Viewer will now exit." msgstr "Terminierungssignal %d wurde empfangen. Der TigerVNC-Betrachter wird nun beendet." -#: vncviewer/vncviewer.cxx:257 +#: vncviewer/vncviewer.cxx:271 msgid "TigerVNC Viewer" msgstr "TigerVNC-Betrachter" -#: vncviewer/vncviewer.cxx:265 +#: vncviewer/vncviewer.cxx:279 msgid "No" msgstr "Nein" -#: vncviewer/vncviewer.cxx:266 +#: vncviewer/vncviewer.cxx:280 msgid "Yes" msgstr "Ja" -#: vncviewer/vncviewer.cxx:269 +#: vncviewer/vncviewer.cxx:283 msgid "Close" msgstr "Schließen" -#: vncviewer/vncviewer.cxx:274 +#: vncviewer/vncviewer.cxx:288 msgid "About" msgstr "Info" -#: vncviewer/vncviewer.cxx:277 +#: vncviewer/vncviewer.cxx:291 msgid "Hide" msgstr "Verbergen" -#: vncviewer/vncviewer.cxx:280 +#: vncviewer/vncviewer.cxx:294 msgid "Quit" msgstr "Beenden" -#: vncviewer/vncviewer.cxx:284 +#: vncviewer/vncviewer.cxx:298 msgid "Services" msgstr "Dienste" -#: vncviewer/vncviewer.cxx:285 +#: vncviewer/vncviewer.cxx:299 msgid "Hide Others" msgstr "Andere verbergen" -#: vncviewer/vncviewer.cxx:286 +#: vncviewer/vncviewer.cxx:300 msgid "Show All" msgstr "Alle zeigen" -#: vncviewer/vncviewer.cxx:295 +#: vncviewer/vncviewer.cxx:309 msgctxt "SysMenu|" msgid "&File" msgstr "&Datei" -#: vncviewer/vncviewer.cxx:298 +#: vncviewer/vncviewer.cxx:312 msgctxt "SysMenu|File|" msgid "&New Connection" msgstr "&Neue Verbindung" -#: vncviewer/vncviewer.cxx:310 +#: vncviewer/vncviewer.cxx:324 msgid "Could not create VNC home directory: can't obtain home directory path." msgstr "VNC-Benutzerverzeichnis konnte nicht angelegt werden: auf Benutzerverzeichnispfad kann nicht zugegriffen werden." -#: vncviewer/vncviewer.cxx:315 +#: vncviewer/vncviewer.cxx:329 #, c-format msgid "Could not create VNC home directory: %s." msgstr "VNC-Benutzerverzeichnis konnte nicht erstellt werden: %s." #. TRANSLATORS: "Parameters" are command line arguments, or settings #. from a file or the Windows registry. -#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521 +#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535 msgid "Parameters -listen and -via are incompatible" msgstr "Die Parameter -listen und -via schließen sich gegenseitig aus" -#: vncviewer/vncviewer.cxx:536 +#: vncviewer/vncviewer.cxx:550 #, c-format msgid "Listening on port %d" msgstr "Am Port %d wird gelauscht" -#: vncviewer/vncviewer.cxx:601 -msgid "Internal FLTK error. Exiting." -msgstr "Interner FLTK-Fehler. Abbruch." +#~ msgid "Unknown encoding %d" +#~ msgstr "Unbekannte Kodierung %d" + +#~ msgid "Unknown encoding" +#~ msgstr "Unbekannte Kodierung" #~ msgid "Alt" #~ msgstr "Alt" @@ -1,627 +1,616 @@ # Esperanto translation -# Copyright (C) 2015 the TigerVNC Team (msgids) +# Copyright (C) 2015, 2016 the TigerVNC Team (msgids) # This file is distributed under the same license as the tigervnc package. -# Felipe Castro <fefcas@gmail.com>, 2015. +# Felipe Castro <fefcas@gmail.com>, 2015, 2016. # msgid "" msgstr "" -"Project-Id-Version: tigervnc 1.3.90\n" +"Project-Id-Version: tigervnc 1.6.90\n" "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" -"POT-Creation-Date: 2014-11-19 12:46+0000\n" -"PO-Revision-Date: 2015-01-20 15:14-0300\n" +"POT-Creation-Date: 2016-07-01 10:15+0000\n" +"PO-Revision-Date: 2016-10-15 21:00-0300\n" "Last-Translator: Felipe Castro <fefcas@gmail.com>\n" "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" "Language: eo\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.6.10\n" +"X-Generator: Poedit 1.5.4\n" -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:194 +#: vncviewer/CConn.cxx:110 #, c-format -msgid "(server default %s)" -msgstr "(servila implicito %s)" - -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:227 -msgid "About" -msgstr "Pri" - -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:103 -msgid "About TigerVNC Viewer" -msgstr "Pri la montrilo TigerVNC" - -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1097 -msgid "About TigerVNC viewer..." -msgstr "Pri la montrilo TigerVNC..." +msgid "connected to host %s port %d" +msgstr "konektita al gastiganto %s pordo %d" -#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:86 -msgid "About..." -msgstr "Pri..." +#: vncviewer/CConn.cxx:169 +#, c-format +msgid "Desktop name: %.80s" +msgstr "Labortabla nomo: %.80s" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:704 -msgid "Accept clipboard from server" -msgstr "Akcepti tondaĵon el la servilo" +#: vncviewer/CConn.cxx:174 +#, c-format +msgid "Host: %.80s port: %d" +msgstr "Gastiganto: %.80s pordo: %d" -#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:327 -msgid "Adjusting window size to avoid accidental full screen request" -msgstr "Alĝustigo de fenestra grando por eviti akcidentan plenekranan peton" +#: vncviewer/CConn.cxx:179 +#, c-format +msgid "Size: %d x %d" +msgstr "Grando: %d x %d" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:563 -msgid "Allow JPEG compression:" -msgstr "Permesi JPEG-densigon:" +#: vncviewer/CConn.cxx:187 +#, c-format +msgid "Pixel format: %s" +msgstr "Bildero-formo: %s" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1081 -msgid "Alt" -msgstr "Alt-klavo" +#: vncviewer/CConn.cxx:194 +#, c-format +msgid "(server default %s)" +msgstr "(servila implicito %s)" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:648 -msgid "Authentication" -msgstr "Aŭtentikiĝo" +#: vncviewer/CConn.cxx:199 +#, c-format +msgid "Requested encoding: %s" +msgstr "Petata enkodigo: %s" -#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:89 -msgid "Authentication cancelled" -msgstr "Aŭtentikiĝo estas nuligita" +#: vncviewer/CConn.cxx:204 +#, c-format +msgid "Last used encoding: %s" +msgstr "Lasta uzata enkodigo: %s" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:437 -msgid "Auto select" -msgstr "Aŭtomate elekti" +#: vncviewer/CConn.cxx:209 +#, c-format +msgid "Line speed estimate: %d kbit/s" +msgstr "Lini-rapida konjekto: %d kbit/s" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:651 +#: vncviewer/CConn.cxx:214 #, c-format -msgid "Bad Name/Value pair on line: %d in file: %s" -msgstr "Malĝusta paro novo/valoro en linio: %d en dosiero: %s" +msgid "Protocol version: %d.%d" +msgstr "Protokola versio: %d.%d" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:91 -msgid "BitBlt failed" -msgstr "BitBlt malsukcesis" +#: vncviewer/CConn.cxx:219 +#, c-format +msgid "Security method: %s" +msgstr "Sekureca metodo: %s" -#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:91 -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:221 -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:83 -msgid "Cancel" -msgstr "Nuligi" +#: vncviewer/CConn.cxx:319 +#, c-format +msgid "SetDesktopSize failed: %d" +msgstr "SetDesktopSize fiaskis: %d" -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:116 -msgid "CleanupSignalHandler called" -msgstr "CleanupSignalHandler estas vokita" +#: vncviewer/CConn.cxx:411 +msgid "Invalid SetColourMapEntries from server!" +msgstr "Malvalida SetColourMapEntries el servilo!" -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:222 -msgid "Close" -msgstr "Fermi" +#: vncviewer/CConn.cxx:485 +msgid "Enabling continuous updates" +msgstr "Ebligo de daŭrigaj ĝisdatigoj" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:499 -msgid "Color level" -msgstr "Kolora nivelo" +#: vncviewer/CConn.cxx:555 +#, c-format +msgid "Throughput %d kbit/s - changing to quality %d" +msgstr "Traigo %d kbit/s - ni ŝanĝas al kvalito %d" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:421 -msgid "Compression" -msgstr "Densigo" +#: vncviewer/CConn.cxx:577 +#, c-format +msgid "Throughput %d kbit/s - full color is now %s" +msgstr "Traigo %d kbit/s - plenkoloro nun estas %s" -#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:96 -msgid "Connect" -msgstr "Konekti" +#: vncviewer/CConn.cxx:579 +msgid "disabled" +msgstr "malebligita" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1096 -msgid "Connection info..." -msgstr "Informo pri konekto..." +#: vncviewer/CConn.cxx:579 +msgid "enabled" +msgstr "ebligita" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:362 -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:404 +#: vncviewer/CConn.cxx:589 #, c-format -msgid "Could not convert the parameter-name %s to wchar_t* when reading from the Registry, the buffersize is to small." -msgstr "Ne eblis konverti la parametro-nomo %s al wchar_t* dum lego el la Registrujo, la bufrogrando tro malgrandas." +msgid "Using %s encoding" +msgstr "Ni uzas enkodigon %s" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:302 -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:340 +#: vncviewer/CConn.cxx:636 #, c-format -msgid "Could not convert the parameter-name %s to wchar_t* when writing to the Registry, the buffersize is to small." -msgstr "Ne eblis konverti la parametro-nomo %s al wchar_t* dum skribo al la Registrujo, la bufrogrando tro malgrandas." +msgid "Using pixel format %s" +msgstr "Ni uzas bilderformon %s" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:318 -#, c-format -msgid "Could not convert the parameter-value %s to wchar_t* when writing to the Registry, the buffersize is to small." -msgstr "Ne eblis konverti la parametro-valoro %s al wchar_t* dum skribo al la Registrujo, la bufrogrando tro malgrandas." +#: vncviewer/DesktopWindow.cxx:106 +msgid "Invalid geometry specified!" +msgstr "Malvalida geometrio indikita!" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:381 -#, c-format -msgid "Could not convert the parameter-value for %s to utf8 char* when reading from the Registry, the buffer dest is to small." -msgstr "Ne eblis konverti la parametro-valoro %s al utf8 char* dum lego el la Registrujo, la bufra celo tro malgrandas." +#: vncviewer/DesktopWindow.cxx:303 +msgid "Adjusting window size to avoid accidental full screen request" +msgstr "Alĝustigo de fenestra grando por eviti akcidentan plenekranan peton" -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:256 -#, c-format -msgid "Could not create VNC home directory: %s." -msgstr "Ne eblis krei hejman dosierujon de VNC: %s." +#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491 +#: vncviewer/DesktopWindow.cxx:504 +msgid "Failure grabbing keyboard" +msgstr "Fiasko dum elpreno de klavaro" -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:251 -msgid "Could not create VNC home directory: can't obtain home directory path." -msgstr "Ne eblis krei hejman dosierujon de VNC: ne eblas havi tiun vojon." +#: vncviewer/DesktopWindow.cxx:516 +msgid "Failure grabbing mouse" +msgstr "Fiasko dum elpreno de muso" -#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:58 -msgid "Could not create framebuffer bitmap" -msgstr "Ne eblis krei frambufran bitmapon" +#: vncviewer/DesktopWindow.cxx:746 +msgid "Invalid screen layout computed for resize request!" +msgstr "Malvalida ekrana aranĝo komputita por regrandiga peto!" + +#: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48 +#: vncviewer/X11PixelBuffer.cxx:117 +msgid "Not enough memory for framebuffer" +msgstr "Ne sufiĉe da memoro por frambufro" -#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:52 +#: vncviewer/OSXPixelBuffer.cxx:52 msgid "Could not create framebuffer device" msgstr "Ne eblis krei frambufran aparaton" -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:107 -msgid "Could not create framebuffer image" -msgstr "Ne eblis krei frambufran bildon" +#: vncviewer/OSXPixelBuffer.cxx:58 +msgid "Could not create framebuffer bitmap" +msgstr "Ne eblis krei frambufran bitmapon" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:310 -#, c-format -msgid "Could not encode the parameter-value %s when writing to the Registry." -msgstr "Ne eblis enkodigi la parametro-valoron %s dum skribo al la Registrujo." +#: vncviewer/OptionsDialog.cxx:57 +msgid "VNC Viewer: Connection Options" +msgstr "Rigardilo VNC: konektaj preferoj" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:613 -#, c-format -msgid "Could not read the line(%d) in the configuration file,the buffersize is to small." -msgstr "Ne eblis legi la linion(%d) en la agorda dosiero, la bufrogrando tro malgrandas." +#: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91 +#: vncviewer/vncviewer.cxx:282 +msgid "Cancel" +msgstr "Nuligi" -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:68 -msgid "Couldn't find suitable pixmap format" -msgstr "Ne eblis trovi taŭgan bildermapan formon" +#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281 +msgid "OK" +msgstr "Bone" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:79 -msgid "CreateCompatibleDC failed" -msgstr "CreateCompatibleDC malsukcesis" +#: vncviewer/OptionsDialog.cxx:423 +msgid "Compression" +msgstr "Densigo" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1079 -msgid "Ctrl" -msgstr "Stirklavo" +#: vncviewer/OptionsDialog.cxx:439 +msgid "Auto select" +msgstr "Aŭtomate elekti" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:550 -msgid "Custom compression level:" -msgstr "Persona densig-nivelo:" +#: vncviewer/OptionsDialog.cxx:451 +msgid "Preferred encoding" +msgstr "Preferata enkodigo" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:283 -msgid "Decoding: The size of the buffer dest is to small, it needs to be 1 byte bigger." -msgstr "Dekodigo: la grando de la bufra celo tro etas, ĝi bezonas esti 1 bajto pli granda." +#: vncviewer/OptionsDialog.cxx:499 +msgid "Color level" +msgstr "Kolora nivelo" -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:172 -#, c-format -msgid "Desktop name: %.80s" -msgstr "Labortabla nomo: %.80s" +#: vncviewer/OptionsDialog.cxx:510 +msgid "Full (all available colors)" +msgstr "Kompleta (ĉiuj disponeblaj koloroj)" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1099 -msgid "Dismiss menu" -msgstr "Forlasi la menuon" +#: vncviewer/OptionsDialog.cxx:517 +msgid "Medium (256 colors)" +msgstr "Meze (256 koloroj)" -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:59 -msgid "Display lacks pixmap format for default depth" -msgstr "Montri la bildermapan formon \"lacks\" por apriora profundo" +#: vncviewer/OptionsDialog.cxx:524 +msgid "Low (64 colors)" +msgstr "Malalte (64 koloroj)" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:778 -msgid "Enable full-screen mode over all monitors" -msgstr "Ebligi plenekranan reĝimon en ĉiuj ekranoj" +#: vncviewer/OptionsDialog.cxx:531 +msgid "Very low (8 colors)" +msgstr "Tre malalta (8 koloroj)" -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:469 -msgid "Enabling continuous updates" -msgstr "Ebligo de daŭrigaj ĝisdatigoj" +#: vncviewer/OptionsDialog.cxx:548 +msgid "Custom compression level:" +msgstr "Persona densig-nivelo:" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:200 -#, c-format -msgid "Encoding backslash: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." -msgstr "Enkodigo de retroklino: la grando de la bufra celo tro etas, ĝi bezonas esti pli ol %d bajtoj pli granda." +#: vncviewer/OptionsDialog.cxx:554 +msgid "level (1=fast, 6=best [4-6 are rarely useful])" +msgstr "nivelo (1=rapida, 6=plejbona [4-6 rare utilas])" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:214 -#, c-format -msgid "Encoding escape sequence: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." -msgstr "Enkodigo de skapsekvo: la grando de la bufra celo tro etas, ĝi bezonas esti pli ol %d bajtoj pli granda." +#: vncviewer/OptionsDialog.cxx:561 +msgid "Allow JPEG compression:" +msgstr "Permesi JPEG-densigon:" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:234 -#, c-format -msgid "Encoding normal character: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." -msgstr "Enkodigo de ordinara signo: la grando de la bufra celo tro etas, ĝi bezonas esti pli ol %d bajtoj pli granda." +#: vncviewer/OptionsDialog.cxx:567 +msgid "quality (0=poor, 9=best)" +msgstr "kvalito (0=aĉa, 9=plejbona)" + +#: vncviewer/OptionsDialog.cxx:578 +msgid "Security" +msgstr "Sekureco" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:595 +#: vncviewer/OptionsDialog.cxx:593 msgid "Encryption" msgstr "Ĉifrado" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:503 -#, c-format -msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer" -msgstr "Eraro(%d) dum fermo de ŝlosilo: Software\\TigerVNC\\vncviewer" +#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657 +#: vncviewer/OptionsDialog.cxx:735 +msgid "None" +msgstr "Nenio" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:455 -#, c-format -msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer" -msgstr "Eraro(%d) dum fermo de ŝlosilo: Software\\TigerVNC\\vncviewer" +#: vncviewer/OptionsDialog.cxx:610 +msgid "TLS with anonymous certificates" +msgstr "TLS kun anonimaj atestiloj" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:434 -#, c-format -msgid "Error(%d) creating key: Software\\TigerVNC\\vncviewer" -msgstr "Eraro(%d) dum kreo de ŝlosilo: Software\\TigerVNC\\vncviewer" +#: vncviewer/OptionsDialog.cxx:616 +msgid "TLS with X509 certificates" +msgstr "TLS kun atestiloj X509" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:471 -#, c-format -msgid "Error(%d) opening key: Software\\TigerVNC\\vncviewer" -msgstr "Eraro(%d) dum malfermo de ŝlosilo: Software\\TigerVNC\\vncviewer" +#: vncviewer/OptionsDialog.cxx:623 +msgid "Path to X509 CA certificate" +msgstr "Vojo al atestilo X509 CA" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:373 -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:415 -#, c-format -msgid "Error(%d) reading %s from Registry." -msgstr "Eraro(%d) dum lego de %s el la Registrujo." +#: vncviewer/OptionsDialog.cxx:630 +msgid "Path to X509 CRL file" +msgstr "Vojo al dosiero X509 CRL" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:348 -#, c-format -msgid "Error(%d) writing %d(REG_DWORD) to Registry." -msgstr "Eraro(%d) dum skribo de %d(REG_DWORD) al la Registrujo." +#: vncviewer/OptionsDialog.cxx:646 +msgid "Authentication" +msgstr "Aŭtentikiĝo" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:326 -#, c-format -msgid "Error(%d) writing %s(REG_SZ) to Registry." -msgstr "Eraro(%d) dum skribo de %s(REG_SZ) al la Registrujo." +#: vncviewer/OptionsDialog.cxx:663 +msgid "Standard VNC (insecure without encryption)" +msgstr "Ordinara VNC (nesekura sen ĉifrado)" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1067 -msgid "Exit viewer" -msgstr "Eliri la montrilon" +#: vncviewer/OptionsDialog.cxx:669 +msgid "Username and password (insecure without encryption)" +msgstr "Uzantnomo kaj pasvorto (nesekura sen ĉifrado)" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:588 -msgid "Failed to read configuration file, can't obtain home directory path." -msgstr "Fiasko dum lego de agorda dosiero, ne eblas preni la hejman dosierujan vojon." +#: vncviewer/OptionsDialog.cxx:688 +msgid "Input" +msgstr "Enigo" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:602 -#, c-format -msgid "Failed to read configuration file, can't open %s" -msgstr "Fiasko dum lego de agorda dosiero, ne eblas malfermi %s" +#: vncviewer/OptionsDialog.cxx:696 +msgid "View only (ignore mouse and keyboard)" +msgstr "Nur rigardi (preteratenti muson kaj klavaron)" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:621 -#, c-format -msgid "Failed to read line %d in file %s" -msgstr "Fiasko dum lego de la linio %d en la dosiero %s" +#: vncviewer/OptionsDialog.cxx:702 +msgid "Accept clipboard from server" +msgstr "Akcepti tondaĵon el la servilo" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:528 -msgid "Failed to write configuration file, can't obtain home directory path." -msgstr "Fiasko dum skribo de agorda dosiero, ne eblas preni la hejman dosierujan vojon." +#: vncviewer/OptionsDialog.cxx:709 +msgid "Also set primary selection" +msgstr "Difini ankaŭ la ĉefan elekton" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:542 -#, c-format -msgid "Failed to write configuration file, can't open %s" -msgstr "Fiasko dum skribo de la agorda dosiero, ne eblas malfermi %s" +#: vncviewer/OptionsDialog.cxx:716 +msgid "Send clipboard to server" +msgstr "Sendi tondaĵon al la servilo" -#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:526 -#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:538 -#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:551 -msgid "Failure grabbing keyboard" -msgstr "Fiasko dum elpreno de klavaro" +#: vncviewer/OptionsDialog.cxx:723 +msgid "Send primary selection as clipboard" +msgstr "Sendi ĉefan elekton kiel tondajô" -#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:563 -msgid "Failure grabbing mouse" -msgstr "Fiasko dum elpreno de muso" +#: vncviewer/OptionsDialog.cxx:730 +msgid "Pass system keys directly to server (full screen)" +msgstr "Pasi sistemajn klavojn rekte al la servilo (plenekrane)" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:512 -msgid "Full (all available colors)" -msgstr "Kompleta (ĉiuj disponeblaj koloroj)" +#: vncviewer/OptionsDialog.cxx:733 +msgid "Menu key" +msgstr "Menu-klavo" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070 -msgid "Full screen" -msgstr "Plena ekrano" +#: vncviewer/OptionsDialog.cxx:749 +msgid "Screen" +msgstr "Ekrano" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:770 -msgid "Full-screen mode" -msgstr "Plenekrana reĝimo" +#: vncviewer/OptionsDialog.cxx:757 +msgid "Resize remote session on connect" +msgstr "Regrandigi foran seancon dum konekto" -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:230 -msgid "Hide" -msgstr "Kaŝi" +#: vncviewer/OptionsDialog.cxx:770 +msgid "Resize remote session to the local window" +msgstr "Regrandigi foran seancon al la loka fenestro" -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:238 -msgid "Hide Others" -msgstr "Kaŝi aliajn" +#: vncviewer/OptionsDialog.cxx:776 +msgid "Full-screen mode" +msgstr "Plenekrana reĝimo" -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:177 -#, c-format -msgid "Host: %.80s port: %d" -msgstr "Gastiganto: %.80s pordo: %d" +#: vncviewer/OptionsDialog.cxx:782 +msgid "Enable full-screen mode over all monitors" +msgstr "Ebligi plenekranan reĝimon en ĉiuj ekranoj" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:690 -msgid "Input" -msgstr "Enigo" +#: vncviewer/OptionsDialog.cxx:791 +msgid "Misc." +msgstr "Divers." -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:510 -msgid "Internal FLTK error. Exiting." -msgstr "Interna eraro de FLTK. Ni ĉesas." +#: vncviewer/OptionsDialog.cxx:799 +msgid "Shared (don't disconnect other viewers)" +msgstr "Kunhave (ne malkonekti aliajn rigardilojn)" -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:384 -msgid "Invalid SetColourMapEntries from server!" -msgstr "Malvalida SetColourMapEntries el servilo!" +#: vncviewer/OptionsDialog.cxx:805 +msgid "Show dot when no cursor" +msgstr "Montri punkton kiam sen kursoro" -#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:106 -msgid "Invalid geometry specified!" -msgstr "Malvalida geometrio indikita!" +#: vncviewer/ServerDialog.cxx:42 +msgid "VNC Viewer: Connection Details" +msgstr "Rigardilo VNC: konektaj detaloj" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:708 -#, c-format -msgid "Invalid parameter name on line: %d in file: %s" -msgstr "Malvalida parametra nomo en linio: %d en dosiero: %s" +#: vncviewer/ServerDialog.cxx:49 vncviewer/ServerDialog.cxx:54 +msgid "VNC server:" +msgstr "Servilo VNC:" -#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:805 -msgid "Invalid screen layout computed for resize request!" -msgstr "Malvalida ekrana aranĝo komputita por regrandiga peto!" +#: vncviewer/ServerDialog.cxx:64 +msgid "Options..." +msgstr "Modifiloj..." -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:204 -#, c-format -msgid "Last used encoding: %s" -msgstr "Lasta uzata enkodigo: %s" +#: vncviewer/ServerDialog.cxx:69 +msgid "Load..." +msgstr "Ŝargo..." -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:631 -#, c-format -msgid "" -"Line 1 in file %s\n" -"must contain the TigerVNC configuration file identifier string:\n" -"\"%s\"" -msgstr "" -"Linio 1 en la dosiero %s\n" -"devas enhavi la agordo-dosieran identig-ĉenon de TigerVNC:\n" -"\"%s\"" +#: vncviewer/ServerDialog.cxx:74 +msgid "Save As..." +msgstr "Konservi kiel..." -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:209 -#, c-format -msgid "Line speed estimate: %d kbit/s" -msgstr "Lini-rapida konjekto: %d kbit/s" +#: vncviewer/ServerDialog.cxx:86 +msgid "About..." +msgstr "Pri..." -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:478 -#, c-format -msgid "Listening on port %d\n" -msgstr "Ni aŭskultas pordon %d\n" +#: vncviewer/ServerDialog.cxx:96 +msgid "Connect" +msgstr "Konekti" -#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:69 -msgid "Load..." -msgstr "Ŝargo..." +#: vncviewer/UserDialog.cxx:74 +msgid "Opening password file failed" +msgstr "Malfermo de pasvorta dosiero fiaskis" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:526 -msgid "Low (64 colors)" -msgstr "Malalte (64 koloroj)" +#: vncviewer/UserDialog.cxx:86 vncviewer/UserDialog.cxx:96 +msgid "VNC authentication" +msgstr "Aŭtentikiĝo de VNC" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:519 -msgid "Medium (256 colors)" -msgstr "Meze (256 koloroj)" +#: vncviewer/UserDialog.cxx:87 vncviewer/UserDialog.cxx:102 +msgid "Password:" +msgstr "Pasvorto:" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:725 -msgid "Menu key" -msgstr "Menu-klavo" +#: vncviewer/UserDialog.cxx:89 +msgid "Authentication cancelled" +msgstr "Aŭtentikiĝo estas nuligita" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:791 -msgid "Misc." -msgstr "Divers." +#: vncviewer/UserDialog.cxx:99 +msgid "Username:" +msgstr "Uzantnomo:" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1037 +#: vncviewer/Viewport.cxx:391 #, c-format -msgid "Multiple characters given for key code %d (0x%04x): '%s'" -msgstr "Multoblaj signoj indikitaj por klavkodo %d (0x%04x): '%s'" +msgid "Unable to create platform specific framebuffer: %s" +msgstr "Ne eblas krei frambufron specifan de platformo: %s" -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:218 -msgid "No" -msgstr "Ne" +#: vncviewer/Viewport.cxx:392 +msgid "Using platform independent framebuffer" +msgstr "Ni uzas frambufron sendependan de platformo" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:691 +#: vncviewer/Viewport.cxx:628 #, c-format msgid "No scan code for extended virtual key 0x%02x" msgstr "Neniu skankodo por kroma virtuala klavo 0x%02x" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:693 +#: vncviewer/Viewport.cxx:630 #, c-format msgid "No scan code for virtual key 0x%02x" msgstr "Neniu skankodo por virtuala klavo 0x%02x" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:710 +#: vncviewer/Viewport.cxx:647 #, c-format msgid "No symbol for extended virtual key 0x%02x" msgstr "Neniu simbolo por kroma virtuala klavo 0x%02x" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:776 +#: vncviewer/Viewport.cxx:649 #, c-format -msgid "No symbol for key code %d (in the current state)" -msgstr "Neniu simbolo por klavkodo %d (en la nuna stato)" +msgid "No symbol for virtual key 0x%02x" +msgstr "Neniu simbolo por virtuala klavo 0x%02x" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:750 +#: vncviewer/Viewport.cxx:687 #, c-format msgid "No symbol for key code 0x%02x (in the current state)" msgstr "Neniu simbolo por klavkodo 0x%02x (en la nuna stato)" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:712 +#: vncviewer/Viewport.cxx:713 #, c-format -msgid "No symbol for virtual key 0x%02x" -msgstr "Neniu simbolo por virtuala klavo 0x%02x" - -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:606 -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:659 -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:727 -msgid "None" -msgstr "Nenio" +msgid "No symbol for key code %d (in the current state)" +msgstr "Neniu simbolo por klavkodo %d (en la nuna stato)" -#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:48 -#: /home/ossman/devel/tigervnc/vncviewer/FLTKPixelBuffer.cxx:33 -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:111 -msgid "Not enough memory for framebuffer" -msgstr "Ne sufiĉe da memoro por frambufro" +#: vncviewer/Viewport.cxx:750 +msgctxt "ContextMenu|" +msgid "E&xit viewer" +msgstr "E&liri la rigardilon" -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:220 -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:88 -msgid "OK" -msgstr "Bone" +#: vncviewer/Viewport.cxx:753 +msgctxt "ContextMenu|" +msgid "&Full screen" +msgstr "&Plena ekrano" -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:77 -msgid "Only true colour displays supported" -msgstr "Nur verŝajn-koloraj montriloj estas subtenataj" +#: vncviewer/Viewport.cxx:756 +msgctxt "ContextMenu|" +msgid "Minimi&ze" +msgstr "Mal&grandigi" -#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:74 -msgid "Opening password file failed" -msgstr "Malfermo de pasvorta dosiero fiaskis" +#: vncviewer/Viewport.cxx:758 +msgctxt "ContextMenu|" +msgid "Resize &window to session" +msgstr "Regrandigi &fenestron al seanco" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1095 -#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:64 -msgid "Options..." -msgstr "Modifiloj..." +#: vncviewer/Viewport.cxx:763 +msgctxt "ContextMenu|" +msgid "&Ctrl" +msgstr "&Stirklavo" -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:463 -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:464 -msgid "Parameters -listen and -via are incompatible" -msgstr "Parametroj -listen kaj -via estas malkongruaj" +#: vncviewer/Viewport.cxx:766 +msgctxt "ContextMenu|" +msgid "&Alt" +msgstr "&Alt" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:722 -msgid "Pass system keys directly to server (full screen)" -msgstr "Pasi sistemajn klavojn rekte al la servilo (plenekrane)" +#: vncviewer/Viewport.cxx:772 +#, c-format +msgctxt "ContextMenu|" +msgid "Send %s" +msgstr "Sendi %s" -#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:87 -#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:102 -msgid "Password:" -msgstr "Pasvorto:" +#: vncviewer/Viewport.cxx:778 +msgctxt "ContextMenu|" +msgid "Send Ctrl-Alt-&Del" +msgstr "Sendi Ctrl-Alt-&Del" + +#: vncviewer/Viewport.cxx:781 +msgctxt "ContextMenu|" +msgid "&Refresh screen" +msgstr "A&ktualigi ekranon" + +#: vncviewer/Viewport.cxx:784 +msgctxt "ContextMenu|" +msgid "&Options..." +msgstr "&Modifiloj..." + +#: vncviewer/Viewport.cxx:786 +msgctxt "ContextMenu|" +msgid "Connection &info..." +msgstr "&Informo pri konekto..." + +#: vncviewer/Viewport.cxx:788 +msgctxt "ContextMenu|" +msgid "About &TigerVNC viewer..." +msgstr "Pri la rigardilo &TigerVNC..." + +#: vncviewer/Viewport.cxx:791 +msgctxt "ContextMenu|" +msgid "Dismiss &menu" +msgstr "Forlasi la me&nuon" + +#: vncviewer/Viewport.cxx:875 +msgid "VNC connection info" +msgstr "Konekta informo de VNC" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:625 -msgid "Path to X509 CA certificate" -msgstr "Vojo al atestilo X509 CA" +#: vncviewer/Win32PixelBuffer.cxx:62 +msgid "unable to create DIB section" +msgstr "ne eblas krei sekcion DIB" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:632 -msgid "Path to X509 CRL file" -msgstr "Vojo al dosiero X509 CRL" +#: vncviewer/Win32PixelBuffer.cxx:79 +msgid "CreateCompatibleDC failed" +msgstr "CreateCompatibleDC malsukcesis" -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:188 -#, c-format -msgid "Pixel format: %s" -msgstr "Bildero-formo: %s" +#: vncviewer/Win32PixelBuffer.cxx:82 +msgid "SelectObject failed" +msgstr "SelectObject fiaskis" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:449 -msgid "Preferred encoding" -msgstr "Preferata enkodigo" +#: vncviewer/Win32PixelBuffer.cxx:91 +msgid "BitBlt failed" +msgstr "BitBlt malsukcesis" -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:214 -#, c-format -msgid "Protocol version: %d.%d" -msgstr "Protokola versio: %d.%d" +#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable +#. to translate. +#: vncviewer/X11PixelBuffer.cxx:65 +msgid "Display lacks pixmap format for default depth" +msgstr "Montri la bildermapan formon \"lacks\" por apriora profundo" -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:233 -msgid "Quit" -msgstr "Eliri" +#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable +#. to translate. +#: vncviewer/X11PixelBuffer.cxx:76 +msgid "Couldn't find suitable pixmap format" +msgstr "Ne eblis trovi taŭgan bildermapan formon" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1093 -msgid "Refresh screen" -msgstr "Aktualigi ekranon" +#: vncviewer/X11PixelBuffer.cxx:85 +msgid "Only true colour displays supported" +msgstr "Nur verŝajn-koloraj rigardiloj estas subtenataj" -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:199 +#: vncviewer/X11PixelBuffer.cxx:87 #, c-format -msgid "Requested encoding: %s" -msgstr "Petata enkodigo: %s" - -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:749 -msgid "Resize remote session on connect" -msgstr "Regrandigi foran seancon dum konekto" - -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:762 -msgid "Resize remote session to the local window" -msgstr "Regrandigi foran seancon al la loka fenestro" +msgid "Using default colormap and visual, TrueColor, depth %d." +msgstr "Ni uzas aprioran kolormapon kaj ŝajnon, 'TrueColor', profundo %d." -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1073 -msgid "Resize window to session" -msgstr "Regrandigi fenestron al seanco" - -#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:74 -msgid "Save As..." -msgstr "Konservi kiel..." +#: vncviewer/X11PixelBuffer.cxx:113 +msgid "Could not create framebuffer image" +msgstr "Ne eblis krei frambufran bildon" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:741 -msgid "Screen" -msgstr "Ekrano" +#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320 +#, c-format +msgid "The name of the parameter %s was too large to write to the registry" +msgstr "La nomo de la parametro %s estis tro granda por skribi al la registrujo" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:580 -msgid "Security" -msgstr "Sekureco" +#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299 +#, c-format +msgid "The parameter %s was too large to write to the registry" +msgstr "La parametro %s estis tro granda por skribi al la registrujo" -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:219 +#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326 #, c-format -msgid "Security method: %s" -msgstr "Sekureca metodo: %s" +msgid "Failed to write parameter %s of type %s to the registry: %ld" +msgstr "Fiasko dum skribo de la parametro %s el tipo %s al la registrujo: %ld" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:82 -msgid "SelectObject failed" -msgstr "SelectObject fiaskis" +#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380 +#, c-format +msgid "The name of the parameter %s was too large to read from the registry" +msgstr "La nomo de la parametro %s estis tro longa por legi el la registrujo" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086 +#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389 #, c-format -msgid "Send %s" -msgstr "Sendi %s" +msgid "Failed to read parameter %s from the registry: %ld" +msgstr "Fiasko dum lego de parametro %s el la registrujo: %ld" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1091 -msgid "Send Ctrl-Alt-Del" -msgstr "Sendi Ctrl-Alt-Del" +#: vncviewer/parameters.cxx:359 +#, c-format +msgid "The parameter %s was too large to read from the registry" +msgstr "La parametro %s estis tro longa por legi el la registrujo" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:710 -msgid "Send clipboard to server" -msgstr "Sendi tondaĵon al la servilo" +#: vncviewer/parameters.cxx:409 +#, c-format +msgid "Failed to create registry key: %ld" +msgstr "Fiasko dum kreo de registruja ŝlosilo: %ld" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:716 -msgid "Send primary selection and cut buffer as clipboard" -msgstr "Sendi ĉefan elekton kaj tondan bufron kiel tondajôn" +#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665 +#, c-format +msgid "Unknown parameter type for parameter %s" +msgstr "Nekonata parametra tipo por parametro %s" -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:237 -msgid "Services" -msgstr "Servoj" +#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479 +#, c-format +msgid "Failed to close registry key: %ld" +msgstr "Fiasko dum fermo de registruja ŝlosilo: %ld" -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:319 +#: vncviewer/parameters.cxx:446 #, c-format -msgid "SetDesktopSize failed: %d" -msgstr "SetDesktopSize fiaskis: %d" +msgid "Failed to open registry key: %ld" +msgstr "Fiasko dum malfermo de registruja ŝlosilo: %ld" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:799 -msgid "Shared (don't disconnect other viewers)" -msgstr "Kunhave (ne malkonekti aliajn montrilojn)" +#: vncviewer/parameters.cxx:503 +msgid "Failed to write configuration file, can't obtain home directory path." +msgstr "Fiasko dum skribo de agorda dosiero, ne eblas preni la hejman dosierujan vojon." -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:239 -msgid "Show All" -msgstr "Montri ĉiujn" +#: vncviewer/parameters.cxx:516 +#, c-format +msgid "Failed to write configuration file, can't open %s: %s" +msgstr "Fiasko dum skribo de la agorda dosiero, ne eblas malfermi %s: %s" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:805 -msgid "Show dot when no cursor" -msgstr "Montri punkton kiam sen kursoro" +#: vncviewer/parameters.cxx:559 +msgid "Failed to read configuration file, can't obtain home directory path." +msgstr "Fiasko dum lego de agorda dosiero, ne eblas preni la hejman dosierujan vojon." -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:182 +#: vncviewer/parameters.cxx:572 #, c-format -msgid "Size: %d x %d" -msgstr "Grando: %d x %d" - -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:665 -msgid "Standard VNC (insecure without encryption)" -msgstr "Ordinara VNC (nesekura sen ĉifrado)" +msgid "Failed to read configuration file, can't open %s: %s" +msgstr "Fiasko dum lego de agorda dosiero, ne eblas malfermi %s: %s" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:618 -msgid "TLS with X509 certificates" -msgstr "TLS kun atestiloj X509" +#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590 +#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628 +#: vncviewer/parameters.cxx:644 +#, c-format +msgid "Failed to read line %d in file %s: %s" +msgstr "Fiasko dum lego de linio %d en la dosiero %s: %s" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:612 -msgid "TLS with anonymous certificates" -msgstr "TLS kun anonimaj atestiloj" +#: vncviewer/parameters.cxx:591 +msgid "Line too long" +msgstr "Linio tro longas" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:448 -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:497 -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:561 -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:701 +#: vncviewer/parameters.cxx:598 #, c-format -msgid "The parameterArray contains a object of a invalid type at line %d." -msgstr "La parameterArray enhavas objekton de malvalida tipo ĉe linio %d." +msgid "Configuration file %s is in an invalid format" +msgstr "Agorda dosiero %s estas en nevalida formo" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:664 -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:680 -#, c-format -msgid "The value of the parameter %s on line %d in file %s is invalid." -msgstr "La valoro de parametro %s en linio %d en dosiero %s malvalidas." +#: vncviewer/parameters.cxx:616 +msgid "Invalid format" +msgstr "Nevalida formo" -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:539 -#, c-format -msgid "Throughput %d kbit/s - changing to quality %d" -msgstr "Traigo %d kbit/s - ni ŝanĝas al kvalito %d" +#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645 +msgid "Invalid format or too large value" +msgstr "Nevalida formo aŭ tro granda valoro" -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:561 +#: vncviewer/parameters.cxx:672 #, c-format -msgid "Throughput %d kbit/s - full color is now %s" -msgstr "Traigo %d kbit/s - plenkoloro nun estas %s" +msgid "Unknown parameter %s on line %d in file %s" +msgstr "Nekonata parametro %s en linio %d en dosiero %s" -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:210 -msgid "TigerVNC Viewer" -msgstr "Montrilo TigerVNC" - -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:80 +#: vncviewer/vncviewer.cxx:100 #, c-format msgid "" "TigerVNC Viewer %d-bit v%s\n" @@ -629,124 +618,187 @@ msgid "" "Copyright (C) 1999-%d TigerVNC Team and many others (see README.txt)\n" "See http://www.tigervnc.org for information on TigerVNC." msgstr "" -"Montrilo TigerVNC %d-bit v%s\n" +"Rigardilo TigerVNC %d-bit v%s\n" "Konstruita en: %s\n" "Kopirajto (C) 1999-%d teamo TigerVNC kaj multaj aliaj (konsultu README.txt)\n" "Konsultu http://www.tigervnc.org por informoj pri TigerVNC." -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:456 -#, c-format -msgid "Unable to create platform specific framebuffer: %s" -msgstr "Ne eblas krei frambufron specifan de platformo: %s" +#: vncviewer/vncviewer.cxx:127 +msgid "About TigerVNC Viewer" +msgstr "Pri la rigardilo TigerVNC" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1015 -#, c-format -msgid "Unknown FLTK key code %d (0x%04x)" -msgstr "Nekonata klavkodo de FLTK %d (0x%04x)" +#: vncviewer/vncviewer.cxx:140 +msgid "Internal FLTK error. Exiting." +msgstr "Interna eraro de FLTK. Ni ĉesas." -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:889 +#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170 #, c-format -msgid "Unknown decimal separator: '%s'" -msgstr "Nekonata dekuma apartigilo: '%s'" +msgid "Error starting new TigerVNC Viewer: %s" +msgstr "Eraro dum ekigo de nova Rigardilo TigerVNC: %s" -#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:271 +#: vncviewer/vncviewer.cxx:179 #, c-format -msgid "Unknown escape sequence at character %d" -msgstr "Nekonata eskap-sekvo ĉe signo %d" +msgid "Termination signal %d has been received. TigerVNC Viewer will now exit." +msgstr "Finiga signalo %d estis ricevata. La Rigardilo TigerVNC ĉesos nun." -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:430 -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:437 -msgid "Unknown rect encoding" -msgstr "Nekonata enkodigo 'rect'" +#: vncviewer/vncviewer.cxx:271 +msgid "TigerVNC Viewer" +msgstr "Rigardilo TigerVNC" -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:429 -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:436 -#, c-format -msgid "Unknown rect encoding %d" -msgstr "Nekonata enkodigo 'rect' %d" +#: vncviewer/vncviewer.cxx:279 +msgid "No" +msgstr "Ne" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:671 -msgid "Username and password (insecure without encryption)" -msgstr "Uzantnomo kaj pasvorto (nesekura sen ĉifrado)" +#: vncviewer/vncviewer.cxx:280 +msgid "Yes" +msgstr "Jes" -#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:99 -msgid "Username:" -msgstr "Uzantnomo:" +#: vncviewer/vncviewer.cxx:283 +msgid "Close" +msgstr "Fermi" -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:573 -#, c-format -msgid "Using %s encoding" -msgstr "Ni uzas enkodigon %s" +#: vncviewer/vncviewer.cxx:288 +msgid "About" +msgstr "Pri" + +#: vncviewer/vncviewer.cxx:291 +msgid "Hide" +msgstr "Kaŝi" + +#: vncviewer/vncviewer.cxx:294 +msgid "Quit" +msgstr "Eliri" -#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:79 +#: vncviewer/vncviewer.cxx:298 +msgid "Services" +msgstr "Servoj" + +#: vncviewer/vncviewer.cxx:299 +msgid "Hide Others" +msgstr "Kaŝi aliajn" + +#: vncviewer/vncviewer.cxx:300 +msgid "Show All" +msgstr "Montri ĉiujn" + +#: vncviewer/vncviewer.cxx:309 +msgctxt "SysMenu|" +msgid "&File" +msgstr "&Dosiero" + +#: vncviewer/vncviewer.cxx:312 +msgctxt "SysMenu|File|" +msgid "&New Connection" +msgstr "&Nova konekto" + +#: vncviewer/vncviewer.cxx:324 +msgid "Could not create VNC home directory: can't obtain home directory path." +msgstr "Ne eblis krei hejman dosierujon de VNC: ne eblas havi tiun vojon." + +#: vncviewer/vncviewer.cxx:329 #, c-format -msgid "Using default colormap and visual, %sdepth %d." -msgstr "Ni uzas aprioran kolormapon kaj ŝajnon, %sprofundo %d." +msgid "Could not create VNC home directory: %s." +msgstr "Ne eblis krei hejman dosierujon de VNC: %s." -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:620 +#. TRANSLATORS: "Parameters" are command line arguments, or settings +#. from a file or the Windows registry. +#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535 +msgid "Parameters -listen and -via are incompatible" +msgstr "Parametroj -listen kaj -via estas malkongruaj" + +#: vncviewer/vncviewer.cxx:550 #, c-format -msgid "Using pixel format %s" -msgstr "Ni uzas bilderformon %s" +msgid "Listening on port %d" +msgstr "Ni aŭskultas pordon %d" -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:457 -msgid "Using platform independent framebuffer" -msgstr "Ni uzas frambufron sendependan de platformo" +#~ msgid "Alt" +#~ msgstr "Alt-klavo" -#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:42 -msgid "VNC Viewer: Connection Details" -msgstr "Montrilo VNC: konektaj detaloj" +#~ msgid "Bad Name/Value pair on line: %d in file: %s" +#~ msgstr "Malĝusta paro novo/valoro en linio: %d en dosiero: %s" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:57 -msgid "VNC Viewer: Connection Options" -msgstr "Montrilo VNC: konektaj preferoj" +#~ msgid "CleanupSignalHandler called" +#~ msgstr "CleanupSignalHandler estas vokita" -#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:86 -#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:96 -msgid "VNC authentication" -msgstr "Aŭtentikiĝo de VNC" +#~ msgid "Could not convert the parameter-name %s to wchar_t* when reading from the Registry, the buffersize is to small." +#~ msgstr "Ne eblis konverti la parametro-nomo %s al wchar_t* dum lego el la Registrujo, la bufrogrando tro malgrandas." -#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1187 -msgid "VNC connection info" -msgstr "Konekta informo de VNC" +#~ msgid "Could not convert the parameter-name %s to wchar_t* when writing to the Registry, the buffersize is to small." +#~ msgstr "Ne eblis konverti la parametro-nomo %s al wchar_t* dum skribo al la Registrujo, la bufrogrando tro malgrandas." -#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:49 -#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:54 -msgid "VNC server:" -msgstr "Servilo VNC:" +#~ msgid "Could not convert the parameter-value %s to wchar_t* when writing to the Registry, the buffersize is to small." +#~ msgstr "Ne eblis konverti la parametro-valoro %s al wchar_t* dum skribo al la Registrujo, la bufrogrando tro malgrandas." -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:533 -msgid "Very low (8 colors)" -msgstr "Tre malalta (8 koloroj)" +#~ msgid "Could not convert the parameter-value for %s to utf8 char* when reading from the Registry, the buffer dest is to small." +#~ msgstr "Ne eblis konverti la parametro-valoro %s al utf8 char* dum lego el la Registrujo, la bufra celo tro malgrandas." -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:698 -msgid "View only (ignore mouse and keyboard)" -msgstr "Nur rigardi (preteratenti muson kaj klavaron)" +#~ msgid "Could not read the line(%d) in the configuration file,the buffersize is to small." +#~ msgstr "Ne eblis legi la linion(%d) en la agorda dosiero, la bufrogrando tro malgrandas." -#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:219 -msgid "Yes" -msgstr "Jes" +#~ msgid "Decoding: The size of the buffer dest is to small, it needs to be 1 byte bigger." +#~ msgstr "Dekodigo: la grando de la bufra celo tro etas, ĝi bezonas esti 1 bajto pli granda." -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:111 -#, c-format -msgid "connected to host %s port %d" -msgstr "konektita al gastiganto %s pordo %d" +#~ msgid "Encoding backslash: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." +#~ msgstr "Enkodigo de retroklino: la grando de la bufra celo tro etas, ĝi bezonas esti pli ol %d bajtoj pli granda." -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:563 -msgid "disabled" -msgstr "malebligita" +#~ msgid "Encoding escape sequence: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." +#~ msgstr "Enkodigo de skapsekvo: la grando de la bufra celo tro etas, ĝi bezonas esti pli ol %d bajtoj pli granda." -#: /home/ossman/devel/tigervnc/vncviewer/CConn.cxx:563 -msgid "enabled" -msgstr "ebligita" +#~ msgid "Encoding normal character: The size of the buffer dest is to small, it needs to be more than %d bytes bigger." +#~ msgstr "Enkodigo de ordinara signo: la grando de la bufra celo tro etas, ĝi bezonas esti pli ol %d bajtoj pli granda." -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:556 -msgid "level (1=fast, 6=best [4-6 are rarely useful])" -msgstr "nivelo (1=rapida, 6=plejbona [4-6 rare utilas])" +#~ msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer" +#~ msgstr "Eraro(%d) dum fermo de ŝlosilo: Software\\TigerVNC\\vncviewer" -#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:569 -msgid "quality (0=poor, 9=best)" -msgstr "kvalito (0=aĉa, 9=plejbona)" +#~ msgid "Error(%d) closing key: Software\\TigerVNC\\vncviewer" +#~ msgstr "Eraro(%d) dum fermo de ŝlosilo: Software\\TigerVNC\\vncviewer" -#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:62 -msgid "unable to create DIB section" -msgstr "ne eblas krei sekcion DIB" +#~ msgid "Error(%d) creating key: Software\\TigerVNC\\vncviewer" +#~ msgstr "Eraro(%d) dum kreo de ŝlosilo: Software\\TigerVNC\\vncviewer" + +#~ msgid "Error(%d) opening key: Software\\TigerVNC\\vncviewer" +#~ msgstr "Eraro(%d) dum malfermo de ŝlosilo: Software\\TigerVNC\\vncviewer" + +#~ msgid "Error(%d) reading %s from Registry." +#~ msgstr "Eraro(%d) dum lego de %s el la Registrujo." + +#~ msgid "Error(%d) writing %d(REG_DWORD) to Registry." +#~ msgstr "Eraro(%d) dum skribo de %d(REG_DWORD) al la Registrujo." + +#~ msgid "Error(%d) writing %s(REG_SZ) to Registry." +#~ msgstr "Eraro(%d) dum skribo de %s(REG_SZ) al la Registrujo." + +#~ msgid "" +#~ "Line 1 in file %s\n" +#~ "must contain the TigerVNC configuration file identifier string:\n" +#~ "\"%s\"" +#~ msgstr "" +#~ "Linio 1 en la dosiero %s\n" +#~ "devas enhavi la agordo-dosieran identig-ĉenon de TigerVNC:\n" +#~ "\"%s\"" + +#~ msgid "Multiple characters given for key code %d (0x%04x): '%s'" +#~ msgstr "Multoblaj signoj indikitaj por klavkodo %d (0x%04x): '%s'" + +#~ msgid "The parameterArray contains a object of a invalid type at line %d." +#~ msgstr "La parameterArray enhavas objekton de malvalida tipo ĉe linio %d." + +#~ msgid "The value of the parameter %s on line %d in file %s is invalid." +#~ msgstr "La valoro de parametro %s en linio %d en dosiero %s malvalidas." + +#~ msgid "Unknown FLTK key code %d (0x%04x)" +#~ msgstr "Nekonata klavkodo de FLTK %d (0x%04x)" + +#~ msgid "Unknown decimal separator: '%s'" +#~ msgstr "Nekonata dekuma apartigilo: '%s'" + +#~ msgid "Unknown escape sequence at character %d" +#~ msgstr "Nekonata eskap-sekvo ĉe signo %d" + +#, fuzzy +#~ msgid "Unknown rect encoding" +#~ msgstr "Nekonata enkodigo" + +#, fuzzy +#~ msgid "Unknown rect encoding %d" +#~ msgstr "Nekonata enkodigo %d" @@ -2,13 +2,13 @@ # Copyright (C) the TigerVNC Team (msgids) # This file is distributed under the same license as the tigervnc package. # -# Benno Schulenberg <benno@vertaalt.nl>, 2014, 2015. +# Benno Schulenberg <benno@vertaalt.nl>, 2014, 2015, 2016. msgid "" msgstr "" -"Project-Id-Version: tigervnc 1.5.90\n" +"Project-Id-Version: tigervnc 1.6.90\n" "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" -"POT-Creation-Date: 2015-11-26 11:33+0000\n" -"PO-Revision-Date: 2015-12-04 21:42+0100\n" +"POT-Creation-Date: 2016-07-01 10:15+0000\n" +"PO-Revision-Date: 2016-07-26 11:15+0200\n" "Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n" "Language-Team: Dutch <vertaling@vrijschrift.org>\n" "Language: nl\n" @@ -18,108 +18,98 @@ msgstr "" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vncviewer/CConn.cxx:111 +#: vncviewer/CConn.cxx:110 #, c-format msgid "connected to host %s port %d" msgstr "verbonden met host %s poort %d" -#: vncviewer/CConn.cxx:173 +#: vncviewer/CConn.cxx:169 #, c-format msgid "Desktop name: %.80s" msgstr "Bureaubladnaam: %.80s" -#: vncviewer/CConn.cxx:178 +#: vncviewer/CConn.cxx:174 #, c-format msgid "Host: %.80s port: %d" msgstr "Host: %.80s poort: %d" -#: vncviewer/CConn.cxx:183 +#: vncviewer/CConn.cxx:179 #, c-format msgid "Size: %d x %d" msgstr "Grootte: %d x %d" -#: vncviewer/CConn.cxx:191 +#: vncviewer/CConn.cxx:187 #, c-format msgid "Pixel format: %s" msgstr "Pixel-indeling: %s" -#: vncviewer/CConn.cxx:198 +#: vncviewer/CConn.cxx:194 #, c-format msgid "(server default %s)" msgstr "(serverstandaard is %s)" -#: vncviewer/CConn.cxx:203 +#: vncviewer/CConn.cxx:199 #, c-format msgid "Requested encoding: %s" msgstr "Gevraagde codering: %s" -#: vncviewer/CConn.cxx:208 +#: vncviewer/CConn.cxx:204 #, c-format msgid "Last used encoding: %s" msgstr "Laatst gebruikte codering: %s" -#: vncviewer/CConn.cxx:213 +#: vncviewer/CConn.cxx:209 #, c-format msgid "Line speed estimate: %d kbit/s" msgstr "Geschatte lijnsnelheid: %d kbit/s" -#: vncviewer/CConn.cxx:218 +#: vncviewer/CConn.cxx:214 #, c-format msgid "Protocol version: %d.%d" msgstr "Protocolversie: %d.%d" -#: vncviewer/CConn.cxx:223 +#: vncviewer/CConn.cxx:219 #, c-format msgid "Security method: %s" msgstr "Beveiligingsmethode: %s" -#: vncviewer/CConn.cxx:329 +#: vncviewer/CConn.cxx:319 #, c-format msgid "SetDesktopSize failed: %d" msgstr "### SetDesktopSize is mislukt: %d" -#: vncviewer/CConn.cxx:398 +#: vncviewer/CConn.cxx:411 msgid "Invalid SetColourMapEntries from server!" msgstr "Ongeldige 'SetColourMapEntries' van de server!" -#. TRANSLATORS: Refers to a VNC protocol encoding type -#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451 -#, c-format -msgid "Unknown encoding %d" -msgstr "Onbekende codering %d" - -#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452 -msgid "Unknown encoding" -msgstr "Onbekende codering" - -#: vncviewer/CConn.cxx:484 +#: vncviewer/CConn.cxx:485 msgid "Enabling continuous updates" msgstr "Continue updates inschakelen" -#: vncviewer/CConn.cxx:554 +#: vncviewer/CConn.cxx:555 #, c-format msgid "Throughput %d kbit/s - changing to quality %d" msgstr "Throughput is %d kbit/s -- overgaand naar kwaliteit %d" -#: vncviewer/CConn.cxx:576 +#: vncviewer/CConn.cxx:577 #, c-format msgid "Throughput %d kbit/s - full color is now %s" msgstr "Throughput is %d kbit/s -- volledige kleuren is nu %s" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "disabled" msgstr "uitgeschakeld" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "enabled" msgstr "ingeschakeld" -#: vncviewer/CConn.cxx:588 +#: vncviewer/CConn.cxx:589 #, c-format msgid "Using %s encoding" msgstr "Codering %s wordt gebruikt" -#: vncviewer/CConn.cxx:635 +#: vncviewer/CConn.cxx:636 #, c-format msgid "Using pixel format %s" msgstr "Pixel-indeling %s wordt gebruikt" @@ -128,25 +118,25 @@ msgstr "Pixel-indeling %s wordt gebruikt" msgid "Invalid geometry specified!" msgstr "Ongeldige afmetingen opgegeven!" -#: vncviewer/DesktopWindow.cxx:309 +#: vncviewer/DesktopWindow.cxx:303 msgid "Adjusting window size to avoid accidental full screen request" msgstr "Venstergrootte wordt aangepast om onbedoeld volledigschermverzoek te vermijden" -#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497 -#: vncviewer/DesktopWindow.cxx:510 +#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491 +#: vncviewer/DesktopWindow.cxx:504 msgid "Failure grabbing keyboard" msgstr "Het pakken van het toetsenbord is mislukt" -#: vncviewer/DesktopWindow.cxx:522 +#: vncviewer/DesktopWindow.cxx:516 msgid "Failure grabbing mouse" msgstr "Het pakken van de muis is mislukt" -#: vncviewer/DesktopWindow.cxx:752 +#: vncviewer/DesktopWindow.cxx:746 msgid "Invalid screen layout computed for resize request!" msgstr "Ongeldige schermopmaak berekend voor wijzigingsverzoek." #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48 -#: vncviewer/X11PixelBuffer.cxx:113 +#: vncviewer/X11PixelBuffer.cxx:117 msgid "Not enough memory for framebuffer" msgstr "Onvoldoende geheugen beschikbaar voor framebuffer" @@ -163,160 +153,164 @@ msgid "VNC Viewer: Connection Options" msgstr "VNC-viewer: Verbindingsopties" #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91 -#: vncviewer/vncviewer.cxx:268 +#: vncviewer/vncviewer.cxx:282 msgid "Cancel" msgstr "Annuleren" -#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267 +#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281 msgid "OK" msgstr "OK" -#: vncviewer/OptionsDialog.cxx:413 +#: vncviewer/OptionsDialog.cxx:423 msgid "Compression" msgstr "Compressie" -#: vncviewer/OptionsDialog.cxx:429 +#: vncviewer/OptionsDialog.cxx:439 msgid "Auto select" msgstr "Automatisch selecteren" -#: vncviewer/OptionsDialog.cxx:441 +#: vncviewer/OptionsDialog.cxx:451 msgid "Preferred encoding" msgstr "Voorkeurscodering" -#: vncviewer/OptionsDialog.cxx:489 +#: vncviewer/OptionsDialog.cxx:499 msgid "Color level" msgstr "Kleurdiepte" -#: vncviewer/OptionsDialog.cxx:500 +#: vncviewer/OptionsDialog.cxx:510 msgid "Full (all available colors)" msgstr "volledig (alle beschikbare kleuren)" -#: vncviewer/OptionsDialog.cxx:507 +#: vncviewer/OptionsDialog.cxx:517 msgid "Medium (256 colors)" msgstr "medium (256 kleuren)" -#: vncviewer/OptionsDialog.cxx:514 +#: vncviewer/OptionsDialog.cxx:524 msgid "Low (64 colors)" msgstr "laag (64 kleuren)" -#: vncviewer/OptionsDialog.cxx:521 +#: vncviewer/OptionsDialog.cxx:531 msgid "Very low (8 colors)" msgstr "zeer laag (8 kleuren)" -#: vncviewer/OptionsDialog.cxx:538 +#: vncviewer/OptionsDialog.cxx:548 msgid "Custom compression level:" msgstr "Aangepast compressieniveau:" -#: vncviewer/OptionsDialog.cxx:544 +#: vncviewer/OptionsDialog.cxx:554 msgid "level (1=fast, 6=best [4-6 are rarely useful])" msgstr "niveau (1=snel, 6=best [4-6 zijn zelden nuttig])" -#: vncviewer/OptionsDialog.cxx:551 +#: vncviewer/OptionsDialog.cxx:561 msgid "Allow JPEG compression:" msgstr "JPEG-compressie toestaan:" -#: vncviewer/OptionsDialog.cxx:557 +#: vncviewer/OptionsDialog.cxx:567 msgid "quality (0=poor, 9=best)" msgstr "kwaliteit (0=slecht, 9=best)" -#: vncviewer/OptionsDialog.cxx:568 +#: vncviewer/OptionsDialog.cxx:578 msgid "Security" msgstr "Beveiliging" -#: vncviewer/OptionsDialog.cxx:583 +#: vncviewer/OptionsDialog.cxx:593 msgid "Encryption" msgstr "Versleuteling" -#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647 -#: vncviewer/OptionsDialog.cxx:715 +#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657 +#: vncviewer/OptionsDialog.cxx:735 msgid "None" msgstr "Geen" -#: vncviewer/OptionsDialog.cxx:600 +#: vncviewer/OptionsDialog.cxx:610 msgid "TLS with anonymous certificates" msgstr "TLS met anonieme certificaten" -#: vncviewer/OptionsDialog.cxx:606 +#: vncviewer/OptionsDialog.cxx:616 msgid "TLS with X509 certificates" msgstr "TLS met X509-certificaten" -#: vncviewer/OptionsDialog.cxx:613 +#: vncviewer/OptionsDialog.cxx:623 msgid "Path to X509 CA certificate" msgstr "Pad naar X509 CA-certificaat" -#: vncviewer/OptionsDialog.cxx:620 +#: vncviewer/OptionsDialog.cxx:630 msgid "Path to X509 CRL file" msgstr "Pad naar X509 CRL-bestand" -#: vncviewer/OptionsDialog.cxx:636 +#: vncviewer/OptionsDialog.cxx:646 msgid "Authentication" msgstr "Authenticatie" -#: vncviewer/OptionsDialog.cxx:653 +#: vncviewer/OptionsDialog.cxx:663 msgid "Standard VNC (insecure without encryption)" msgstr "Standaard VNC (onveilig zonder versleuteling)" -#: vncviewer/OptionsDialog.cxx:659 +#: vncviewer/OptionsDialog.cxx:669 msgid "Username and password (insecure without encryption)" msgstr "Gebruikersnaam en wachtwoord (onveilig zonder versleuteling)" -#: vncviewer/OptionsDialog.cxx:678 +#: vncviewer/OptionsDialog.cxx:688 msgid "Input" msgstr "Invoer" -#: vncviewer/OptionsDialog.cxx:686 +#: vncviewer/OptionsDialog.cxx:696 msgid "View only (ignore mouse and keyboard)" msgstr "Alleen kijken (muis en toetsenbord negeren)" -#: vncviewer/OptionsDialog.cxx:692 +#: vncviewer/OptionsDialog.cxx:702 msgid "Accept clipboard from server" msgstr "Klembord van server accepteren" -#: vncviewer/OptionsDialog.cxx:698 +#: vncviewer/OptionsDialog.cxx:709 +msgid "Also set primary selection" +msgstr "Ook de hoofdselectie instellen" + +#: vncviewer/OptionsDialog.cxx:716 msgid "Send clipboard to server" msgstr "Klembord naar server zenden" -#: vncviewer/OptionsDialog.cxx:704 -msgid "Send primary selection and cut buffer as clipboard" -msgstr "Hoofdselectie en knipbuffer als klembord verzenden" +#: vncviewer/OptionsDialog.cxx:723 +msgid "Send primary selection as clipboard" +msgstr "Hoofdselectie als klembord verzenden" -#: vncviewer/OptionsDialog.cxx:710 +#: vncviewer/OptionsDialog.cxx:730 msgid "Pass system keys directly to server (full screen)" msgstr "Systeemsleutels direct aan server doorgeven (volledigscherm)" -#: vncviewer/OptionsDialog.cxx:713 +#: vncviewer/OptionsDialog.cxx:733 msgid "Menu key" msgstr "Menutoets" -#: vncviewer/OptionsDialog.cxx:729 +#: vncviewer/OptionsDialog.cxx:749 msgid "Screen" msgstr "Scherm" -#: vncviewer/OptionsDialog.cxx:737 +#: vncviewer/OptionsDialog.cxx:757 msgid "Resize remote session on connect" msgstr "Grootte van gindse sessie aanpassen bij verbinden" -#: vncviewer/OptionsDialog.cxx:750 +#: vncviewer/OptionsDialog.cxx:770 msgid "Resize remote session to the local window" msgstr "Gindse sessie aan het lokale venster aanpassen" -#: vncviewer/OptionsDialog.cxx:756 +#: vncviewer/OptionsDialog.cxx:776 msgid "Full-screen mode" msgstr "Volledigscherm-modus" -#: vncviewer/OptionsDialog.cxx:762 +#: vncviewer/OptionsDialog.cxx:782 msgid "Enable full-screen mode over all monitors" msgstr "Volledigscherm-modus over alle beeldschermen inschakelen" -#: vncviewer/OptionsDialog.cxx:771 +#: vncviewer/OptionsDialog.cxx:791 msgid "Misc." msgstr "Overige" -#: vncviewer/OptionsDialog.cxx:779 +#: vncviewer/OptionsDialog.cxx:799 msgid "Shared (don't disconnect other viewers)" msgstr "Gedeeld (verbinding van andere viewers niet verbreken)" -#: vncviewer/OptionsDialog.cxx:785 +#: vncviewer/OptionsDialog.cxx:805 msgid "Show dot when no cursor" msgstr "Punt tonen als er geen cursor is" @@ -368,112 +362,112 @@ msgstr "Authenticatie is geannuleerd" msgid "Username:" msgstr "Gebruikersnaam:" -#: vncviewer/Viewport.cxx:433 +#: vncviewer/Viewport.cxx:391 #, c-format msgid "Unable to create platform specific framebuffer: %s" msgstr "Kan geen platform-specifiek framebuffer aanmaken: %s" -#: vncviewer/Viewport.cxx:434 +#: vncviewer/Viewport.cxx:392 msgid "Using platform independent framebuffer" msgstr "Platform-onafhankelijk framebuffer wordt gebruikt" -#: vncviewer/Viewport.cxx:668 +#: vncviewer/Viewport.cxx:628 #, c-format msgid "No scan code for extended virtual key 0x%02x" msgstr "Geen scancode voor uitgebreide virtuele toets 0x%02x" -#: vncviewer/Viewport.cxx:670 +#: vncviewer/Viewport.cxx:630 #, c-format msgid "No scan code for virtual key 0x%02x" msgstr "Geen scancode voor virtuele toets 0x%02x" -#: vncviewer/Viewport.cxx:687 +#: vncviewer/Viewport.cxx:647 #, c-format msgid "No symbol for extended virtual key 0x%02x" msgstr "Geen symbool voor uitgebreide virtuele toets 0x%02x" -#: vncviewer/Viewport.cxx:689 +#: vncviewer/Viewport.cxx:649 #, c-format msgid "No symbol for virtual key 0x%02x" msgstr "Geen symbool voor virtuele toets 0x%02x" -#: vncviewer/Viewport.cxx:727 +#: vncviewer/Viewport.cxx:687 #, c-format msgid "No symbol for key code 0x%02x (in the current state)" msgstr "Geen symbool voor toetscode 0x%02x (in de huidige toestand)" -#: vncviewer/Viewport.cxx:753 +#: vncviewer/Viewport.cxx:713 #, c-format msgid "No symbol for key code %d (in the current state)" msgstr "Geen symbool voor toetscode %d (in de huidige toestand)" -#: vncviewer/Viewport.cxx:790 +#: vncviewer/Viewport.cxx:750 msgctxt "ContextMenu|" msgid "E&xit viewer" msgstr "Viewer af&sluiten" -#: vncviewer/Viewport.cxx:793 +#: vncviewer/Viewport.cxx:753 msgctxt "ContextMenu|" msgid "&Full screen" msgstr "&Volledig scherm" -#: vncviewer/Viewport.cxx:796 +#: vncviewer/Viewport.cxx:756 msgctxt "ContextMenu|" msgid "Minimi&ze" msgstr "&Minimaliseren" -#: vncviewer/Viewport.cxx:798 +#: vncviewer/Viewport.cxx:758 msgctxt "ContextMenu|" msgid "Resize &window to session" msgstr "Ve&nster aan sessie aanpassen" -#: vncviewer/Viewport.cxx:803 +#: vncviewer/Viewport.cxx:763 msgctxt "ContextMenu|" msgid "&Ctrl" msgstr "&Ctrl" -#: vncviewer/Viewport.cxx:806 +#: vncviewer/Viewport.cxx:766 msgctxt "ContextMenu|" msgid "&Alt" msgstr "&Alt" -#: vncviewer/Viewport.cxx:812 +#: vncviewer/Viewport.cxx:772 #, c-format msgctxt "ContextMenu|" msgid "Send %s" msgstr "%s zenden" -#: vncviewer/Viewport.cxx:818 +#: vncviewer/Viewport.cxx:778 msgctxt "ContextMenu|" msgid "Send Ctrl-Alt-&Del" msgstr "Ctrl-Alt-&Del zenden" -#: vncviewer/Viewport.cxx:821 +#: vncviewer/Viewport.cxx:781 msgctxt "ContextMenu|" msgid "&Refresh screen" msgstr "Sch&erm verversen" -#: vncviewer/Viewport.cxx:824 +#: vncviewer/Viewport.cxx:784 msgctxt "ContextMenu|" msgid "&Options..." msgstr "&Opties..." -#: vncviewer/Viewport.cxx:826 +#: vncviewer/Viewport.cxx:786 msgctxt "ContextMenu|" msgid "Connection &info..." msgstr "Verbindings&info..." -#: vncviewer/Viewport.cxx:828 +#: vncviewer/Viewport.cxx:788 msgctxt "ContextMenu|" msgid "About &TigerVNC viewer..." msgstr "Info over &TigerVNC-viewer..." -#: vncviewer/Viewport.cxx:831 +#: vncviewer/Viewport.cxx:791 msgctxt "ContextMenu|" msgid "Dismiss &menu" msgstr "Menu ver&laten" -#: vncviewer/Viewport.cxx:915 +#: vncviewer/Viewport.cxx:875 msgid "VNC connection info" msgstr "VNC-verbindingsinfo" @@ -495,123 +489,123 @@ msgstr "### BitBlt is mislukt" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:61 +#: vncviewer/X11PixelBuffer.cxx:65 msgid "Display lacks pixmap format for default depth" msgstr "Scherm heeft geen pixmap-indeling voor standaard kleurdiepte" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:72 +#: vncviewer/X11PixelBuffer.cxx:76 msgid "Couldn't find suitable pixmap format" msgstr "Kan geen geschikte pixmap-indeling vinden" -#: vncviewer/X11PixelBuffer.cxx:81 +#: vncviewer/X11PixelBuffer.cxx:85 msgid "Only true colour displays supported" msgstr "Alleen true-color beeldschermen worden ondersteund" -#: vncviewer/X11PixelBuffer.cxx:83 +#: vncviewer/X11PixelBuffer.cxx:87 #, c-format msgid "Using default colormap and visual, TrueColor, depth %d." msgstr "Standaard kleurenkaart en visual worden gebruikt, TrueColor, diepte %d." -#: vncviewer/X11PixelBuffer.cxx:109 +#: vncviewer/X11PixelBuffer.cxx:113 msgid "Could not create framebuffer image" msgstr "Kan framebuffer-afbeelding niet aanmaken" -#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313 +#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320 #, c-format msgid "The name of the parameter %s was too large to write to the registry" msgstr "De naam van parameter %s is te lang om naar het register te schrijven" -#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292 +#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299 #, c-format msgid "The parameter %s was too large to write to the registry" msgstr "Parameter %s is te lang om naar het register te schrijven" -#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319 +#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326 #, c-format msgid "Failed to write parameter %s of type %s to the registry: %ld" msgstr "Schrijven van parameter %s van type %s naar het register is mislukt: %ld" -#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373 +#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380 #, c-format msgid "The name of the parameter %s was too large to read from the registry" msgstr "De naam van parameter %s is te lang om uit het register te lezen" -#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382 +#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389 #, c-format msgid "Failed to read parameter %s from the registry: %ld" msgstr "Lezen van parameter %s uit het register is mislukt: %ld" -#: vncviewer/parameters.cxx:352 +#: vncviewer/parameters.cxx:359 #, c-format msgid "The parameter %s was too large to read from the registry" msgstr "Parameter %s is te lang om uit het register te lezen" -#: vncviewer/parameters.cxx:402 +#: vncviewer/parameters.cxx:409 #, c-format msgid "Failed to create registry key: %ld" msgstr "Aanmaken registersleutel is mislukt: %ld" -#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465 -#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658 +#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665 #, c-format msgid "Unknown parameter type for parameter %s" msgstr "Onbekend parametertype voor parameter %s" -#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479 #, c-format msgid "Failed to close registry key: %ld" msgstr "Sluiten van registersleutel is mislukt: %ld" -#: vncviewer/parameters.cxx:439 +#: vncviewer/parameters.cxx:446 #, c-format msgid "Failed to open registry key: %ld" msgstr "Openen van registersleutel is mislukt: %ld" -#: vncviewer/parameters.cxx:496 +#: vncviewer/parameters.cxx:503 msgid "Failed to write configuration file, can't obtain home directory path." msgstr "Schrijven van configuratiebestand is mislukt; kan pad van thuismap niet verkrijgen." -#: vncviewer/parameters.cxx:509 +#: vncviewer/parameters.cxx:516 #, c-format msgid "Failed to write configuration file, can't open %s: %s" msgstr "Schrijven van configuratiebestand is mislukt; kan %s niet openen: %s" -#: vncviewer/parameters.cxx:552 +#: vncviewer/parameters.cxx:559 msgid "Failed to read configuration file, can't obtain home directory path." msgstr "Lezen van configuratiebestand is mislukt; kan pad van thuismap niet verkrijgen." -#: vncviewer/parameters.cxx:565 +#: vncviewer/parameters.cxx:572 #, c-format msgid "Failed to read configuration file, can't open %s: %s" msgstr "Lezen van configuratiebestand is mislukt; kan %s niet openen: %s" -#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583 -#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621 -#: vncviewer/parameters.cxx:637 +#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590 +#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628 +#: vncviewer/parameters.cxx:644 #, c-format msgid "Failed to read line %d in file %s: %s" msgstr "Lezen van regel %d in bestand %s is mislukt: %s" -#: vncviewer/parameters.cxx:584 +#: vncviewer/parameters.cxx:591 msgid "Line too long" msgstr "Regel is te lang" -#: vncviewer/parameters.cxx:591 +#: vncviewer/parameters.cxx:598 #, c-format msgid "Configuration file %s is in an invalid format" msgstr "Configuratiebestand %s het een ongeldige opmaak" -#: vncviewer/parameters.cxx:609 +#: vncviewer/parameters.cxx:616 msgid "Invalid format" msgstr "Ongeldige opmaak" -#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638 +#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645 msgid "Invalid format or too large value" msgstr "Ongeldige opmaak of te grote waarde" -#: vncviewer/parameters.cxx:665 +#: vncviewer/parameters.cxx:672 #, c-format msgid "Unknown parameter %s on line %d in file %s" msgstr "Onbekende parameter %s op regel %d in bestand %s" @@ -633,89 +627,95 @@ msgstr "" msgid "About TigerVNC Viewer" msgstr "Info over TigerVNC-viewer" -#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156 +#: vncviewer/vncviewer.cxx:140 +msgid "Internal FLTK error. Exiting." +msgstr "Interne FLTK-fout. Bezig met afsluiten." + +#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170 #, c-format msgid "Error starting new TigerVNC Viewer: %s" msgstr "Fout tijdens starten van nieuwe TigerVNC-viewer: %s" -#: vncviewer/vncviewer.cxx:165 +#: vncviewer/vncviewer.cxx:179 #, c-format msgid "Termination signal %d has been received. TigerVNC Viewer will now exit." msgstr "Beëindigingssignaal %d werd ontvangen. TigerVNC-viewer sluit nu af." -#: vncviewer/vncviewer.cxx:257 +#: vncviewer/vncviewer.cxx:271 msgid "TigerVNC Viewer" msgstr "TigerVNC-viewer" -#: vncviewer/vncviewer.cxx:265 +#: vncviewer/vncviewer.cxx:279 msgid "No" msgstr "Nee" -#: vncviewer/vncviewer.cxx:266 +#: vncviewer/vncviewer.cxx:280 msgid "Yes" msgstr "Ja" -#: vncviewer/vncviewer.cxx:269 +#: vncviewer/vncviewer.cxx:283 msgid "Close" msgstr "Sluiten" -#: vncviewer/vncviewer.cxx:274 +#: vncviewer/vncviewer.cxx:288 msgid "About" msgstr "Info" -#: vncviewer/vncviewer.cxx:277 +#: vncviewer/vncviewer.cxx:291 msgid "Hide" msgstr "Verbergen" -#: vncviewer/vncviewer.cxx:280 +#: vncviewer/vncviewer.cxx:294 msgid "Quit" msgstr "Afsluiten" -#: vncviewer/vncviewer.cxx:284 +#: vncviewer/vncviewer.cxx:298 msgid "Services" msgstr "Diensten" -#: vncviewer/vncviewer.cxx:285 +#: vncviewer/vncviewer.cxx:299 msgid "Hide Others" msgstr "Andere verbergen" -#: vncviewer/vncviewer.cxx:286 +#: vncviewer/vncviewer.cxx:300 msgid "Show All" msgstr "Alles tonen" -#: vncviewer/vncviewer.cxx:295 +#: vncviewer/vncviewer.cxx:309 msgctxt "SysMenu|" msgid "&File" msgstr "&Bestand" -#: vncviewer/vncviewer.cxx:298 +#: vncviewer/vncviewer.cxx:312 msgctxt "SysMenu|File|" msgid "&New Connection" msgstr "&Nieuwe verbinding" -#: vncviewer/vncviewer.cxx:310 +#: vncviewer/vncviewer.cxx:324 msgid "Could not create VNC home directory: can't obtain home directory path." msgstr "Kan de VNC-thuismap niet aanmaken: kan pad van thuismap niet verkrijgen." -#: vncviewer/vncviewer.cxx:315 +#: vncviewer/vncviewer.cxx:329 #, c-format msgid "Could not create VNC home directory: %s." msgstr "Kan de VNC-thuismap niet aanmaken: %s." #. TRANSLATORS: "Parameters" are command line arguments, or settings #. from a file or the Windows registry. -#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521 +#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535 msgid "Parameters -listen and -via are incompatible" msgstr "de opties '-listen' en '-via' gaan niet samen" -#: vncviewer/vncviewer.cxx:536 +#: vncviewer/vncviewer.cxx:550 #, c-format msgid "Listening on port %d" msgstr "Luisterend op poort %d" -#: vncviewer/vncviewer.cxx:601 -msgid "Internal FLTK error. Exiting." -msgstr "Interne FLTK-fout. Bezig met afsluiten." +#~ msgid "Unknown encoding %d" +#~ msgstr "Onbekende codering %d" + +#~ msgid "Unknown encoding" +#~ msgstr "Onbekende codering" #~ msgid "Bad Name/Value pair on line: %d in file: %s" #~ msgstr "Ongeldig naam-waardepaar op regel %d in bestand %s" diff --git a/po/pt_BR.po b/po/pt_BR.po index ec1dd046..0a061d8e 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -1,14 +1,14 @@ # Brazilian Portuguese translation of tigervnc. -# Copyright (C) 2015 the TigerVNC Team (msgids) +# Copyright (C) 2016 the TigerVNC Team (msgids) # This file is distributed under the same license as the tigervnc package. -# Rafael Fontenelle <rffontenelle@gmail.com>, 2015. +# Rafael Fontenelle <rffontenelle@gmail.com>, 2015, 2016. # msgid "" msgstr "" -"Project-Id-Version: tigervnc 1.5.90\n" +"Project-Id-Version: tigervnc 1.6.90\n" "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" -"POT-Creation-Date: 2015-11-26 11:33+0000\n" -"PO-Revision-Date: 2015-12-15 15:50-0200\n" +"POT-Creation-Date: 2016-07-01 10:15+0000\n" +"PO-Revision-Date: 2016-07-01 15:36-0200\n" "Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>\n" "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n" "Language: pt_BR\n" @@ -18,108 +18,98 @@ msgstr "" "X-Generator: Poedit 1.8.6\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: vncviewer/CConn.cxx:111 +#: vncviewer/CConn.cxx:110 #, c-format msgid "connected to host %s port %d" msgstr "conectado ao host %s porta %d" -#: vncviewer/CConn.cxx:173 +#: vncviewer/CConn.cxx:169 #, c-format msgid "Desktop name: %.80s" msgstr "Nome do desktop: %.80s" -#: vncviewer/CConn.cxx:178 +#: vncviewer/CConn.cxx:174 #, c-format msgid "Host: %.80s port: %d" msgstr "Host %.80s porta: %d" -#: vncviewer/CConn.cxx:183 +#: vncviewer/CConn.cxx:179 #, c-format msgid "Size: %d x %d" msgstr "Tamanho: %d x %d" -#: vncviewer/CConn.cxx:191 +#: vncviewer/CConn.cxx:187 #, c-format msgid "Pixel format: %s" msgstr "Formato de pixel: %s" -#: vncviewer/CConn.cxx:198 +#: vncviewer/CConn.cxx:194 #, c-format msgid "(server default %s)" msgstr "(padrão do servidor %s)" -#: vncviewer/CConn.cxx:203 +#: vncviewer/CConn.cxx:199 #, c-format msgid "Requested encoding: %s" msgstr "Codificação solicitada: %s" -#: vncviewer/CConn.cxx:208 +#: vncviewer/CConn.cxx:204 #, c-format msgid "Last used encoding: %s" msgstr "Última codificação usada: %s" -#: vncviewer/CConn.cxx:213 +#: vncviewer/CConn.cxx:209 #, c-format msgid "Line speed estimate: %d kbit/s" msgstr "Velocidade estimada da linha: %d kbit/s" -#: vncviewer/CConn.cxx:218 +#: vncviewer/CConn.cxx:214 #, c-format msgid "Protocol version: %d.%d" msgstr "Versão do protocolo: %d.%d" -#: vncviewer/CConn.cxx:223 +#: vncviewer/CConn.cxx:219 #, c-format msgid "Security method: %s" msgstr "Método de segurança: %s" -#: vncviewer/CConn.cxx:329 +#: vncviewer/CConn.cxx:319 #, c-format msgid "SetDesktopSize failed: %d" msgstr "Definir tamanho do desktop falhou: %d" -#: vncviewer/CConn.cxx:398 +#: vncviewer/CConn.cxx:411 msgid "Invalid SetColourMapEntries from server!" msgstr "SetColourMapEntries inválido do servidor!" -#. TRANSLATORS: Refers to a VNC protocol encoding type -#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451 -#, c-format -msgid "Unknown encoding %d" -msgstr "Codificação %d desconhecida" - -#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452 -msgid "Unknown encoding" -msgstr "Codificação desconhecida" - -#: vncviewer/CConn.cxx:484 +#: vncviewer/CConn.cxx:485 msgid "Enabling continuous updates" msgstr "Ativando atualizações contínuas" -#: vncviewer/CConn.cxx:554 +#: vncviewer/CConn.cxx:555 #, c-format msgid "Throughput %d kbit/s - changing to quality %d" msgstr "Resultado %d kbit/s - alteração para qualidade %d" -#: vncviewer/CConn.cxx:576 +#: vncviewer/CConn.cxx:577 #, c-format msgid "Throughput %d kbit/s - full color is now %s" msgstr "Resultado %d kbit/s - a cor total agora está em %s" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "disabled" msgstr "desativado" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "enabled" msgstr "ativado" -#: vncviewer/CConn.cxx:588 +#: vncviewer/CConn.cxx:589 #, c-format msgid "Using %s encoding" msgstr "Usando codificação %s" -#: vncviewer/CConn.cxx:635 +#: vncviewer/CConn.cxx:636 #, c-format msgid "Using pixel format %s" msgstr "Usando formato de pixel %s" @@ -128,25 +118,25 @@ msgstr "Usando formato de pixel %s" msgid "Invalid geometry specified!" msgstr "Geometria inválida especificada!" -#: vncviewer/DesktopWindow.cxx:309 +#: vncviewer/DesktopWindow.cxx:303 msgid "Adjusting window size to avoid accidental full screen request" msgstr "Ajustando tamanho de janela para evitar solicitação de tela cheia acidental" -#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497 -#: vncviewer/DesktopWindow.cxx:510 +#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491 +#: vncviewer/DesktopWindow.cxx:504 msgid "Failure grabbing keyboard" msgstr "Falha ao se conectar com o teclado" -#: vncviewer/DesktopWindow.cxx:522 +#: vncviewer/DesktopWindow.cxx:516 msgid "Failure grabbing mouse" msgstr "Falha ao se conectar com o mouse" -#: vncviewer/DesktopWindow.cxx:752 +#: vncviewer/DesktopWindow.cxx:746 msgid "Invalid screen layout computed for resize request!" msgstr "Layout de tela inválida computada para solicitação de redimensionamento!" #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48 -#: vncviewer/X11PixelBuffer.cxx:113 +#: vncviewer/X11PixelBuffer.cxx:117 msgid "Not enough memory for framebuffer" msgstr "Memória insuficiente para o framebuffer" @@ -163,160 +153,164 @@ msgid "VNC Viewer: Connection Options" msgstr "Visualizador VNC: Opções da conexão" #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91 -#: vncviewer/vncviewer.cxx:268 +#: vncviewer/vncviewer.cxx:282 msgid "Cancel" msgstr "Cancelar" -#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267 +#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281 msgid "OK" msgstr "OK" -#: vncviewer/OptionsDialog.cxx:413 +#: vncviewer/OptionsDialog.cxx:423 msgid "Compression" msgstr "Compressão" -#: vncviewer/OptionsDialog.cxx:429 +#: vncviewer/OptionsDialog.cxx:439 msgid "Auto select" msgstr "Seleção automática" -#: vncviewer/OptionsDialog.cxx:441 +#: vncviewer/OptionsDialog.cxx:451 msgid "Preferred encoding" msgstr "Codificação preferida" -#: vncviewer/OptionsDialog.cxx:489 +#: vncviewer/OptionsDialog.cxx:499 msgid "Color level" msgstr "Profundidade de cores" -#: vncviewer/OptionsDialog.cxx:500 +#: vncviewer/OptionsDialog.cxx:510 msgid "Full (all available colors)" msgstr "Completo (todas as cores)" -#: vncviewer/OptionsDialog.cxx:507 +#: vncviewer/OptionsDialog.cxx:517 msgid "Medium (256 colors)" msgstr "Médio (256 cores)" -#: vncviewer/OptionsDialog.cxx:514 +#: vncviewer/OptionsDialog.cxx:524 msgid "Low (64 colors)" msgstr "Baixo (64 cores)" -#: vncviewer/OptionsDialog.cxx:521 +#: vncviewer/OptionsDialog.cxx:531 msgid "Very low (8 colors)" msgstr "Muito baixo (8 cores)" -#: vncviewer/OptionsDialog.cxx:538 +#: vncviewer/OptionsDialog.cxx:548 msgid "Custom compression level:" msgstr "Compressão personalizada:" -#: vncviewer/OptionsDialog.cxx:544 +#: vncviewer/OptionsDialog.cxx:554 msgid "level (1=fast, 6=best [4-6 are rarely useful])" msgstr "nível (1=rápido, 6=o melhor [4-6 raramente úteis])" -#: vncviewer/OptionsDialog.cxx:551 +#: vncviewer/OptionsDialog.cxx:561 msgid "Allow JPEG compression:" msgstr "Permite compressão JPEG:" -#: vncviewer/OptionsDialog.cxx:557 +#: vncviewer/OptionsDialog.cxx:567 msgid "quality (0=poor, 9=best)" msgstr "qualidade (0=ruim, 9=o melhor)" -#: vncviewer/OptionsDialog.cxx:568 +#: vncviewer/OptionsDialog.cxx:578 msgid "Security" msgstr "Segurança" -#: vncviewer/OptionsDialog.cxx:583 +#: vncviewer/OptionsDialog.cxx:593 msgid "Encryption" msgstr "Criptografia" -#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647 -#: vncviewer/OptionsDialog.cxx:715 +#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657 +#: vncviewer/OptionsDialog.cxx:735 msgid "None" msgstr "Nenhum" -#: vncviewer/OptionsDialog.cxx:600 +#: vncviewer/OptionsDialog.cxx:610 msgid "TLS with anonymous certificates" msgstr "TLS com certificados anônimos" -#: vncviewer/OptionsDialog.cxx:606 +#: vncviewer/OptionsDialog.cxx:616 msgid "TLS with X509 certificates" msgstr "TLS com certificados X509" -#: vncviewer/OptionsDialog.cxx:613 +#: vncviewer/OptionsDialog.cxx:623 msgid "Path to X509 CA certificate" msgstr "Caminho para o certificado X509 CA" -#: vncviewer/OptionsDialog.cxx:620 +#: vncviewer/OptionsDialog.cxx:630 msgid "Path to X509 CRL file" msgstr "Caminho para o arquivo X509 CRL" -#: vncviewer/OptionsDialog.cxx:636 +#: vncviewer/OptionsDialog.cxx:646 msgid "Authentication" msgstr "Autenticação" -#: vncviewer/OptionsDialog.cxx:653 +#: vncviewer/OptionsDialog.cxx:663 msgid "Standard VNC (insecure without encryption)" msgstr "VNC padrão (inseguro sem criptografia)" -#: vncviewer/OptionsDialog.cxx:659 +#: vncviewer/OptionsDialog.cxx:669 msgid "Username and password (insecure without encryption)" msgstr "Usuário e senha (inseguro sem criptografia)" -#: vncviewer/OptionsDialog.cxx:678 +#: vncviewer/OptionsDialog.cxx:688 msgid "Input" msgstr "Entrada" -#: vncviewer/OptionsDialog.cxx:686 +#: vncviewer/OptionsDialog.cxx:696 msgid "View only (ignore mouse and keyboard)" msgstr "Ver apenas (ignora mouse e teclado)" -#: vncviewer/OptionsDialog.cxx:692 +#: vncviewer/OptionsDialog.cxx:702 msgid "Accept clipboard from server" msgstr "Aceitar área de transferência do servidor" -#: vncviewer/OptionsDialog.cxx:698 +#: vncviewer/OptionsDialog.cxx:709 +msgid "Also set primary selection" +msgstr "Também enviar seleção primária" + +#: vncviewer/OptionsDialog.cxx:716 msgid "Send clipboard to server" msgstr "Enviar área de transferência para o servidor" -#: vncviewer/OptionsDialog.cxx:704 -msgid "Send primary selection and cut buffer as clipboard" -msgstr "Enviar seleção primária e recortar buffer como área de transferência" +#: vncviewer/OptionsDialog.cxx:723 +msgid "Send primary selection as clipboard" +msgstr "Enviar seleção primária como área de transferência" -#: vncviewer/OptionsDialog.cxx:710 +#: vncviewer/OptionsDialog.cxx:730 msgid "Pass system keys directly to server (full screen)" msgstr "Passar teclas de sistema diretamente para o servidor (tela cheia)" -#: vncviewer/OptionsDialog.cxx:713 +#: vncviewer/OptionsDialog.cxx:733 msgid "Menu key" msgstr "Tecla de menu" -#: vncviewer/OptionsDialog.cxx:729 +#: vncviewer/OptionsDialog.cxx:749 msgid "Screen" msgstr "Tela" -#: vncviewer/OptionsDialog.cxx:737 +#: vncviewer/OptionsDialog.cxx:757 msgid "Resize remote session on connect" msgstr "Redimensionar a sessão remota ao conectar" -#: vncviewer/OptionsDialog.cxx:750 +#: vncviewer/OptionsDialog.cxx:770 msgid "Resize remote session to the local window" msgstr "Redimensionar a sessão remota para a janela local" -#: vncviewer/OptionsDialog.cxx:756 +#: vncviewer/OptionsDialog.cxx:776 msgid "Full-screen mode" msgstr "Modo tela cheia" -#: vncviewer/OptionsDialog.cxx:762 +#: vncviewer/OptionsDialog.cxx:782 msgid "Enable full-screen mode over all monitors" msgstr "Ativar o modo de tela cheia em todos os monitores" -#: vncviewer/OptionsDialog.cxx:771 +#: vncviewer/OptionsDialog.cxx:791 msgid "Misc." msgstr "Diversos" -#: vncviewer/OptionsDialog.cxx:779 +#: vncviewer/OptionsDialog.cxx:799 msgid "Shared (don't disconnect other viewers)" msgstr "Compartilhado (não desconecta outros visualizadores)" -#: vncviewer/OptionsDialog.cxx:785 +#: vncviewer/OptionsDialog.cxx:805 msgid "Show dot when no cursor" msgstr "Mostrar ponto quando estiver sem mouse" @@ -334,11 +328,11 @@ msgstr "Opções..." #: vncviewer/ServerDialog.cxx:69 msgid "Load..." -msgstr "Carregar…" +msgstr "Carregar..." #: vncviewer/ServerDialog.cxx:74 msgid "Save As..." -msgstr "Salvar como…" +msgstr "Salvar como..." #: vncviewer/ServerDialog.cxx:86 msgid "About..." @@ -368,112 +362,112 @@ msgstr "Autenticação cancelada" msgid "Username:" msgstr "Nome de usuário:" -#: vncviewer/Viewport.cxx:433 +#: vncviewer/Viewport.cxx:391 #, c-format msgid "Unable to create platform specific framebuffer: %s" -msgstr "Não foi possível criar frambuffer específico da plataforma: %s" +msgstr "Não foi possível criar framebuffer específico da plataforma: %s" -#: vncviewer/Viewport.cxx:434 +#: vncviewer/Viewport.cxx:392 msgid "Using platform independent framebuffer" -msgstr "Usando frambuffer independente de plataforma" +msgstr "Usando framebuffer independente de plataforma" -#: vncviewer/Viewport.cxx:668 +#: vncviewer/Viewport.cxx:628 #, c-format msgid "No scan code for extended virtual key 0x%02x" msgstr "Nenhum código de scan para a tecla virtual estendida 0x%02x" -#: vncviewer/Viewport.cxx:670 +#: vncviewer/Viewport.cxx:630 #, c-format msgid "No scan code for virtual key 0x%02x" msgstr "Nenhum código de scan para a tecla virtual 0x%02x" -#: vncviewer/Viewport.cxx:687 +#: vncviewer/Viewport.cxx:647 #, c-format msgid "No symbol for extended virtual key 0x%02x" msgstr "Nenhum símbolo para a tecla virtual estendida 0x%02x" -#: vncviewer/Viewport.cxx:689 +#: vncviewer/Viewport.cxx:649 #, c-format msgid "No symbol for virtual key 0x%02x" msgstr "Nenhum símbolo para a tecla virtual 0x%02x" -#: vncviewer/Viewport.cxx:727 +#: vncviewer/Viewport.cxx:687 #, c-format msgid "No symbol for key code 0x%02x (in the current state)" msgstr "Nenhum símbolo para a tecla virtual 0x%02x (no estado atual)" -#: vncviewer/Viewport.cxx:753 +#: vncviewer/Viewport.cxx:713 #, c-format msgid "No symbol for key code %d (in the current state)" msgstr "Nenhum símbolo para a tecla virtual %d (no estado atual)" -#: vncviewer/Viewport.cxx:790 +#: vncviewer/Viewport.cxx:750 msgctxt "ContextMenu|" msgid "E&xit viewer" msgstr "&Sair do visualizador" -#: vncviewer/Viewport.cxx:793 +#: vncviewer/Viewport.cxx:753 msgctxt "ContextMenu|" msgid "&Full screen" msgstr "&Tela cheia" -#: vncviewer/Viewport.cxx:796 +#: vncviewer/Viewport.cxx:756 msgctxt "ContextMenu|" msgid "Minimi&ze" msgstr "Minimi&zar" -#: vncviewer/Viewport.cxx:798 +#: vncviewer/Viewport.cxx:758 msgctxt "ContextMenu|" msgid "Resize &window to session" msgstr "Redimensionar a &janela para a sessão" -#: vncviewer/Viewport.cxx:803 +#: vncviewer/Viewport.cxx:763 msgctxt "ContextMenu|" msgid "&Ctrl" msgstr "&Ctrl" -#: vncviewer/Viewport.cxx:806 +#: vncviewer/Viewport.cxx:766 msgctxt "ContextMenu|" msgid "&Alt" msgstr "&Alt" -#: vncviewer/Viewport.cxx:812 +#: vncviewer/Viewport.cxx:772 #, c-format msgctxt "ContextMenu|" msgid "Send %s" msgstr "Enviar %s" -#: vncviewer/Viewport.cxx:818 +#: vncviewer/Viewport.cxx:778 msgctxt "ContextMenu|" msgid "Send Ctrl-Alt-&Del" msgstr "Enviar Ctrl-Alt-&Del" -#: vncviewer/Viewport.cxx:821 +#: vncviewer/Viewport.cxx:781 msgctxt "ContextMenu|" msgid "&Refresh screen" msgstr "&Atualizar tela" -#: vncviewer/Viewport.cxx:824 +#: vncviewer/Viewport.cxx:784 msgctxt "ContextMenu|" msgid "&Options..." msgstr "&Opções..." -#: vncviewer/Viewport.cxx:826 +#: vncviewer/Viewport.cxx:786 msgctxt "ContextMenu|" msgid "Connection &info..." msgstr "&Informação de conexão..." -#: vncviewer/Viewport.cxx:828 +#: vncviewer/Viewport.cxx:788 msgctxt "ContextMenu|" msgid "About &TigerVNC viewer..." msgstr "Sobre o visualizador &TigerVNC..." -#: vncviewer/Viewport.cxx:831 +#: vncviewer/Viewport.cxx:791 msgctxt "ContextMenu|" msgid "Dismiss &menu" msgstr "Recusar &menu" -#: vncviewer/Viewport.cxx:915 +#: vncviewer/Viewport.cxx:875 msgid "VNC connection info" msgstr "Informação de conexão VNC..." @@ -495,123 +489,123 @@ msgstr "BitBlt falhou" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:61 +#: vncviewer/X11PixelBuffer.cxx:65 msgid "Display lacks pixmap format for default depth" -msgstr "Tela carece de formato de pixamp para profundidade padrão" +msgstr "Tela carece de formato de pixmap para profundidade padrão" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:72 +#: vncviewer/X11PixelBuffer.cxx:76 msgid "Couldn't find suitable pixmap format" -msgstr "Não foi possível localizar um formato de pixamo adequado" +msgstr "Não foi possível localizar um formato de pixmap adequado" -#: vncviewer/X11PixelBuffer.cxx:81 +#: vncviewer/X11PixelBuffer.cxx:85 msgid "Only true colour displays supported" -msgstr "Apenas suporte a telas true color" +msgstr "Apenas suporte a telas True Color" -#: vncviewer/X11PixelBuffer.cxx:83 +#: vncviewer/X11PixelBuffer.cxx:87 #, c-format msgid "Using default colormap and visual, TrueColor, depth %d." msgstr "Usando mapa de cores padrão e visual, TrueColor, profundidade %d." -#: vncviewer/X11PixelBuffer.cxx:109 +#: vncviewer/X11PixelBuffer.cxx:113 msgid "Could not create framebuffer image" msgstr "Não foi possível criar imagem framebuffer" -#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313 +#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320 #, c-format msgid "The name of the parameter %s was too large to write to the registry" msgstr "O nome do parâmetro %s era grande demais ser escrito no registro" -#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292 +#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299 #, c-format msgid "The parameter %s was too large to write to the registry" msgstr "O parâmetro %s era grande demais para ser escrito no registro" -#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319 +#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326 #, c-format msgid "Failed to write parameter %s of type %s to the registry: %ld" msgstr "Falha ao escrever parâmetro %s do tipo %s no registro: %ld" -#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373 +#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380 #, c-format msgid "The name of the parameter %s was too large to read from the registry" msgstr "O nome do parâmetro %s era grande demais ser lido do registro" -#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382 +#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389 #, c-format msgid "Failed to read parameter %s from the registry: %ld" -msgstr "flaha ao ler parâmetro %s do registro: %ld" +msgstr "Falha ao ler parâmetro %s do registro: %ld" -#: vncviewer/parameters.cxx:352 +#: vncviewer/parameters.cxx:359 #, c-format msgid "The parameter %s was too large to read from the registry" msgstr "O parâmetro %s era grande demais para ser lido do registro" -#: vncviewer/parameters.cxx:402 +#: vncviewer/parameters.cxx:409 #, c-format msgid "Failed to create registry key: %ld" msgstr "Falha ao criar chave de registro: %ld" -#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465 -#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658 +#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665 #, c-format msgid "Unknown parameter type for parameter %s" msgstr "Tipo de parâmetro desconhecido para o parâmetro %s" -#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479 #, c-format msgid "Failed to close registry key: %ld" msgstr "Falha ao fechar chave de registro: %ld" -#: vncviewer/parameters.cxx:439 +#: vncviewer/parameters.cxx:446 #, c-format msgid "Failed to open registry key: %ld" msgstr "Falha ao abrir chave de registro: %ld" -#: vncviewer/parameters.cxx:496 +#: vncviewer/parameters.cxx:503 msgid "Failed to write configuration file, can't obtain home directory path." -msgstr "Não foi possível escrever o arquivo de configuração, não foi possível obter o caminho do diretório home." +msgstr "Não foi possível escrever o arquivo de configuração, não foi possível obter o caminho do diretório HOME." -#: vncviewer/parameters.cxx:509 +#: vncviewer/parameters.cxx:516 #, c-format msgid "Failed to write configuration file, can't open %s: %s" msgstr "Não foi possível escrever o arquivo de configuração, não foi possível abrir %s: %s" -#: vncviewer/parameters.cxx:552 +#: vncviewer/parameters.cxx:559 msgid "Failed to read configuration file, can't obtain home directory path." -msgstr "Não foi possível ler o arquivo de configuração, não foi possível obter o caminho do diretório home." +msgstr "Não foi possível ler o arquivo de configuração, não foi possível obter o caminho do diretório HOME." -#: vncviewer/parameters.cxx:565 +#: vncviewer/parameters.cxx:572 #, c-format msgid "Failed to read configuration file, can't open %s: %s" msgstr "Não foi possível ler o arquivo de configuração, não foi possível abrir %s: %s" -#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583 -#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621 -#: vncviewer/parameters.cxx:637 +#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590 +#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628 +#: vncviewer/parameters.cxx:644 #, c-format msgid "Failed to read line %d in file %s: %s" msgstr "Falha ao ler a linha %d no arquivo %s: %s" -#: vncviewer/parameters.cxx:584 +#: vncviewer/parameters.cxx:591 msgid "Line too long" msgstr "Linha longa demais" -#: vncviewer/parameters.cxx:591 +#: vncviewer/parameters.cxx:598 #, c-format msgid "Configuration file %s is in an invalid format" msgstr "O arquivo de configuração %s está em um formato inválido" -#: vncviewer/parameters.cxx:609 +#: vncviewer/parameters.cxx:616 msgid "Invalid format" msgstr "Formato inválido" -#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638 +#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645 msgid "Invalid format or too large value" msgstr "Formato inválido ou valor grande demais" -#: vncviewer/parameters.cxx:665 +#: vncviewer/parameters.cxx:672 #, c-format msgid "Unknown parameter %s on line %d in file %s" msgstr "Parâmetro %s desconhecido na linha %d no arquivo %s" @@ -633,89 +627,95 @@ msgstr "" msgid "About TigerVNC Viewer" msgstr "Sobre o Visualizador TigerVNC" -#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156 +#: vncviewer/vncviewer.cxx:140 +msgid "Internal FLTK error. Exiting." +msgstr "Erro interno no FLTK. Saindo." + +#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170 #, c-format msgid "Error starting new TigerVNC Viewer: %s" msgstr "Erro ao iniciar novo Visualizador TigerVNC: %s" -#: vncviewer/vncviewer.cxx:165 +#: vncviewer/vncviewer.cxx:179 #, c-format msgid "Termination signal %d has been received. TigerVNC Viewer will now exit." msgstr "Sinal de terminação %d foi recebido. Visualizador TigerVNC vai fechar agora." -#: vncviewer/vncviewer.cxx:257 +#: vncviewer/vncviewer.cxx:271 msgid "TigerVNC Viewer" msgstr "Visualizador TigerVNC" -#: vncviewer/vncviewer.cxx:265 +#: vncviewer/vncviewer.cxx:279 msgid "No" msgstr "Não" -#: vncviewer/vncviewer.cxx:266 +#: vncviewer/vncviewer.cxx:280 msgid "Yes" msgstr "Sim" -#: vncviewer/vncviewer.cxx:269 +#: vncviewer/vncviewer.cxx:283 msgid "Close" msgstr "Fechar" -#: vncviewer/vncviewer.cxx:274 +#: vncviewer/vncviewer.cxx:288 msgid "About" msgstr "Sobre" -#: vncviewer/vncviewer.cxx:277 +#: vncviewer/vncviewer.cxx:291 msgid "Hide" msgstr "Ocultar" -#: vncviewer/vncviewer.cxx:280 +#: vncviewer/vncviewer.cxx:294 msgid "Quit" msgstr "Sair" -#: vncviewer/vncviewer.cxx:284 +#: vncviewer/vncviewer.cxx:298 msgid "Services" msgstr "Serviços" -#: vncviewer/vncviewer.cxx:285 +#: vncviewer/vncviewer.cxx:299 msgid "Hide Others" msgstr "Ocultar Outros" -#: vncviewer/vncviewer.cxx:286 +#: vncviewer/vncviewer.cxx:300 msgid "Show All" msgstr "Exibir Todos" -#: vncviewer/vncviewer.cxx:295 +#: vncviewer/vncviewer.cxx:309 msgctxt "SysMenu|" msgid "&File" msgstr "&Arquivo" -#: vncviewer/vncviewer.cxx:298 +#: vncviewer/vncviewer.cxx:312 msgctxt "SysMenu|File|" msgid "&New Connection" msgstr "&Nova Conexão" -#: vncviewer/vncviewer.cxx:310 +#: vncviewer/vncviewer.cxx:324 msgid "Could not create VNC home directory: can't obtain home directory path." -msgstr "Não foi possível criar o diretório home VNC: não foi possível obter o caminho do diretório home." +msgstr "Não foi possível criar o diretório HOME do VNC: não foi possível obter o caminho do diretório HOME." -#: vncviewer/vncviewer.cxx:315 +#: vncviewer/vncviewer.cxx:329 #, c-format msgid "Could not create VNC home directory: %s." -msgstr "Não foi possível criar um diretório inicial VNC: %s." +msgstr "Não foi possível criar um diretório HOME do VNC: %s." #. TRANSLATORS: "Parameters" are command line arguments, or settings #. from a file or the Windows registry. -#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521 +#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535 msgid "Parameters -listen and -via are incompatible" msgstr "Os parâmetros -listen e -via são incompatíveis" -#: vncviewer/vncviewer.cxx:536 +#: vncviewer/vncviewer.cxx:550 #, c-format msgid "Listening on port %d" msgstr "Ouvindo na porta %d" -#: vncviewer/vncviewer.cxx:601 -msgid "Internal FLTK error. Exiting." -msgstr "Erro interno no FLTK. Saindo." +#~ msgid "Unknown encoding %d" +#~ msgstr "Codificação %d desconhecida" + +#~ msgid "Unknown encoding" +#~ msgstr "Codificação desconhecida" #~ msgid "Multiple characters given for key code %d (0x%04x): '%s'" #~ msgstr "Diversos caracteres fornecidos como código de chave %d (0x%04x): '%s'" @@ -1,126 +1,117 @@ # Russian translation for tigervnc. # Copyright © 2016 the TigerVNC Team (msgids) # This file is distributed under the same license as the tigervnc package. -# Constantin Kaplinsky <const@tightvnc.com>, 2011. # PuppyRus linux team <www.puppyrus.org>. +# Constantin Kaplinsky <const@tightvnc.com>, 2011. # Pavel Maryanov <acid@jack.kiev.ua>, 2016. +# Yuri Kozlov <yuray@komyakino.ru>, 2016. msgid "" msgstr "" -"Project-Id-Version: tigervnc 1.5.90\n" +"Project-Id-Version: tigervnc 1.6.90\n" "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" -"POT-Creation-Date: 2015-11-26 11:33+0000\n" -"PO-Revision-Date: 2016-04-07 16:08+0300\n" -"Last-Translator: Pavel Maryanov <acid@jack.kiev.ua>\n" +"POT-Creation-Date: 2016-07-01 10:15+0000\n" +"PO-Revision-Date: 2016-07-07 09:23+0300\n" +"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n" "Language-Team: Russian <gnu@d07.ru>\n" "Language: ru_UA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.8.7.1\n" +"X-Generator: Lokalize 1.5\n" -#: vncviewer/CConn.cxx:111 +#: vncviewer/CConn.cxx:110 #, c-format msgid "connected to host %s port %d" msgstr "подключен к компьютеру %s, порт %d" -#: vncviewer/CConn.cxx:173 +#: vncviewer/CConn.cxx:169 #, c-format msgid "Desktop name: %.80s" msgstr "Имя компьютера: %.80s" -#: vncviewer/CConn.cxx:178 +#: vncviewer/CConn.cxx:174 #, c-format msgid "Host: %.80s port: %d" msgstr "Компьютер: %.80s порт: %d" -#: vncviewer/CConn.cxx:183 +#: vncviewer/CConn.cxx:179 #, c-format msgid "Size: %d x %d" msgstr "Размер: %d x %d" -#: vncviewer/CConn.cxx:191 +#: vncviewer/CConn.cxx:187 #, c-format msgid "Pixel format: %s" msgstr "Формат пикселей: %s" -#: vncviewer/CConn.cxx:198 +#: vncviewer/CConn.cxx:194 #, c-format msgid "(server default %s)" msgstr "(сервер по умолчанию %s)" -#: vncviewer/CConn.cxx:203 +#: vncviewer/CConn.cxx:199 #, c-format msgid "Requested encoding: %s" msgstr "Запрошено кодирование: %s" -#: vncviewer/CConn.cxx:208 +#: vncviewer/CConn.cxx:204 #, c-format msgid "Last used encoding: %s" msgstr "Используется кодирование: %s" -#: vncviewer/CConn.cxx:213 +#: vncviewer/CConn.cxx:209 #, c-format msgid "Line speed estimate: %d kbit/s" msgstr "Скорость соединения: %d кбит/с" -#: vncviewer/CConn.cxx:218 +#: vncviewer/CConn.cxx:214 #, c-format msgid "Protocol version: %d.%d" msgstr "Версия протокола: %d.%d" -#: vncviewer/CConn.cxx:223 +#: vncviewer/CConn.cxx:219 #, c-format msgid "Security method: %s" msgstr "Метод защиты: %s" -#: vncviewer/CConn.cxx:329 +#: vncviewer/CConn.cxx:319 #, c-format msgid "SetDesktopSize failed: %d" msgstr "Ошибка SetDesktopSize: %d" -#: vncviewer/CConn.cxx:398 +#: vncviewer/CConn.cxx:411 msgid "Invalid SetColourMapEntries from server!" -msgstr "С сервера получен недопустмый SetColourMapEntries" - -#. TRANSLATORS: Refers to a VNC protocol encoding type -#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451 -#, c-format -msgid "Unknown encoding %d" -msgstr "Неизвестное кодирование %d" +msgstr "С сервера получен недопустимый SetColourMapEntries" -#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452 -msgid "Unknown encoding" -msgstr "Неизвестное кодирование" - -#: vncviewer/CConn.cxx:484 +#: vncviewer/CConn.cxx:485 msgid "Enabling continuous updates" msgstr "Включение непрерывного обновления" -#: vncviewer/CConn.cxx:554 +#: vncviewer/CConn.cxx:555 #, c-format msgid "Throughput %d kbit/s - changing to quality %d" msgstr "Пропускная способность %d кбит/с. Установлено качество %d" -#: vncviewer/CConn.cxx:576 +#: vncviewer/CConn.cxx:577 #, c-format msgid "Throughput %d kbit/s - full color is now %s" msgstr "Пропускная способность %d кбит/с. Глубина цвета %s" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "disabled" msgstr "отключено" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "enabled" msgstr "включено" -#: vncviewer/CConn.cxx:588 +#: vncviewer/CConn.cxx:589 #, c-format msgid "Using %s encoding" msgstr "Используется кодирование %s" -#: vncviewer/CConn.cxx:635 +#: vncviewer/CConn.cxx:636 #, c-format msgid "Using pixel format %s" msgstr "Используется формат пикселей %s" @@ -129,25 +120,25 @@ msgstr "Используется формат пикселей %s" msgid "Invalid geometry specified!" msgstr "Указан недопустимый размер экрана." -#: vncviewer/DesktopWindow.cxx:309 +#: vncviewer/DesktopWindow.cxx:303 msgid "Adjusting window size to avoid accidental full screen request" msgstr "Зафиксировать размер окна, чтобы исключить переключения на полный экран" -#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497 -#: vncviewer/DesktopWindow.cxx:510 +#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491 +#: vncviewer/DesktopWindow.cxx:504 msgid "Failure grabbing keyboard" msgstr "Не удалось перехватить клавиатуру" -#: vncviewer/DesktopWindow.cxx:522 +#: vncviewer/DesktopWindow.cxx:516 msgid "Failure grabbing mouse" msgstr "Не удалось перехватить мышь" -#: vncviewer/DesktopWindow.cxx:752 +#: vncviewer/DesktopWindow.cxx:746 msgid "Invalid screen layout computed for resize request!" -msgstr "Для запроса на изменение рамера рассчитан недопустимый макет экрана." +msgstr "Для запроса на изменение размера рассчитан недопустимый макет экрана." #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48 -#: vncviewer/X11PixelBuffer.cxx:113 +#: vncviewer/X11PixelBuffer.cxx:117 msgid "Not enough memory for framebuffer" msgstr "Недостаточно памяти для framebuffer" @@ -164,160 +155,164 @@ msgid "VNC Viewer: Connection Options" msgstr "VNC Viewer: параметры соединения" #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91 -#: vncviewer/vncviewer.cxx:268 +#: vncviewer/vncviewer.cxx:282 msgid "Cancel" msgstr "Отмена" -#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267 +#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281 msgid "OK" msgstr "ОК" -#: vncviewer/OptionsDialog.cxx:413 +#: vncviewer/OptionsDialog.cxx:423 msgid "Compression" msgstr "Сжатие" -#: vncviewer/OptionsDialog.cxx:429 +#: vncviewer/OptionsDialog.cxx:439 msgid "Auto select" msgstr "Автоматический выбор" -#: vncviewer/OptionsDialog.cxx:441 +#: vncviewer/OptionsDialog.cxx:451 msgid "Preferred encoding" msgstr "Вид кодирования" -#: vncviewer/OptionsDialog.cxx:489 +#: vncviewer/OptionsDialog.cxx:499 msgid "Color level" msgstr "Глубина цвета" -#: vncviewer/OptionsDialog.cxx:500 +#: vncviewer/OptionsDialog.cxx:510 msgid "Full (all available colors)" msgstr "Полная (все цвета)" -#: vncviewer/OptionsDialog.cxx:507 +#: vncviewer/OptionsDialog.cxx:517 msgid "Medium (256 colors)" msgstr "Средняя (256 цветов)" -#: vncviewer/OptionsDialog.cxx:514 +#: vncviewer/OptionsDialog.cxx:524 msgid "Low (64 colors)" msgstr "Низкая (64 цвета)" -#: vncviewer/OptionsDialog.cxx:521 +#: vncviewer/OptionsDialog.cxx:531 msgid "Very low (8 colors)" msgstr "Минимум цвета (8 цветов)" -#: vncviewer/OptionsDialog.cxx:538 +#: vncviewer/OptionsDialog.cxx:548 msgid "Custom compression level:" msgstr "Задать уровень сжатия:" -#: vncviewer/OptionsDialog.cxx:544 +#: vncviewer/OptionsDialog.cxx:554 msgid "level (1=fast, 6=best [4-6 are rarely useful])" msgstr "уровень (1=мин, 6=макс. [4-6 используются редко])" -#: vncviewer/OptionsDialog.cxx:551 +#: vncviewer/OptionsDialog.cxx:561 msgid "Allow JPEG compression:" msgstr "Разрешить сжатие JPEG:" -#: vncviewer/OptionsDialog.cxx:557 +#: vncviewer/OptionsDialog.cxx:567 msgid "quality (0=poor, 9=best)" msgstr "качество (0=наихудшее, 9=наилучшее)" -#: vncviewer/OptionsDialog.cxx:568 +#: vncviewer/OptionsDialog.cxx:578 msgid "Security" msgstr "Безопасность" -#: vncviewer/OptionsDialog.cxx:583 +#: vncviewer/OptionsDialog.cxx:593 msgid "Encryption" msgstr "Шифрование" -#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647 -#: vncviewer/OptionsDialog.cxx:715 +#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657 +#: vncviewer/OptionsDialog.cxx:735 msgid "None" msgstr "Нет" -#: vncviewer/OptionsDialog.cxx:600 +#: vncviewer/OptionsDialog.cxx:610 msgid "TLS with anonymous certificates" msgstr "TLS с анонимными сертификатами" -#: vncviewer/OptionsDialog.cxx:606 +#: vncviewer/OptionsDialog.cxx:616 msgid "TLS with X509 certificates" msgstr "TLS с сертификатами X509" -#: vncviewer/OptionsDialog.cxx:613 +#: vncviewer/OptionsDialog.cxx:623 msgid "Path to X509 CA certificate" msgstr "Путь к сертификату X509 CA" -#: vncviewer/OptionsDialog.cxx:620 +#: vncviewer/OptionsDialog.cxx:630 msgid "Path to X509 CRL file" msgstr "Путь к файлу X509 CRL" -#: vncviewer/OptionsDialog.cxx:636 +#: vncviewer/OptionsDialog.cxx:646 msgid "Authentication" msgstr "Авторизация" -#: vncviewer/OptionsDialog.cxx:653 +#: vncviewer/OptionsDialog.cxx:663 msgid "Standard VNC (insecure without encryption)" msgstr "Стандартный VNC (без защиты и шифрования)" -#: vncviewer/OptionsDialog.cxx:659 +#: vncviewer/OptionsDialog.cxx:669 msgid "Username and password (insecure without encryption)" msgstr "Имя пользователя и пароль (без защиты и шифрования)" -#: vncviewer/OptionsDialog.cxx:678 +#: vncviewer/OptionsDialog.cxx:688 msgid "Input" msgstr "Ввод" -#: vncviewer/OptionsDialog.cxx:686 +#: vncviewer/OptionsDialog.cxx:696 msgid "View only (ignore mouse and keyboard)" msgstr "Только просмотр (не перехватывать мышь и клавиатуру)" -#: vncviewer/OptionsDialog.cxx:692 +#: vncviewer/OptionsDialog.cxx:702 msgid "Accept clipboard from server" msgstr "Принимать буфер обмена с сервера" -#: vncviewer/OptionsDialog.cxx:698 +#: vncviewer/OptionsDialog.cxx:709 +msgid "Also set primary selection" +msgstr "Также принимать мышиный буфер" + +#: vncviewer/OptionsDialog.cxx:716 msgid "Send clipboard to server" msgstr "Отправлять буфер обмена на сервер" -#: vncviewer/OptionsDialog.cxx:704 -msgid "Send primary selection and cut buffer as clipboard" -msgstr "Отправлять выделение в терминале в буфер обмена сервера" +#: vncviewer/OptionsDialog.cxx:723 +msgid "Send primary selection as clipboard" +msgstr "Отправлять мышиный буфер туда же, куда и буфер обмена" -#: vncviewer/OptionsDialog.cxx:710 +#: vncviewer/OptionsDialog.cxx:730 msgid "Pass system keys directly to server (full screen)" msgstr "Отправлять сочетания клавиш (для полного экрана)" -#: vncviewer/OptionsDialog.cxx:713 +#: vncviewer/OptionsDialog.cxx:733 msgid "Menu key" msgstr "Вызов меню:" -#: vncviewer/OptionsDialog.cxx:729 +#: vncviewer/OptionsDialog.cxx:749 msgid "Screen" msgstr "Экран" -#: vncviewer/OptionsDialog.cxx:737 +#: vncviewer/OptionsDialog.cxx:757 msgid "Resize remote session on connect" msgstr "Изменить размер удалённого экрана" -#: vncviewer/OptionsDialog.cxx:750 +#: vncviewer/OptionsDialog.cxx:770 msgid "Resize remote session to the local window" msgstr "Изменить размер удалённого сеанса до локального окна" -#: vncviewer/OptionsDialog.cxx:756 +#: vncviewer/OptionsDialog.cxx:776 msgid "Full-screen mode" msgstr "Полноэкранный режим" -#: vncviewer/OptionsDialog.cxx:762 +#: vncviewer/OptionsDialog.cxx:782 msgid "Enable full-screen mode over all monitors" msgstr "Расширить режим полного экрана на все мониторы" -#: vncviewer/OptionsDialog.cxx:771 +#: vncviewer/OptionsDialog.cxx:791 msgid "Misc." msgstr "Разное" -#: vncviewer/OptionsDialog.cxx:779 +#: vncviewer/OptionsDialog.cxx:799 msgid "Shared (don't disconnect other viewers)" msgstr "Совместная работа (не отключать других клиентов)" -#: vncviewer/OptionsDialog.cxx:785 +#: vncviewer/OptionsDialog.cxx:805 msgid "Show dot when no cursor" msgstr "Показывать точку при отсутствии курсора" @@ -369,112 +364,112 @@ msgstr "Авторизация отменена" msgid "Username:" msgstr "Имя пользователя:" -#: vncviewer/Viewport.cxx:433 +#: vncviewer/Viewport.cxx:391 #, c-format msgid "Unable to create platform specific framebuffer: %s" msgstr "Не удаётся создать framebuffer: %s" -#: vncviewer/Viewport.cxx:434 +#: vncviewer/Viewport.cxx:392 msgid "Using platform independent framebuffer" msgstr "Используется универсальный framebuffer" -#: vncviewer/Viewport.cxx:668 +#: vncviewer/Viewport.cxx:628 #, c-format msgid "No scan code for extended virtual key 0x%02x" msgstr "Нет скан-кода для дополнительной виртуальной клавиши 0x%02x" -#: vncviewer/Viewport.cxx:670 +#: vncviewer/Viewport.cxx:630 #, c-format msgid "No scan code for virtual key 0x%02x" msgstr "Нет скан-кода для виртуальной клавиши 0x%02x" -#: vncviewer/Viewport.cxx:687 +#: vncviewer/Viewport.cxx:647 #, c-format msgid "No symbol for extended virtual key 0x%02x" msgstr "Нет символа для расширенной виртуальной клавиши 0x%02x" -#: vncviewer/Viewport.cxx:689 +#: vncviewer/Viewport.cxx:649 #, c-format msgid "No symbol for virtual key 0x%02x" msgstr "Нет символа для виртуальной клавиши 0x%02x" -#: vncviewer/Viewport.cxx:727 +#: vncviewer/Viewport.cxx:687 #, c-format msgid "No symbol for key code 0x%02x (in the current state)" msgstr "Нет символа для кода клавиши 0x%02x (в текущем состоянии)" -#: vncviewer/Viewport.cxx:753 +#: vncviewer/Viewport.cxx:713 #, c-format msgid "No symbol for key code %d (in the current state)" msgstr "Нет символа для кода клавиши %d (в текущем состоянии)" -#: vncviewer/Viewport.cxx:790 +#: vncviewer/Viewport.cxx:750 msgctxt "ContextMenu|" msgid "E&xit viewer" msgstr "В&ыход" -#: vncviewer/Viewport.cxx:793 +#: vncviewer/Viewport.cxx:753 msgctxt "ContextMenu|" msgid "&Full screen" msgstr "&Полный экран" -#: vncviewer/Viewport.cxx:796 +#: vncviewer/Viewport.cxx:756 msgctxt "ContextMenu|" msgid "Minimi&ze" msgstr "&Свернуть" -#: vncviewer/Viewport.cxx:798 +#: vncviewer/Viewport.cxx:758 msgctxt "ContextMenu|" msgid "Resize &window to session" msgstr "Изменить размер окна" -#: vncviewer/Viewport.cxx:803 +#: vncviewer/Viewport.cxx:763 msgctxt "ContextMenu|" msgid "&Ctrl" msgstr "&CTRL" -#: vncviewer/Viewport.cxx:806 +#: vncviewer/Viewport.cxx:766 msgctxt "ContextMenu|" msgid "&Alt" msgstr "&ALT" -#: vncviewer/Viewport.cxx:812 +#: vncviewer/Viewport.cxx:772 #, c-format msgctxt "ContextMenu|" msgid "Send %s" msgstr "Отправить %s" -#: vncviewer/Viewport.cxx:818 +#: vncviewer/Viewport.cxx:778 msgctxt "ContextMenu|" msgid "Send Ctrl-Alt-&Del" msgstr "Отправить CTRL-ALT-&DEL" -#: vncviewer/Viewport.cxx:821 +#: vncviewer/Viewport.cxx:781 msgctxt "ContextMenu|" msgid "&Refresh screen" msgstr "&Обновить экран" -#: vncviewer/Viewport.cxx:824 +#: vncviewer/Viewport.cxx:784 msgctxt "ContextMenu|" msgid "&Options..." msgstr "&Параметры" -#: vncviewer/Viewport.cxx:826 +#: vncviewer/Viewport.cxx:786 msgctxt "ContextMenu|" msgid "Connection &info..." msgstr "Сведения о соединении" -#: vncviewer/Viewport.cxx:828 +#: vncviewer/Viewport.cxx:788 msgctxt "ContextMenu|" msgid "About &TigerVNC viewer..." msgstr "О &TigerVNC viewer" -#: vncviewer/Viewport.cxx:831 +#: vncviewer/Viewport.cxx:791 msgctxt "ContextMenu|" msgid "Dismiss &menu" msgstr "Закрыть &меню" -#: vncviewer/Viewport.cxx:915 +#: vncviewer/Viewport.cxx:875 msgid "VNC connection info" msgstr "Сведения о соединении VNC" @@ -496,123 +491,123 @@ msgstr "Ошибка BitBlt" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:61 +#: vncviewer/X11PixelBuffer.cxx:65 msgid "Display lacks pixmap format for default depth" msgstr "Неправильный формат pixmap для выбранной глубины цвета" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:72 +#: vncviewer/X11PixelBuffer.cxx:76 msgid "Couldn't find suitable pixmap format" msgstr "Не удалось найти допустимый формат pixmap" -#: vncviewer/X11PixelBuffer.cxx:81 +#: vncviewer/X11PixelBuffer.cxx:85 msgid "Only true colour displays supported" msgstr "Поддерживаются только полноцветные экраны" -#: vncviewer/X11PixelBuffer.cxx:83 +#: vncviewer/X11PixelBuffer.cxx:87 #, c-format msgid "Using default colormap and visual, TrueColor, depth %d." msgstr "Используется стандартная цветовая карта и визуальное оформление, TrueColor, глубина %d." -#: vncviewer/X11PixelBuffer.cxx:109 +#: vncviewer/X11PixelBuffer.cxx:113 msgid "Could not create framebuffer image" msgstr "Не удалось создать изображение в framebuffer" -#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313 +#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320 #, c-format msgid "The name of the parameter %s was too large to write to the registry" msgstr "Название параметра %s слишком длинное для записи в реестр" -#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292 +#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299 #, c-format msgid "The parameter %s was too large to write to the registry" msgstr "Параметр %s слишком длинный для записи в реестр" -#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319 +#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326 #, c-format msgid "Failed to write parameter %s of type %s to the registry: %ld" msgstr "Не удалось записать параметр %s типа %s в реестр: %ld" -#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373 +#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380 #, c-format msgid "The name of the parameter %s was too large to read from the registry" msgstr "Название параметра %s слишком длинное для чтения из реестра" -#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382 +#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389 #, c-format msgid "Failed to read parameter %s from the registry: %ld" msgstr "Не удалось прочитать параметр %s из реестра: %ld" -#: vncviewer/parameters.cxx:352 +#: vncviewer/parameters.cxx:359 #, c-format msgid "The parameter %s was too large to read from the registry" msgstr "Параметр %s слишком длинный для чтения из реестра" -#: vncviewer/parameters.cxx:402 +#: vncviewer/parameters.cxx:409 #, c-format msgid "Failed to create registry key: %ld" msgstr "Не удалось создать ключ реестра: %ld" -#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465 -#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658 +#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665 #, c-format msgid "Unknown parameter type for parameter %s" msgstr "Неизвестный тип для параметра %s" -#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479 #, c-format msgid "Failed to close registry key: %ld" msgstr "Не удалось закрыть ключ реестра: %ld" -#: vncviewer/parameters.cxx:439 +#: vncviewer/parameters.cxx:446 #, c-format msgid "Failed to open registry key: %ld" msgstr "Не удалось открыть ключ реестра: %ld" -#: vncviewer/parameters.cxx:496 +#: vncviewer/parameters.cxx:503 msgid "Failed to write configuration file, can't obtain home directory path." msgstr "Не удалось создать домашний каталог VNC: не удаётся получить путь к домашнему каталогу." -#: vncviewer/parameters.cxx:509 +#: vncviewer/parameters.cxx:516 #, c-format msgid "Failed to write configuration file, can't open %s: %s" msgstr "Не удалось записать файл конфигурации: не удаётся открыть %s: %s" -#: vncviewer/parameters.cxx:552 +#: vncviewer/parameters.cxx:559 msgid "Failed to read configuration file, can't obtain home directory path." msgstr "Не удалось прочитать файл конфигурации: не удаётся получить путь к домашнему каталогу." -#: vncviewer/parameters.cxx:565 +#: vncviewer/parameters.cxx:572 #, c-format msgid "Failed to read configuration file, can't open %s: %s" msgstr "Не удалось прочитать файл конфигурации: не удаётся открыть %s: %s" -#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583 -#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621 -#: vncviewer/parameters.cxx:637 +#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590 +#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628 +#: vncviewer/parameters.cxx:644 #, c-format msgid "Failed to read line %d in file %s: %s" msgstr "Не удалось прочитать строку %d из файла %s: %s" -#: vncviewer/parameters.cxx:584 +#: vncviewer/parameters.cxx:591 msgid "Line too long" msgstr "Строка слишком длинная" -#: vncviewer/parameters.cxx:591 +#: vncviewer/parameters.cxx:598 #, c-format msgid "Configuration file %s is in an invalid format" msgstr "Недопустимый формат файла конфигурации %s" -#: vncviewer/parameters.cxx:609 +#: vncviewer/parameters.cxx:616 msgid "Invalid format" msgstr "Недопустимый формат" -#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638 +#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645 msgid "Invalid format or too large value" msgstr "Недопустимый формат или слишком большое значение" -#: vncviewer/parameters.cxx:665 +#: vncviewer/parameters.cxx:672 #, c-format msgid "Unknown parameter %s on line %d in file %s" msgstr "Неизвестный параметр %s в строке %d файла %s" @@ -634,86 +629,92 @@ msgstr "" msgid "About TigerVNC Viewer" msgstr "О TigerVNC viewer" -#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156 +#: vncviewer/vncviewer.cxx:140 +msgid "Internal FLTK error. Exiting." +msgstr "Внутренняя ошибка FLTK. Выход." + +#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170 #, c-format msgid "Error starting new TigerVNC Viewer: %s" msgstr "Не удалось запустить новый TigerVNC Viewer: %s" -#: vncviewer/vncviewer.cxx:165 +#: vncviewer/vncviewer.cxx:179 #, c-format msgid "Termination signal %d has been received. TigerVNC Viewer will now exit." msgstr "Получен сигнал завершения работы %d. TigerVNC Viewer будет закрыт." -#: vncviewer/vncviewer.cxx:257 +#: vncviewer/vncviewer.cxx:271 msgid "TigerVNC Viewer" msgstr "TigerVNC Viewer" -#: vncviewer/vncviewer.cxx:265 +#: vncviewer/vncviewer.cxx:279 msgid "No" msgstr "Нет" -#: vncviewer/vncviewer.cxx:266 +#: vncviewer/vncviewer.cxx:280 msgid "Yes" msgstr "Да" -#: vncviewer/vncviewer.cxx:269 +#: vncviewer/vncviewer.cxx:283 msgid "Close" msgstr "Закрыть" -#: vncviewer/vncviewer.cxx:274 +#: vncviewer/vncviewer.cxx:288 msgid "About" msgstr "О программе" -#: vncviewer/vncviewer.cxx:277 +#: vncviewer/vncviewer.cxx:291 msgid "Hide" msgstr "Скрыть" -#: vncviewer/vncviewer.cxx:280 +#: vncviewer/vncviewer.cxx:294 msgid "Quit" msgstr "Выход" -#: vncviewer/vncviewer.cxx:284 +#: vncviewer/vncviewer.cxx:298 msgid "Services" msgstr "Службы" -#: vncviewer/vncviewer.cxx:285 +#: vncviewer/vncviewer.cxx:299 msgid "Hide Others" msgstr "Скрыть прочее" -#: vncviewer/vncviewer.cxx:286 +#: vncviewer/vncviewer.cxx:300 msgid "Show All" msgstr "Показать все" -#: vncviewer/vncviewer.cxx:295 +#: vncviewer/vncviewer.cxx:309 msgctxt "SysMenu|" msgid "&File" msgstr "&Файл" -#: vncviewer/vncviewer.cxx:298 +#: vncviewer/vncviewer.cxx:312 msgctxt "SysMenu|File|" msgid "&New Connection" msgstr "&Новое соединение" -#: vncviewer/vncviewer.cxx:310 +#: vncviewer/vncviewer.cxx:324 msgid "Could not create VNC home directory: can't obtain home directory path." msgstr "Не удалось создать домашний каталог VNC: не удаётся получить путь к домашнему каталогу." -#: vncviewer/vncviewer.cxx:315 +#: vncviewer/vncviewer.cxx:329 #, c-format msgid "Could not create VNC home directory: %s." msgstr "Не удалось создать домашний каталог VNC: %s." #. TRANSLATORS: "Parameters" are command line arguments, or settings #. from a file or the Windows registry. -#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521 +#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535 msgid "Parameters -listen and -via are incompatible" msgstr "Параметры -listen и -via несовместимы" -#: vncviewer/vncviewer.cxx:536 +#: vncviewer/vncviewer.cxx:550 #, c-format msgid "Listening on port %d" msgstr "Прослушивается порт %d" -#: vncviewer/vncviewer.cxx:601 -msgid "Internal FLTK error. Exiting." -msgstr "Внутренняя ошибка FLTK. Выход." +#~ msgid "Unknown encoding %d" +#~ msgstr "Неизвестное кодирование %d" + +#~ msgid "Unknown encoding" +#~ msgstr "Неизвестное кодирование" @@ -1,13 +1,13 @@ # Serbian translation for tigervnc. -# Copyright © 2015 the TigerVNC Team (msgids) +# Copyright © 2016 the TigerVNC Team (msgids) # This file is distributed under the same license as the tigervnc package. # Мирослав Николић <miroslavnikolic@rocketmail.com>, 2016. msgid "" msgstr "" -"Project-Id-Version: tigervnc-1.5.90\n" +"Project-Id-Version: tigervnc-1.6.90\n" "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" -"POT-Creation-Date: 2015-11-26 11:33+0000\n" -"PO-Revision-Date: 2016-03-06 15:42+0200\n" +"POT-Creation-Date: 2016-07-01 10:15+0000\n" +"PO-Revision-Date: 2016-08-07 21:27+0200\n" "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" @@ -16,108 +16,98 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: vncviewer/CConn.cxx:111 +#: vncviewer/CConn.cxx:110 #, c-format msgid "connected to host %s port %d" msgstr "повезан сам са домаћином „%s“ прикључник %d" -#: vncviewer/CConn.cxx:173 +#: vncviewer/CConn.cxx:169 #, c-format msgid "Desktop name: %.80s" msgstr "Назив радне површи: %.80s" -#: vncviewer/CConn.cxx:178 +#: vncviewer/CConn.cxx:174 #, c-format msgid "Host: %.80s port: %d" msgstr "Домаћин: %.80s прикључник: %d" -#: vncviewer/CConn.cxx:183 +#: vncviewer/CConn.cxx:179 #, c-format msgid "Size: %d x %d" msgstr "Величина: %d x %d" -#: vncviewer/CConn.cxx:191 +#: vncviewer/CConn.cxx:187 #, c-format msgid "Pixel format: %s" msgstr "Формат пиксела: %s" -#: vncviewer/CConn.cxx:198 +#: vncviewer/CConn.cxx:194 #, c-format msgid "(server default %s)" msgstr "(основно на серверу %s)" -#: vncviewer/CConn.cxx:203 +#: vncviewer/CConn.cxx:199 #, c-format msgid "Requested encoding: %s" msgstr "Затражено кодирање: %s" -#: vncviewer/CConn.cxx:208 +#: vncviewer/CConn.cxx:204 #, c-format msgid "Last used encoding: %s" msgstr "Последње коришћено кодирање: %s" -#: vncviewer/CConn.cxx:213 +#: vncviewer/CConn.cxx:209 #, c-format msgid "Line speed estimate: %d kbit/s" msgstr "Процењена брзина линије: %d kbit/s" -#: vncviewer/CConn.cxx:218 +#: vncviewer/CConn.cxx:214 #, c-format msgid "Protocol version: %d.%d" msgstr "Издања протокола: %d.%d" -#: vncviewer/CConn.cxx:223 +#: vncviewer/CConn.cxx:219 #, c-format msgid "Security method: %s" msgstr "Метод безбедности: %s" -#: vncviewer/CConn.cxx:329 +#: vncviewer/CConn.cxx:319 #, c-format msgid "SetDesktopSize failed: %d" msgstr "Неуспело подешавање величине радне површи: %d" -#: vncviewer/CConn.cxx:398 +#: vncviewer/CConn.cxx:411 msgid "Invalid SetColourMapEntries from server!" msgstr "Неисправни уноси подешавања мапе боје са сервера!" -#. TRANSLATORS: Refers to a VNC protocol encoding type -#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451 -#, c-format -msgid "Unknown encoding %d" -msgstr "Непознато кодирање „%d“" - -#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452 -msgid "Unknown encoding" -msgstr "Непознато кодирање" - -#: vncviewer/CConn.cxx:484 +#: vncviewer/CConn.cxx:485 msgid "Enabling continuous updates" msgstr "Укључујем непрекидно освежавање" -#: vncviewer/CConn.cxx:554 +#: vncviewer/CConn.cxx:555 #, c-format msgid "Throughput %d kbit/s - changing to quality %d" msgstr "Пропусност је %d kbit/s — мењам на квалитет %d" -#: vncviewer/CConn.cxx:576 +#: vncviewer/CConn.cxx:577 #, c-format msgid "Throughput %d kbit/s - full color is now %s" msgstr "Пропусност је %d kbit/s — пуна боја је сада %s" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "disabled" msgstr "искључена" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "enabled" msgstr "укључена" -#: vncviewer/CConn.cxx:588 +#: vncviewer/CConn.cxx:589 #, c-format msgid "Using %s encoding" msgstr "Користим „%s“ кодирање" -#: vncviewer/CConn.cxx:635 +#: vncviewer/CConn.cxx:636 #, c-format msgid "Using pixel format %s" msgstr "Користим формат пиксела %s" @@ -126,25 +116,25 @@ msgstr "Користим формат пиксела %s" msgid "Invalid geometry specified!" msgstr "Наведена је неисправна геометрија!" -#: vncviewer/DesktopWindow.cxx:309 +#: vncviewer/DesktopWindow.cxx:303 msgid "Adjusting window size to avoid accidental full screen request" msgstr "Прилагођавам величину прозора да би се избегли случајни захтеви за целим екраном" -#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497 -#: vncviewer/DesktopWindow.cxx:510 +#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491 +#: vncviewer/DesktopWindow.cxx:504 msgid "Failure grabbing keyboard" msgstr "Неуспех хватања тастатуре" -#: vncviewer/DesktopWindow.cxx:522 +#: vncviewer/DesktopWindow.cxx:516 msgid "Failure grabbing mouse" msgstr "Неуспех хватања миша" -#: vncviewer/DesktopWindow.cxx:752 +#: vncviewer/DesktopWindow.cxx:746 msgid "Invalid screen layout computed for resize request!" msgstr "Прорачунат је неодговарајући распоред екрана за захтев промене величине!" #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48 -#: vncviewer/X11PixelBuffer.cxx:113 +#: vncviewer/X11PixelBuffer.cxx:117 msgid "Not enough memory for framebuffer" msgstr "Нема довољно меморије за међумеморију кадра" @@ -161,160 +151,164 @@ msgid "VNC Viewer: Connection Options" msgstr "ВНЦ прегледач: Могућности повезивања" #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91 -#: vncviewer/vncviewer.cxx:268 +#: vncviewer/vncviewer.cxx:282 msgid "Cancel" msgstr "Откажи" -#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267 +#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281 msgid "OK" msgstr "У реду" -#: vncviewer/OptionsDialog.cxx:413 +#: vncviewer/OptionsDialog.cxx:423 msgid "Compression" msgstr "Сажимање" -#: vncviewer/OptionsDialog.cxx:429 +#: vncviewer/OptionsDialog.cxx:439 msgid "Auto select" msgstr "Сам изабери" -#: vncviewer/OptionsDialog.cxx:441 +#: vncviewer/OptionsDialog.cxx:451 msgid "Preferred encoding" msgstr "Жељено кодирање" -#: vncviewer/OptionsDialog.cxx:489 +#: vncviewer/OptionsDialog.cxx:499 msgid "Color level" msgstr "Ниво боје" -#: vncviewer/OptionsDialog.cxx:500 +#: vncviewer/OptionsDialog.cxx:510 msgid "Full (all available colors)" msgstr "Пун (све доступне боје)" -#: vncviewer/OptionsDialog.cxx:507 +#: vncviewer/OptionsDialog.cxx:517 msgid "Medium (256 colors)" msgstr "Средњи (256 боја)" -#: vncviewer/OptionsDialog.cxx:514 +#: vncviewer/OptionsDialog.cxx:524 msgid "Low (64 colors)" msgstr "Низак (64 боје)" -#: vncviewer/OptionsDialog.cxx:521 +#: vncviewer/OptionsDialog.cxx:531 msgid "Very low (8 colors)" msgstr "Врло низак (8 боје)" -#: vncviewer/OptionsDialog.cxx:538 +#: vncviewer/OptionsDialog.cxx:548 msgid "Custom compression level:" msgstr "Произвољни ниво сажимања:" -#: vncviewer/OptionsDialog.cxx:544 +#: vncviewer/OptionsDialog.cxx:554 msgid "level (1=fast, 6=best [4-6 are rarely useful])" msgstr "ниво (1=брзо, 6=најбоље [4-6 се ретко користи])" -#: vncviewer/OptionsDialog.cxx:551 +#: vncviewer/OptionsDialog.cxx:561 msgid "Allow JPEG compression:" msgstr "Дозволи ЈПЕГ сажимање:" -#: vncviewer/OptionsDialog.cxx:557 +#: vncviewer/OptionsDialog.cxx:567 msgid "quality (0=poor, 9=best)" msgstr "квалитет (0=лош, 9=најбољи)" -#: vncviewer/OptionsDialog.cxx:568 +#: vncviewer/OptionsDialog.cxx:578 msgid "Security" msgstr "Безбедност" -#: vncviewer/OptionsDialog.cxx:583 +#: vncviewer/OptionsDialog.cxx:593 msgid "Encryption" msgstr "Шифровање" -#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647 -#: vncviewer/OptionsDialog.cxx:715 +#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657 +#: vncviewer/OptionsDialog.cxx:735 msgid "None" msgstr "Ништа" -#: vncviewer/OptionsDialog.cxx:600 +#: vncviewer/OptionsDialog.cxx:610 msgid "TLS with anonymous certificates" msgstr "ТЛС са анонимним уверењима" -#: vncviewer/OptionsDialog.cxx:606 +#: vncviewer/OptionsDialog.cxx:616 msgid "TLS with X509 certificates" msgstr "ТЛС са X509 уверењима" -#: vncviewer/OptionsDialog.cxx:613 +#: vncviewer/OptionsDialog.cxx:623 msgid "Path to X509 CA certificate" msgstr "Путања до X509 уверења" -#: vncviewer/OptionsDialog.cxx:620 +#: vncviewer/OptionsDialog.cxx:630 msgid "Path to X509 CRL file" msgstr "Путања до X509 ЦРЛ датотеке" -#: vncviewer/OptionsDialog.cxx:636 +#: vncviewer/OptionsDialog.cxx:646 msgid "Authentication" msgstr "Потврђивање идентитета" -#: vncviewer/OptionsDialog.cxx:653 +#: vncviewer/OptionsDialog.cxx:663 msgid "Standard VNC (insecure without encryption)" msgstr "Стандардни ВНЦ (несигурно без шифровања)" -#: vncviewer/OptionsDialog.cxx:659 +#: vncviewer/OptionsDialog.cxx:669 msgid "Username and password (insecure without encryption)" msgstr "Корисник и лозинка (несигурно без шифровања)" -#: vncviewer/OptionsDialog.cxx:678 +#: vncviewer/OptionsDialog.cxx:688 msgid "Input" msgstr "Улаз" -#: vncviewer/OptionsDialog.cxx:686 +#: vncviewer/OptionsDialog.cxx:696 msgid "View only (ignore mouse and keyboard)" msgstr "Само преглед (занемари миша и тастатуру)" -#: vncviewer/OptionsDialog.cxx:692 +#: vncviewer/OptionsDialog.cxx:702 msgid "Accept clipboard from server" msgstr "Прихвати оставу са сервера" -#: vncviewer/OptionsDialog.cxx:698 +#: vncviewer/OptionsDialog.cxx:709 +msgid "Also set primary selection" +msgstr "Такође постави први избор" + +#: vncviewer/OptionsDialog.cxx:716 msgid "Send clipboard to server" msgstr "Пошаљи оставу на сервер" -#: vncviewer/OptionsDialog.cxx:704 -msgid "Send primary selection and cut buffer as clipboard" -msgstr "Пошаљи први избор и исеци међумеморију као оставу" +#: vncviewer/OptionsDialog.cxx:723 +msgid "Send primary selection as clipboard" +msgstr "Пошаљи први избор као оставу" -#: vncviewer/OptionsDialog.cxx:710 +#: vncviewer/OptionsDialog.cxx:730 msgid "Pass system keys directly to server (full screen)" msgstr "Проследи системске кључеве директно на сервер (пун екран)" -#: vncviewer/OptionsDialog.cxx:713 +#: vncviewer/OptionsDialog.cxx:733 msgid "Menu key" msgstr "Тастер изборника" -#: vncviewer/OptionsDialog.cxx:729 +#: vncviewer/OptionsDialog.cxx:749 msgid "Screen" msgstr "Екран" -#: vncviewer/OptionsDialog.cxx:737 +#: vncviewer/OptionsDialog.cxx:757 msgid "Resize remote session on connect" msgstr "Промени величину удаљене сесије приликом повезивања" -#: vncviewer/OptionsDialog.cxx:750 +#: vncviewer/OptionsDialog.cxx:770 msgid "Resize remote session to the local window" msgstr "Промени величину удаљене сесије на месни прозор" -#: vncviewer/OptionsDialog.cxx:756 +#: vncviewer/OptionsDialog.cxx:776 msgid "Full-screen mode" msgstr "Режим пуног екрана" -#: vncviewer/OptionsDialog.cxx:762 +#: vncviewer/OptionsDialog.cxx:782 msgid "Enable full-screen mode over all monitors" msgstr "Укључи режим преко целог екрана на свим мониторима" -#: vncviewer/OptionsDialog.cxx:771 +#: vncviewer/OptionsDialog.cxx:791 msgid "Misc." msgstr "Разно" -#: vncviewer/OptionsDialog.cxx:779 +#: vncviewer/OptionsDialog.cxx:799 msgid "Shared (don't disconnect other viewers)" msgstr "Дељено (не прекидај везу другим прегледачима)" -#: vncviewer/OptionsDialog.cxx:785 +#: vncviewer/OptionsDialog.cxx:805 msgid "Show dot when no cursor" msgstr "Прикажи тачку када нема курзора" @@ -366,112 +360,112 @@ msgstr "Потврђивање идентитета је отказано" msgid "Username:" msgstr "Корисник:" -#: vncviewer/Viewport.cxx:433 +#: vncviewer/Viewport.cxx:391 #, c-format msgid "Unable to create platform specific framebuffer: %s" msgstr "Не могу да направим међумеморију кадра особену за платформу: %s" -#: vncviewer/Viewport.cxx:434 +#: vncviewer/Viewport.cxx:392 msgid "Using platform independent framebuffer" msgstr "Користим међумеморију кадра независну од платформе" -#: vncviewer/Viewport.cxx:668 +#: vncviewer/Viewport.cxx:628 #, c-format msgid "No scan code for extended virtual key 0x%02x" msgstr "Нема шифре прегледа за проширени виртуелни кључ 0x%02x" -#: vncviewer/Viewport.cxx:670 +#: vncviewer/Viewport.cxx:630 #, c-format msgid "No scan code for virtual key 0x%02x" msgstr "Нема шифре прегледа за виртуелни кључ 0x%02x" -#: vncviewer/Viewport.cxx:687 +#: vncviewer/Viewport.cxx:647 #, c-format msgid "No symbol for extended virtual key 0x%02x" msgstr "Нема симбола за проширени виртуелни кључ 0x%02x" -#: vncviewer/Viewport.cxx:689 +#: vncviewer/Viewport.cxx:649 #, c-format msgid "No symbol for virtual key 0x%02x" msgstr "Нема симбола за виртуелни кључ 0x%02x" -#: vncviewer/Viewport.cxx:727 +#: vncviewer/Viewport.cxx:687 #, c-format msgid "No symbol for key code 0x%02x (in the current state)" msgstr "Нема симбола за шифру кључа 0x%02x (у текућем стању)" -#: vncviewer/Viewport.cxx:753 +#: vncviewer/Viewport.cxx:713 #, c-format msgid "No symbol for key code %d (in the current state)" msgstr "Нема симбола за шифру кључа %d (у текућем стању)" -#: vncviewer/Viewport.cxx:790 +#: vncviewer/Viewport.cxx:750 msgctxt "ContextMenu|" msgid "E&xit viewer" msgstr "&Напусти прегледача" -#: vncviewer/Viewport.cxx:793 +#: vncviewer/Viewport.cxx:753 msgctxt "ContextMenu|" msgid "&Full screen" msgstr "&Пун екран" -#: vncviewer/Viewport.cxx:796 +#: vncviewer/Viewport.cxx:756 msgctxt "ContextMenu|" msgid "Minimi&ze" msgstr "&Умањи" -#: vncviewer/Viewport.cxx:798 +#: vncviewer/Viewport.cxx:758 msgctxt "ContextMenu|" msgid "Resize &window to session" msgstr "&Величина прозора на сесију" -#: vncviewer/Viewport.cxx:803 +#: vncviewer/Viewport.cxx:763 msgctxt "ContextMenu|" msgid "&Ctrl" msgstr "&Ктрл" -#: vncviewer/Viewport.cxx:806 +#: vncviewer/Viewport.cxx:766 msgctxt "ContextMenu|" msgid "&Alt" msgstr "&Алт" -#: vncviewer/Viewport.cxx:812 +#: vncviewer/Viewport.cxx:772 #, c-format msgctxt "ContextMenu|" msgid "Send %s" msgstr "Пошаљи „%s“" -#: vncviewer/Viewport.cxx:818 +#: vncviewer/Viewport.cxx:778 msgctxt "ContextMenu|" msgid "Send Ctrl-Alt-&Del" msgstr "Пошаљи Ктрл-Алт-&Дел" -#: vncviewer/Viewport.cxx:821 +#: vncviewer/Viewport.cxx:781 msgctxt "ContextMenu|" msgid "&Refresh screen" msgstr "&Освежи екран" -#: vncviewer/Viewport.cxx:824 +#: vncviewer/Viewport.cxx:784 msgctxt "ContextMenu|" msgid "&Options..." msgstr "&Могућности..." -#: vncviewer/Viewport.cxx:826 +#: vncviewer/Viewport.cxx:786 msgctxt "ContextMenu|" msgid "Connection &info..." msgstr "Подаци о &вези..." -#: vncviewer/Viewport.cxx:828 +#: vncviewer/Viewport.cxx:788 msgctxt "ContextMenu|" msgid "About &TigerVNC viewer..." msgstr "О &програму..." -#: vncviewer/Viewport.cxx:831 +#: vncviewer/Viewport.cxx:791 msgctxt "ContextMenu|" msgid "Dismiss &menu" msgstr "Одбаци &изборник" -#: vncviewer/Viewport.cxx:915 +#: vncviewer/Viewport.cxx:875 msgid "VNC connection info" msgstr "Подаци о ВНЦ вези" @@ -493,123 +487,123 @@ msgstr "Није успело Бит блт" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:61 +#: vncviewer/X11PixelBuffer.cxx:65 msgid "Display lacks pixmap format for default depth" msgstr "Приказу недостаје формат пиксмапе за основну дубину" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:72 +#: vncviewer/X11PixelBuffer.cxx:76 msgid "Couldn't find suitable pixmap format" msgstr "Не могу да нађем погодан формат пиксмапе" -#: vncviewer/X11PixelBuffer.cxx:81 +#: vncviewer/X11PixelBuffer.cxx:85 msgid "Only true colour displays supported" msgstr "Само прикази праве боје су подржани" -#: vncviewer/X11PixelBuffer.cxx:83 +#: vncviewer/X11PixelBuffer.cxx:87 #, c-format msgid "Using default colormap and visual, TrueColor, depth %d." msgstr "Користим основну мапу боје и видности, Права боја, дубине %d." -#: vncviewer/X11PixelBuffer.cxx:109 +#: vncviewer/X11PixelBuffer.cxx:113 msgid "Could not create framebuffer image" msgstr "Не могу да направим слику међумеморије кадра" -#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313 +#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320 #, c-format msgid "The name of the parameter %s was too large to write to the registry" msgstr "Назив параметра „%s“ беше превелик за уписивање у регистар" -#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292 +#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299 #, c-format msgid "The parameter %s was too large to write to the registry" msgstr "Параметар „%s“ беше превелик за уписивање у регистар" -#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319 +#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326 #, c-format msgid "Failed to write parameter %s of type %s to the registry: %ld" msgstr "Нисам успео да упишем параметар „%s“ врсте „%s“ у регистар: %ld" -#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373 +#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380 #, c-format msgid "The name of the parameter %s was too large to read from the registry" msgstr "Назив параметра „%s“ беше превелик за читање из регистра" -#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382 +#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389 #, c-format msgid "Failed to read parameter %s from the registry: %ld" msgstr "Нисам успео да прочитам параметар „%s“ из регистра: %ld" -#: vncviewer/parameters.cxx:352 +#: vncviewer/parameters.cxx:359 #, c-format msgid "The parameter %s was too large to read from the registry" msgstr "Параметар „%s“ беше превелик за читање из регистра" -#: vncviewer/parameters.cxx:402 +#: vncviewer/parameters.cxx:409 #, c-format msgid "Failed to create registry key: %ld" msgstr "Нисам успео да направим кључ регистра: %ld" -#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465 -#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658 +#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665 #, c-format msgid "Unknown parameter type for parameter %s" msgstr "Непозната врста параметра за параметар „%s“" -#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479 #, c-format msgid "Failed to close registry key: %ld" msgstr "Нисам успео да затворим кључ регистра: %ld" -#: vncviewer/parameters.cxx:439 +#: vncviewer/parameters.cxx:446 #, c-format msgid "Failed to open registry key: %ld" msgstr "Нисам успео да отворим кључ регистра: %ld" -#: vncviewer/parameters.cxx:496 +#: vncviewer/parameters.cxx:503 msgid "Failed to write configuration file, can't obtain home directory path." msgstr "Нисам успео да упишем датотеку подешавања, не могу да добијем путању личне фасцикле." -#: vncviewer/parameters.cxx:509 +#: vncviewer/parameters.cxx:516 #, c-format msgid "Failed to write configuration file, can't open %s: %s" msgstr "Нисам успео да упишем датотеку подешавања, не могу да отворим „%s“: %s" -#: vncviewer/parameters.cxx:552 +#: vncviewer/parameters.cxx:559 msgid "Failed to read configuration file, can't obtain home directory path." msgstr "Нисам успео да прочитам датотеку подешавања, не могу да добијем путању личне фасцикле." -#: vncviewer/parameters.cxx:565 +#: vncviewer/parameters.cxx:572 #, c-format msgid "Failed to read configuration file, can't open %s: %s" msgstr "Нисам успео да прочитам датотеку подешавања, не могу да отворим „%s“: %s" -#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583 -#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621 -#: vncviewer/parameters.cxx:637 +#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590 +#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628 +#: vncviewer/parameters.cxx:644 #, c-format msgid "Failed to read line %d in file %s: %s" msgstr "Нисам успео да прочитам %d. ред у датотеци „%s“: %s" -#: vncviewer/parameters.cxx:584 +#: vncviewer/parameters.cxx:591 msgid "Line too long" msgstr "Ред је предуг" -#: vncviewer/parameters.cxx:591 +#: vncviewer/parameters.cxx:598 #, c-format msgid "Configuration file %s is in an invalid format" msgstr "Датотека подешавања „%s“ је у неисправном запису" -#: vncviewer/parameters.cxx:609 +#: vncviewer/parameters.cxx:616 msgid "Invalid format" msgstr "Неисправан запис" -#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638 +#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645 msgid "Invalid format or too large value" msgstr "Неисправан запис или предуга вредност" -#: vncviewer/parameters.cxx:665 +#: vncviewer/parameters.cxx:672 #, c-format msgid "Unknown parameter %s on line %d in file %s" msgstr "Непознат параметар „%s“ у %d. реду у датотеци „%s“" @@ -631,86 +625,92 @@ msgstr "" msgid "About TigerVNC Viewer" msgstr "О програму" -#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156 +#: vncviewer/vncviewer.cxx:140 +msgid "Internal FLTK error. Exiting." +msgstr "Унутрашња ФЛТК грешка. Излазим." + +#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170 #, c-format msgid "Error starting new TigerVNC Viewer: %s" msgstr "Грешка покретања новог примерка програма: %s" -#: vncviewer/vncviewer.cxx:165 +#: vncviewer/vncviewer.cxx:179 #, c-format msgid "Termination signal %d has been received. TigerVNC Viewer will now exit." msgstr "Примљен је сигнал за окончавање %d. Програм ће сада изаћи." -#: vncviewer/vncviewer.cxx:257 +#: vncviewer/vncviewer.cxx:271 msgid "TigerVNC Viewer" msgstr "Прегледач ТигарВНЦ" -#: vncviewer/vncviewer.cxx:265 +#: vncviewer/vncviewer.cxx:279 msgid "No" msgstr "Не" -#: vncviewer/vncviewer.cxx:266 +#: vncviewer/vncviewer.cxx:280 msgid "Yes" msgstr "Да" -#: vncviewer/vncviewer.cxx:269 +#: vncviewer/vncviewer.cxx:283 msgid "Close" msgstr "Затвори" -#: vncviewer/vncviewer.cxx:274 +#: vncviewer/vncviewer.cxx:288 msgid "About" msgstr "О програму" -#: vncviewer/vncviewer.cxx:277 +#: vncviewer/vncviewer.cxx:291 msgid "Hide" msgstr "Сакриј" -#: vncviewer/vncviewer.cxx:280 +#: vncviewer/vncviewer.cxx:294 msgid "Quit" msgstr "Изађи" -#: vncviewer/vncviewer.cxx:284 +#: vncviewer/vncviewer.cxx:298 msgid "Services" msgstr "Услуге" -#: vncviewer/vncviewer.cxx:285 +#: vncviewer/vncviewer.cxx:299 msgid "Hide Others" msgstr "Сакриј остале" -#: vncviewer/vncviewer.cxx:286 +#: vncviewer/vncviewer.cxx:300 msgid "Show All" msgstr "Прикажи све" -#: vncviewer/vncviewer.cxx:295 +#: vncviewer/vncviewer.cxx:309 msgctxt "SysMenu|" msgid "&File" msgstr "&Датотека" -#: vncviewer/vncviewer.cxx:298 +#: vncviewer/vncviewer.cxx:312 msgctxt "SysMenu|File|" msgid "&New Connection" msgstr "&Нова веза" -#: vncviewer/vncviewer.cxx:310 +#: vncviewer/vncviewer.cxx:324 msgid "Could not create VNC home directory: can't obtain home directory path." msgstr "Не могу да направим личну фасциклу ВНЦ-а: не могу да добијем путању личне фасцикле." -#: vncviewer/vncviewer.cxx:315 +#: vncviewer/vncviewer.cxx:329 #, c-format msgid "Could not create VNC home directory: %s." msgstr "Не могу да направим личну фасциклу ВНЦ-а: %s." #. TRANSLATORS: "Parameters" are command line arguments, or settings #. from a file or the Windows registry. -#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521 +#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535 msgid "Parameters -listen and -via are incompatible" msgstr "Параметри „-listen“ и „-via“ нису сагласни" -#: vncviewer/vncviewer.cxx:536 +#: vncviewer/vncviewer.cxx:550 #, c-format msgid "Listening on port %d" msgstr "Ослушкујем на прикључнику %d" -#: vncviewer/vncviewer.cxx:601 -msgid "Internal FLTK error. Exiting." -msgstr "Унутрашња ФЛТК грешка. Излазим." +#~ msgid "Unknown encoding %d" +#~ msgstr "Непознато кодирање „%d“" + +#~ msgid "Unknown encoding" +#~ msgstr "Непознато кодирање" @@ -1,16 +1,17 @@ # Swedish messages for TigerVNC. -# Copyright © 2015 the TigerVNC Team (msgids) +# Copyright © 2015, 2016 the TigerVNC Team (msgids) # This file is distributed under the same license as the TigerVNC package. +# # Peter Åstrand <astrand@cendio.se>, 2011. -# Göran Uddeborg <goeran@uddeborg.se>, 2015. +# Göran Uddeborg <goeran@uddeborg.se>, 2015, 2016. # -# $Revision: 1.10 $ +# $Revision: 1.13 $ msgid "" msgstr "" -"Project-Id-Version: tigervnc 1.5.90\n" +"Project-Id-Version: tigervnc 1.6.90\n" "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" -"POT-Creation-Date: 2015-11-26 11:33+0000\n" -"PO-Revision-Date: 2015-12-28 16:52+0100\n" +"POT-Creation-Date: 2016-07-01 10:15+0000\n" +"PO-Revision-Date: 2016-07-16 20:31+0200\n" "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" @@ -19,108 +20,98 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vncviewer/CConn.cxx:111 +#: vncviewer/CConn.cxx:110 #, c-format msgid "connected to host %s port %d" msgstr "ansluten till värd %s port %d" -#: vncviewer/CConn.cxx:173 +#: vncviewer/CConn.cxx:169 #, c-format msgid "Desktop name: %.80s" msgstr "Skrivbordsnamn: %.80s" -#: vncviewer/CConn.cxx:178 +#: vncviewer/CConn.cxx:174 #, c-format msgid "Host: %.80s port: %d" msgstr "Värd: %.80s port: %d" -#: vncviewer/CConn.cxx:183 +#: vncviewer/CConn.cxx:179 #, c-format msgid "Size: %d x %d" msgstr "Storlek: %d x %d" -#: vncviewer/CConn.cxx:191 +#: vncviewer/CConn.cxx:187 #, c-format msgid "Pixel format: %s" msgstr "Pixelformat: %s" -#: vncviewer/CConn.cxx:198 +#: vncviewer/CConn.cxx:194 #, c-format msgid "(server default %s)" msgstr "(serverstandard %s)" -#: vncviewer/CConn.cxx:203 +#: vncviewer/CConn.cxx:199 #, c-format msgid "Requested encoding: %s" msgstr "Begärd kodning: %s" -#: vncviewer/CConn.cxx:208 +#: vncviewer/CConn.cxx:204 #, c-format msgid "Last used encoding: %s" msgstr "Senast använd kodning: %s" -#: vncviewer/CConn.cxx:213 +#: vncviewer/CConn.cxx:209 #, c-format msgid "Line speed estimate: %d kbit/s" msgstr "Uppskattad hastighet på förbindelsen: %d kbit/s" -#: vncviewer/CConn.cxx:218 +#: vncviewer/CConn.cxx:214 #, c-format msgid "Protocol version: %d.%d" msgstr "Protokollversion: %d.%d" -#: vncviewer/CConn.cxx:223 +#: vncviewer/CConn.cxx:219 #, c-format msgid "Security method: %s" msgstr "Säkerhetsmetod: %s" -#: vncviewer/CConn.cxx:329 +#: vncviewer/CConn.cxx:319 #, c-format msgid "SetDesktopSize failed: %d" msgstr "SetDesktopSize misslyckades: %d" -#: vncviewer/CConn.cxx:398 +#: vncviewer/CConn.cxx:411 msgid "Invalid SetColourMapEntries from server!" msgstr "Ogiltig SetColourMapEntries från server!" -#. TRANSLATORS: Refers to a VNC protocol encoding type -#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451 -#, c-format -msgid "Unknown encoding %d" -msgstr "Okänd kodning %d" - -#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452 -msgid "Unknown encoding" -msgstr "Okänd kodning" - -#: vncviewer/CConn.cxx:484 +#: vncviewer/CConn.cxx:485 msgid "Enabling continuous updates" msgstr "Aktiverar kontinuerliga uppdateringar" -#: vncviewer/CConn.cxx:554 +#: vncviewer/CConn.cxx:555 #, c-format msgid "Throughput %d kbit/s - changing to quality %d" msgstr "Bandbredd %d kbit/s - byter till kvalitet %d" -#: vncviewer/CConn.cxx:576 +#: vncviewer/CConn.cxx:577 #, c-format msgid "Throughput %d kbit/s - full color is now %s" msgstr "Bandbredd %d kbit/s - fullfärg är nu %s" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "disabled" msgstr "avaktiverad" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "enabled" msgstr "aktiverad" -#: vncviewer/CConn.cxx:588 +#: vncviewer/CConn.cxx:589 #, c-format msgid "Using %s encoding" msgstr "Använder kodning %s" -#: vncviewer/CConn.cxx:635 +#: vncviewer/CConn.cxx:636 #, c-format msgid "Using pixel format %s" msgstr "Använder pixelformat %s" @@ -129,25 +120,25 @@ msgstr "Använder pixelformat %s" msgid "Invalid geometry specified!" msgstr "Ogiltig geometri angiven!" -#: vncviewer/DesktopWindow.cxx:309 +#: vncviewer/DesktopWindow.cxx:303 msgid "Adjusting window size to avoid accidental full screen request" msgstr "Justerar fönsterstorleken för att undvika fullskärm av misstag" -#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497 -#: vncviewer/DesktopWindow.cxx:510 +#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491 +#: vncviewer/DesktopWindow.cxx:504 msgid "Failure grabbing keyboard" msgstr "Misslyckades med att fånga tangentbordet" -#: vncviewer/DesktopWindow.cxx:522 +#: vncviewer/DesktopWindow.cxx:516 msgid "Failure grabbing mouse" msgstr "Misslyckades med att fånga musen" -#: vncviewer/DesktopWindow.cxx:752 +#: vncviewer/DesktopWindow.cxx:746 msgid "Invalid screen layout computed for resize request!" msgstr "Ogiltig skärmlayout beräknad för storleksförändrings-begäran!" #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48 -#: vncviewer/X11PixelBuffer.cxx:113 +#: vncviewer/X11PixelBuffer.cxx:117 msgid "Not enough memory for framebuffer" msgstr "Inte tillräckligt med minne för framebuffer" @@ -164,160 +155,164 @@ msgid "VNC Viewer: Connection Options" msgstr "VNC-visare: Anslutningsalternativ" #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91 -#: vncviewer/vncviewer.cxx:268 +#: vncviewer/vncviewer.cxx:282 msgid "Cancel" msgstr "Avbryt" -#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267 +#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281 msgid "OK" msgstr "Ok" -#: vncviewer/OptionsDialog.cxx:413 +#: vncviewer/OptionsDialog.cxx:423 msgid "Compression" msgstr "Kompression" -#: vncviewer/OptionsDialog.cxx:429 +#: vncviewer/OptionsDialog.cxx:439 msgid "Auto select" msgstr "Automatiskt val" -#: vncviewer/OptionsDialog.cxx:441 +#: vncviewer/OptionsDialog.cxx:451 msgid "Preferred encoding" msgstr "Föredragen kodning" -#: vncviewer/OptionsDialog.cxx:489 +#: vncviewer/OptionsDialog.cxx:499 msgid "Color level" msgstr "Färgnivå" -#: vncviewer/OptionsDialog.cxx:500 +#: vncviewer/OptionsDialog.cxx:510 msgid "Full (all available colors)" msgstr "Full (alla tillgängliga färger)" -#: vncviewer/OptionsDialog.cxx:507 +#: vncviewer/OptionsDialog.cxx:517 msgid "Medium (256 colors)" msgstr "Medium (256 färger)" -#: vncviewer/OptionsDialog.cxx:514 +#: vncviewer/OptionsDialog.cxx:524 msgid "Low (64 colors)" msgstr "Låg (64 färger)" -#: vncviewer/OptionsDialog.cxx:521 +#: vncviewer/OptionsDialog.cxx:531 msgid "Very low (8 colors)" msgstr "Mycket låg (8 färger)" -#: vncviewer/OptionsDialog.cxx:538 +#: vncviewer/OptionsDialog.cxx:548 msgid "Custom compression level:" msgstr "Anpassad komprimeringsnivå:" -#: vncviewer/OptionsDialog.cxx:544 +#: vncviewer/OptionsDialog.cxx:554 msgid "level (1=fast, 6=best [4-6 are rarely useful])" msgstr "nivå (1=snabb, 6=bäst [4-6 sällan användbara])" -#: vncviewer/OptionsDialog.cxx:551 +#: vncviewer/OptionsDialog.cxx:561 msgid "Allow JPEG compression:" msgstr "Tillåt JPEG-komprimering:" -#: vncviewer/OptionsDialog.cxx:557 +#: vncviewer/OptionsDialog.cxx:567 msgid "quality (0=poor, 9=best)" msgstr "kvalitet (0=dålig, 9=bäst)" -#: vncviewer/OptionsDialog.cxx:568 +#: vncviewer/OptionsDialog.cxx:578 msgid "Security" msgstr "Säkerhet" -#: vncviewer/OptionsDialog.cxx:583 +#: vncviewer/OptionsDialog.cxx:593 msgid "Encryption" msgstr "Kryptering" -#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647 -#: vncviewer/OptionsDialog.cxx:715 +#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657 +#: vncviewer/OptionsDialog.cxx:735 msgid "None" msgstr "Ingen" -#: vncviewer/OptionsDialog.cxx:600 +#: vncviewer/OptionsDialog.cxx:610 msgid "TLS with anonymous certificates" msgstr "TLS med anonyma certifikat" -#: vncviewer/OptionsDialog.cxx:606 +#: vncviewer/OptionsDialog.cxx:616 msgid "TLS with X509 certificates" msgstr "TLS med X509-certifikat" -#: vncviewer/OptionsDialog.cxx:613 +#: vncviewer/OptionsDialog.cxx:623 msgid "Path to X509 CA certificate" msgstr "Sökväg till CA-certifikat för X509" -#: vncviewer/OptionsDialog.cxx:620 +#: vncviewer/OptionsDialog.cxx:630 msgid "Path to X509 CRL file" msgstr "Sökväg till CRL-fil för X509" -#: vncviewer/OptionsDialog.cxx:636 +#: vncviewer/OptionsDialog.cxx:646 msgid "Authentication" msgstr "Autentisering" -#: vncviewer/OptionsDialog.cxx:653 +#: vncviewer/OptionsDialog.cxx:663 msgid "Standard VNC (insecure without encryption)" msgstr "Standard-VNC (osäkert utan kryptering)" -#: vncviewer/OptionsDialog.cxx:659 +#: vncviewer/OptionsDialog.cxx:669 msgid "Username and password (insecure without encryption)" msgstr "Användarnamn och lösenord (osäkert utan kryptering)" -#: vncviewer/OptionsDialog.cxx:678 +#: vncviewer/OptionsDialog.cxx:688 msgid "Input" msgstr "Inmatning" -#: vncviewer/OptionsDialog.cxx:686 +#: vncviewer/OptionsDialog.cxx:696 msgid "View only (ignore mouse and keyboard)" msgstr "Endast visning (ignorera mus och tangentbord)" -#: vncviewer/OptionsDialog.cxx:692 +#: vncviewer/OptionsDialog.cxx:702 msgid "Accept clipboard from server" msgstr "Acceptera urklipp från server" -#: vncviewer/OptionsDialog.cxx:698 +#: vncviewer/OptionsDialog.cxx:709 +msgid "Also set primary selection" +msgstr "Sätt även primär markering" + +#: vncviewer/OptionsDialog.cxx:716 msgid "Send clipboard to server" msgstr "Skicka urklipp till server" -#: vncviewer/OptionsDialog.cxx:704 -msgid "Send primary selection and cut buffer as clipboard" -msgstr "Skicka primär markering och klippbuffert som urklipp" +#: vncviewer/OptionsDialog.cxx:723 +msgid "Send primary selection as clipboard" +msgstr "Skicka primär markering som urklipp" -#: vncviewer/OptionsDialog.cxx:710 +#: vncviewer/OptionsDialog.cxx:730 msgid "Pass system keys directly to server (full screen)" msgstr "Skicka systemtangenter direkt till servern (fullskärm)" -#: vncviewer/OptionsDialog.cxx:713 +#: vncviewer/OptionsDialog.cxx:733 msgid "Menu key" msgstr "Menytangent" -#: vncviewer/OptionsDialog.cxx:729 +#: vncviewer/OptionsDialog.cxx:749 msgid "Screen" msgstr "Skärm" -#: vncviewer/OptionsDialog.cxx:737 +#: vncviewer/OptionsDialog.cxx:757 msgid "Resize remote session on connect" msgstr "Anpassa sessionsstorlek vid anslutning" -#: vncviewer/OptionsDialog.cxx:750 +#: vncviewer/OptionsDialog.cxx:770 msgid "Resize remote session to the local window" msgstr "Anpassa sessionsstorlek till lokalt fönster" -#: vncviewer/OptionsDialog.cxx:756 +#: vncviewer/OptionsDialog.cxx:776 msgid "Full-screen mode" msgstr "Fullskärmsläge" -#: vncviewer/OptionsDialog.cxx:762 +#: vncviewer/OptionsDialog.cxx:782 msgid "Enable full-screen mode over all monitors" msgstr "Aktivera fullskärmsläge på alla skärmar" -#: vncviewer/OptionsDialog.cxx:771 +#: vncviewer/OptionsDialog.cxx:791 msgid "Misc." msgstr "Diverse" -#: vncviewer/OptionsDialog.cxx:779 +#: vncviewer/OptionsDialog.cxx:799 msgid "Shared (don't disconnect other viewers)" msgstr "Delad (koppla ej från andra visare)" -#: vncviewer/OptionsDialog.cxx:785 +#: vncviewer/OptionsDialog.cxx:805 msgid "Show dot when no cursor" msgstr "Visa punkt när muspekare saknas" @@ -369,112 +364,112 @@ msgstr "Autentisering avbruten" msgid "Username:" msgstr "Användarnamn:" -#: vncviewer/Viewport.cxx:433 +#: vncviewer/Viewport.cxx:391 #, c-format msgid "Unable to create platform specific framebuffer: %s" msgstr "Kan inte skapa plattformsspecifik framebuffer: %s" -#: vncviewer/Viewport.cxx:434 +#: vncviewer/Viewport.cxx:392 msgid "Using platform independent framebuffer" msgstr "Använder plattformsoberoende framebuffer" -#: vncviewer/Viewport.cxx:668 +#: vncviewer/Viewport.cxx:628 #, c-format msgid "No scan code for extended virtual key 0x%02x" msgstr "Ingen scancode för utökad virtuell tangent 0x%02x" -#: vncviewer/Viewport.cxx:670 +#: vncviewer/Viewport.cxx:630 #, c-format msgid "No scan code for virtual key 0x%02x" msgstr "Ingen scancode för virtuell tangent 0x%02x" -#: vncviewer/Viewport.cxx:687 +#: vncviewer/Viewport.cxx:647 #, c-format msgid "No symbol for extended virtual key 0x%02x" msgstr "Ingen symbol för utökad virtuell tangent 0x%02x" -#: vncviewer/Viewport.cxx:689 +#: vncviewer/Viewport.cxx:649 #, c-format msgid "No symbol for virtual key 0x%02x" msgstr "Ingen symbol för virtuell tangent 0x%02x" -#: vncviewer/Viewport.cxx:727 +#: vncviewer/Viewport.cxx:687 #, c-format msgid "No symbol for key code 0x%02x (in the current state)" msgstr "Ingen symbol för tangentkod 0x%02x (i nuvarande tillstånd)" -#: vncviewer/Viewport.cxx:753 +#: vncviewer/Viewport.cxx:713 #, c-format msgid "No symbol for key code %d (in the current state)" msgstr "Ingen symbol för tangentkod %d (i nuvarande tillstånd)" -#: vncviewer/Viewport.cxx:790 +#: vncviewer/Viewport.cxx:750 msgctxt "ContextMenu|" msgid "E&xit viewer" msgstr "&Avsluta visaren" -#: vncviewer/Viewport.cxx:793 +#: vncviewer/Viewport.cxx:753 msgctxt "ContextMenu|" msgid "&Full screen" msgstr "&Fullskärm" -#: vncviewer/Viewport.cxx:796 +#: vncviewer/Viewport.cxx:756 msgctxt "ContextMenu|" msgid "Minimi&ze" msgstr "M&inimera" -#: vncviewer/Viewport.cxx:798 +#: vncviewer/Viewport.cxx:758 msgctxt "ContextMenu|" msgid "Resize &window to session" msgstr "Anpassa &fönster till session" -#: vncviewer/Viewport.cxx:803 +#: vncviewer/Viewport.cxx:763 msgctxt "ContextMenu|" msgid "&Ctrl" msgstr "&Ctrl" -#: vncviewer/Viewport.cxx:806 +#: vncviewer/Viewport.cxx:766 msgctxt "ContextMenu|" msgid "&Alt" msgstr "&Alt" -#: vncviewer/Viewport.cxx:812 +#: vncviewer/Viewport.cxx:772 #, c-format msgctxt "ContextMenu|" msgid "Send %s" msgstr "Skicka %s" -#: vncviewer/Viewport.cxx:818 +#: vncviewer/Viewport.cxx:778 msgctxt "ContextMenu|" msgid "Send Ctrl-Alt-&Del" msgstr "Skicka Ctrl-Alt-&Del" -#: vncviewer/Viewport.cxx:821 +#: vncviewer/Viewport.cxx:781 msgctxt "ContextMenu|" msgid "&Refresh screen" msgstr "&Uppdatera skärm" -#: vncviewer/Viewport.cxx:824 +#: vncviewer/Viewport.cxx:784 msgctxt "ContextMenu|" msgid "&Options..." msgstr "&Inställningar..." -#: vncviewer/Viewport.cxx:826 +#: vncviewer/Viewport.cxx:786 msgctxt "ContextMenu|" msgid "Connection &info..." msgstr "&Information om anslutningen..." -#: vncviewer/Viewport.cxx:828 +#: vncviewer/Viewport.cxx:788 msgctxt "ContextMenu|" msgid "About &TigerVNC viewer..." msgstr "Om &TigerVNC-visaren..." -#: vncviewer/Viewport.cxx:831 +#: vncviewer/Viewport.cxx:791 msgctxt "ContextMenu|" msgid "Dismiss &menu" msgstr "Stäng &meny" -#: vncviewer/Viewport.cxx:915 +#: vncviewer/Viewport.cxx:875 msgid "VNC connection info" msgstr "VNC anslutningsinformation" @@ -496,123 +491,123 @@ msgstr "BitBlt misslyckades" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:61 +#: vncviewer/X11PixelBuffer.cxx:65 msgid "Display lacks pixmap format for default depth" msgstr "Skärmen saknar pixmap-format för standarddjup" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:72 +#: vncviewer/X11PixelBuffer.cxx:76 msgid "Couldn't find suitable pixmap format" msgstr "Kunde inte hitta lämpligt pixmap-format" -#: vncviewer/X11PixelBuffer.cxx:81 +#: vncviewer/X11PixelBuffer.cxx:85 msgid "Only true colour displays supported" msgstr "Endast skärmar med true colour stöds" -#: vncviewer/X11PixelBuffer.cxx:83 +#: vncviewer/X11PixelBuffer.cxx:87 #, c-format msgid "Using default colormap and visual, TrueColor, depth %d." msgstr "Använder standardfärgkarta och visual, TrueColor, depth %d." -#: vncviewer/X11PixelBuffer.cxx:109 +#: vncviewer/X11PixelBuffer.cxx:113 msgid "Could not create framebuffer image" msgstr "Kunde inte skapa framebuffer-bild" -#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313 +#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320 #, c-format msgid "The name of the parameter %s was too large to write to the registry" msgstr "Namnet på parameter %s var för stor för skrivning till registret" -#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292 +#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299 #, c-format msgid "The parameter %s was too large to write to the registry" msgstr "Parameter %s var för stor för skrivning till registret" -#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319 +#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326 #, c-format msgid "Failed to write parameter %s of type %s to the registry: %ld" msgstr "Misslyckades med att skriva parameter %s av typ %s till registret: %ld" -#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373 +#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380 #, c-format msgid "The name of the parameter %s was too large to read from the registry" msgstr "Namnet på parameter %s var för stor för att läsas från registret" -#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382 +#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389 #, c-format msgid "Failed to read parameter %s from the registry: %ld" msgstr "Misslyckades med att läsa parameter %s från registret: %ld" -#: vncviewer/parameters.cxx:352 +#: vncviewer/parameters.cxx:359 #, c-format msgid "The parameter %s was too large to read from the registry" msgstr "Parameter %s var för stor för läsning från registret" -#: vncviewer/parameters.cxx:402 +#: vncviewer/parameters.cxx:409 #, c-format msgid "Failed to create registry key: %ld" msgstr "Misslyckades med att skapa registernyckel: %ld" -#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465 -#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658 +#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665 #, c-format msgid "Unknown parameter type for parameter %s" msgstr "Okänd parametertyp för parameter %s" -#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479 #, c-format msgid "Failed to close registry key: %ld" msgstr "Misslyckades med att stänga registernyckel: %ld" -#: vncviewer/parameters.cxx:439 +#: vncviewer/parameters.cxx:446 #, c-format msgid "Failed to open registry key: %ld" msgstr "Misslyckades med att öppna registernyckel: %ld" -#: vncviewer/parameters.cxx:496 +#: vncviewer/parameters.cxx:503 msgid "Failed to write configuration file, can't obtain home directory path." msgstr "Misslyckades med att skriva konfigurations-fil, kan inte avgöra hemkatalogens sökväg." -#: vncviewer/parameters.cxx:509 +#: vncviewer/parameters.cxx:516 #, c-format msgid "Failed to write configuration file, can't open %s: %s" msgstr "Misslyckades med att skriva konfigurations-fil: kan inte öppna %s: %s" -#: vncviewer/parameters.cxx:552 +#: vncviewer/parameters.cxx:559 msgid "Failed to read configuration file, can't obtain home directory path." msgstr "Misslyckades med att läsa konfigurations-fil, kan inte avgöra hemkatalogens sökväg." -#: vncviewer/parameters.cxx:565 +#: vncviewer/parameters.cxx:572 #, c-format msgid "Failed to read configuration file, can't open %s: %s" msgstr "Misslyckades med att läsa konfigurations-fil, kan inte öppna %s: %s" -#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583 -#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621 -#: vncviewer/parameters.cxx:637 +#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590 +#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628 +#: vncviewer/parameters.cxx:644 #, c-format msgid "Failed to read line %d in file %s: %s" msgstr "Misslyckades med att läsa rad %d i fil %s: %s" -#: vncviewer/parameters.cxx:584 +#: vncviewer/parameters.cxx:591 msgid "Line too long" msgstr "Raden är för lång" -#: vncviewer/parameters.cxx:591 +#: vncviewer/parameters.cxx:598 #, c-format msgid "Configuration file %s is in an invalid format" msgstr "Konfigurationsfilen %s har ogiltigt format" -#: vncviewer/parameters.cxx:609 +#: vncviewer/parameters.cxx:616 msgid "Invalid format" msgstr "Ogiltigt format" -#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638 +#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645 msgid "Invalid format or too large value" msgstr "Ogiltigt format eller för stort värde" -#: vncviewer/parameters.cxx:665 +#: vncviewer/parameters.cxx:672 #, c-format msgid "Unknown parameter %s on line %d in file %s" msgstr "Okänd parameter %s på rad %d i fil %s" @@ -634,86 +629,86 @@ msgstr "" msgid "About TigerVNC Viewer" msgstr "Om VNC-visaren" -#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156 +#: vncviewer/vncviewer.cxx:140 +msgid "Internal FLTK error. Exiting." +msgstr "Internt FLTK-fel. Avslutar." + +#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170 #, c-format msgid "Error starting new TigerVNC Viewer: %s" msgstr "Fel vid start av ny TigerVNC-visare: %s" -#: vncviewer/vncviewer.cxx:165 +#: vncviewer/vncviewer.cxx:179 #, c-format msgid "Termination signal %d has been received. TigerVNC Viewer will now exit." msgstr "Termineringssignal %d har mottagits. TigerVNC-visaren kommer nu att avslutas." -#: vncviewer/vncviewer.cxx:257 +#: vncviewer/vncviewer.cxx:271 msgid "TigerVNC Viewer" msgstr "VNC-visare" -#: vncviewer/vncviewer.cxx:265 +#: vncviewer/vncviewer.cxx:279 msgid "No" msgstr "Ingen" -#: vncviewer/vncviewer.cxx:266 +#: vncviewer/vncviewer.cxx:280 msgid "Yes" msgstr "Ja" -#: vncviewer/vncviewer.cxx:269 +#: vncviewer/vncviewer.cxx:283 msgid "Close" msgstr "Stäng" -#: vncviewer/vncviewer.cxx:274 +#: vncviewer/vncviewer.cxx:288 msgid "About" msgstr "Om" -#: vncviewer/vncviewer.cxx:277 +#: vncviewer/vncviewer.cxx:291 msgid "Hide" msgstr "Göm" -#: vncviewer/vncviewer.cxx:280 +#: vncviewer/vncviewer.cxx:294 msgid "Quit" msgstr "Avsluta" -#: vncviewer/vncviewer.cxx:284 +#: vncviewer/vncviewer.cxx:298 msgid "Services" msgstr "Tjänster" -#: vncviewer/vncviewer.cxx:285 +#: vncviewer/vncviewer.cxx:299 msgid "Hide Others" msgstr "Göm andra" -#: vncviewer/vncviewer.cxx:286 +#: vncviewer/vncviewer.cxx:300 msgid "Show All" msgstr "Visa alla" -#: vncviewer/vncviewer.cxx:295 +#: vncviewer/vncviewer.cxx:309 msgctxt "SysMenu|" msgid "&File" msgstr "&Arkiv" -#: vncviewer/vncviewer.cxx:298 +#: vncviewer/vncviewer.cxx:312 msgctxt "SysMenu|File|" msgid "&New Connection" msgstr "&Ny anslutning" -#: vncviewer/vncviewer.cxx:310 +#: vncviewer/vncviewer.cxx:324 msgid "Could not create VNC home directory: can't obtain home directory path." msgstr "Kunde inte skapa VNC-hemkatalog: kan inte avgöra hemkatalogens sökväg" -#: vncviewer/vncviewer.cxx:315 +#: vncviewer/vncviewer.cxx:329 #, c-format msgid "Could not create VNC home directory: %s." msgstr "Kunde inte skapa VNC-hemkatalog: %s." #. TRANSLATORS: "Parameters" are command line arguments, or settings #. from a file or the Windows registry. -#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521 +#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535 msgid "Parameters -listen and -via are incompatible" msgstr "Parametrar -listen och -via är inkompatibla" -#: vncviewer/vncviewer.cxx:536 +#: vncviewer/vncviewer.cxx:550 #, c-format msgid "Listening on port %d" msgstr "Lyssnar på port %d" - -#: vncviewer/vncviewer.cxx:601 -msgid "Internal FLTK error. Exiting." -msgstr "Internt FLTK-fel. Avslutar." diff --git a/po/tigervnc.pot b/po/tigervnc.pot index 2bb748d1..0d9e049c 100644 --- a/po/tigervnc.pot +++ b/po/tigervnc.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" -"POT-Creation-Date: 2015-11-26 11:33+0000\n" +"POT-Creation-Date: 2016-07-01 10:15+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,108 +17,98 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: vncviewer/CConn.cxx:111 +#: vncviewer/CConn.cxx:110 #, c-format msgid "connected to host %s port %d" msgstr "" -#: vncviewer/CConn.cxx:173 +#: vncviewer/CConn.cxx:169 #, c-format msgid "Desktop name: %.80s" msgstr "" -#: vncviewer/CConn.cxx:178 +#: vncviewer/CConn.cxx:174 #, c-format msgid "Host: %.80s port: %d" msgstr "" -#: vncviewer/CConn.cxx:183 +#: vncviewer/CConn.cxx:179 #, c-format msgid "Size: %d x %d" msgstr "" -#: vncviewer/CConn.cxx:191 +#: vncviewer/CConn.cxx:187 #, c-format msgid "Pixel format: %s" msgstr "" -#: vncviewer/CConn.cxx:198 +#: vncviewer/CConn.cxx:194 #, c-format msgid "(server default %s)" msgstr "" -#: vncviewer/CConn.cxx:203 +#: vncviewer/CConn.cxx:199 #, c-format msgid "Requested encoding: %s" msgstr "" -#: vncviewer/CConn.cxx:208 +#: vncviewer/CConn.cxx:204 #, c-format msgid "Last used encoding: %s" msgstr "" -#: vncviewer/CConn.cxx:213 +#: vncviewer/CConn.cxx:209 #, c-format msgid "Line speed estimate: %d kbit/s" msgstr "" -#: vncviewer/CConn.cxx:218 +#: vncviewer/CConn.cxx:214 #, c-format msgid "Protocol version: %d.%d" msgstr "" -#: vncviewer/CConn.cxx:223 +#: vncviewer/CConn.cxx:219 #, c-format msgid "Security method: %s" msgstr "" -#: vncviewer/CConn.cxx:329 +#: vncviewer/CConn.cxx:319 #, c-format msgid "SetDesktopSize failed: %d" msgstr "" -#: vncviewer/CConn.cxx:398 +#: vncviewer/CConn.cxx:411 msgid "Invalid SetColourMapEntries from server!" msgstr "" -#. TRANSLATORS: Refers to a VNC protocol encoding type -#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451 -#, c-format -msgid "Unknown encoding %d" -msgstr "" - -#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452 -msgid "Unknown encoding" -msgstr "" - -#: vncviewer/CConn.cxx:484 +#: vncviewer/CConn.cxx:485 msgid "Enabling continuous updates" msgstr "" -#: vncviewer/CConn.cxx:554 +#: vncviewer/CConn.cxx:555 #, c-format msgid "Throughput %d kbit/s - changing to quality %d" msgstr "" -#: vncviewer/CConn.cxx:576 +#: vncviewer/CConn.cxx:577 #, c-format msgid "Throughput %d kbit/s - full color is now %s" msgstr "" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "disabled" msgstr "" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "enabled" msgstr "" -#: vncviewer/CConn.cxx:588 +#: vncviewer/CConn.cxx:589 #, c-format msgid "Using %s encoding" msgstr "" -#: vncviewer/CConn.cxx:635 +#: vncviewer/CConn.cxx:636 #, c-format msgid "Using pixel format %s" msgstr "" @@ -127,25 +117,25 @@ msgstr "" msgid "Invalid geometry specified!" msgstr "" -#: vncviewer/DesktopWindow.cxx:309 +#: vncviewer/DesktopWindow.cxx:303 msgid "Adjusting window size to avoid accidental full screen request" msgstr "" -#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497 -#: vncviewer/DesktopWindow.cxx:510 +#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491 +#: vncviewer/DesktopWindow.cxx:504 msgid "Failure grabbing keyboard" msgstr "" -#: vncviewer/DesktopWindow.cxx:522 +#: vncviewer/DesktopWindow.cxx:516 msgid "Failure grabbing mouse" msgstr "" -#: vncviewer/DesktopWindow.cxx:752 +#: vncviewer/DesktopWindow.cxx:746 msgid "Invalid screen layout computed for resize request!" msgstr "" #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48 -#: vncviewer/X11PixelBuffer.cxx:113 +#: vncviewer/X11PixelBuffer.cxx:117 msgid "Not enough memory for framebuffer" msgstr "" @@ -162,160 +152,164 @@ msgid "VNC Viewer: Connection Options" msgstr "" #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91 -#: vncviewer/vncviewer.cxx:268 +#: vncviewer/vncviewer.cxx:282 msgid "Cancel" msgstr "" -#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267 +#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281 msgid "OK" msgstr "" -#: vncviewer/OptionsDialog.cxx:413 +#: vncviewer/OptionsDialog.cxx:423 msgid "Compression" msgstr "" -#: vncviewer/OptionsDialog.cxx:429 +#: vncviewer/OptionsDialog.cxx:439 msgid "Auto select" msgstr "" -#: vncviewer/OptionsDialog.cxx:441 +#: vncviewer/OptionsDialog.cxx:451 msgid "Preferred encoding" msgstr "" -#: vncviewer/OptionsDialog.cxx:489 +#: vncviewer/OptionsDialog.cxx:499 msgid "Color level" msgstr "" -#: vncviewer/OptionsDialog.cxx:500 +#: vncviewer/OptionsDialog.cxx:510 msgid "Full (all available colors)" msgstr "" -#: vncviewer/OptionsDialog.cxx:507 +#: vncviewer/OptionsDialog.cxx:517 msgid "Medium (256 colors)" msgstr "" -#: vncviewer/OptionsDialog.cxx:514 +#: vncviewer/OptionsDialog.cxx:524 msgid "Low (64 colors)" msgstr "" -#: vncviewer/OptionsDialog.cxx:521 +#: vncviewer/OptionsDialog.cxx:531 msgid "Very low (8 colors)" msgstr "" -#: vncviewer/OptionsDialog.cxx:538 +#: vncviewer/OptionsDialog.cxx:548 msgid "Custom compression level:" msgstr "" -#: vncviewer/OptionsDialog.cxx:544 +#: vncviewer/OptionsDialog.cxx:554 msgid "level (1=fast, 6=best [4-6 are rarely useful])" msgstr "" -#: vncviewer/OptionsDialog.cxx:551 +#: vncviewer/OptionsDialog.cxx:561 msgid "Allow JPEG compression:" msgstr "" -#: vncviewer/OptionsDialog.cxx:557 +#: vncviewer/OptionsDialog.cxx:567 msgid "quality (0=poor, 9=best)" msgstr "" -#: vncviewer/OptionsDialog.cxx:568 +#: vncviewer/OptionsDialog.cxx:578 msgid "Security" msgstr "" -#: vncviewer/OptionsDialog.cxx:583 +#: vncviewer/OptionsDialog.cxx:593 msgid "Encryption" msgstr "" -#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647 -#: vncviewer/OptionsDialog.cxx:715 +#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657 +#: vncviewer/OptionsDialog.cxx:735 msgid "None" msgstr "" -#: vncviewer/OptionsDialog.cxx:600 +#: vncviewer/OptionsDialog.cxx:610 msgid "TLS with anonymous certificates" msgstr "" -#: vncviewer/OptionsDialog.cxx:606 +#: vncviewer/OptionsDialog.cxx:616 msgid "TLS with X509 certificates" msgstr "" -#: vncviewer/OptionsDialog.cxx:613 +#: vncviewer/OptionsDialog.cxx:623 msgid "Path to X509 CA certificate" msgstr "" -#: vncviewer/OptionsDialog.cxx:620 +#: vncviewer/OptionsDialog.cxx:630 msgid "Path to X509 CRL file" msgstr "" -#: vncviewer/OptionsDialog.cxx:636 +#: vncviewer/OptionsDialog.cxx:646 msgid "Authentication" msgstr "" -#: vncviewer/OptionsDialog.cxx:653 +#: vncviewer/OptionsDialog.cxx:663 msgid "Standard VNC (insecure without encryption)" msgstr "" -#: vncviewer/OptionsDialog.cxx:659 +#: vncviewer/OptionsDialog.cxx:669 msgid "Username and password (insecure without encryption)" msgstr "" -#: vncviewer/OptionsDialog.cxx:678 +#: vncviewer/OptionsDialog.cxx:688 msgid "Input" msgstr "" -#: vncviewer/OptionsDialog.cxx:686 +#: vncviewer/OptionsDialog.cxx:696 msgid "View only (ignore mouse and keyboard)" msgstr "" -#: vncviewer/OptionsDialog.cxx:692 +#: vncviewer/OptionsDialog.cxx:702 msgid "Accept clipboard from server" msgstr "" -#: vncviewer/OptionsDialog.cxx:698 +#: vncviewer/OptionsDialog.cxx:709 +msgid "Also set primary selection" +msgstr "" + +#: vncviewer/OptionsDialog.cxx:716 msgid "Send clipboard to server" msgstr "" -#: vncviewer/OptionsDialog.cxx:704 -msgid "Send primary selection and cut buffer as clipboard" +#: vncviewer/OptionsDialog.cxx:723 +msgid "Send primary selection as clipboard" msgstr "" -#: vncviewer/OptionsDialog.cxx:710 +#: vncviewer/OptionsDialog.cxx:730 msgid "Pass system keys directly to server (full screen)" msgstr "" -#: vncviewer/OptionsDialog.cxx:713 +#: vncviewer/OptionsDialog.cxx:733 msgid "Menu key" msgstr "" -#: vncviewer/OptionsDialog.cxx:729 +#: vncviewer/OptionsDialog.cxx:749 msgid "Screen" msgstr "" -#: vncviewer/OptionsDialog.cxx:737 +#: vncviewer/OptionsDialog.cxx:757 msgid "Resize remote session on connect" msgstr "" -#: vncviewer/OptionsDialog.cxx:750 +#: vncviewer/OptionsDialog.cxx:770 msgid "Resize remote session to the local window" msgstr "" -#: vncviewer/OptionsDialog.cxx:756 +#: vncviewer/OptionsDialog.cxx:776 msgid "Full-screen mode" msgstr "" -#: vncviewer/OptionsDialog.cxx:762 +#: vncviewer/OptionsDialog.cxx:782 msgid "Enable full-screen mode over all monitors" msgstr "" -#: vncviewer/OptionsDialog.cxx:771 +#: vncviewer/OptionsDialog.cxx:791 msgid "Misc." msgstr "" -#: vncviewer/OptionsDialog.cxx:779 +#: vncviewer/OptionsDialog.cxx:799 msgid "Shared (don't disconnect other viewers)" msgstr "" -#: vncviewer/OptionsDialog.cxx:785 +#: vncviewer/OptionsDialog.cxx:805 msgid "Show dot when no cursor" msgstr "" @@ -367,112 +361,112 @@ msgstr "" msgid "Username:" msgstr "" -#: vncviewer/Viewport.cxx:433 +#: vncviewer/Viewport.cxx:391 #, c-format msgid "Unable to create platform specific framebuffer: %s" msgstr "" -#: vncviewer/Viewport.cxx:434 +#: vncviewer/Viewport.cxx:392 msgid "Using platform independent framebuffer" msgstr "" -#: vncviewer/Viewport.cxx:668 +#: vncviewer/Viewport.cxx:628 #, c-format msgid "No scan code for extended virtual key 0x%02x" msgstr "" -#: vncviewer/Viewport.cxx:670 +#: vncviewer/Viewport.cxx:630 #, c-format msgid "No scan code for virtual key 0x%02x" msgstr "" -#: vncviewer/Viewport.cxx:687 +#: vncviewer/Viewport.cxx:647 #, c-format msgid "No symbol for extended virtual key 0x%02x" msgstr "" -#: vncviewer/Viewport.cxx:689 +#: vncviewer/Viewport.cxx:649 #, c-format msgid "No symbol for virtual key 0x%02x" msgstr "" -#: vncviewer/Viewport.cxx:727 +#: vncviewer/Viewport.cxx:687 #, c-format msgid "No symbol for key code 0x%02x (in the current state)" msgstr "" -#: vncviewer/Viewport.cxx:753 +#: vncviewer/Viewport.cxx:713 #, c-format msgid "No symbol for key code %d (in the current state)" msgstr "" -#: vncviewer/Viewport.cxx:790 +#: vncviewer/Viewport.cxx:750 msgctxt "ContextMenu|" msgid "E&xit viewer" msgstr "" -#: vncviewer/Viewport.cxx:793 +#: vncviewer/Viewport.cxx:753 msgctxt "ContextMenu|" msgid "&Full screen" msgstr "" -#: vncviewer/Viewport.cxx:796 +#: vncviewer/Viewport.cxx:756 msgctxt "ContextMenu|" msgid "Minimi&ze" msgstr "" -#: vncviewer/Viewport.cxx:798 +#: vncviewer/Viewport.cxx:758 msgctxt "ContextMenu|" msgid "Resize &window to session" msgstr "" -#: vncviewer/Viewport.cxx:803 +#: vncviewer/Viewport.cxx:763 msgctxt "ContextMenu|" msgid "&Ctrl" msgstr "" -#: vncviewer/Viewport.cxx:806 +#: vncviewer/Viewport.cxx:766 msgctxt "ContextMenu|" msgid "&Alt" msgstr "" -#: vncviewer/Viewport.cxx:812 +#: vncviewer/Viewport.cxx:772 #, c-format msgctxt "ContextMenu|" msgid "Send %s" msgstr "" -#: vncviewer/Viewport.cxx:818 +#: vncviewer/Viewport.cxx:778 msgctxt "ContextMenu|" msgid "Send Ctrl-Alt-&Del" msgstr "" -#: vncviewer/Viewport.cxx:821 +#: vncviewer/Viewport.cxx:781 msgctxt "ContextMenu|" msgid "&Refresh screen" msgstr "" -#: vncviewer/Viewport.cxx:824 +#: vncviewer/Viewport.cxx:784 msgctxt "ContextMenu|" msgid "&Options..." msgstr "" -#: vncviewer/Viewport.cxx:826 +#: vncviewer/Viewport.cxx:786 msgctxt "ContextMenu|" msgid "Connection &info..." msgstr "" -#: vncviewer/Viewport.cxx:828 +#: vncviewer/Viewport.cxx:788 msgctxt "ContextMenu|" msgid "About &TigerVNC viewer..." msgstr "" -#: vncviewer/Viewport.cxx:831 +#: vncviewer/Viewport.cxx:791 msgctxt "ContextMenu|" msgid "Dismiss &menu" msgstr "" -#: vncviewer/Viewport.cxx:915 +#: vncviewer/Viewport.cxx:875 msgid "VNC connection info" msgstr "" @@ -494,123 +488,123 @@ msgstr "" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:61 +#: vncviewer/X11PixelBuffer.cxx:65 msgid "Display lacks pixmap format for default depth" msgstr "" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:72 +#: vncviewer/X11PixelBuffer.cxx:76 msgid "Couldn't find suitable pixmap format" msgstr "" -#: vncviewer/X11PixelBuffer.cxx:81 +#: vncviewer/X11PixelBuffer.cxx:85 msgid "Only true colour displays supported" msgstr "" -#: vncviewer/X11PixelBuffer.cxx:83 +#: vncviewer/X11PixelBuffer.cxx:87 #, c-format msgid "Using default colormap and visual, TrueColor, depth %d." msgstr "" -#: vncviewer/X11PixelBuffer.cxx:109 +#: vncviewer/X11PixelBuffer.cxx:113 msgid "Could not create framebuffer image" msgstr "" -#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313 +#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320 #, c-format msgid "The name of the parameter %s was too large to write to the registry" msgstr "" -#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292 +#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299 #, c-format msgid "The parameter %s was too large to write to the registry" msgstr "" -#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319 +#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326 #, c-format msgid "Failed to write parameter %s of type %s to the registry: %ld" msgstr "" -#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373 +#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380 #, c-format msgid "The name of the parameter %s was too large to read from the registry" msgstr "" -#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382 +#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389 #, c-format msgid "Failed to read parameter %s from the registry: %ld" msgstr "" -#: vncviewer/parameters.cxx:352 +#: vncviewer/parameters.cxx:359 #, c-format msgid "The parameter %s was too large to read from the registry" msgstr "" -#: vncviewer/parameters.cxx:402 +#: vncviewer/parameters.cxx:409 #, c-format msgid "Failed to create registry key: %ld" msgstr "" -#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465 -#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658 +#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665 #, c-format msgid "Unknown parameter type for parameter %s" msgstr "" -#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479 #, c-format msgid "Failed to close registry key: %ld" msgstr "" -#: vncviewer/parameters.cxx:439 +#: vncviewer/parameters.cxx:446 #, c-format msgid "Failed to open registry key: %ld" msgstr "" -#: vncviewer/parameters.cxx:496 +#: vncviewer/parameters.cxx:503 msgid "Failed to write configuration file, can't obtain home directory path." msgstr "" -#: vncviewer/parameters.cxx:509 +#: vncviewer/parameters.cxx:516 #, c-format msgid "Failed to write configuration file, can't open %s: %s" msgstr "" -#: vncviewer/parameters.cxx:552 +#: vncviewer/parameters.cxx:559 msgid "Failed to read configuration file, can't obtain home directory path." msgstr "" -#: vncviewer/parameters.cxx:565 +#: vncviewer/parameters.cxx:572 #, c-format msgid "Failed to read configuration file, can't open %s: %s" msgstr "" -#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583 -#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621 -#: vncviewer/parameters.cxx:637 +#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590 +#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628 +#: vncviewer/parameters.cxx:644 #, c-format msgid "Failed to read line %d in file %s: %s" msgstr "" -#: vncviewer/parameters.cxx:584 +#: vncviewer/parameters.cxx:591 msgid "Line too long" msgstr "" -#: vncviewer/parameters.cxx:591 +#: vncviewer/parameters.cxx:598 #, c-format msgid "Configuration file %s is in an invalid format" msgstr "" -#: vncviewer/parameters.cxx:609 +#: vncviewer/parameters.cxx:616 msgid "Invalid format" msgstr "" -#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638 +#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645 msgid "Invalid format or too large value" msgstr "" -#: vncviewer/parameters.cxx:665 +#: vncviewer/parameters.cxx:672 #, c-format msgid "Unknown parameter %s on line %d in file %s" msgstr "" @@ -628,86 +622,86 @@ msgstr "" msgid "About TigerVNC Viewer" msgstr "" -#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156 +#: vncviewer/vncviewer.cxx:140 +msgid "Internal FLTK error. Exiting." +msgstr "" + +#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170 #, c-format msgid "Error starting new TigerVNC Viewer: %s" msgstr "" -#: vncviewer/vncviewer.cxx:165 +#: vncviewer/vncviewer.cxx:179 #, c-format msgid "Termination signal %d has been received. TigerVNC Viewer will now exit." msgstr "" -#: vncviewer/vncviewer.cxx:257 +#: vncviewer/vncviewer.cxx:271 msgid "TigerVNC Viewer" msgstr "" -#: vncviewer/vncviewer.cxx:265 +#: vncviewer/vncviewer.cxx:279 msgid "No" msgstr "" -#: vncviewer/vncviewer.cxx:266 +#: vncviewer/vncviewer.cxx:280 msgid "Yes" msgstr "" -#: vncviewer/vncviewer.cxx:269 +#: vncviewer/vncviewer.cxx:283 msgid "Close" msgstr "" -#: vncviewer/vncviewer.cxx:274 +#: vncviewer/vncviewer.cxx:288 msgid "About" msgstr "" -#: vncviewer/vncviewer.cxx:277 +#: vncviewer/vncviewer.cxx:291 msgid "Hide" msgstr "" -#: vncviewer/vncviewer.cxx:280 +#: vncviewer/vncviewer.cxx:294 msgid "Quit" msgstr "" -#: vncviewer/vncviewer.cxx:284 +#: vncviewer/vncviewer.cxx:298 msgid "Services" msgstr "" -#: vncviewer/vncviewer.cxx:285 +#: vncviewer/vncviewer.cxx:299 msgid "Hide Others" msgstr "" -#: vncviewer/vncviewer.cxx:286 +#: vncviewer/vncviewer.cxx:300 msgid "Show All" msgstr "" -#: vncviewer/vncviewer.cxx:295 +#: vncviewer/vncviewer.cxx:309 msgctxt "SysMenu|" msgid "&File" msgstr "" -#: vncviewer/vncviewer.cxx:298 +#: vncviewer/vncviewer.cxx:312 msgctxt "SysMenu|File|" msgid "&New Connection" msgstr "" -#: vncviewer/vncviewer.cxx:310 +#: vncviewer/vncviewer.cxx:324 msgid "Could not create VNC home directory: can't obtain home directory path." msgstr "" -#: vncviewer/vncviewer.cxx:315 +#: vncviewer/vncviewer.cxx:329 #, c-format msgid "Could not create VNC home directory: %s." msgstr "" #. TRANSLATORS: "Parameters" are command line arguments, or settings #. from a file or the Windows registry. -#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521 +#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535 msgid "Parameters -listen and -via are incompatible" msgstr "" -#: vncviewer/vncviewer.cxx:536 +#: vncviewer/vncviewer.cxx:550 #, c-format msgid "Listening on port %d" msgstr "" - -#: vncviewer/vncviewer.cxx:601 -msgid "Internal FLTK error. Exiting." -msgstr "" @@ -2,13 +2,13 @@ # Copyright (C) 2014 the TigerVNC Team (msgids) # This file is distributed under the same license as the tigervnc package. # -# Yuri Chornoivan <yurchor@ukr.net>, 2014, 2015. +# Yuri Chornoivan <yurchor@ukr.net>, 2014, 2015, 2016. msgid "" msgstr "" -"Project-Id-Version: tigervnc 1.5.90\n" +"Project-Id-Version: tigervnc 1.6.90\n" "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" -"POT-Creation-Date: 2015-11-26 11:33+0000\n" -"PO-Revision-Date: 2015-12-01 21:51+0200\n" +"POT-Creation-Date: 2016-07-01 10:15+0000\n" +"PO-Revision-Date: 2016-07-01 14:38+0300\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n" "Language: uk\n" @@ -18,108 +18,98 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Lokalize 1.5\n" -#: vncviewer/CConn.cxx:111 +#: vncviewer/CConn.cxx:110 #, c-format msgid "connected to host %s port %d" msgstr "з’єднано з вузлом %s, порт %d" -#: vncviewer/CConn.cxx:173 +#: vncviewer/CConn.cxx:169 #, c-format msgid "Desktop name: %.80s" msgstr "Назва робочої станції: %.80s" -#: vncviewer/CConn.cxx:178 +#: vncviewer/CConn.cxx:174 #, c-format msgid "Host: %.80s port: %d" msgstr "Вузол: %.80s порт: %d" -#: vncviewer/CConn.cxx:183 +#: vncviewer/CConn.cxx:179 #, c-format msgid "Size: %d x %d" msgstr "Розмір: %d x %d" -#: vncviewer/CConn.cxx:191 +#: vncviewer/CConn.cxx:187 #, c-format msgid "Pixel format: %s" msgstr "Формат у пікселях: %s" -#: vncviewer/CConn.cxx:198 +#: vncviewer/CConn.cxx:194 #, c-format msgid "(server default %s)" msgstr "(типовий для сервера %s)" -#: vncviewer/CConn.cxx:203 +#: vncviewer/CConn.cxx:199 #, c-format msgid "Requested encoding: %s" msgstr "Запит щодо кодування: %s" -#: vncviewer/CConn.cxx:208 +#: vncviewer/CConn.cxx:204 #, c-format msgid "Last used encoding: %s" msgstr "Останнє використане кодування: %s" -#: vncviewer/CConn.cxx:213 +#: vncviewer/CConn.cxx:209 #, c-format msgid "Line speed estimate: %d kbit/s" msgstr "Оцінка швидкості лінії: %d кбіт/с" -#: vncviewer/CConn.cxx:218 +#: vncviewer/CConn.cxx:214 #, c-format msgid "Protocol version: %d.%d" msgstr "Версія протоколу: %d.%d" -#: vncviewer/CConn.cxx:223 +#: vncviewer/CConn.cxx:219 #, c-format msgid "Security method: %s" msgstr "Метод захисту: %s" -#: vncviewer/CConn.cxx:329 +#: vncviewer/CConn.cxx:319 #, c-format msgid "SetDesktopSize failed: %d" msgstr "Помилка SetDesktopSize: %d" -#: vncviewer/CConn.cxx:398 +#: vncviewer/CConn.cxx:411 msgid "Invalid SetColourMapEntries from server!" msgstr "Некоректне значення SetColourMapEntries від сервера!" -#. TRANSLATORS: Refers to a VNC protocol encoding type -#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451 -#, c-format -msgid "Unknown encoding %d" -msgstr "Невідоме кодування %d" - -#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452 -msgid "Unknown encoding" -msgstr "Невідоме кодування" - -#: vncviewer/CConn.cxx:484 +#: vncviewer/CConn.cxx:485 msgid "Enabling continuous updates" msgstr "Увімкнути неперервне оновлення" -#: vncviewer/CConn.cxx:554 +#: vncviewer/CConn.cxx:555 #, c-format msgid "Throughput %d kbit/s - changing to quality %d" msgstr "Пропускна здатність %d кбіт/с — змінюємо якість на %d" -#: vncviewer/CConn.cxx:576 +#: vncviewer/CConn.cxx:577 #, c-format msgid "Throughput %d kbit/s - full color is now %s" msgstr "Пропускна здатність %d кбіт/с — змінюємо колірність на %s" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "disabled" msgstr "вимкнено" -#: vncviewer/CConn.cxx:578 +#: vncviewer/CConn.cxx:579 msgid "enabled" msgstr "увімкнено" -#: vncviewer/CConn.cxx:588 +#: vncviewer/CConn.cxx:589 #, c-format msgid "Using %s encoding" msgstr "Використовуємо кодування %s" -#: vncviewer/CConn.cxx:635 +#: vncviewer/CConn.cxx:636 #, c-format msgid "Using pixel format %s" msgstr "Використовуємо формат у пікселях %s" @@ -128,25 +118,25 @@ msgstr "Використовуємо формат у пікселях %s" msgid "Invalid geometry specified!" msgstr "Вказано некоректні геометричні параметри!" -#: vncviewer/DesktopWindow.cxx:309 +#: vncviewer/DesktopWindow.cxx:303 msgid "Adjusting window size to avoid accidental full screen request" msgstr "Коригувати розміри вікна, щоб уникнути випадкового запиту щодо переходу у повноекранний режим" -#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497 -#: vncviewer/DesktopWindow.cxx:510 +#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491 +#: vncviewer/DesktopWindow.cxx:504 msgid "Failure grabbing keyboard" msgstr "Помилка під час спроби перехопити клавіатуру" -#: vncviewer/DesktopWindow.cxx:522 +#: vncviewer/DesktopWindow.cxx:516 msgid "Failure grabbing mouse" msgstr "Помилка під час спроби перехопити мишу" -#: vncviewer/DesktopWindow.cxx:752 +#: vncviewer/DesktopWindow.cxx:746 msgid "Invalid screen layout computed for resize request!" msgstr "Результати обчислення компонування вікна для запиту щодо зміни розмірів є некоректними!" #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48 -#: vncviewer/X11PixelBuffer.cxx:113 +#: vncviewer/X11PixelBuffer.cxx:117 msgid "Not enough memory for framebuffer" msgstr "Недостатньо пам’яті для буфера кадрів" @@ -163,160 +153,164 @@ msgid "VNC Viewer: Connection Options" msgstr "Засіб перегляду VNC: параметри з’єднання" #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91 -#: vncviewer/vncviewer.cxx:268 +#: vncviewer/vncviewer.cxx:282 msgid "Cancel" msgstr "Скасувати" -#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267 +#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281 msgid "OK" msgstr "Гаразд" -#: vncviewer/OptionsDialog.cxx:413 +#: vncviewer/OptionsDialog.cxx:423 msgid "Compression" msgstr "Стискання" -#: vncviewer/OptionsDialog.cxx:429 +#: vncviewer/OptionsDialog.cxx:439 msgid "Auto select" msgstr "Автовибір" -#: vncviewer/OptionsDialog.cxx:441 +#: vncviewer/OptionsDialog.cxx:451 msgid "Preferred encoding" msgstr "Бажане кодування" -#: vncviewer/OptionsDialog.cxx:489 +#: vncviewer/OptionsDialog.cxx:499 msgid "Color level" msgstr "Рівень відтворення кольору" -#: vncviewer/OptionsDialog.cxx:500 +#: vncviewer/OptionsDialog.cxx:510 msgid "Full (all available colors)" msgstr "Повністю (усі доступні кольори)" -#: vncviewer/OptionsDialog.cxx:507 +#: vncviewer/OptionsDialog.cxx:517 msgid "Medium (256 colors)" msgstr "Середній (256 кольори)" -#: vncviewer/OptionsDialog.cxx:514 +#: vncviewer/OptionsDialog.cxx:524 msgid "Low (64 colors)" msgstr "Низький (64 кольори)" -#: vncviewer/OptionsDialog.cxx:521 +#: vncviewer/OptionsDialog.cxx:531 msgid "Very low (8 colors)" msgstr "Дуже низький (8 кольорів)" -#: vncviewer/OptionsDialog.cxx:538 +#: vncviewer/OptionsDialog.cxx:548 msgid "Custom compression level:" msgstr "Нетиповий рівень стискання:" -#: vncviewer/OptionsDialog.cxx:544 +#: vncviewer/OptionsDialog.cxx:554 msgid "level (1=fast, 6=best [4-6 are rarely useful])" msgstr "рівень (1=швидко, 6=найякісніше [4-6 використовувати не варто])" -#: vncviewer/OptionsDialog.cxx:551 +#: vncviewer/OptionsDialog.cxx:561 msgid "Allow JPEG compression:" msgstr "Дозволити стискання JPEG:" -#: vncviewer/OptionsDialog.cxx:557 +#: vncviewer/OptionsDialog.cxx:567 msgid "quality (0=poor, 9=best)" msgstr "якість (0=найгірша, 9=найкраща)" -#: vncviewer/OptionsDialog.cxx:568 +#: vncviewer/OptionsDialog.cxx:578 msgid "Security" msgstr "Захист" -#: vncviewer/OptionsDialog.cxx:583 +#: vncviewer/OptionsDialog.cxx:593 msgid "Encryption" msgstr "Шифрування" -#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647 -#: vncviewer/OptionsDialog.cxx:715 +#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657 +#: vncviewer/OptionsDialog.cxx:735 msgid "None" msgstr "Немає" -#: vncviewer/OptionsDialog.cxx:600 +#: vncviewer/OptionsDialog.cxx:610 msgid "TLS with anonymous certificates" msgstr "TLS із анонімними сертифікатами" -#: vncviewer/OptionsDialog.cxx:606 +#: vncviewer/OptionsDialog.cxx:616 msgid "TLS with X509 certificates" msgstr "TLS з сертифікатами X509" -#: vncviewer/OptionsDialog.cxx:613 +#: vncviewer/OptionsDialog.cxx:623 msgid "Path to X509 CA certificate" msgstr "Шлях до сертифіката CA X509" -#: vncviewer/OptionsDialog.cxx:620 +#: vncviewer/OptionsDialog.cxx:630 msgid "Path to X509 CRL file" msgstr "Шлях до файла CRL X509" -#: vncviewer/OptionsDialog.cxx:636 +#: vncviewer/OptionsDialog.cxx:646 msgid "Authentication" msgstr "Розпізнавання" -#: vncviewer/OptionsDialog.cxx:653 +#: vncviewer/OptionsDialog.cxx:663 msgid "Standard VNC (insecure without encryption)" msgstr "Стандартний VNC (без захисту і шифрування)" -#: vncviewer/OptionsDialog.cxx:659 +#: vncviewer/OptionsDialog.cxx:669 msgid "Username and password (insecure without encryption)" msgstr "Ім’я користувача і пароль (без захисту і шифрування)" -#: vncviewer/OptionsDialog.cxx:678 +#: vncviewer/OptionsDialog.cxx:688 msgid "Input" msgstr "Введення" -#: vncviewer/OptionsDialog.cxx:686 +#: vncviewer/OptionsDialog.cxx:696 msgid "View only (ignore mouse and keyboard)" msgstr "Лише перегляд (ігнорувати сигнали від миші і клавіатури)" -#: vncviewer/OptionsDialog.cxx:692 +#: vncviewer/OptionsDialog.cxx:702 msgid "Accept clipboard from server" msgstr "Приймати вміст буфера з сервера" -#: vncviewer/OptionsDialog.cxx:698 +#: vncviewer/OptionsDialog.cxx:709 +msgid "Also set primary selection" +msgstr "Також встановити основне позначене" + +#: vncviewer/OptionsDialog.cxx:716 msgid "Send clipboard to server" msgstr "Надіслати вміст буфера обміну до сервера" -#: vncviewer/OptionsDialog.cxx:704 -msgid "Send primary selection and cut buffer as clipboard" -msgstr "Надіслати основне позначене і вирізати буфер до буфера обміну" +#: vncviewer/OptionsDialog.cxx:723 +msgid "Send primary selection as clipboard" +msgstr "Надіслати основне позначене як буфер обміну" -#: vncviewer/OptionsDialog.cxx:710 +#: vncviewer/OptionsDialog.cxx:730 msgid "Pass system keys directly to server (full screen)" msgstr "Передавати натискання системних клавіш безпосередньо до сервера (повноекранний режим)" -#: vncviewer/OptionsDialog.cxx:713 +#: vncviewer/OptionsDialog.cxx:733 msgid "Menu key" msgstr "Клавіша меню" -#: vncviewer/OptionsDialog.cxx:729 +#: vncviewer/OptionsDialog.cxx:749 msgid "Screen" msgstr "Екран" -#: vncviewer/OptionsDialog.cxx:737 +#: vncviewer/OptionsDialog.cxx:757 msgid "Resize remote session on connect" msgstr "Змінювати розміри віддаленого сеансу під час з’єднання" -#: vncviewer/OptionsDialog.cxx:750 +#: vncviewer/OptionsDialog.cxx:770 msgid "Resize remote session to the local window" msgstr "Змінювати розміри віддаленого сеансу відповідно до локального вікна" -#: vncviewer/OptionsDialog.cxx:756 +#: vncviewer/OptionsDialog.cxx:776 msgid "Full-screen mode" msgstr "Повноекранний режим" -#: vncviewer/OptionsDialog.cxx:762 +#: vncviewer/OptionsDialog.cxx:782 msgid "Enable full-screen mode over all monitors" msgstr "Увімкнути повноекранний режим на усіх моніторах" -#: vncviewer/OptionsDialog.cxx:771 +#: vncviewer/OptionsDialog.cxx:791 msgid "Misc." msgstr "Інше" -#: vncviewer/OptionsDialog.cxx:779 +#: vncviewer/OptionsDialog.cxx:799 msgid "Shared (don't disconnect other viewers)" msgstr "Спільний (не від’єднувати інші засоби перегляду)" -#: vncviewer/OptionsDialog.cxx:785 +#: vncviewer/OptionsDialog.cxx:805 msgid "Show dot when no cursor" msgstr "Показувати крапку, якщо немає курсора" @@ -368,112 +362,112 @@ msgstr "Розпізнавання скасовано" msgid "Username:" msgstr "Користувач:" -#: vncviewer/Viewport.cxx:433 +#: vncviewer/Viewport.cxx:391 #, c-format msgid "Unable to create platform specific framebuffer: %s" msgstr "Не вдалося створити специфічний для платформи буфер кадрів: %s" -#: vncviewer/Viewport.cxx:434 +#: vncviewer/Viewport.cxx:392 msgid "Using platform independent framebuffer" msgstr "Використовуємо незалежний від платформи буфер кадрів" -#: vncviewer/Viewport.cxx:668 +#: vncviewer/Viewport.cxx:628 #, c-format msgid "No scan code for extended virtual key 0x%02x" msgstr "Немає коду сканування для віртуальної клавіші розширення 0x%02x" -#: vncviewer/Viewport.cxx:670 +#: vncviewer/Viewport.cxx:630 #, c-format msgid "No scan code for virtual key 0x%02x" msgstr "Немає коду сканування для віртуальної клавіші 0x%02x" -#: vncviewer/Viewport.cxx:687 +#: vncviewer/Viewport.cxx:647 #, c-format msgid "No symbol for extended virtual key 0x%02x" msgstr "Немає символу для віртуальної клавіші розширення 0x%02x" -#: vncviewer/Viewport.cxx:689 +#: vncviewer/Viewport.cxx:649 #, c-format msgid "No symbol for virtual key 0x%02x" msgstr "Немає символу для віртуальної клавіші 0x%02x" -#: vncviewer/Viewport.cxx:727 +#: vncviewer/Viewport.cxx:687 #, c-format msgid "No symbol for key code 0x%02x (in the current state)" msgstr "Немає символу для клавіші з кодом 0x%02x (у поточному стані)" -#: vncviewer/Viewport.cxx:753 +#: vncviewer/Viewport.cxx:713 #, c-format msgid "No symbol for key code %d (in the current state)" msgstr "Немає символу для клавіші з кодом %d (у поточному стані)" -#: vncviewer/Viewport.cxx:790 +#: vncviewer/Viewport.cxx:750 msgctxt "ContextMenu|" msgid "E&xit viewer" msgstr "Ви&йти із засобу перегляду" -#: vncviewer/Viewport.cxx:793 +#: vncviewer/Viewport.cxx:753 msgctxt "ContextMenu|" msgid "&Full screen" msgstr "&На весь екран" -#: vncviewer/Viewport.cxx:796 +#: vncviewer/Viewport.cxx:756 msgctxt "ContextMenu|" msgid "Minimi&ze" msgstr "М&інімізувати" -#: vncviewer/Viewport.cxx:798 +#: vncviewer/Viewport.cxx:758 msgctxt "ContextMenu|" msgid "Resize &window to session" msgstr "Змінити &розміри вікна відповідно до сеансу" -#: vncviewer/Viewport.cxx:803 +#: vncviewer/Viewport.cxx:763 msgctxt "ContextMenu|" msgid "&Ctrl" msgstr "&Ctrl" -#: vncviewer/Viewport.cxx:806 +#: vncviewer/Viewport.cxx:766 msgctxt "ContextMenu|" msgid "&Alt" msgstr "&Alt" -#: vncviewer/Viewport.cxx:812 +#: vncviewer/Viewport.cxx:772 #, c-format msgctxt "ContextMenu|" msgid "Send %s" msgstr "Надіслати %s" -#: vncviewer/Viewport.cxx:818 +#: vncviewer/Viewport.cxx:778 msgctxt "ContextMenu|" msgid "Send Ctrl-Alt-&Del" msgstr "На&діслати Ctrl-Alt-Del" -#: vncviewer/Viewport.cxx:821 +#: vncviewer/Viewport.cxx:781 msgctxt "ContextMenu|" msgid "&Refresh screen" msgstr "&Оновити вміст екрана" -#: vncviewer/Viewport.cxx:824 +#: vncviewer/Viewport.cxx:784 msgctxt "ContextMenu|" msgid "&Options..." msgstr "П&араметри…" -#: vncviewer/Viewport.cxx:826 +#: vncviewer/Viewport.cxx:786 msgctxt "ContextMenu|" msgid "Connection &info..." msgstr "Дані щодо з’&єднання…" -#: vncviewer/Viewport.cxx:828 +#: vncviewer/Viewport.cxx:788 msgctxt "ContextMenu|" msgid "About &TigerVNC viewer..." msgstr "Про &засіб перегляду TigerVNC…" -#: vncviewer/Viewport.cxx:831 +#: vncviewer/Viewport.cxx:791 msgctxt "ContextMenu|" msgid "Dismiss &menu" msgstr "Закрити &меню" -#: vncviewer/Viewport.cxx:915 +#: vncviewer/Viewport.cxx:875 msgid "VNC connection info" msgstr "Дані щодо з’єднання VNC" @@ -495,123 +489,123 @@ msgstr "Помилка BitBlt" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:61 +#: vncviewer/X11PixelBuffer.cxx:65 msgid "Display lacks pixmap format for default depth" msgstr "Для дисплея не вказано формат у пікселях для типової глибини" #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable #. to translate. -#: vncviewer/X11PixelBuffer.cxx:72 +#: vncviewer/X11PixelBuffer.cxx:76 msgid "Couldn't find suitable pixmap format" msgstr "Не вдалося визначити відповідний формат зображення" -#: vncviewer/X11PixelBuffer.cxx:81 +#: vncviewer/X11PixelBuffer.cxx:85 msgid "Only true colour displays supported" msgstr "Передбачено підтримку лише дисплеїв з True Color" -#: vncviewer/X11PixelBuffer.cxx:83 +#: vncviewer/X11PixelBuffer.cxx:87 #, c-format msgid "Using default colormap and visual, TrueColor, depth %d." msgstr "Використовуємо типову карту кольорів і відтворення, TrueColor, глибина %d." -#: vncviewer/X11PixelBuffer.cxx:109 +#: vncviewer/X11PixelBuffer.cxx:113 msgid "Could not create framebuffer image" msgstr "Не вдалося створити зображення буфера кадрів" -#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313 +#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320 #, c-format msgid "The name of the parameter %s was too large to write to the registry" msgstr "Назва параметра %s є надто довгою для запису до реєстру" -#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292 +#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299 #, c-format msgid "The parameter %s was too large to write to the registry" msgstr "Параметр %s є надто довгим для запису до реєстру" -#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319 +#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326 #, c-format msgid "Failed to write parameter %s of type %s to the registry: %ld" msgstr "Не вдалося записати параметр %s типу %s до реєстру: %ld" -#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373 +#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380 #, c-format msgid "The name of the parameter %s was too large to read from the registry" msgstr "Назва параметра %s є надто довгою для читання з реєстру" -#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382 +#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389 #, c-format msgid "Failed to read parameter %s from the registry: %ld" msgstr "Не вдалося прочитати параметр %s з реєстру: %ld" -#: vncviewer/parameters.cxx:352 +#: vncviewer/parameters.cxx:359 #, c-format msgid "The parameter %s was too large to read from the registry" msgstr "Параметр %s є надто довгим для читання з реєстру" -#: vncviewer/parameters.cxx:402 +#: vncviewer/parameters.cxx:409 #, c-format msgid "Failed to create registry key: %ld" msgstr "Не вдалося створити ключ реєстру: %ld" -#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465 -#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658 +#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665 #, c-format msgid "Unknown parameter type for parameter %s" msgstr "Невідомий тип параметра %s" -#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479 #, c-format msgid "Failed to close registry key: %ld" msgstr "Не вдалося закрити ключ реєстру: %ld" -#: vncviewer/parameters.cxx:439 +#: vncviewer/parameters.cxx:446 #, c-format msgid "Failed to open registry key: %ld" msgstr "Не вдалося відкрити ключ реєстру: %ld" -#: vncviewer/parameters.cxx:496 +#: vncviewer/parameters.cxx:503 msgid "Failed to write configuration file, can't obtain home directory path." msgstr "Не вдалося записати файл налаштувань, оскільки не вдалося визначити шлях до домашнього каталогу." -#: vncviewer/parameters.cxx:509 +#: vncviewer/parameters.cxx:516 #, c-format msgid "Failed to write configuration file, can't open %s: %s" msgstr "Не вдалося записати файл налаштувань, оскільки не вдалося відкрити %s: %s" -#: vncviewer/parameters.cxx:552 +#: vncviewer/parameters.cxx:559 msgid "Failed to read configuration file, can't obtain home directory path." msgstr "Не вдалося прочитати файл налаштувань, оскільки не вдалося визначити шлях до домашнього каталогу." -#: vncviewer/parameters.cxx:565 +#: vncviewer/parameters.cxx:572 #, c-format msgid "Failed to read configuration file, can't open %s: %s" msgstr "Не вдалося прочитати файл налаштувань, оскільки не вдалося відкрити %s: %s" -#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583 -#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621 -#: vncviewer/parameters.cxx:637 +#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590 +#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628 +#: vncviewer/parameters.cxx:644 #, c-format msgid "Failed to read line %d in file %s: %s" msgstr "Не вдалося прочитати рядок %d у файлі %s: %s" -#: vncviewer/parameters.cxx:584 +#: vncviewer/parameters.cxx:591 msgid "Line too long" msgstr "Занадто довгий рядок" -#: vncviewer/parameters.cxx:591 +#: vncviewer/parameters.cxx:598 #, c-format msgid "Configuration file %s is in an invalid format" msgstr "Файл налаштувань %s збережено у некоректному форматі" -#: vncviewer/parameters.cxx:609 +#: vncviewer/parameters.cxx:616 msgid "Invalid format" msgstr "Некоректне форматування" -#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638 +#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645 msgid "Invalid format or too large value" msgstr "Некоректне форматування або надто велике значення" -#: vncviewer/parameters.cxx:665 +#: vncviewer/parameters.cxx:672 #, c-format msgid "Unknown parameter %s on line %d in file %s" msgstr "Невідомий параметр %s у рядку %d файла %s" @@ -633,89 +627,95 @@ msgstr "" msgid "About TigerVNC Viewer" msgstr "Про засіб перегляду TigerVNC" -#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156 +#: vncviewer/vncviewer.cxx:140 +msgid "Internal FLTK error. Exiting." +msgstr "Внутрішня помилка FLTK. Завершуємо роботу." + +#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170 #, c-format msgid "Error starting new TigerVNC Viewer: %s" msgstr "Помилка під час спроби запуску нового засобу перегляду TigerVNC: %s" -#: vncviewer/vncviewer.cxx:165 +#: vncviewer/vncviewer.cxx:179 #, c-format msgid "Termination signal %d has been received. TigerVNC Viewer will now exit." msgstr "Отримано сигнал переривання %d. Зараз засіб перегляду TigerVNC завершить роботу." -#: vncviewer/vncviewer.cxx:257 +#: vncviewer/vncviewer.cxx:271 msgid "TigerVNC Viewer" msgstr "Засіб перегляду TigerVNC" -#: vncviewer/vncviewer.cxx:265 +#: vncviewer/vncviewer.cxx:279 msgid "No" msgstr "Ні" -#: vncviewer/vncviewer.cxx:266 +#: vncviewer/vncviewer.cxx:280 msgid "Yes" msgstr "Так" -#: vncviewer/vncviewer.cxx:269 +#: vncviewer/vncviewer.cxx:283 msgid "Close" msgstr "Закрити" -#: vncviewer/vncviewer.cxx:274 +#: vncviewer/vncviewer.cxx:288 msgid "About" msgstr "Про програму" -#: vncviewer/vncviewer.cxx:277 +#: vncviewer/vncviewer.cxx:291 msgid "Hide" msgstr "Сховати" -#: vncviewer/vncviewer.cxx:280 +#: vncviewer/vncviewer.cxx:294 msgid "Quit" msgstr "Вийти" -#: vncviewer/vncviewer.cxx:284 +#: vncviewer/vncviewer.cxx:298 msgid "Services" msgstr "Служби" -#: vncviewer/vncviewer.cxx:285 +#: vncviewer/vncviewer.cxx:299 msgid "Hide Others" msgstr "Сховати решту" -#: vncviewer/vncviewer.cxx:286 +#: vncviewer/vncviewer.cxx:300 msgid "Show All" msgstr "Показати всі" -#: vncviewer/vncviewer.cxx:295 +#: vncviewer/vncviewer.cxx:309 msgctxt "SysMenu|" msgid "&File" msgstr "&Файл" -#: vncviewer/vncviewer.cxx:298 +#: vncviewer/vncviewer.cxx:312 msgctxt "SysMenu|File|" msgid "&New Connection" msgstr "&Створити з'єднання" -#: vncviewer/vncviewer.cxx:310 +#: vncviewer/vncviewer.cxx:324 msgid "Could not create VNC home directory: can't obtain home directory path." msgstr "Не вдалося створити домашній каталог VNC: не вдалося отримати шлях до домашнього каталогу." -#: vncviewer/vncviewer.cxx:315 +#: vncviewer/vncviewer.cxx:329 #, c-format msgid "Could not create VNC home directory: %s." msgstr "Не вдалося створити домашній каталог VNC: %s." #. TRANSLATORS: "Parameters" are command line arguments, or settings #. from a file or the Windows registry. -#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521 +#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535 msgid "Parameters -listen and -via are incompatible" msgstr "Параметри -listen і -via є несумісними" -#: vncviewer/vncviewer.cxx:536 +#: vncviewer/vncviewer.cxx:550 #, c-format msgid "Listening on port %d" msgstr "Очікуємо на дані на порту %d" -#: vncviewer/vncviewer.cxx:601 -msgid "Internal FLTK error. Exiting." -msgstr "Внутрішня помилка FLTK. Завершуємо роботу." +#~ msgid "Unknown encoding %d" +#~ msgstr "Невідоме кодування %d" + +#~ msgid "Unknown encoding" +#~ msgstr "Невідоме кодування" #~ msgid "Alt" #~ msgstr "Alt" diff --git a/po/vi.po b/po/vi.po new file mode 100644 index 00000000..2c521554 --- /dev/null +++ b/po/vi.po @@ -0,0 +1,728 @@ +# Vietnamese translations for tigervnc package +# Bản dịch Tiếng Việt dành cho gói tigervnc +# This file is distributed under the same license as the tigervnc package. +# Trần Ngọc Quân <vnwildman@gmail.com>, 2014, 2015, 2016. +# +msgid "" +msgstr "" +"Project-Id-Version: tigervnc 1.6.90\n" +"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n" +"POT-Creation-Date: 2016-07-01 10:15+0000\n" +"PO-Revision-Date: 2016-07-04 08:44+0700\n" +"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n" +"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" +"Language: vi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Gtranslator 2.91.7\n" + +#: vncviewer/CConn.cxx:110 +#, c-format +msgid "connected to host %s port %d" +msgstr "đã kết nối đến máy %s cổng %d" + +#: vncviewer/CConn.cxx:169 +#, c-format +msgid "Desktop name: %.80s" +msgstr "Tên máy tính: %.80s" + +#: vncviewer/CConn.cxx:174 +#, c-format +msgid "Host: %.80s port: %d" +msgstr "Máy: %.80s cổng: %d" + +#: vncviewer/CConn.cxx:179 +#, c-format +msgid "Size: %d x %d" +msgstr "Cỡ: %d x %d" + +#: vncviewer/CConn.cxx:187 +#, c-format +msgid "Pixel format: %s" +msgstr "Định dạng điểm ảnh: %s" + +#: vncviewer/CConn.cxx:194 +#, c-format +msgid "(server default %s)" +msgstr "(máy chủ mặc định %s)" + +#: vncviewer/CConn.cxx:199 +#, c-format +msgid "Requested encoding: %s" +msgstr "Bộ mã đã yêu cầu: %s" + +#: vncviewer/CConn.cxx:204 +#, c-format +msgid "Last used encoding: %s" +msgstr "Bảng mã dùng lần cuối: %s" + +#: vncviewer/CConn.cxx:209 +#, c-format +msgid "Line speed estimate: %d kbit/s" +msgstr "Ước tính tốc độ đường dây: %d kbit/s" + +#: vncviewer/CConn.cxx:214 +#, c-format +msgid "Protocol version: %d.%d" +msgstr "Phiên bản giao thức: %d.%d" + +#: vncviewer/CConn.cxx:219 +#, c-format +msgid "Security method: %s" +msgstr "Phương thức bảo mật: %s" + +#: vncviewer/CConn.cxx:319 +#, c-format +msgid "SetDesktopSize failed: %d" +msgstr "SetDesktopSize gặp lỗi: %d" + +#: vncviewer/CConn.cxx:411 +msgid "Invalid SetColourMapEntries from server!" +msgstr "SetColourMapEntries từ máy phục vụ không hợp lệ!" + +#: vncviewer/CConn.cxx:485 +msgid "Enabling continuous updates" +msgstr "Đang bật cập nhật liên tục" + +#: vncviewer/CConn.cxx:555 +#, c-format +msgid "Throughput %d kbit/s - changing to quality %d" +msgstr "Năng lực %d kbit/s - đổi thành chất lượng %d" + +#: vncviewer/CConn.cxx:577 +#, c-format +msgid "Throughput %d kbit/s - full color is now %s" +msgstr "Năng lực %d kbit/s - màu đầy đủ giờ là %s" + +#: vncviewer/CConn.cxx:579 +msgid "disabled" +msgstr "tắt" + +#: vncviewer/CConn.cxx:579 +msgid "enabled" +msgstr "bật" + +#: vncviewer/CConn.cxx:589 +#, c-format +msgid "Using %s encoding" +msgstr "Đang dùng bảng mã %s" + +#: vncviewer/CConn.cxx:636 +#, c-format +msgid "Using pixel format %s" +msgstr "Đang dùng định dạng điểm ảnh %s" + +#: vncviewer/DesktopWindow.cxx:106 +msgid "Invalid geometry specified!" +msgstr "Hình dạng đã cho không hợp lệ!" + +#: vncviewer/DesktopWindow.cxx:303 +msgid "Adjusting window size to avoid accidental full screen request" +msgstr "Chỉnh cỡ cửa sổ để tránh yêu cầu toàm màn hình ngẫu nhiên" + +#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491 +#: vncviewer/DesktopWindow.cxx:504 +msgid "Failure grabbing keyboard" +msgstr "Gặp lỗi khi điều khiển bàn phím" + +#: vncviewer/DesktopWindow.cxx:516 +msgid "Failure grabbing mouse" +msgstr "Gặp lỗi khi điều khiển chuột" + +#: vncviewer/DesktopWindow.cxx:746 +msgid "Invalid screen layout computed for resize request!" +msgstr "Bố cục màn hình đã tính toán không hợp lệ cho yêu cầu đổi cỡ!" + +#: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48 +#: vncviewer/X11PixelBuffer.cxx:117 +msgid "Not enough memory for framebuffer" +msgstr "Không đủ bộ nhớ cho bộ đệm khung" + +#: vncviewer/OSXPixelBuffer.cxx:52 +msgid "Could not create framebuffer device" +msgstr "Không thể tạo thiết bị bộ đệm khung" + +#: vncviewer/OSXPixelBuffer.cxx:58 +msgid "Could not create framebuffer bitmap" +msgstr "Không thể tạo ánh xạ bộ đệm khung" + +#: vncviewer/OptionsDialog.cxx:57 +msgid "VNC Viewer: Connection Options" +msgstr "Bộ xem VNC: Các tùy chọn kết nối" + +#: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91 +#: vncviewer/vncviewer.cxx:282 +msgid "Cancel" +msgstr "Thôi" + +#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281 +msgid "OK" +msgstr "Đồng ý" + +#: vncviewer/OptionsDialog.cxx:423 +msgid "Compression" +msgstr "Nén" + +#: vncviewer/OptionsDialog.cxx:439 +msgid "Auto select" +msgstr "Chọn tự động" + +#: vncviewer/OptionsDialog.cxx:451 +msgid "Preferred encoding" +msgstr "Bảng mã ưa thích" + +#: vncviewer/OptionsDialog.cxx:499 +msgid "Color level" +msgstr "Mức màu" + +#: vncviewer/OptionsDialog.cxx:510 +msgid "Full (all available colors)" +msgstr "Đầy đủ (mọi màu sẵn có)" + +#: vncviewer/OptionsDialog.cxx:517 +msgid "Medium (256 colors)" +msgstr "Trung bình (256 màu)" + +#: vncviewer/OptionsDialog.cxx:524 +msgid "Low (64 colors)" +msgstr "Thấp (64 màu)" + +#: vncviewer/OptionsDialog.cxx:531 +msgid "Very low (8 colors)" +msgstr "Rất thấp (8 màu)" + +#: vncviewer/OptionsDialog.cxx:548 +msgid "Custom compression level:" +msgstr "Mức nén tự chọn:" + +#: vncviewer/OptionsDialog.cxx:554 +msgid "level (1=fast, 6=best [4-6 are rarely useful])" +msgstr "mức độ (1=nhanh, 6=tốt nhất [4-6 là hữu dụng hơn cả])" + +#: vncviewer/OptionsDialog.cxx:561 +msgid "Allow JPEG compression:" +msgstr "Cho phép nén JPEG:" + +#: vncviewer/OptionsDialog.cxx:567 +msgid "quality (0=poor, 9=best)" +msgstr "Chất lượng (0=kém, 9=tốt nhất)" + +#: vncviewer/OptionsDialog.cxx:578 +msgid "Security" +msgstr "Bảo mật" + +#: vncviewer/OptionsDialog.cxx:593 +msgid "Encryption" +msgstr "Mã hóa" + +#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657 +#: vncviewer/OptionsDialog.cxx:735 +msgid "None" +msgstr "Không có gì" + +#: vncviewer/OptionsDialog.cxx:610 +msgid "TLS with anonymous certificates" +msgstr "TLS với chứng nhận nặc danh" + +#: vncviewer/OptionsDialog.cxx:616 +msgid "TLS with X509 certificates" +msgstr "TLS với chứng nhận X509" + +#: vncviewer/OptionsDialog.cxx:623 +msgid "Path to X509 CA certificate" +msgstr "Đường dẫn chứng nhận CA X509" + +#: vncviewer/OptionsDialog.cxx:630 +msgid "Path to X509 CRL file" +msgstr "Đường dẫn đến tập tin CRL X509" + +#: vncviewer/OptionsDialog.cxx:646 +msgid "Authentication" +msgstr "Xác thực" + +#: vncviewer/OptionsDialog.cxx:663 +msgid "Standard VNC (insecure without encryption)" +msgstr "VNC tiêu chuẩn (không bảo mật, không mã hóa)" + +#: vncviewer/OptionsDialog.cxx:669 +msgid "Username and password (insecure without encryption)" +msgstr "Tài khoản và mật khẩu (không bảo mật, không mã hóa)" + +#: vncviewer/OptionsDialog.cxx:688 +msgid "Input" +msgstr "Đầu vào" + +#: vncviewer/OptionsDialog.cxx:696 +msgid "View only (ignore mouse and keyboard)" +msgstr "Chỉ xem (không bắt chuột và bàn phím)" + +#: vncviewer/OptionsDialog.cxx:702 +msgid "Accept clipboard from server" +msgstr "Chấp nhận clipboard từ máy chủ" + +#: vncviewer/OptionsDialog.cxx:709 +msgid "Also set primary selection" +msgstr "Cũng đặt chọn chính" + +#: vncviewer/OptionsDialog.cxx:716 +msgid "Send clipboard to server" +msgstr "Gửi clipboard đến máy chủ" + +#: vncviewer/OptionsDialog.cxx:723 +msgid "Send primary selection as clipboard" +msgstr "Gửi chọn chính là clipboard" + +#: vncviewer/OptionsDialog.cxx:730 +msgid "Pass system keys directly to server (full screen)" +msgstr "Gửi các phím hệ thống trực tiếp đến máy phục vụ (toàn màn hình)" + +#: vncviewer/OptionsDialog.cxx:733 +msgid "Menu key" +msgstr "Phím trình đơn" + +#: vncviewer/OptionsDialog.cxx:749 +msgid "Screen" +msgstr "Màn hình" + +#: vncviewer/OptionsDialog.cxx:757 +msgid "Resize remote session on connect" +msgstr "Đổi cỡ phiên máy từ xa khi kết nối" + +#: vncviewer/OptionsDialog.cxx:770 +msgid "Resize remote session to the local window" +msgstr "Đổi cỡ phiên thành cửa sổ nội bộ" + +#: vncviewer/OptionsDialog.cxx:776 +msgid "Full-screen mode" +msgstr "Chế độ toàn màn hình" + +#: vncviewer/OptionsDialog.cxx:782 +msgid "Enable full-screen mode over all monitors" +msgstr "Bật chế độ toàn màn hình qua tất cả các màn hình" + +#: vncviewer/OptionsDialog.cxx:791 +msgid "Misc." +msgstr "Linh tinh" + +#: vncviewer/OptionsDialog.cxx:799 +msgid "Shared (don't disconnect other viewers)" +msgstr "Đã chia sẻ (đừng ngắt kết nối các bộ xem khác)" + +#: vncviewer/OptionsDialog.cxx:805 +msgid "Show dot when no cursor" +msgstr "Hiển thị chấm khi không có con trỏ" + +#: vncviewer/ServerDialog.cxx:42 +msgid "VNC Viewer: Connection Details" +msgstr "Phần mềm xem VNC: Chi tiết kết nối" + +#: vncviewer/ServerDialog.cxx:49 vncviewer/ServerDialog.cxx:54 +msgid "VNC server:" +msgstr "Máy phục vụ VNC:" + +#: vncviewer/ServerDialog.cxx:64 +msgid "Options..." +msgstr "Tùy chọn…" + +#: vncviewer/ServerDialog.cxx:69 +msgid "Load..." +msgstr "Tải…" + +#: vncviewer/ServerDialog.cxx:74 +msgid "Save As..." +msgstr "Lưu thành…" + +#: vncviewer/ServerDialog.cxx:86 +msgid "About..." +msgstr "Giới thiệu…" + +#: vncviewer/ServerDialog.cxx:96 +msgid "Connect" +msgstr "Kết nối" + +#: vncviewer/UserDialog.cxx:74 +msgid "Opening password file failed" +msgstr "Gặp lỗi khi mở tập tin mật khẩu" + +#: vncviewer/UserDialog.cxx:86 vncviewer/UserDialog.cxx:96 +msgid "VNC authentication" +msgstr "Xác thực VNC" + +#: vncviewer/UserDialog.cxx:87 vncviewer/UserDialog.cxx:102 +msgid "Password:" +msgstr "Mật khẩu:" + +#: vncviewer/UserDialog.cxx:89 +msgid "Authentication cancelled" +msgstr "Xác thực bị hủy bỏ" + +#: vncviewer/UserDialog.cxx:99 +msgid "Username:" +msgstr "Tài khoản:" + +#: vncviewer/Viewport.cxx:391 +#, c-format +msgid "Unable to create platform specific framebuffer: %s" +msgstr "Không thể tạo bộ đệm khung đặc tả nền tảng: %s" + +#: vncviewer/Viewport.cxx:392 +msgid "Using platform independent framebuffer" +msgstr "Đang sử dụng bộ đệm khung độc lập nên tảng" + +#: vncviewer/Viewport.cxx:628 +#, c-format +msgid "No scan code for extended virtual key 0x%02x" +msgstr "Không có mã quét cho phím ảo mở rộng 0x%02x" + +#: vncviewer/Viewport.cxx:630 +#, c-format +msgid "No scan code for virtual key 0x%02x" +msgstr "Không có mã quét cho phím ảo 0x%02x" + +#: vncviewer/Viewport.cxx:647 +#, c-format +msgid "No symbol for extended virtual key 0x%02x" +msgstr "Không có ký hiệu cho phím ảo mở rộng 0x%02x" + +#: vncviewer/Viewport.cxx:649 +#, c-format +msgid "No symbol for virtual key 0x%02x" +msgstr "Không có ký hiệu cho phím ảo 0x%02x" + +#: vncviewer/Viewport.cxx:687 +#, c-format +msgid "No symbol for key code 0x%02x (in the current state)" +msgstr "Không có ký hiệu cho mã phím 0x%02x (trong trạng thái hiện tại)" + +#: vncviewer/Viewport.cxx:713 +#, c-format +msgid "No symbol for key code %d (in the current state)" +msgstr "Không có ký hiệu cho mã phím %d (trong trạng thái hiện tại)" + +#: vncviewer/Viewport.cxx:750 +msgctxt "ContextMenu|" +msgid "E&xit viewer" +msgstr "T&hoát khỏi bộ xem" + +#: vncviewer/Viewport.cxx:753 +msgctxt "ContextMenu|" +msgid "&Full screen" +msgstr "T&oàn màn hình" + +#: vncviewer/Viewport.cxx:756 +msgctxt "ContextMenu|" +msgid "Minimi&ze" +msgstr "Thu &nhỏ" + +#: vncviewer/Viewport.cxx:758 +msgctxt "ContextMenu|" +msgid "Resize &window to session" +msgstr "Đổi cỡ Cửa &sổ sang phiên" + +#: vncviewer/Viewport.cxx:763 +msgctxt "ContextMenu|" +msgid "&Ctrl" +msgstr "&Ctrl" + +#: vncviewer/Viewport.cxx:766 +msgctxt "ContextMenu|" +msgid "&Alt" +msgstr "&Alt" + +#: vncviewer/Viewport.cxx:772 +#, c-format +msgctxt "ContextMenu|" +msgid "Send %s" +msgstr "Gửi %s" + +#: vncviewer/Viewport.cxx:778 +msgctxt "ContextMenu|" +msgid "Send Ctrl-Alt-&Del" +msgstr "Gửi Ctrl-Alt-&Del" + +#: vncviewer/Viewport.cxx:781 +msgctxt "ContextMenu|" +msgid "&Refresh screen" +msgstr "&Làm mới màn hình" + +#: vncviewer/Viewport.cxx:784 +msgctxt "ContextMenu|" +msgid "&Options..." +msgstr "Tù&y chọn…" + +#: vncviewer/Viewport.cxx:786 +msgctxt "ContextMenu|" +msgid "Connection &info..." +msgstr "Thông t&in về kết nối…" + +#: vncviewer/Viewport.cxx:788 +msgctxt "ContextMenu|" +msgid "About &TigerVNC viewer..." +msgstr "Giới thiệu Bộ xem &TigerVNC…" + +#: vncviewer/Viewport.cxx:791 +msgctxt "ContextMenu|" +msgid "Dismiss &menu" +msgstr "Thải bỏ &Trình đơn" + +#: vncviewer/Viewport.cxx:875 +msgid "VNC connection info" +msgstr "Thông tin kết nối VNC" + +#: vncviewer/Win32PixelBuffer.cxx:62 +msgid "unable to create DIB section" +msgstr "không thể tạo phần DIB" + +#: vncviewer/Win32PixelBuffer.cxx:79 +msgid "CreateCompatibleDC failed" +msgstr "CreateCompatibleDC gặp lỗi" + +#: vncviewer/Win32PixelBuffer.cxx:82 +msgid "SelectObject failed" +msgstr "SelectObject gặp lỗi" + +#: vncviewer/Win32PixelBuffer.cxx:91 +msgid "BitBlt failed" +msgstr "BitBlt gặp lỗi" + +#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable +#. to translate. +#: vncviewer/X11PixelBuffer.cxx:65 +msgid "Display lacks pixmap format for default depth" +msgstr "Hiển thị định dạng pixmap thiếu cho độ sâu mặc định" + +#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable +#. to translate. +#: vncviewer/X11PixelBuffer.cxx:76 +msgid "Couldn't find suitable pixmap format" +msgstr "Không thể tìm thấy định dạng phù hợp pixmap" + +#: vncviewer/X11PixelBuffer.cxx:85 +msgid "Only true colour displays supported" +msgstr "Chỉ hỗ trợ hiển thị màu thật" + +#: vncviewer/X11PixelBuffer.cxx:87 +#, c-format +msgid "Using default colormap and visual, TrueColor, depth %d." +msgstr "Đang dùng bản đồ màu mặc định và ảo, TrueColor, độ sâu %d." + +#: vncviewer/X11PixelBuffer.cxx:113 +msgid "Could not create framebuffer image" +msgstr "Không thể tạo ảnh bộ đệm khung" + +#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320 +#, c-format +msgid "The name of the parameter %s was too large to write to the registry" +msgstr "Tên của tham số %s là quá lớn để ghi vào đăng ký" + +#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299 +#, c-format +msgid "The parameter %s was too large to write to the registry" +msgstr "Tham số %s là quá lớn để ghi vào đăng ký" + +#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326 +#, c-format +msgid "Failed to write parameter %s of type %s to the registry: %ld" +msgstr "Gặp lỗi khi ghi tham số %s của kiểu %s vào sổ đăng ký: %ld" + +#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380 +#, c-format +msgid "The name of the parameter %s was too large to read from the registry" +msgstr "Tên của tham số %s là quá lớn để đọc từ sổ đăng ký" + +#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389 +#, c-format +msgid "Failed to read parameter %s from the registry: %ld" +msgstr "Gặp lỗi khi đọc tham số %s từ sổ đăng ký: %ld" + +#: vncviewer/parameters.cxx:359 +#, c-format +msgid "The parameter %s was too large to read from the registry" +msgstr "Tham số %s là quá lớn để đọc từ sổ đăng ký" + +#: vncviewer/parameters.cxx:409 +#, c-format +msgid "Failed to create registry key: %ld" +msgstr "Gặp lỗi khi tạo khóa đăng ký: %ld" + +#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472 +#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665 +#, c-format +msgid "Unknown parameter type for parameter %s" +msgstr "Không hiểu kiểu tham số cho đối số %s" + +#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479 +#, c-format +msgid "Failed to close registry key: %ld" +msgstr "Gặp lỗi khi đóng khóa đăng ký: %ld" + +#: vncviewer/parameters.cxx:446 +#, c-format +msgid "Failed to open registry key: %ld" +msgstr "Gặp lỗi khi mở khóa đăng ký: %ld" + +#: vncviewer/parameters.cxx:503 +msgid "Failed to write configuration file, can't obtain home directory path." +msgstr "Gặp lỗi khi ghi tập tin cấu hình, không thể lấy đường dẫn thư mục riêng." + +#: vncviewer/parameters.cxx:516 +#, c-format +msgid "Failed to write configuration file, can't open %s: %s" +msgstr "Gặp lỗi khi ghi tập tin cấu hình, không thể mở %s: %s" + +#: vncviewer/parameters.cxx:559 +msgid "Failed to read configuration file, can't obtain home directory path." +msgstr "Gặp lỗi khi đọc tập tin cấu hình, không thể lấy đường dẫn thư mục riêng." + +#: vncviewer/parameters.cxx:572 +#, c-format +msgid "Failed to read configuration file, can't open %s: %s" +msgstr "Gặp lỗi khi đọc tập tin cấu hình, không thể mở %s: %s" + +#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590 +#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628 +#: vncviewer/parameters.cxx:644 +#, c-format +msgid "Failed to read line %d in file %s: %s" +msgstr "Gặp lỗi khi đọc dòng %d trong tập tin %s: %s" + +#: vncviewer/parameters.cxx:591 +msgid "Line too long" +msgstr "Dòng quá dài" + +#: vncviewer/parameters.cxx:598 +#, c-format +msgid "Configuration file %s is in an invalid format" +msgstr "Tập tin cấu hình %s ở định dạng không hợp lệ" + +#: vncviewer/parameters.cxx:616 +msgid "Invalid format" +msgstr "Định dạng không hợp lệ" + +#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645 +msgid "Invalid format or too large value" +msgstr "Định dạng không hợp lệ hay giá trị quá lớn" + +#: vncviewer/parameters.cxx:672 +#, c-format +msgid "Unknown parameter %s on line %d in file %s" +msgstr "Không hiểu tham số %s trên dòng %d ở tập tin %s" + +#: vncviewer/vncviewer.cxx:100 +#, c-format +msgid "" +"TigerVNC Viewer %d-bit v%s\n" +"Built on: %s\n" +"Copyright (C) 1999-%d TigerVNC Team and many others (see README.txt)\n" +"See http://www.tigervnc.org for information on TigerVNC." +msgstr "" +"TigerVNC Viewer %d-bít v%s\n" +"Biên dịch vào: %s\n" +"Copyright (C) 1999-%d Nhóm TigerVNC và nhiều người khác (xem README.txt)\n" +"Truy cập http://www.tigervnc.org để biết thêm thông tin về TigerVNC." + +#: vncviewer/vncviewer.cxx:127 +msgid "About TigerVNC Viewer" +msgstr "Giới thiệu về bộ xem TigerVNC" + +#: vncviewer/vncviewer.cxx:140 +msgid "Internal FLTK error. Exiting." +msgstr "Lỗi bên trong FLTK. Nên thoát." + +#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170 +#, c-format +msgid "Error starting new TigerVNC Viewer: %s" +msgstr "Gặp lỗi khi khởi chạy bộ xem TigerVNC mới: %s" + +#: vncviewer/vncviewer.cxx:179 +#, c-format +msgid "Termination signal %d has been received. TigerVNC Viewer will now exit." +msgstr "Đã nhận được tín hiệu kết thúc %d. Bộ xem TigerVNC bây giờ sẽ thoát." + +#: vncviewer/vncviewer.cxx:271 +msgid "TigerVNC Viewer" +msgstr "Bộ xem TigerVNC" + +#: vncviewer/vncviewer.cxx:279 +msgid "No" +msgstr "Không" + +#: vncviewer/vncviewer.cxx:280 +msgid "Yes" +msgstr "Có" + +#: vncviewer/vncviewer.cxx:283 +msgid "Close" +msgstr "Đóng" + +#: vncviewer/vncviewer.cxx:288 +msgid "About" +msgstr "Giới thiệu" + +#: vncviewer/vncviewer.cxx:291 +msgid "Hide" +msgstr "Ẩn" + +#: vncviewer/vncviewer.cxx:294 +msgid "Quit" +msgstr "Thoát" + +#: vncviewer/vncviewer.cxx:298 +msgid "Services" +msgstr "Dịch vụ" + +#: vncviewer/vncviewer.cxx:299 +msgid "Hide Others" +msgstr "Các thứ khác ẩn" + +#: vncviewer/vncviewer.cxx:300 +msgid "Show All" +msgstr "Hiện tất cả" + +#: vncviewer/vncviewer.cxx:309 +msgctxt "SysMenu|" +msgid "&File" +msgstr "&Chính" + +#: vncviewer/vncviewer.cxx:312 +msgctxt "SysMenu|File|" +msgid "&New Connection" +msgstr "Kết nối &mới" + +#: vncviewer/vncviewer.cxx:324 +msgid "Could not create VNC home directory: can't obtain home directory path." +msgstr "Không thể tạo thư mục cá nhân cho VNC: không thể lấy đường dẫn thư mục cá nhân." + +#: vncviewer/vncviewer.cxx:329 +#, c-format +msgid "Could not create VNC home directory: %s." +msgstr "Không thể tạo thư mục cá nhân cho VNC: %s." + +#. TRANSLATORS: "Parameters" are command line arguments, or settings +#. from a file or the Windows registry. +#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535 +msgid "Parameters -listen and -via are incompatible" +msgstr "Các tham số -listen và -via xung khắc nhau" + +#: vncviewer/vncviewer.cxx:550 +#, c-format +msgid "Listening on port %d" +msgstr "Đang nghe trên cổng %d" + +#~ msgid "Unknown encoding %d" +#~ msgstr "Bảng mã chưa biết %d" + +#~ msgid "Unknown encoding" +#~ msgstr "Bảng mã chưa biết" + +#~ msgid "Alt" +#~ msgstr "Alt" + +#~ msgid "CleanupSignalHandler called" +#~ msgstr "CleanupSignalHandler được gọi" + +#, fuzzy +#~ msgid "Error(%d) reading %s from Registry." +#~ msgstr "Gặp lỗi khi đọc từ máy phục vụ" diff --git a/release/Info.plist.in b/release/Info.plist.in index ae4fe009..c390ad6c 100644 --- a/release/Info.plist.in +++ b/release/Info.plist.in @@ -6,6 +6,8 @@ <string>English</string> <key>CFBundleExecutable</key> <string>TigerVNC Viewer</string> + <key>NSHighResolutionCapable</key> + <string>True</string> <key>CFBundleGetInfoString</key> <string>@VERSION@, Copyright © 1998-2011 [many holders]</string> <key>CFBundleIconFile</key> diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e99c825a..bfd69dcd 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -13,3 +13,6 @@ target_link_libraries(decperf test_util rfb) add_executable(encperf encperf.cxx) target_link_libraries(encperf test_util rfb) + +add_executable(hostport hostport.cxx) +target_link_libraries(hostport rfb) diff --git a/tests/hostport.cxx b/tests/hostport.cxx new file mode 100644 index 00000000..00026e61 --- /dev/null +++ b/tests/hostport.cxx @@ -0,0 +1,80 @@ +/* Copyright 2016 Pierre Ossman <ossman@cendio.se> for Cendio AB + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include <stdio.h> + +#include <rfb/Hostname.h> + +static void doTest(const char* hostAndPort, + const char* expectedHost, int expectedPort) +{ + char* host; + int port; + + printf("\"%s\": ", hostAndPort); + + rfb::getHostAndPort(hostAndPort, &host, &port); + + if (strcmp(host, expectedHost) != 0) + printf("FAILED (\"%s\" != \"%s\")", host, expectedHost); + else if (port != expectedPort) + printf("FAILED (%d != %d)", port, expectedPort); + else + printf("OK"); + printf("\n"); + fflush(stdout); + + rfb::strFree(host); +} + +int main(int argc, char** argv) +{ + doTest(":5", "localhost", 5905); + + doTest("1.2.3.4", "1.2.3.4", 5900); + + doTest("1.2.3.4:5", "1.2.3.4", 5905); + doTest("1.2.3.4:99", "1.2.3.4", 5999); + doTest("1.2.3.4:100", "1.2.3.4", 100); + doTest("1.2.3.4:5901", "1.2.3.4", 5901); + + doTest("1.2.3.4::5", "1.2.3.4", 5); + doTest("1.2.3.4::99", "1.2.3.4", 99); + doTest("1.2.3.4::5901", "1.2.3.4", 5901); + + doTest("[1.2.3.4]", "1.2.3.4", 5900); + doTest("[1.2.3.4]:5", "1.2.3.4", 5905); + doTest("[1.2.3.4]:100", "1.2.3.4", 100); + doTest("[1.2.3.4]::5", "1.2.3.4", 5); + doTest("[1.2.3.4]::100", "1.2.3.4", 100); + + // Ambigiuous. For now we'll keep the old behaviour... + doTest("::1", "localhost", 1); + + doTest("2001:1234::20:1", "2001:1234::20:1", 5900); + + doTest("[::1]", "::1", 5900); + doTest("[2001:1234::20:1]", "2001:1234::20:1", 5900); + + doTest("[2001:1234::20:1]:5", "2001:1234::20:1", 5905); + doTest("[2001:1234::20:1]:99", "2001:1234::20:1", 5999); + doTest("[2001:1234::20:1]:100", "2001:1234::20:1", 100); + doTest("[2001:1234::20:1]:5901", "2001:1234::20:1", 5901); + + return 0; +} diff --git a/unix/vncconfig/vncExt.c b/unix/vncconfig/vncExt.c index e9b948d3..6256d3bf 100644 --- a/unix/vncconfig/vncExt.c +++ b/unix/vncconfig/vncExt.c @@ -24,10 +24,6 @@ #define _VNCEXT_PROTO_ #include "vncExt.h" -static Bool XVncExtClientCutTextNotifyWireToEvent(Display* dpy, XEvent* e, - xEvent* w); -static Bool XVncExtSelectionChangeNotifyWireToEvent(Display* dpy, XEvent* e, - xEvent* w); static Bool XVncExtQueryConnectNotifyWireToEvent(Display* dpy, XEvent* e, xEvent* w); @@ -40,10 +36,6 @@ static Bool checkExtension(Display* dpy) extensionInited = True; codes = XInitExtension(dpy, VNCEXTNAME); if (!codes) return False; - XESetWireToEvent(dpy, codes->first_event + VncExtClientCutTextNotify, - XVncExtClientCutTextNotifyWireToEvent); - XESetWireToEvent(dpy, codes->first_event + VncExtSelectionChangeNotify, - XVncExtSelectionChangeNotifyWireToEvent); XESetWireToEvent(dpy, codes->first_event + VncExtQueryConnectNotify, XVncExtQueryConnectNotifyWireToEvent); } @@ -214,53 +206,6 @@ void XVncExtFreeParamList(char** list) } } -Bool XVncExtSetServerCutText(Display* dpy, const char* str, int len) -{ - xVncExtSetServerCutTextReq* req; - - if (!checkExtension(dpy)) return False; - - LockDisplay(dpy); - GetReq(VncExtSetServerCutText, req); - req->reqType = codes->major_opcode; - req->vncExtReqType = X_VncExtSetServerCutText; - req->length += (len + 3) >> 2; - req->textLen = len; - Data(dpy, str, len); - UnlockDisplay(dpy); - SyncHandle(); - return True; -} - -Bool XVncExtGetClientCutText(Display* dpy, char** str, int* len) -{ - xVncExtGetClientCutTextReq* req; - xVncExtGetClientCutTextReply rep; - - if (!checkExtension(dpy)) return False; - - LockDisplay(dpy); - GetReq(VncExtGetClientCutText, req); - req->reqType = codes->major_opcode; - req->vncExtReqType = X_VncExtGetClientCutText; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - return False; - } - UnlockDisplay(dpy); - SyncHandle(); - *len = rep.textLen; - *str = (char*) Xmalloc (*len+1); - if (!*str) { - _XEatData(dpy, (*len+1)&~1); - return False; - } - _XReadPad(dpy, *str, *len); - (*str)[*len] = 0; - return True; -} - Bool XVncExtSelectInput(Display* dpy, Window w, int mask) { xVncExtSelectInputReq* req; @@ -359,35 +304,6 @@ Bool XVncExtApproveConnect(Display* dpy, void* opaqueId, int approve) } -static Bool XVncExtClientCutTextNotifyWireToEvent(Display* dpy, XEvent* e, - xEvent* w) -{ - XVncExtClientCutTextEvent* ev = (XVncExtClientCutTextEvent*)e; - xVncExtClientCutTextNotifyEvent* wire = (xVncExtClientCutTextNotifyEvent*)w; - ev->type = wire->type & 0x7f; - ev->serial = _XSetLastRequestRead(dpy,(xGenericReply*)wire); - ev->send_event = (wire->type & 0x80) != 0; - ev->display = dpy; - ev->window = wire->window; - ev->time = wire->time; - return True; -} - -static Bool XVncExtSelectionChangeNotifyWireToEvent(Display* dpy, XEvent* e, - xEvent* w) -{ - XVncExtSelectionChangeEvent* ev = (XVncExtSelectionChangeEvent*)e; - xVncExtSelectionChangeNotifyEvent* wire - = (xVncExtSelectionChangeNotifyEvent*)w; - ev->type = wire->type & 0x7f; - ev->serial = _XSetLastRequestRead(dpy,(xGenericReply*)wire); - ev->send_event = (wire->type & 0x80) != 0; - ev->display = dpy; - ev->window = wire->window; - ev->selection = wire->selection; - return True; -} - static Bool XVncExtQueryConnectNotifyWireToEvent(Display* dpy, XEvent* e, xEvent* w) { diff --git a/unix/vncconfig/vncExt.h b/unix/vncconfig/vncExt.h index e41e2e5b..2b24469e 100644 --- a/unix/vncconfig/vncExt.h +++ b/unix/vncconfig/vncExt.h @@ -26,18 +26,12 @@ extern "C" { #define X_VncExtGetParam 1 #define X_VncExtGetParamDesc 2 #define X_VncExtListParams 3 -#define X_VncExtSetServerCutText 4 -#define X_VncExtGetClientCutText 5 #define X_VncExtSelectInput 6 #define X_VncExtConnect 7 #define X_VncExtGetQueryConnect 8 #define X_VncExtApproveConnect 9 -#define VncExtClientCutTextNotify 0 -#define VncExtSelectionChangeNotify 1 #define VncExtQueryConnectNotify 2 -#define VncExtClientCutTextMask (1 << VncExtClientCutTextNotify) -#define VncExtSelectionChangeMask (1 << VncExtSelectionChangeNotify) #define VncExtQueryConnectMask (1 << VncExtQueryConnectNotify) #define VncExtNumberEvents 3 @@ -51,8 +45,6 @@ Bool XVncExtGetParam(Display* dpy, const char* param, char** value, int* len); char* XVncExtGetParamDesc(Display* dpy, const char* param); char** XVncExtListParams(Display* dpy, int* nParams); void XVncExtFreeParamList(char** list); -Bool XVncExtSetServerCutText(Display* dpy, const char* str, int len); -Bool XVncExtGetClientCutText(Display* dpy, char** str, int* len); Bool XVncExtSelectInput(Display* dpy, Window w, int mask); Bool XVncExtConnect(Display* dpy, const char* hostAndPort); Bool XVncExtGetQueryConnect(Display* dpy, char** addr, @@ -66,24 +58,6 @@ typedef struct { Bool send_event; Display *display; Window window; - Time time; -} XVncExtClientCutTextEvent; - -typedef struct { - int type; - unsigned long serial; - Bool send_event; - Display *display; - Window window; - Atom selection; -} XVncExtSelectionChangeEvent; - -typedef struct { - int type; - unsigned long serial; - Bool send_event; - Display *display; - Window window; } XVncExtQueryConnectEvent; #endif @@ -194,37 +168,6 @@ typedef struct { typedef struct { CARD8 reqType; /* always VncExtReqCode */ - CARD8 vncExtReqType; /* always VncExtSetServerCutText */ - CARD16 length B16; - CARD32 textLen B32; -} xVncExtSetServerCutTextReq; -#define sz_xVncExtSetServerCutTextReq 8 - - -typedef struct { - CARD8 reqType; /* always VncExtReqCode */ - CARD8 vncExtReqType; /* always VncExtGetClientCutText */ - CARD16 length B16; -} xVncExtGetClientCutTextReq; -#define sz_xVncExtGetClientCutTextReq 4 - -typedef struct { - BYTE type; /* X_Reply */ - BYTE pad0; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 textLen B32; - CARD32 pad1 B32; - CARD32 pad2 B32; - CARD32 pad3 B32; - CARD32 pad4 B32; - CARD32 pad5 B32; -} xVncExtGetClientCutTextReply; -#define sz_xVncExtGetClientCutTextReply 32 - - -typedef struct { - CARD8 reqType; /* always VncExtReqCode */ CARD8 vncExtReqType; /* always VncExtSelectInput */ CARD16 length B16; CARD32 window B32; @@ -293,34 +236,6 @@ typedef struct { typedef struct { - BYTE type; /* always eventBase + VncExtClientCutTextNotify */ - BYTE pad0; - CARD16 sequenceNumber B16; - CARD32 window B32; - CARD32 time B32; - CARD32 pad1 B32; - CARD32 pad2 B32; - CARD32 pad3 B32; - CARD32 pad4 B32; - CARD32 pad5 B32; -} xVncExtClientCutTextNotifyEvent; -#define sz_xVncExtClientCutTextNotifyEvent 32 - -typedef struct { - BYTE type; /* always eventBase + VncExtSelectionChangeNotify */ - BYTE pad0; - CARD16 sequenceNumber B16; - CARD32 window B32; - CARD32 selection B32; - CARD32 pad1 B32; - CARD32 pad2 B32; - CARD32 pad3 B32; - CARD32 pad4 B32; - CARD32 pad5 B32; -} xVncExtSelectionChangeNotifyEvent; -#define sz_xVncExtSelectionChangeNotifyEvent 32 - -typedef struct { BYTE type; /* always eventBase + VncExtQueryConnectNotify */ BYTE pad0; CARD16 sequenceNumber B16; diff --git a/unix/vncconfig/vncconfig.cxx b/unix/vncconfig/vncconfig.cxx index 2d6adf57..2bb299f0 100644 --- a/unix/vncconfig/vncconfig.cxx +++ b/unix/vncconfig/vncconfig.cxx @@ -1,4 +1,5 @@ /* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. + * Copyright 2012-2016 Pierre Ossman for Cendio AB * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -38,7 +39,6 @@ #include <rfb/Configuration.h> #include <rfb/Logger_stdio.h> #include <rfb/LogWriter.h> -#include <rfb/Timer.h> #include "TXWindow.h" #include "TXCheckbox.h" #include "TXLabel.h" @@ -51,22 +51,13 @@ LogWriter vlog("vncconfig"); StringParameter displayname("display", "The X display", ""); BoolParameter noWindow("nowin", "Don't display a window", 0); BoolParameter iconic("iconic", "Start with window iconified", 0); -BoolParameter setPrimary("SetPrimary", "Set the PRIMARY as well " - "as the CLIPBOARD selection", true); -BoolParameter sendPrimary("SendPrimary", "Send the PRIMARY as well as the " - "CLIPBOARD selection", true); -IntParameter pollTime("poll", - "How often to poll for clipboard changes in ms", 0); - -inline const char* selectionName(Atom sel) { - if (sel == xaCLIPBOARD) return "CLIPBOARD"; - if (sel == XA_PRIMARY) return "PRIMARY"; - return "unknown"; -} #define ACCEPT_CUT_TEXT "AcceptCutText" #define SEND_CUT_TEXT "SendCutText" +#define SET_PRIMARY "SetPrimary" +#define SEND_PRIMARY "SendPrimary" + char* programName = 0; Display* dpy; int vncExtEventBase, vncExtErrorBase; @@ -83,90 +74,39 @@ static bool getBoolParam(Display* dpy, const char* param) { class VncConfigWindow : public TXWindow, public TXEventHandler, public TXDeleteWindowCallback, public TXCheckboxCallback, - public rfb::Timer::Callback, public QueryResultCallback { public: VncConfigWindow(Display* dpy) - : TXWindow(dpy, 300, 100), cutText(0), cutTextLen(0), + : TXWindow(dpy, 300, 100), acceptClipboard(dpy, "Accept clipboard from viewers", this, false, this), - setPrimaryCB(dpy, "Also set primary selection", - this, false, this), + setPrimaryCB(dpy, "Also set primary selection", this, false, this), sendClipboard(dpy, "Send clipboard to viewers", this, false, this), sendPrimaryCB(dpy, "Send primary selection to viewers", this,false,this), - pollTimer(this), queryConnectDialog(0) { - selection[0] = selection[1] = 0; - selectionLen[0] = selectionLen[1] = 0; int y = yPad; acceptClipboard.move(xPad, y); acceptClipboard.checked(getBoolParam(dpy, ACCEPT_CUT_TEXT)); y += acceptClipboard.height(); setPrimaryCB.move(xPad + 10, y); - setPrimaryCB.checked(setPrimary); + setPrimaryCB.checked(getBoolParam(dpy, SET_PRIMARY)); setPrimaryCB.disabled(!acceptClipboard.checked()); y += setPrimaryCB.height(); sendClipboard.move(xPad, y); sendClipboard.checked(getBoolParam(dpy, SEND_CUT_TEXT)); y += sendClipboard.height(); - sendPrimaryCB.move(xPad, y); - sendPrimaryCB.checked(sendPrimary); + sendPrimaryCB.move(xPad + 10, y); + sendPrimaryCB.checked(getBoolParam(dpy, SEND_PRIMARY)); sendPrimaryCB.disabled(!sendClipboard.checked()); y += sendPrimaryCB.height(); setEventHandler(this); toplevel("VNC config", this, 0, 0, 0, iconic); - XVncExtSelectInput(dpy, win(), - VncExtClientCutTextMask| - VncExtSelectionChangeMask| - VncExtQueryConnectMask); - XConvertSelection(dpy, XA_PRIMARY, XA_STRING, - XA_PRIMARY, win(), CurrentTime); - XConvertSelection(dpy, xaCLIPBOARD, XA_STRING, - xaCLIPBOARD, win(), CurrentTime); - if (pollTime != 0) - pollTimer.start(pollTime); + XVncExtSelectInput(dpy, win(), VncExtQueryConnectMask); } - // handleEvent(). If we get a ClientCutTextNotify event from Xvnc, set the - // primary and clipboard selections to the clientCutText. If we get a - // SelectionChangeNotify event from Xvnc, set the serverCutText to the value - // of the new selection. + // handleEvent() virtual void handleEvent(TXWindow* w, XEvent* ev) { - if (acceptClipboard.checked()) { - if (ev->type == vncExtEventBase + VncExtClientCutTextNotify) { - XVncExtClientCutTextEvent* cutEv = (XVncExtClientCutTextEvent*)ev; - if (cutText) - XFree(cutText); - cutText = 0; - if (XVncExtGetClientCutText(dpy, &cutText, &cutTextLen)) { - vlog.debug("Got client cut text: '%.*s%s'", - cutTextLen<9?cutTextLen:8, cutText, - cutTextLen<9?"":"..."); - XStoreBytes(dpy, cutText, cutTextLen); - if (setPrimaryCB.checked()) { - ownSelection(XA_PRIMARY, cutEv->time); - } - ownSelection(xaCLIPBOARD, cutEv->time); - delete [] selection[0]; - delete [] selection[1]; - selection[0] = selection[1] = 0; - selectionLen[0] = selectionLen[1] = 0; - } - } - } - if (sendClipboard.checked()) { - if (ev->type == vncExtEventBase + VncExtSelectionChangeNotify) { - vlog.debug("selection change event"); - XVncExtSelectionChangeEvent* selEv = (XVncExtSelectionChangeEvent*)ev; - if (selEv->selection == xaCLIPBOARD || - (selEv->selection == XA_PRIMARY && sendPrimaryCB.checked())) { - if (!selectionOwner(selEv->selection)) - XConvertSelection(dpy, selEv->selection, XA_STRING, - selEv->selection, win(), CurrentTime); - } - } - } if (ev->type == vncExtEventBase + VncExtQueryConnectNotify) { vlog.debug("query connection event"); if (queryConnectDialog) @@ -188,55 +128,6 @@ public: } } } - - - // selectionRequest() is called when we are the selection owner and another X - // client has requested the selection. We simply put the server's cut text - // into the requested property. TXWindow will handle the rest. - bool selectionRequest(Window requestor, Atom selection, Atom property) - { - if (cutText) - XChangeProperty(dpy, requestor, property, XA_STRING, 8, - PropModeReplace, (unsigned char*)cutText, - cutTextLen); - return cutText; - } - - // selectionNotify() is called when we have requested the selection from the - // selection owner. - void selectionNotify(XSelectionEvent* ev, Atom type, int format, - int nitems, void* data) - { - if (ev->requestor != win() || ev->target != XA_STRING) - return; - - if (data && format == 8) { - int i = (ev->selection == XA_PRIMARY ? 0 : 1); - if (selectionLen[i] == nitems && memcmp(selection[i], data, nitems) == 0) - return; - delete [] selection[i]; - selection[i] = new char[nitems]; - memcpy(selection[i], data, nitems); - selectionLen[i] = nitems; - if (cutTextLen == nitems && memcmp(cutText, data, nitems) == 0) { - vlog.debug("ignoring duplicate cut text"); - return; - } - if (cutText) - XFree(cutText); - cutText = (char*)malloc(nitems); // assuming XFree() same as free() - if (!cutText) { - vlog.error("unable to allocate selection buffer"); - return; - } - memcpy(cutText, data, nitems); - cutTextLen = nitems; - vlog.debug("sending %s selection as server cut text: '%.*s%s'", - selectionName(ev->selection),cutTextLen<9?cutTextLen:8, - cutText, cutTextLen<9?"":"..."); - XVncExtSetServerCutText(dpy, cutText, cutTextLen); - } - } // TXDeleteWindowCallback method virtual void deleteWindow(TXWindow* w) { @@ -253,20 +144,15 @@ public: XVncExtSetParam(dpy, (sendClipboard.checked() ? SEND_CUT_TEXT "=1" : SEND_CUT_TEXT "=0")); sendPrimaryCB.disabled(!sendClipboard.checked()); + } else if (checkbox == &setPrimaryCB) { + XVncExtSetParam(dpy, (setPrimaryCB.checked() + ? SET_PRIMARY "=1" : SET_PRIMARY "=0")); + } else if (checkbox == &sendPrimaryCB) { + XVncExtSetParam(dpy, (sendPrimaryCB.checked() + ? SEND_PRIMARY "=1" : SEND_PRIMARY "=0")); } } - // rfb::Timer::Callback interface - virtual bool handleTimeout(rfb::Timer* timer) { - if (sendPrimaryCB.checked() && !selectionOwner(XA_PRIMARY)) - XConvertSelection(dpy, XA_PRIMARY, XA_STRING, - XA_PRIMARY, win(), CurrentTime); - if (!selectionOwner(xaCLIPBOARD)) - XConvertSelection(dpy, xaCLIPBOARD, XA_STRING, - xaCLIPBOARD, win(), CurrentTime); - return true; - } - // QueryResultCallback interface virtual void queryApproved() { XVncExtApproveConnect(dpy, queryConnectId, 1); @@ -276,12 +162,8 @@ public: } private: - char* cutText; - int cutTextLen; - char* selection[2]; - int selectionLen[2]; - TXCheckbox acceptClipboard, setPrimaryCB, sendClipboard, sendPrimaryCB; - rfb::Timer pollTimer; + TXCheckbox acceptClipboard, setPrimaryCB; + TXCheckbox sendClipboard, sendPrimaryCB; QueryConnectDialog* queryConnectDialog; void* queryConnectId; diff --git a/unix/vncconfig/vncconfig.man b/unix/vncconfig/vncconfig.man index 6695be3d..06f9ca97 100644 --- a/unix/vncconfig/vncconfig.man +++ b/unix/vncconfig/vncconfig.man @@ -37,14 +37,11 @@ server with the VNC extension. Note that it cannot be used to control VNC servers prior to version 4. When run with no options, it runs as a kind of "helper" application for Xvnc. -Its main purpose when run in this mode is to support clipboard transfer to and -from the VNC viewer(s). Note that without a running instance of -\fBvncconfig\fP there will be no clipboard support. It puts up a window with -some checkboxes which can be used to disable clipboard transfers if required -(in the future there may be more functions available from this window). The -\fB-nowin\fP flag can be used if you always want clipboard support but don't -wish to clutter the desktop with this window - alternatively the \fB-iconic\fP -option can be used to make it iconified by default. +Its main purpose when run in this mode is to query the user how new +connections should be handled (provided this feature is enabled). The +\fB-nowin\fP flag can be used if you always want the query support but don't +wish to clutter the desktop with the settings window - alternatively the +\fB-iconic\fP option can be used to make it iconified by default. When run in any other mode, \fBvncconfig\fP is a one-shot program used to configure or control Xvnc as appropriate. It can be used to tell Xvnc to diff --git a/unix/vncserver b/unix/vncserver index bb95506d..2ef436a7 100755 --- a/unix/vncserver +++ b/unix/vncserver @@ -26,10 +26,7 @@ # vncserver - wrapper script to start an X VNC server. # -# # First make sure we're operating in a sane environment. -# - $exedir = ""; $slashndx = rindex($0, "/"); if($slashndx>=0) { @@ -41,7 +38,8 @@ $vncClasses = ""; &SanityCheck(); # -# Global variables. You may want to configure some of these for your site. +# Global variables. You may want to configure some of these for +# your site # $geometry = "1024x768"; @@ -49,12 +47,18 @@ $geometry = "1024x768"; $vncJavaFiles = (((-d "$vncClasses") && "$vncClasses") || ((-d "/usr/share/vnc/classes") && "/usr/share/vnc/classes") || ((-d "/usr/local/vnc/classes") && "/usr/local/vnc/classes")); - + $vncUserDir = "$ENV{HOME}/.vnc"; +$vncUserConfig = "$vncUserDir/config"; + +$vncSystemConfigDir = "/etc/tigervnc"; +$vncSystemConfigDefaultsFile = "$vncSystemConfigDir/vncserver-config-defaults"; +$vncSystemConfigMandatoryFile = "$vncSystemConfigDir/vncserver-config-mandatory"; + $skipxstartup = 0; $xauthorityFile = "$ENV{XAUTHORITY}" || "$ENV{HOME}/.Xauthority"; -$xstartup = $vncUserDir . "/xstartup"; +$xstartupFile = $vncUserDir . "/xstartup"; $defaultXStartup = ("#!/bin/sh\n\n". "unset SESSION_MANAGER\n". @@ -159,7 +163,7 @@ if ($opt{'-noxstartup'}) { $skipxstartup = 1; } if ($opt{'-xstartup'}) { - $xstartup = $opt{'-xstartup'}; + $xstartupFile = $opt{'-xstartup'}; } if ($opt{'-fp'}) { $fontPath = $opt{'-fp'}; @@ -168,22 +172,89 @@ if ($opt{'-fp'}) { &CheckGeometryAndDepth(); - # Create the user's vnc directory if necessary. - if (!(-e $vncUserDir)) { if (!mkdir($vncUserDir,0755)) { die "$prog: Could not create $vncUserDir.\n"; } } - + +# Find display number. +if ((@ARGV > 0) && ($ARGV[0] =~ /^:(\d+)$/)) { + $displayNumber = $1; + shift(@ARGV); + if (!&CheckDisplayNumber($displayNumber)) { + die "A VNC server is already running as :$displayNumber\n"; + } +} elsif ((@ARGV > 0) && ($ARGV[0] !~ /^-/) && ($ARGV[0] !~ /^\+/)) { + &Usage(); +} else { + $displayNumber = &GetDisplayNumber(); +} + +$vncPort = 5900 + $displayNumber; + +if ($opt{'-name'}) { + $desktopName = $opt{'-name'}; +} else { + $desktopName = "$host:$displayNumber ($ENV{USER})"; +} + +my %default_opts; +my %config; + +# We set some reasonable defaults. Config file settings +# override these where present. +$default_opts{desktop} = "edString($desktopName); +$default_opts{httpd} = $vncJavaFiles if ($vncJavaFiles); +$default_opts{auth} = $xauthorityFile; +$default_opts{geometry} = $geometry if ($geometry); +$default_opts{depth} = $depth if ($depth); +$default_opts{pixelformat} = $pixelformat if ($pixelformat); +$default_opts{rfbwait} = 30000; +$default_opts{rfbauth} = "$vncUserDir/passwd"; +$default_opts{rfbport} = $vncPort; +$default_opts{fp} = $fontPath if ($fontPath); +$default_opts{pn} = ""; + +# Load user-overrideable system defaults +LoadConfig($vncSystemConfigDefaultsFile); + +# Then the user's settings +LoadConfig($vncUserConfig); + +# And then override anything set above if mandatory settings exist. +# WARNING: "Mandatory" is used loosely here! As the man page says, +# there is nothing stopping someone from EASILY subverting the +# settings in $vncSystemConfigMandatoryFile by simply passing +# CLI args to vncserver, which trump config files! To properly +# hard force policy in a non-subvertible way would require major +# development work that touches Xvnc itself. +LoadConfig($vncSystemConfigMandatoryFile, 1); + +# # Check whether VNC authentication is enabled, and if so, prompt the user to # create a VNC password if they don't already have one. +# $securityTypeArgSpecified = 0; $vncAuthEnabled = 0; $passwordArgSpecified = 0; +@vncAuthStrings = ("vncauth", "tlsvnc", "x509vnc"); + +# ...first we check our configuration files' settings +if ($config{'securitytypes'}) { + $securityTypeArgSpecified = 1; + foreach $arg2 (split(',', $config{'securitytypes'})) { + if (grep {$_ eq lc($arg2)} @vncAuthStrings) { + $vncAuthEnabled = 1; + } + } +} +# ...and finally we check CLI args, which in the case of the topic at +# hand (VNC auth or not), override anything found in configuration files +# (even so-called "mandatory" settings). for ($i = 0; $i < @ARGV; ++$i) { # -SecurityTypes can be followed by a space or "=" my @splitargs = split('=', $ARGV[$i]); @@ -195,8 +266,7 @@ for ($i = 0; $i < @ARGV; ++$i) { $securityTypeArgSpecified = 1; } foreach $arg2 (split(',', @splitargs[1])) { - if (lc($arg2) eq "vncauth" || lc($arg2) eq "tlsvnc" - || lc($arg2) eq "x509vnc") { + if (grep {$_ eq lc($arg2)} @vncAuthStrings) { $vncAuthEnabled = 1; } } @@ -218,81 +288,43 @@ if ((!$securityTypeArgSpecified || $vncAuthEnabled) && !$passwordArgSpecified) { } } } - -# Find display number. - -if ((@ARGV > 0) && ($ARGV[0] =~ /^:(\d+)$/)) { - $displayNumber = $1; - shift(@ARGV); - if (!&CheckDisplayNumber($displayNumber)) { - die "A VNC server is already running as :$displayNumber\n"; - } -} elsif ((@ARGV > 0) && ($ARGV[0] !~ /^-/) && ($ARGV[0] !~ /^\+/)) { - &Usage(); -} else { - $displayNumber = &GetDisplayNumber(); -} - -$vncPort = 5900 + $displayNumber; $desktopLog = "$vncUserDir/$host:$displayNumber.log"; unlink($desktopLog); # Make an X server cookie and set up the Xauthority file - +# mcookie is a part of util-linux, usually only GNU/Linux systems have it. $cookie = `mcookie`; +# Fallback for non GNU/Linux OS - use /dev/urandom on systems that have it, +# otherwise use perl's random number generator, seeded with the sum +# of the current time, our PID and part of the encrypted form of the password. +if ($cookie eq "" && open(URANDOM, '<', '/dev/urandom')) { + my $randata; + if (sysread(URANDOM, $randata, 16) == 16) { + $cookie = unpack 'h*', $randata; + } + close(URANDOM); +} +if ($cookie eq "") { + srand(time+$$+unpack("L",`cat $vncUserDir/passwd`)); + for (1..16) { + $cookie .= sprintf("%02x", int(rand(256)) % 256); + } +} open(XAUTH, "|xauth -f $xauthorityFile source -"); print XAUTH "add $host:$displayNumber . $cookie\n"; print XAUTH "add $host/unix:$displayNumber . $cookie\n"; close(XAUTH); -if ($opt{'-name'}) { - $desktopName = $opt{'-name'}; -} else { - $desktopName = "$host:$displayNumber ($ENV{USER})"; -} - # Now start the X VNC Server +# We build up our Xvnc command with options $cmd = $exedir."Xvnc :$displayNumber"; -my %default_opts; -my %config; - -$default_opts{desktop} = "edString($desktopName); -$default_opts{httpd} = $vncJavaFiles if ($vncJavaFiles); -$default_opts{auth} = $xauthorityFile; -$default_opts{geometry} = $geometry if ($geometry); -$default_opts{depth} = $depth if ($depth); -$default_opts{pixelformat} = $pixelformat if ($pixelformat); -$default_opts{rfbwait} = 30000; -$default_opts{rfbauth} = "$vncUserDir/passwd"; -$default_opts{rfbport} = $vncPort; -$default_opts{fp} = $fontPath if ($fontPath); -$default_opts{pn} = ""; - -# if a user configuration file already exists -if(stat("$vncUserDir/config")) { - - # loads and parses configuration file - if(open(IN, "$vncUserDir/config")) { - while(<IN>) { - next if /^#/; - if(my ($k, $v) = /^\s*(\w+)\s*=\s*(.+)$/) { - $config{$k} = $v; - } elsif ($_ =~ m/^\s*(\S+)/) { - $config{$1} = $k; - } - } - close(IN); - } -} - foreach my $k (sort keys %config) { $cmd .= " -$k $config{$k}"; - # user's option takes precedence - delete $default_opts{$k}; + delete $default_opts{$k}; # file options take precedence } foreach my $k (sort keys %default_opts) { @@ -300,23 +332,20 @@ foreach my $k (sort keys %default_opts) { } # Add color database stuff here, e.g.: -# # $cmd .= " -co /usr/lib/X11/rgb"; -# foreach $arg (@ARGV) { - $cmd .= " " . "edString($arg); + $cmd .= " " . "edString($arg); } $cmd .= " >> " . "edString($desktopLog) . " 2>&1"; # Run $cmd and record the process ID. - $pidFile = "$vncUserDir/$host:$displayNumber.pid"; system("$cmd & echo \$! >$pidFile"); # Give Xvnc a chance to start up -sleep(3); +sleep(3); if ($fontPath ne $defFontPath) { unless (kill 0, `cat $pidFile`) { if ($fpArgSpecified) { @@ -347,31 +376,28 @@ unless (kill 0, `cat $pidFile`) { warn "\nNew '$desktopName' desktop is $host:$displayNumber\n\n"; # Create the user's xstartup script if necessary. - if (! $skipxstartup) { - if (!(-e "$xstartup")) { - warn "Creating default startup script $xstartup\n"; - open(XSTARTUP, ">$xstartup"); + if (!(-e "$xstartupFile")) { + warn "Creating default startup script $xstartupFile\n"; + open(XSTARTUP, ">$xstartupFile"); print XSTARTUP $defaultXStartup; close(XSTARTUP); - chmod 0755, "$xstartup"; + chmod 0755, "$xstartupFile"; } } # Create the user's config file if necessary. - if (!(-e "$vncUserDir/config")) { warn "Creating default config $vncUserDir/config\n"; - open(XSTARTUP, ">$vncUserDir/config"); - print XSTARTUP $defaultConfig; - close(XSTARTUP); + open(VNCUSERCONFIG, ">$vncUserDir/config"); + print VNCUSERCONFIG $defaultConfig; + close(VNCUSERCONFIG); chmod 0644, "$vncUserDir/config"; } # Run the X startup script. - if (! $skipxstartup) { - warn "Starting applications specified in $xstartup\n"; + warn "Starting applications specified in $xstartupFile\n"; } warn "Log file is $desktopLog\n\n"; @@ -387,11 +413,9 @@ if (-e "/tmp/.X11-unix/X$displayNumber" || } $ENV{VNCDESKTOP}= $desktopName; -system($exedir."vncconfig -nowin >> " . "edString($desktopLog) . " 2>&1 &"); - if ($opt{'-fg'}) { if (! $skipxstartup) { - system("$xstartup >> " . "edString($desktopLog) . " 2>&1"); + system("$xstartupFile >> " . "edString($desktopLog) . " 2>&1"); } if (kill 0, `cat $pidFile`) { $opt{'-kill'} = ':'.$displayNumber; @@ -400,12 +424,12 @@ if ($opt{'-fg'}) { } else { if ($opt{'-autokill'}) { if (! $skipxstartup) { - system("($xstartup; $0 -kill :$displayNumber) >> " + system("($xstartupFile; $0 -kill :$displayNumber) >> " . "edString($desktopLog) . " 2>&1 &"); } } else { if (! $skipxstartup) { - system("$xstartup >> " . "edString($desktopLog) + system("$xstartupFile >> " . "edString($desktopLog) . " 2>&1 &"); } } @@ -413,8 +437,46 @@ if ($opt{'-fg'}) { exit; - ############################################################################### +# Functions +############################################################################### + +# +# Populate the global %config hash with settings from a specified +# vncserver configuration file if it exists +# +# Args: 1. file path +# 2. optional boolean flag to enable warning when a previously +# set configuration setting is being overridden +# +sub LoadConfig { + local ($configFile, $warnoverride) = @_; + local ($toggle) = undef; + + if (stat($configFile)) { + if (open(IN, $configFile)) { + while (<IN>) { + next if /^#/; + if (my ($k, $v) = /^\s*(\w+)\s*=\s*(.+)$/) { + $k = lc($k); # must normalize key case + if ($warnoverride && $config{$k}) { + print("Warning: $configFile is overriding previously defined '$k' to be '$v'\n"); + } + $config{$k} = $v; + } elsif ($_ =~ m/^\s*(\S+)/) { + # We can't reasonably warn on override of toggles (e.g. AlwaysShared) + # because it would get crazy to do so. We'd have to check if the + # current config file being loaded defined the logical opposite setting + # (NeverShared vs. AlwaysShared, etc etc). + $toggle = lc($1); # must normalize key case + $config{$toggle} = $k; + } + } + close(IN); + } + } +} + # # CheckGeometryAndDepth simply makes sure that the geometry and depth values # are sensible. @@ -453,7 +515,7 @@ sub GetDisplayNumber return $n+0; # Bruce Mah's workaround for bug in perl 5.005_02 } } - + die "$prog: no free display number on $host.\n"; } @@ -697,7 +759,7 @@ sub Kill } else { warn "Xvnc process ID $pid already killed\n"; $opt{'-kill'} =~ s/://; - + if (-e "/tmp/.X11-unix/X$opt{'-kill'}") { print "Xvnc did not appear to shut down cleanly."; print " Removing /tmp/.X11-unix/X$opt{'-kill'}\n"; @@ -759,18 +821,12 @@ sub ParseOptions } -# # Routine to make sure we're operating in a sane environment. -# - sub SanityCheck { local ($cmd); - # # Get the program name - # - ($prog) = ($0 =~ m|([^/]+)$|); # @@ -778,7 +834,7 @@ sub SanityCheck # cmd: - foreach $cmd ("uname","mcookie","xauth") { + foreach $cmd ("uname","xauth") { for (split(/:/,$ENV{PATH})) { if (-x "$_/$cmd") { next cmd; @@ -812,14 +868,9 @@ sub SanityCheck } } - # - # Check the HOME environment variable is set - # - if (!defined($ENV{HOME})) { die "$prog: The HOME environment variable is not set.\n"; } -# chdir($ENV{HOME}); # # Find socket constants. 'use Socket' is a perl5-ism, so we wrap it in an diff --git a/unix/vncserver.man b/unix/vncserver.man index fd7e93a6..9108683c 100644 --- a/unix/vncserver.man +++ b/unix/vncserver.man @@ -147,6 +147,26 @@ A shell script specifying X applications to be run when a VNC desktop is started. If this file does not exist, then vncserver will create a default xstartup script which attempts to launch your chosen window manager. .TP +/etc/tigervnc/vncserver-config-defaults +The optional system-wide equivalent of $HOME/.vnc/config. If this file exists +and defines options to be passed to Xvnc, they will be used as defaults for +users. The user's $HOME/.vnc/config overrides settings configured in this file. +The overall configuration file load order is: this file, $HOME/.vnc/config, +and then /etc/tigervnc/vncserver-config-mandatory. None are required to exist. +.TP +/etc/tigervnc/vncserver-config-mandatory +The optional system-wide equivalent of $HOME/.vnc/config. If this file exists +and defines options to be passed to Xvnc, they will override any of the same +options defined in a user's $HOME/.vnc/config. This file offers a mechanism +to establish some basic form of system-wide policy. WARNING! There is +nothing stopping users from constructing their own vncserver-like script +that calls Xvnc directly to bypass any options defined in +/etc/tigervnc/vncserver-config-mandatory. Likewise, any CLI arguments passed +to vncserver will override ANY config file setting of the same name. The +overall configuration file load order is: +/etc/tigervnc/vncserver-config-defaults, $HOME/.vnc/config, and then this file. +None are required to exist. +.TP $HOME/.vnc/config An optional server config file wherein options to be passed to Xvnc are listed to avoid hard-coding them to the physical invocation. List options in this file diff --git a/unix/xserver/hw/vnc/Input.c b/unix/xserver/hw/vnc/Input.c index 55befa75..64305cbc 100644 --- a/unix/xserver/hw/vnc/Input.c +++ b/unix/xserver/hw/vnc/Input.c @@ -33,7 +33,9 @@ #include "inpututils.h" #endif #include "mi.h" +#include "mipointer.h" #include "exevents.h" +#include "scrnintstr.h" #include "xkbsrv.h" #include "xkbstr.h" #include "xserver-properties.h" @@ -186,8 +188,16 @@ void vncPointerMove(int x, int y) void vncGetPointerPos(int *x, int *y) { - if (vncPointerDev != NULL) - GetSpritePosition(vncPointerDev, &cursorPosX, &cursorPosY); + if (vncPointerDev != NULL) { + ScreenPtr ptrScreen; + + miPointerGetPosition(vncPointerDev, &cursorPosX, &cursorPosY); + + /* Pointer coordinates are screen relative */ + ptrScreen = miPointerGetScreen(vncPointerDev); + cursorPosX += ptrScreen->x; + cursorPosY += ptrScreen->y; + } *x = cursorPosX; *y = cursorPosY; diff --git a/unix/xserver/hw/vnc/Makefile.am b/unix/xserver/hw/vnc/Makefile.am index d7ab2595..0d6a4ac4 100644 --- a/unix/xserver/hw/vnc/Makefile.am +++ b/unix/xserver/hw/vnc/Makefile.am @@ -3,18 +3,20 @@ LIB_DIR=${top_builddir}/../../common RFB_LIB=$(LIB_DIR)/rfb/librfb.la RDR_LIB=$(LIB_DIR)/rdr/librdr.la +OS_LIB=$(LIB_DIR)/os/libos.la NETWORK_LIB=$(LIB_DIR)/network/libnetwork.la XREGION_LIB=$(LIB_DIR)/Xregion/libXregion.la -COMMON_LIBS=$(NETWORK_LIB) $(RFB_LIB) $(RDR_LIB) $(XREGION_LIB) +COMMON_LIBS=$(NETWORK_LIB) $(RFB_LIB) $(RDR_LIB) $(XREGION_LIB) $(OS_LIB) noinst_LTLIBRARIES = libvnccommon.la HDRS = vncExtInit.h vncHooks.h \ - vncBlockHandler.h XorgGlue.h \ - XserverDesktop.h xorg-version.h \ + vncBlockHandler.h vncSelection.h \ + XorgGlue.h XserverDesktop.h xorg-version.h \ Input.h RFBGlue.h -libvnccommon_la_SOURCES = $(HDRS) vncExt.c vncExtInit.cc vncHooks.c \ +libvnccommon_la_SOURCES = $(HDRS) \ + vncExt.c vncExtInit.cc vncHooks.c vncSelection.c \ vncBlockHandler.c XorgGlue.c RFBGlue.cc XserverDesktop.cc \ Input.c InputXKB.c diff --git a/unix/xserver/hw/vnc/RFBGlue.cc b/unix/xserver/hw/vnc/RFBGlue.cc index d6c3ef6a..c9153364 100644 --- a/unix/xserver/hw/vnc/RFBGlue.cc +++ b/unix/xserver/hw/vnc/RFBGlue.cc @@ -31,6 +31,7 @@ using namespace rfb; // Loggers used by C code must be created here static LogWriter inputLog("Input"); +static LogWriter selectionLog("Selection"); void vncInitRFB(void) { diff --git a/unix/xserver/hw/vnc/XorgGlue.c b/unix/xserver/hw/vnc/XorgGlue.c index d7892b18..712ed6af 100644 --- a/unix/xserver/hw/vnc/XorgGlue.c +++ b/unix/xserver/hw/vnc/XorgGlue.c @@ -92,6 +92,16 @@ void vncGetScreenFormat(int scrIdx, int *depth, int *bpp, *blueMask = vis->blueMask; } +int vncGetScreenX(int scrIdx) +{ + return screenInfo.screens[scrIdx]->x; +} + +int vncGetScreenY(int scrIdx) +{ + return screenInfo.screens[scrIdx]->y; +} + int vncGetScreenWidth(int scrIdx) { return screenInfo.screens[scrIdx]->width; diff --git a/unix/xserver/hw/vnc/XorgGlue.h b/unix/xserver/hw/vnc/XorgGlue.h index 92b0d18d..5cae860a 100644 --- a/unix/xserver/hw/vnc/XorgGlue.h +++ b/unix/xserver/hw/vnc/XorgGlue.h @@ -33,6 +33,8 @@ void vncGetScreenFormat(int scrIdx, int *depth, int *bpp, int *trueColour, int *bigEndian, int *redMask, int *greenMask, int *blueMask); +int vncGetScreenX(int scrIdx); +int vncGetScreenY(int scrIdx); int vncGetScreenWidth(int scrIdx); int vncGetScreenHeight(int scrIdx); diff --git a/unix/xserver/hw/vnc/XserverDesktop.cc b/unix/xserver/hw/vnc/XserverDesktop.cc index f1c9b747..f6e6a7fe 100644 --- a/unix/xserver/hw/vnc/XserverDesktop.cc +++ b/unix/xserver/hw/vnc/XserverDesktop.cc @@ -41,8 +41,10 @@ #include <rfb/ServerCore.h> #include "XserverDesktop.h" +#include "vncBlockHandler.h" #include "vncExtInit.h" #include "vncHooks.h" +#include "vncSelection.h" #include "XorgGlue.h" #include "Input.h" @@ -110,15 +112,29 @@ XserverDesktop::XserverDesktop(int screenIndex_, if (!httpListeners.empty ()) httpServer = new FileHTTPServer(this); + + for (std::list<TcpListener*>::iterator i = listeners.begin(); + i != listeners.end(); + i++) { + vncSetNotifyFd((*i)->getFd(), screenIndex, true, false); + } + + for (std::list<TcpListener*>::iterator i = httpListeners.begin(); + i != httpListeners.end(); + i++) { + vncSetNotifyFd((*i)->getFd(), screenIndex, true, false); + } } XserverDesktop::~XserverDesktop() { while (!listeners.empty()) { + vncRemoveNotifyFd(listeners.back()->getFd()); delete listeners.back(); listeners.pop_back(); } while (!httpListeners.empty()) { + vncRemoveNotifyFd(listeners.back()->getFd()); delete httpListeners.back(); httpListeners.pop_back(); } @@ -388,215 +404,132 @@ void XserverDesktop::add_copied(const rfb::Region &dest, const rfb::Point &delta } } -void XserverDesktop::readBlockHandler(fd_set* fds, struct timeval ** timeout) +void XserverDesktop::handleSocketEvent(int fd, bool read, bool write) { - // We don't have a good callback for when we can init input devices[1], - // so we abuse the fact that this routine will be called first thing - // once the dix is done initialising. - // [1] Technically Xvnc has InitInput(), but libvnc.so has nothing. - vncInitInputDevice(); - try { - int nextTimeout; - - // Add all sockets we want read events for, after purging - // any closed sockets. - for (std::list<network::TcpListener*>::iterator i = listeners.begin(); - i != listeners.end(); - i++) - FD_SET((*i)->getFd(), fds); - for (std::list<network::TcpListener*>::iterator i = httpListeners.begin(); - i != httpListeners.end(); - i++) - FD_SET((*i)->getFd(), fds); - - std::list<Socket*> sockets; - std::list<Socket*>::iterator i; - server->getSockets(&sockets); - for (i = sockets.begin(); i != sockets.end(); i++) { - int fd = (*i)->getFd(); - if ((*i)->isShutdown()) { - vlog.debug("client gone, sock %d",fd); - server->removeSocket(*i); - vncClientGone(fd); - delete (*i); - } else { - FD_SET(fd, fds); - } - } - if (httpServer) { - httpServer->getSockets(&sockets); - for (i = sockets.begin(); i != sockets.end(); i++) { - int fd = (*i)->getFd(); - if ((*i)->isShutdown()) { - vlog.debug("http client gone, sock %d",fd); - httpServer->removeSocket(*i); - delete (*i); - } else { - FD_SET(fd, fds); - } - } + if (read) { + if (handleListenerEvent(fd, &listeners, server)) + return; + if (handleListenerEvent(fd, &httpListeners, httpServer)) + return; } - // Then check when the next timer will expire. - // (this unfortunately also triggers any already expired timers) - nextTimeout = server->checkTimeouts(); - if (nextTimeout > 0) { - // No timeout specified? Or later timeout than we need? - if ((*timeout == NULL) || - ((*timeout)->tv_sec > (nextTimeout/1000)) || - (((*timeout)->tv_sec == (nextTimeout/1000)) && - ((*timeout)->tv_usec > ((nextTimeout%1000)*1000)))) { - dixTimeout.tv_sec = nextTimeout/1000; - dixTimeout.tv_usec = (nextTimeout%1000)*1000; - *timeout = &dixTimeout; - } - } + if (handleSocketEvent(fd, server, read, write)) + return; + if (handleSocketEvent(fd, httpServer, read, write)) + return; + vlog.error("Cannot find file descriptor for socket event"); } catch (rdr::Exception& e) { - vlog.error("XserverDesktop::blockHandler: %s",e.str()); + vlog.error("XserverDesktop::handleSocketEvent: %s",e.str()); } } -void XserverDesktop::readWakeupHandler(fd_set* fds, int nfds) +bool XserverDesktop::handleListenerEvent(int fd, + std::list<TcpListener*>* sockets, + SocketServer* sockserv) { - try { - // First check for file descriptors with something to do - if (nfds >= 1) { - - for (std::list<network::TcpListener*>::iterator i = listeners.begin(); - i != listeners.end(); - i++) { - if (FD_ISSET((*i)->getFd(), fds)) { - FD_CLR((*i)->getFd(), fds); - Socket* sock = (*i)->accept(); - sock->outStream().setBlocking(false); - server->addSocket(sock); - vlog.debug("new client, sock %d",sock->getFd()); - } - } + std::list<TcpListener*>::iterator i; - for (std::list<network::TcpListener*>::iterator i = httpListeners.begin(); - i != httpListeners.end(); - i++) { - if (FD_ISSET((*i)->getFd(), fds)) { - FD_CLR((*i)->getFd(), fds); - Socket* sock = (*i)->accept(); - sock->outStream().setBlocking(false); - httpServer->addSocket(sock); - vlog.debug("new http client, sock %d",sock->getFd()); - } - } + for (i = sockets->begin(); i != sockets->end(); i++) { + if ((*i)->getFd() == fd) + break; + } - std::list<Socket*> sockets; - server->getSockets(&sockets); - std::list<Socket*>::iterator i; - for (i = sockets.begin(); i != sockets.end(); i++) { - int fd = (*i)->getFd(); - if (FD_ISSET(fd, fds)) { - FD_CLR(fd, fds); - server->processSocketReadEvent(*i); - } - } + if (i == sockets->end()) + return false; - if (httpServer) { - httpServer->getSockets(&sockets); - for (i = sockets.begin(); i != sockets.end(); i++) { - int fd = (*i)->getFd(); - if (FD_ISSET(fd, fds)) { - FD_CLR(fd, fds); - httpServer->processSocketReadEvent(*i); - } - } - } + Socket* sock = (*i)->accept(); + sock->outStream().setBlocking(false); + vlog.debug("new client, sock %d", sock->getFd()); + sockserv->addSocket(sock); - // We are responsible for propagating mouse movement between clients - int cursorX, cursorY; - vncGetPointerPos(&cursorX, &cursorY); - if (oldCursorPos.x != cursorX || oldCursorPos.y != cursorY) { - oldCursorPos.x = cursorX; - oldCursorPos.y = cursorY; - server->setCursorPos(oldCursorPos); - } - } + return true; +} - // Then let the timers do some processing. Rescheduling is done in - // blockHandler(). - server->checkTimeouts(); - } catch (rdr::Exception& e) { - vlog.error("XserverDesktop::wakeupHandler: %s",e.str()); +bool XserverDesktop::handleSocketEvent(int fd, + SocketServer* sockserv, + bool read, bool write) +{ + std::list<Socket*> sockets; + std::list<Socket*>::iterator i; + + sockserv->getSockets(&sockets); + for (i = sockets.begin(); i != sockets.end(); i++) { + if ((*i)->getFd() == fd) + break; } + + if (i == sockets.end()) + return false; + + if (read) + sockserv->processSocketReadEvent(*i); + + if (write) + sockserv->processSocketWriteEvent(*i); + + return true; } -void XserverDesktop::writeBlockHandler(fd_set* fds, struct timeval ** timeout) +void XserverDesktop::blockHandler(int* timeout) { + // We don't have a good callback for when we can init input devices[1], + // so we abuse the fact that this routine will be called first thing + // once the dix is done initialising. + // [1] Technically Xvnc has InitInput(), but libvnc.so has nothing. + vncInitInputDevice(); + try { std::list<Socket*> sockets; std::list<Socket*>::iterator i; - server->getSockets(&sockets); for (i = sockets.begin(); i != sockets.end(); i++) { int fd = (*i)->getFd(); if ((*i)->isShutdown()) { vlog.debug("client gone, sock %d",fd); + vncRemoveNotifyFd(fd); server->removeSocket(*i); vncClientGone(fd); delete (*i); } else { - if ((*i)->outStream().bufferUsage() > 0) - FD_SET(fd, fds); + /* Update existing NotifyFD to listen for write (or not) */ + vncSetNotifyFd(fd, screenIndex, true, (*i)->outStream().bufferUsage() > 0); } } - if (httpServer) { httpServer->getSockets(&sockets); for (i = sockets.begin(); i != sockets.end(); i++) { int fd = (*i)->getFd(); if ((*i)->isShutdown()) { vlog.debug("http client gone, sock %d",fd); + vncRemoveNotifyFd(fd); httpServer->removeSocket(*i); delete (*i); } else { - if ((*i)->outStream().bufferUsage() > 0) - FD_SET(fd, fds); + /* Update existing NotifyFD to listen for write (or not) */ + vncSetNotifyFd(fd, screenIndex, true, (*i)->outStream().bufferUsage() > 0); } } } - } catch (rdr::Exception& e) { - vlog.error("XserverDesktop::writeBlockHandler: %s",e.str()); - } -} - -void XserverDesktop::writeWakeupHandler(fd_set* fds, int nfds) -{ - if (nfds < 1) - return; - - try { - std::list<Socket*> sockets; - std::list<Socket*>::iterator i; - server->getSockets(&sockets); - for (i = sockets.begin(); i != sockets.end(); i++) { - int fd = (*i)->getFd(); - if (FD_ISSET(fd, fds)) { - FD_CLR(fd, fds); - server->processSocketWriteEvent(*i); - } + // We are responsible for propagating mouse movement between clients + int cursorX, cursorY; + vncGetPointerPos(&cursorX, &cursorY); + cursorX -= vncGetScreenX(screenIndex); + cursorY -= vncGetScreenY(screenIndex); + if (oldCursorPos.x != cursorX || oldCursorPos.y != cursorY) { + oldCursorPos.x = cursorX; + oldCursorPos.y = cursorY; + server->setCursorPos(oldCursorPos); } - if (httpServer) { - httpServer->getSockets(&sockets); - for (i = sockets.begin(); i != sockets.end(); i++) { - int fd = (*i)->getFd(); - if (FD_ISSET(fd, fds)) { - FD_CLR(fd, fds); - httpServer->processSocketWriteEvent(*i); - } - } - } + // Trigger timers and check when the next will expire + int nextTimeout = server->checkTimeouts(); + if (nextTimeout > 0 && (*timeout == -1 || nextTimeout < *timeout)) + *timeout = nextTimeout; } catch (rdr::Exception& e) { - vlog.error("XserverDesktop::writeWakeupHandler: %s",e.str()); + vlog.error("XserverDesktop::blockHandler: %s",e.str()); } } @@ -604,6 +537,7 @@ void XserverDesktop::addClient(Socket* sock, bool reverse) { vlog.debug("new client, sock %d reverse %d",sock->getFd(),reverse); server->addSocket(sock, reverse); + vncSetNotifyFd(sock->getFd(), screenIndex, true, false); } void XserverDesktop::disconnectClients() @@ -647,7 +581,8 @@ void XserverDesktop::approveConnection(uint32_t opaqueId, bool accept, void XserverDesktop::pointerEvent(const Point& pos, int buttonMask) { - vncPointerMove(pos.x, pos.y); + vncPointerMove(pos.x + vncGetScreenX(screenIndex), + pos.y + vncGetScreenY(screenIndex)); vncPointerButtonAction(buttonMask); } diff --git a/unix/xserver/hw/vnc/XserverDesktop.h b/unix/xserver/hw/vnc/XserverDesktop.h index c0690286..07bd3995 100644 --- a/unix/xserver/hw/vnc/XserverDesktop.h +++ b/unix/xserver/hw/vnc/XserverDesktop.h @@ -43,7 +43,7 @@ namespace rfb { class VNCServerST; } -namespace network { class TcpListener; class Socket; } +namespace network { class TcpListener; class Socket; class SocketServer; } class XserverDesktop : public rfb::SDesktop, public rfb::FullFramePixelBuffer, public rdr::Substitutor, @@ -69,10 +69,8 @@ public: const unsigned char *rgbaData); void add_changed(const rfb::Region ®ion); void add_copied(const rfb::Region &dest, const rfb::Point &delta); - void readBlockHandler(fd_set* fds, struct timeval ** timeout); - void readWakeupHandler(fd_set* fds, int nfds); - void writeBlockHandler(fd_set* fds, struct timeval ** timeout); - void writeWakeupHandler(fd_set* fds, int nfds); + void handleSocketEvent(int fd, bool read, bool write); + void blockHandler(int* timeout); void addClient(network::Socket* sock, bool reverse); void disconnectClients(); @@ -107,6 +105,14 @@ public: const char* userName, char** reason); +protected: + bool handleListenerEvent(int fd, + std::list<network::TcpListener*>* sockets, + network::SocketServer* sockserv); + bool handleSocketEvent(int fd, + network::SocketServer* sockserv, + bool read, bool write); + private: rfb::ScreenSet computeScreenLayout(); @@ -117,7 +123,6 @@ private: std::list<network::TcpListener*> httpListeners; bool deferredUpdateTimerSet; bool directFbptr; - struct timeval dixTimeout; uint32_t queryConnectId; network::Socket* queryConnectSocket; diff --git a/unix/xserver/hw/vnc/Xvnc.man b/unix/xserver/hw/vnc/Xvnc.man index a4d9f8d3..04e8f94b 100644 --- a/unix/xserver/hw/vnc/Xvnc.man +++ b/unix/xserver/hw/vnc/Xvnc.man @@ -126,14 +126,8 @@ screen is updated. Otherwise the delay is from the first update. Default is off. . .TP -.B \-SendCutText -Send clipboard changes to clients (default is on). Note that you must also run -\fBvncconfig\fP(1) to get the clipboard to work. -. -.TP .B \-AcceptCutText -Accept clipboard updates from clients (default is on). Note that you must also -run \fBvncconfig\fP(1) to get the clipboard to work. +Accept clipboard updates from clients (default is on). . .TP .B \-MaxCutText \fIbytes\fP @@ -141,6 +135,15 @@ The maximum size of a clipboard update that will be accepted from a client. Default is \fB262144\fP. . .TP +.B \-SendCutText +Send clipboard changes to clients (default is on). +. +.TP +.B \-SendPrimary +Send the primary selection and cut buffer to the server as well as the +clipboard selection. Default is on. +. +.TP .B \-AcceptPointerEvents Accept pointer press and release events from clients (default is on). . @@ -314,7 +317,7 @@ programs allowed to override the parameters. When \fBNoClipboard\fP parameter is set, allowing override of \fBSendCutText\fP and \fBAcceptCutText\fP has no effect. -Default is \fBdesktop,AcceptPointerEvents,SendCutText,AcceptCutText\fP. +Default is \fBdesktop,AcceptPointerEvents,SendCutText,AcceptCutText,SendPrimary,SetPrimary\fP. .SH USAGE WITH INETD By configuring the \fBinetd\fP(1) service appropriately, Xvnc can be launched diff --git a/unix/xserver/hw/vnc/vncBlockHandler.c b/unix/xserver/hw/vnc/vncBlockHandler.c index 4e444783..390a9b3c 100644 --- a/unix/xserver/hw/vnc/vncBlockHandler.c +++ b/unix/xserver/hw/vnc/vncBlockHandler.c @@ -25,75 +25,224 @@ #include <X11/Xpoll.h> +#include "os.h" #include "dix.h" #include "scrnintstr.h" #include "vncExtInit.h" #include "vncBlockHandler.h" +#include "xorg-version.h" +#if XORG >= 119 +static void vncBlockHandler(void* data, void* timeout); +static void vncSocketNotify(int fd, int xevents, void *data); +#else static void vncBlockHandler(void * data, OSTimePtr t, void * readmask); static void vncWakeupHandler(void * data, int nfds, void * readmask); -void vncWriteBlockHandler(fd_set *fds); -void vncWriteWakeupHandler(int nfds, fd_set *fds); + +struct vncFdEntry { + int fd; + int read, write; + int scrIdx; + struct vncFdEntry* next; +}; + +static struct vncFdEntry* fdsHead = NULL; +#endif void vncRegisterBlockHandlers(void) { - if (!RegisterBlockAndWakeupHandlers(vncBlockHandler, vncWakeupHandler, 0)) + if (!RegisterBlockAndWakeupHandlers(vncBlockHandler, +#if XORG >= 119 + (ServerWakeupHandlerProcPtr)NoopDDA, +#else + vncWakeupHandler, +#endif + 0)) FatalError("RegisterBlockAndWakeupHandlers() failed\n"); } +void vncSetNotifyFd(int fd, int scrIdx, int read, int write) +{ +#if XORG >= 119 + int mask = (read ? X_NOTIFY_READ : 0) | (write ? X_NOTIFY_WRITE : 0); + SetNotifyFd(fd, vncSocketNotify, mask, (void*)scrIdx); +#else + static struct vncFdEntry* entry; + + entry = fdsHead; + while (entry) { + if (entry->fd == fd) { + assert(entry->scrIdx == scrIdx); + entry->read = read; + entry->write = write; + return; + } + entry = entry->next; + } + + entry = malloc(sizeof(struct vncFdEntry)); + memset(entry, 0, sizeof(struct vncFdEntry)); + + entry->fd = fd; + entry->scrIdx = scrIdx; + entry->read = read; + entry->write = write; + + entry->next = fdsHead; + fdsHead = entry; +#endif +} + +void vncRemoveNotifyFd(int fd) +{ +#if XORG >= 119 + RemoveNotifyFd(fd); +#else + static struct vncFdEntry** prev; + static struct vncFdEntry* entry; + + prev = &fdsHead; + entry = fdsHead; + while (entry) { + if (entry->fd == fd) { + *prev = entry->next; + return; + } + prev = &entry->next; + entry = entry->next; + } + + assert(FALSE); +#endif +} + +#if XORG >= 119 +static void vncSocketNotify(int fd, int xevents, void *data) +{ + int scrIdx; + + scrIdx = (int)data; + vncHandleSocketEvent(fd, scrIdx, + xevents & X_NOTIFY_READ, + xevents & X_NOTIFY_WRITE); +} +#endif + +#if XORG < 119 static void vncWriteBlockHandlerFallback(OSTimePtr timeout); static void vncWriteWakeupHandlerFallback(void); +void vncWriteBlockHandler(fd_set *fds); +void vncWriteWakeupHandler(int nfds, fd_set *fds); +#endif // -// vncBlockHandler - called just before the X server goes into select(). Call -// on to the block handler for each desktop. Then check whether any of the -// selections have changed, and if so, notify any interested X clients. +// vncBlockHandler - called just before the X server goes into poll(). +// +// For older versions of X this also allows us to register file +// descriptors that we want read events on. // -static void vncBlockHandler(void * data, OSTimePtr timeout, void * readmask) +#if XORG >= 119 +static void vncBlockHandler(void* data, void* timeout) +#else +static void vncBlockHandler(void * data, OSTimePtr t, void * readmask) +#endif { - fd_set* fds = (fd_set*)readmask; +#if XORG < 119 + int _timeout; + int* timeout = &_timeout; + static struct timeval tv; + + fd_set* fds; + static struct vncFdEntry* entry; + + if (*t == NULL) + _timeout = -1; + else + _timeout = (*t)->tv_sec * 1000 + (*t)->tv_usec / 1000; +#endif + + vncCallBlockHandlers(timeout); - vncWriteBlockHandlerFallback(timeout); +#if XORG < 119 + if (_timeout != -1) { + tv.tv_sec= _timeout / 1000; + tv.tv_usec = (_timeout % 1000) * 1000; + *t = &tv; + } + + fds = (fd_set*)readmask; + entry = fdsHead; + while (entry) { + if (entry->read) + FD_SET(entry->fd, fds); + entry = entry->next; + } - vncCallReadBlockHandlers(fds, timeout); + vncWriteBlockHandlerFallback(t); +#endif } +#if XORG < 119 static void vncWakeupHandler(void * data, int nfds, void * readmask) { fd_set* fds = (fd_set*)readmask; - vncCallReadWakeupHandlers(fds, nfds); + static struct vncFdEntry* entry; + + if (nfds <= 0) + return; + + entry = fdsHead; + while (entry) { + if (entry->read && FD_ISSET(entry->fd, fds)) + vncHandleSocketEvent(entry->fd, entry->scrIdx, TRUE, FALSE); + entry = entry->next; + } vncWriteWakeupHandlerFallback(); } +#endif // -// vncWriteBlockHandler - extra hack to be able to get the main select loop -// to monitor writeable fds and not just readable. This requirers a modified -// Xorg and might therefore not be called. When it is called though, it will -// do so before vncBlockHandler (and vncWriteWakeupHandler called after -// vncWakeupHandler). +// vncWriteBlockHandler - extra hack to be able to get old versions of the X +// server to monitor writeable fds and not just readable. This requirers a +// modified Xorg and might therefore not be called. // +#if XORG < 119 static Bool needFallback = TRUE; static fd_set fallbackFds; static struct timeval tw; void vncWriteBlockHandler(fd_set *fds) { - struct timeval *dummy; + static struct vncFdEntry* entry; needFallback = FALSE; - dummy = NULL; - vncCallWriteBlockHandlers(fds, &dummy); + entry = fdsHead; + while (entry) { + if (entry->write) + FD_SET(entry->fd, fds); + entry = entry->next; + } } void vncWriteWakeupHandler(int nfds, fd_set *fds) { - vncCallWriteWakeupHandlers(fds, nfds); + static struct vncFdEntry* entry; + + if (nfds <= 0) + return; + + entry = fdsHead; + while (entry) { + if (entry->write && FD_ISSET(entry->fd, fds)) + vncHandleSocketEvent(entry->fd, entry->scrIdx, FALSE, TRUE); + entry = entry->next; + } } static void vncWriteBlockHandlerFallback(OSTimePtr timeout) @@ -144,3 +293,4 @@ static void vncWriteWakeupHandlerFallback(void) vncWriteWakeupHandler(ret, &fallbackFds); } +#endif diff --git a/unix/xserver/hw/vnc/vncBlockHandler.h b/unix/xserver/hw/vnc/vncBlockHandler.h index 556528bd..c1bdaac5 100644 --- a/unix/xserver/hw/vnc/vncBlockHandler.h +++ b/unix/xserver/hw/vnc/vncBlockHandler.h @@ -26,6 +26,9 @@ extern "C" { void vncRegisterBlockHandlers(void); +void vncSetNotifyFd(int fd, int scrIdx, int read, int write); +void vncRemoveNotifyFd(int fd); + #ifdef __cplusplus } #endif diff --git a/unix/xserver/hw/vnc/vncExt.c b/unix/xserver/hw/vnc/vncExt.c index b27115f6..0ee32101 100644 --- a/unix/xserver/hw/vnc/vncExt.c +++ b/unix/xserver/hw/vnc/vncExt.c @@ -27,7 +27,6 @@ #include "dixstruct.h" #include "extnsionst.h" #include "scrnintstr.h" -#include "selection.h" #define _VNCEXT_SERVER_ #define _VNCEXT_PROTO_ @@ -44,17 +43,11 @@ static void vncResetProc(ExtensionEntry* extEntry); static void vncClientStateChange(CallbackListPtr*, void *, void *); -static void vncSelectionCallback(CallbackListPtr *callbacks, - void * data, void * args); - static int vncErrorBase = 0; static int vncEventBase = 0; int vncNoClipboard = 0; -static char* clientCutText = NULL; -static int clientCutTextLen = 0; - static struct VncInputSelect* vncInputSelectHead = NULL; struct VncInputSelect { @@ -83,10 +76,6 @@ int vncAddExtension(void) FatalError("Add ClientStateCallback failed\n"); } - if (!AddCallback(&SelectionCallback, vncSelectionCallback, 0)) { - FatalError("Add SelectionCallback failed\n"); - } - return 0; } @@ -121,47 +110,6 @@ int vncNotifyQueryConnect(void) return count; } -void vncClientCutText(const char* str, int len) -{ - xVncExtClientCutTextNotifyEvent ev; - - if (clientCutText != NULL) - free(clientCutText); - clientCutTextLen = 0; - - clientCutText = malloc(len); - if (clientCutText == NULL) { - ErrorF("Could not allocate clipboard buffer\n"); - return; - } - - memcpy(clientCutText, str, len); - clientCutTextLen = len; - - ev.type = vncEventBase + VncExtClientCutTextNotify; - for (struct VncInputSelect* cur = vncInputSelectHead; cur; cur = cur->next) { - if (cur->mask & VncExtClientCutTextMask) { - ev.sequenceNumber = cur->client->sequence; - ev.window = cur->window; - ev.time = GetTimeInMillis(); - if (cur->client->swapped) { -#if XORG < 112 - int n; - swaps(&ev.sequenceNumber, n); - swapl(&ev.window, n); - swapl(&ev.time, n); -#else - swaps(&ev.sequenceNumber); - swapl(&ev.window); - swapl(&ev.time); -#endif - } - WriteToClient(cur->client, sizeof(xVncExtClientCutTextNotifyEvent), - (char *)&ev); - } - } -} - static int ProcVncExtSetParam(ClientPtr client) { char *param; @@ -397,73 +345,6 @@ static int SProcVncExtListParams(ClientPtr client) return ProcVncExtListParams(client); } -static int ProcVncExtSetServerCutText(ClientPtr client) -{ - REQUEST(xVncExtSetServerCutTextReq); - REQUEST_FIXED_SIZE(xVncExtSetServerCutTextReq, stuff->textLen); - vncServerCutText((const char*)&stuff[1], stuff->textLen); - return (client->noClientException); -} - -static int SProcVncExtSetServerCutText(ClientPtr client) -{ - REQUEST(xVncExtSetServerCutTextReq); -#if XORG < 112 - register char n; - swaps(&stuff->length, n); -#else - swaps(&stuff->length); -#endif - REQUEST_AT_LEAST_SIZE(xVncExtSetServerCutTextReq); -#if XORG < 112 - swapl(&stuff->textLen, n); -#else - swapl(&stuff->textLen); -#endif - return ProcVncExtSetServerCutText(client); -} - -static int ProcVncExtGetClientCutText(ClientPtr client) -{ - xVncExtGetClientCutTextReply rep; - - REQUEST_SIZE_MATCH(xVncExtGetClientCutTextReq); - - rep.type = X_Reply; - rep.length = (clientCutTextLen + 3) >> 2; - rep.sequenceNumber = client->sequence; - rep.textLen = clientCutTextLen; - if (client->swapped) { -#if XORG < 112 - int n; - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, n); - swapl(&rep.textLen, n); -#else - swaps(&rep.sequenceNumber); - swapl(&rep.length); - swapl(&rep.textLen); -#endif - } - WriteToClient(client, sizeof(xVncExtGetClientCutTextReply), (char *)&rep); - if (clientCutText) - WriteToClient(client, clientCutTextLen, clientCutText); - return (client->noClientException); -} - -static int SProcVncExtGetClientCutText(ClientPtr client) -{ - REQUEST(xVncExtGetClientCutTextReq); -#if XORG < 112 - register char n; - swaps(&stuff->length, n); -#else - swaps(&stuff->length); -#endif - REQUEST_SIZE_MATCH(xVncExtGetClientCutTextReq); - return ProcVncExtGetClientCutText(client); -} - static int ProcVncExtSelectInput(ClientPtr client) { struct VncInputSelect** nextPtr; @@ -667,10 +548,6 @@ static int ProcVncExtDispatch(ClientPtr client) return ProcVncExtGetParamDesc(client); case X_VncExtListParams: return ProcVncExtListParams(client); - case X_VncExtSetServerCutText: - return ProcVncExtSetServerCutText(client); - case X_VncExtGetClientCutText: - return ProcVncExtGetClientCutText(client); case X_VncExtSelectInput: return ProcVncExtSelectInput(client); case X_VncExtConnect: @@ -696,10 +573,6 @@ static int SProcVncExtDispatch(ClientPtr client) return SProcVncExtGetParamDesc(client); case X_VncExtListParams: return SProcVncExtListParams(client); - case X_VncExtSetServerCutText: - return SProcVncExtSetServerCutText(client); - case X_VncExtGetClientCutText: - return SProcVncExtGetClientCutText(client); case X_VncExtSelectInput: return SProcVncExtSelectInput(client); case X_VncExtConnect: @@ -732,39 +605,3 @@ static void vncClientStateChange(CallbackListPtr * l, void * d, void * p) } } } - -static void SendSelectionChangeEvent(Atom selection) -{ - xVncExtSelectionChangeNotifyEvent ev; - ev.type = vncEventBase + VncExtSelectionChangeNotify; - for (struct VncInputSelect* cur = vncInputSelectHead; cur; cur = cur->next) { - if (cur->mask & VncExtSelectionChangeMask) { - ev.sequenceNumber = cur->client->sequence; - ev.window = cur->window; - ev.selection = selection; - if (cur->client->swapped) { -#if XORG < 112 - int n; - swaps(&ev.sequenceNumber, n); - swapl(&ev.window, n); - swapl(&ev.selection, n); -#else - swaps(&ev.sequenceNumber); - swapl(&ev.window); - swapl(&ev.selection); -#endif - } - WriteToClient(cur->client, sizeof(xVncExtSelectionChangeNotifyEvent), - (char *)&ev); - } - } -} - -static void vncSelectionCallback(CallbackListPtr *callbacks, void * data, void * args) -{ - SelectionInfoRec *info = (SelectionInfoRec *) args; - Selection *selection = info->selection; - - SendSelectionChangeEvent(selection->selection); -} - diff --git a/unix/xserver/hw/vnc/vncExtInit.cc b/unix/xserver/hw/vnc/vncExtInit.cc index 1d374938..57bf6d8d 100644 --- a/unix/xserver/hw/vnc/vncExtInit.cc +++ b/unix/xserver/hw/vnc/vncExtInit.cc @@ -38,7 +38,9 @@ #include "vncExtInit.h" #include "vncHooks.h" #include "vncBlockHandler.h" +#include "vncSelection.h" #include "XorgGlue.h" +#include "xorg-version.h" using namespace rfb; @@ -83,7 +85,12 @@ rfb::BoolParameter avoidShiftNumLock("AvoidShiftNumLock", true); rfb::StringParameter allowOverride("AllowOverride", "Comma separated list of parameters that can be modified using VNC extension.", - "desktop,AcceptPointerEvents,SendCutText,AcceptCutText"); + "desktop,AcceptPointerEvents,SendCutText,AcceptCutText,SendPrimary,SetPrimary"); +rfb::BoolParameter setPrimary("SetPrimary", "Set the PRIMARY as well " + "as the CLIPBOARD selection", true); +rfb::BoolParameter sendPrimary("SendPrimary", + "Send the PRIMARY as well as the CLIPBOARD selection", + true); static PixelFormat vncGetPixelFormat(int scrIdx) { @@ -151,6 +158,8 @@ void vncExtensionInit(void) if (ret == -1) return; + vncSelectionInit(); + vlog.info("VNC extension running!"); try { @@ -241,37 +250,31 @@ int vncExtensionIsActive(int scrIdx) return (desktop[scrIdx] != NULL); } -void vncCallReadBlockHandlers(fd_set * fds, struct timeval ** timeout) +void vncHandleSocketEvent(int fd, int scrIdx, int read, int write) { - for (int scr = 0; scr < vncGetScreenCount(); scr++) - if (desktop[scr]) - desktop[scr]->readBlockHandler(fds, timeout); + desktop[scrIdx]->handleSocketEvent(fd, read, write); } -void vncCallReadWakeupHandlers(fd_set * fds, int nfds) +void vncCallBlockHandlers(int* timeout) { for (int scr = 0; scr < vncGetScreenCount(); scr++) if (desktop[scr]) - desktop[scr]->readWakeupHandler(fds, nfds); + desktop[scr]->blockHandler(timeout); } -void vncCallWriteBlockHandlers(fd_set * fds, struct timeval ** timeout) +int vncGetAvoidShiftNumLock(void) { - for (int scr = 0; scr < vncGetScreenCount(); scr++) - if (desktop[scr]) - desktop[scr]->writeBlockHandler(fds, timeout); + return (bool)avoidShiftNumLock; } -void vncCallWriteWakeupHandlers(fd_set * fds, int nfds) +int vncGetSetPrimary(void) { - for (int scr = 0; scr < vncGetScreenCount(); scr++) - if (desktop[scr]) - desktop[scr]->writeWakeupHandler(fds, nfds); + return (bool)setPrimary; } -int vncGetAvoidShiftNumLock(void) +int vncGetSendPrimary(void) { - return (bool)avoidShiftNumLock; + return (bool)sendPrimary; } void vncUpdateDesktopName(void) @@ -376,10 +379,14 @@ void vncAddCopied(int scrIdx, const struct UpdateRect *extents, desktop[scrIdx]->add_copied(reg, rfb::Point(dx, dy)); } -void vncSetCursor(int scrIdx, int width, int height, int hotX, int hotY, +void vncSetCursor(int width, int height, int hotX, int hotY, const unsigned char *rgbaData) { - desktop[scrIdx]->setCursor(width, height, hotX, hotY, rgbaData); + for (int scr = 0; scr < vncGetScreenCount(); scr++) { + if (desktop[scr] == NULL) + continue; + desktop[scr]->setCursor(width, height, hotX, hotY, rgbaData); + } } void vncPreScreenResize(int scrIdx) diff --git a/unix/xserver/hw/vnc/vncExtInit.h b/unix/xserver/hw/vnc/vncExtInit.h index be6487c8..9f8d9e76 100644 --- a/unix/xserver/hw/vnc/vncExtInit.h +++ b/unix/xserver/hw/vnc/vncExtInit.h @@ -41,8 +41,6 @@ int vncAddExtension(void); int vncNotifyQueryConnect(void); -void vncClientCutText(const char* str, int len); - // vncExtInit.cc extern void* vncFbptr[]; extern int vncFbstride[]; @@ -52,13 +50,14 @@ extern int vncInetdSock; void vncExtensionInit(void); int vncExtensionIsActive(int scrIdx); -void vncCallReadBlockHandlers(fd_set * fds, struct timeval ** timeout); -void vncCallReadWakeupHandlers(fd_set * fds, int nfds); -void vncCallWriteBlockHandlers(fd_set * fds, struct timeval ** timeout); -void vncCallWriteWakeupHandlers(fd_set * fds, int nfds); +void vncHandleSocketEvent(int fd, int scrIdx, int read, int write); +void vncCallBlockHandlers(int* timeout); int vncGetAvoidShiftNumLock(void); +int vncGetSetPrimary(void); +int vncGetSendPrimary(void); + void vncUpdateDesktopName(void); void vncServerCutText(const char *text, size_t len); @@ -83,7 +82,7 @@ void vncAddCopied(int scrIdx, const struct UpdateRect *extents, int nRects, const struct UpdateRect *rects, int dx, int dy); -void vncSetCursor(int scrIdx, int width, int height, int hotX, int hotY, +void vncSetCursor(int width, int height, int hotX, int hotY, const unsigned char *rgbaData); void vncPreScreenResize(int scrIdx); diff --git a/unix/xserver/hw/vnc/vncHooks.c b/unix/xserver/hw/vnc/vncHooks.c index b21f4c67..29f3f8b8 100644 --- a/unix/xserver/hw/vnc/vncHooks.c +++ b/unix/xserver/hw/vnc/vncHooks.c @@ -128,9 +128,11 @@ static Bool vncHooksDisplayCursor(DeviceIntPtr pDev, #if XORG <= 112 static void vncHooksBlockHandler(int i, pointer blockData, pointer pTimeout, pointer pReadmask); -#else +#elif XORG <= 118 static void vncHooksBlockHandler(ScreenPtr pScreen, void * pTimeout, void * pReadmask); +#else +static void vncHooksBlockHandler(ScreenPtr pScreen, void * pTimeout); #endif #ifdef RENDER static void vncHooksComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, @@ -699,7 +701,7 @@ static Bool vncHooksDisplayCursor(DeviceIntPtr pDev, } #endif - vncSetCursor(pScreen->myNum, width, height, hotX, hotY, rgbaData); + vncSetCursor(width, height, hotX, hotY, rgbaData); free(rgbaData); } @@ -716,9 +718,11 @@ out: #if XORG <= 112 static void vncHooksBlockHandler(int i, pointer blockData, pointer pTimeout, pointer pReadmask) -#else +#elif XORG <= 118 static void vncHooksBlockHandler(ScreenPtr pScreen_, void * pTimeout, void * pReadmask) +#else +static void vncHooksBlockHandler(ScreenPtr pScreen_, void * pTimeout) #endif { #if XORG <= 112 @@ -731,8 +735,10 @@ static void vncHooksBlockHandler(ScreenPtr pScreen_, void * pTimeout, #if XORG <= 112 (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask); -#else +#elif XORG <= 118 (*pScreen->BlockHandler) (pScreen, pTimeout, pReadmask); +#else + (*pScreen->BlockHandler) (pScreen, pTimeout); #endif vncHooksScreen->ignoreHooks--; @@ -1033,12 +1039,21 @@ static void vncHooksCopyClip(GCPtr dst, GCPtr src) { // Unwrap and rewrap helpers +#if XORG >= 116 +#define GC_OP_PROLOGUE(pGC, name)\ + vncHooksGCPtr pGCPriv = vncHooksGCPrivate(pGC);\ + const GCFuncs *oldFuncs = pGC->funcs;\ + pGC->funcs = pGCPriv->wrappedFuncs;\ + pGC->ops = pGCPriv->wrappedOps; \ + DBGPRINT((stderr,"vncHooks" #name " called\n")) +#else #define GC_OP_PROLOGUE(pGC, name)\ vncHooksGCPtr pGCPriv = vncHooksGCPrivate(pGC);\ GCFuncs *oldFuncs = pGC->funcs;\ pGC->funcs = pGCPriv->wrappedFuncs;\ pGC->ops = pGCPriv->wrappedOps; \ DBGPRINT((stderr,"vncHooks" #name " called\n")) +#endif #define GC_OP_EPILOGUE(pGC)\ pGCPriv->wrappedOps = pGC->ops;\ diff --git a/unix/xserver/hw/vnc/vncSelection.c b/unix/xserver/hw/vnc/vncSelection.c new file mode 100644 index 00000000..e50548a4 --- /dev/null +++ b/unix/xserver/hw/vnc/vncSelection.c @@ -0,0 +1,521 @@ +/* Copyright 2016 Pierre Ossman for Cendio AB + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#ifdef HAVE_DIX_CONFIG_H +#include <dix-config.h> +#endif + +#include <X11/Xatom.h> + +#include "propertyst.h" +#include "scrnintstr.h" +#include "selection.h" +#include "windowstr.h" +#include "xace.h" + +#include "xorg-version.h" + +#include "vncExtInit.h" +#include "vncSelection.h" +#include "RFBGlue.h" + +#define LOG_NAME "Selection" + +#define LOG_ERROR(...) vncLogError(LOG_NAME, __VA_ARGS__) +#define LOG_STATUS(...) vncLogStatus(LOG_NAME, __VA_ARGS__) +#define LOG_INFO(...) vncLogInfo(LOG_NAME, __VA_ARGS__) +#define LOG_DEBUG(...) vncLogDebug(LOG_NAME, __VA_ARGS__) + +static Atom xaPRIMARY, xaCLIPBOARD; +static Atom xaTARGETS, xaTIMESTAMP, xaSTRING, xaTEXT, xaUTF8_STRING; + +static WindowPtr pWindow; +static Window wid; + +static char* clientCutText; +static int clientCutTextLen; + +static int vncCreateSelectionWindow(void); +static int vncOwnSelection(Atom selection); +static int vncProcConvertSelection(ClientPtr client); +static int vncProcSendEvent(ClientPtr client); +static void vncSelectionCallback(CallbackListPtr *callbacks, + void * data, void * args); + +static int (*origProcConvertSelection)(ClientPtr); +static int (*origProcSendEvent)(ClientPtr); + +void vncSelectionInit(void) +{ + xaPRIMARY = MakeAtom("PRIMARY", 7, TRUE); + xaCLIPBOARD = MakeAtom("CLIPBOARD", 9, TRUE); + + xaTARGETS = MakeAtom("TARGETS", 7, TRUE); + xaTIMESTAMP = MakeAtom("TIMESTAMP", 9, TRUE); + xaSTRING = MakeAtom("STRING", 6, TRUE); + xaTEXT = MakeAtom("TEXT", 4, TRUE); + xaUTF8_STRING = MakeAtom("UTF8_STRING", 11, TRUE); + + /* There are no hooks for when these are internal windows, so + * override the relevant handlers. */ + origProcConvertSelection = ProcVector[X_ConvertSelection]; + ProcVector[X_ConvertSelection] = vncProcConvertSelection; + origProcSendEvent = ProcVector[X_SendEvent]; + ProcVector[X_SendEvent] = vncProcSendEvent; + + if (!AddCallback(&SelectionCallback, vncSelectionCallback, 0)) + FatalError("Add VNC SelectionCallback failed\n"); +} + +void vncClientCutText(const char* str, int len) +{ + int rc; + + if (clientCutText != NULL) + free(clientCutText); + + clientCutText = malloc(len); + if (clientCutText == NULL) { + LOG_ERROR("Could not allocate clipboard buffer"); + DeleteWindowFromAnySelections(pWindow); + return; + } + + memcpy(clientCutText, str, len); + clientCutTextLen = len; + + if (vncGetSetPrimary()) { + rc = vncOwnSelection(xaPRIMARY); + if (rc != Success) + LOG_ERROR("Could not set PRIMARY selection"); + } + + vncOwnSelection(xaCLIPBOARD); + if (rc != Success) + LOG_ERROR("Could not set CLIPBOARD selection"); +} + +static int vncCreateSelectionWindow(void) +{ + ScreenPtr pScreen; + int result; + + if (pWindow != NULL) + return Success; + + pScreen = screenInfo.screens[0]; + + wid = FakeClientID(0); + pWindow = CreateWindow(wid, pScreen->root, + 0, 0, 100, 100, 0, InputOnly, + 0, NULL, 0, serverClient, + CopyFromParent, &result); + if (!pWindow) + return result; + + if (!AddResource(pWindow->drawable.id, RT_WINDOW, pWindow)) + return BadAlloc; + + LOG_DEBUG("Created selection window"); + + return Success; +} + +static int vncOwnSelection(Atom selection) +{ + Selection *pSel; + int rc; + + SelectionInfoRec info; + + rc = vncCreateSelectionWindow(); + if (rc != Success) + return rc; + + rc = dixLookupSelection(&pSel, selection, serverClient, DixSetAttrAccess); + if (rc == Success) { + if (pSel->client && (pSel->client != serverClient)) { + xEvent event = { + .u.selectionClear.time = currentTime.milliseconds, + .u.selectionClear.window = pSel->window, + .u.selectionClear.atom = pSel->selection + }; + event.u.u.type = SelectionClear; + WriteEventsToClient(pSel->client, 1, &event); + } + } else if (rc == BadMatch) { + pSel = dixAllocateObjectWithPrivates(Selection, PRIVATE_SELECTION); + if (!pSel) + return BadAlloc; + + pSel->selection = selection; + + rc = XaceHookSelectionAccess(serverClient, &pSel, + DixCreateAccess | DixSetAttrAccess); + if (rc != Success) { + free(pSel); + return rc; + } + + pSel->next = CurrentSelections; + CurrentSelections = pSel; + } + else + return rc; + + pSel->lastTimeChanged = currentTime; + pSel->window = wid; + pSel->pWin = pWindow; + pSel->client = serverClient; + + LOG_DEBUG("Grabbed %s selection", NameForAtom(selection)); + + info.selection = pSel; + info.client = serverClient; + info.kind = SelectionSetOwner; + CallCallbacks(&SelectionCallback, &info); + + return Success; +} + +static int vncConvertSelection(ClientPtr client, Atom selection, + Atom target, Atom property, + Window requestor, TimeStamp time) +{ + Selection *pSel; + WindowPtr pWin; + int rc; + + Atom realProperty; + + xEvent event; + + LOG_DEBUG("Selection request for %s (type %s)", + NameForAtom(selection), NameForAtom(target)); + + rc = dixLookupSelection(&pSel, selection, client, DixGetAttrAccess); + if (rc != Success) + return rc; + + if (CompareTimeStamps(time, pSel->lastTimeChanged) != LATER) + return BadMatch; + + rc = dixLookupWindow(&pWin, requestor, client, DixSetAttrAccess); + if (rc != Success) + return rc; + + if (property != None) + realProperty = property; + else + realProperty = target; + + /* FIXME: MULTIPLE target */ + + if (target == xaTARGETS) { + Atom targets[] = { xaTARGETS, xaTIMESTAMP, + xaSTRING, xaTEXT, xaUTF8_STRING }; + + rc = ChangeWindowProperty(pWin, realProperty, XA_ATOM, 32, + PropModeReplace, + sizeof(targets)/sizeof(targets[0]), + targets, TRUE); + if (rc != Success) + return rc; + } else if (target == xaTIMESTAMP) { + rc = ChangeWindowProperty(pWin, realProperty, XA_INTEGER, 32, + PropModeReplace, 1, + &pSel->lastTimeChanged.milliseconds, + TRUE); + if (rc != Success) + return rc; + } else if ((target == xaSTRING) || (target == xaTEXT)) { + rc = ChangeWindowProperty(pWin, realProperty, XA_STRING, 8, + PropModeReplace, clientCutTextLen, + clientCutText, TRUE); + if (rc != Success) + return rc; + } else if (target == xaUTF8_STRING) { + unsigned char* buffer; + unsigned char* out; + size_t len; + + const unsigned char* in; + size_t in_len; + + buffer = malloc(clientCutTextLen*2); + if (buffer == NULL) + return BadAlloc; + + out = buffer; + len = 0; + in = clientCutText; + in_len = clientCutTextLen; + while (in_len > 0) { + if (*in & 0x80) { + *out++ = 0xc0 | (*in >> 6); + *out++ = 0x80 | (*in & 0x3f); + len += 2; + in++; + in_len--; + } else { + *out++ = *in++; + len++; + in_len--; + } + } + + rc = ChangeWindowProperty(pWin, realProperty, xaUTF8_STRING, 8, + PropModeReplace, len, buffer, TRUE); + free(buffer); + if (rc != Success) + return rc; + } else { + return BadMatch; + } + + event.u.u.type = SelectionNotify; + event.u.selectionNotify.time = time.milliseconds; + event.u.selectionNotify.requestor = requestor; + event.u.selectionNotify.selection = selection; + event.u.selectionNotify.target = target; + event.u.selectionNotify.property = property; + WriteEventsToClient(client, 1, &event); + return Success; +} + +static int vncProcConvertSelection(ClientPtr client) +{ + Bool paramsOkay; + WindowPtr pWin; + Selection *pSel; + int rc; + + REQUEST(xConvertSelectionReq); + REQUEST_SIZE_MATCH(xConvertSelectionReq); + + rc = dixLookupWindow(&pWin, stuff->requestor, client, DixSetAttrAccess); + if (rc != Success) + return rc; + + paramsOkay = ValidAtom(stuff->selection) && ValidAtom(stuff->target); + paramsOkay &= (stuff->property == None) || ValidAtom(stuff->property); + if (!paramsOkay) { + client->errorValue = stuff->property; + return BadAtom; + } + + rc = dixLookupSelection(&pSel, stuff->selection, client, DixReadAccess); + if (rc == Success && pSel->client == serverClient && + pSel->window == wid) { + TimeStamp time; + time = ClientTimeToServerTime(stuff->time); + rc = vncConvertSelection(client, stuff->selection, + stuff->target, stuff->property, + stuff->requestor, time); + if (rc != Success) { + xEvent event; + + memset(&event, 0, sizeof(xEvent)); + event.u.u.type = SelectionNotify; + event.u.selectionNotify.time = stuff->time; + event.u.selectionNotify.requestor = stuff->requestor; + event.u.selectionNotify.selection = stuff->selection; + event.u.selectionNotify.target = stuff->target; + event.u.selectionNotify.property = None; + WriteEventsToClient(client, 1, &event); + } + + return Success; + } + + return origProcConvertSelection(client); +} + +static void vncSelectionRequest(Atom selection, Atom target) +{ + Selection *pSel; + xEvent event; + int rc; + + rc = vncCreateSelectionWindow(); + if (rc != Success) + return; + + LOG_DEBUG("Requesting %s for %s selection", + NameForAtom(target), NameForAtom(selection)); + + rc = dixLookupSelection(&pSel, selection, serverClient, DixGetAttrAccess); + if (rc != Success) + return; + + event.u.u.type = SelectionRequest; + event.u.selectionRequest.owner = pSel->window; + event.u.selectionRequest.time = currentTime.milliseconds; + event.u.selectionRequest.requestor = wid; + event.u.selectionRequest.selection = selection; + event.u.selectionRequest.target = target; + event.u.selectionRequest.property = target; + WriteEventsToClient(pSel->client, 1, &event); +} + +static Bool vncHasAtom(Atom atom, const Atom list[], size_t size) +{ + size_t i; + + for (i = 0;i < size;i++) { + if (list[i] == atom) + return TRUE; + } + + return FALSE; +} + +static void vncHandleSelection(Atom selection, Atom target, + Atom property, Atom requestor, + TimeStamp time) +{ + PropertyPtr prop; + int rc; + + rc = dixLookupProperty(&prop, pWindow, property, + serverClient, DixReadAccess); + if (rc != Success) + return; + + LOG_DEBUG("Selection notification for %s (target %s, property %s, type %s)", + NameForAtom(selection), NameForAtom(target), + NameForAtom(property), NameForAtom(prop->type)); + + if (target != property) + return; + + if (target == xaTARGETS) { + if (prop->format != 32) + return; + if (prop->type != XA_ATOM) + return; + + if (vncHasAtom(xaSTRING, (const Atom*)prop->data, prop->size)) + vncSelectionRequest(selection, xaSTRING); + else if (vncHasAtom(xaUTF8_STRING, (const Atom*)prop->data, prop->size)) + vncSelectionRequest(selection, xaUTF8_STRING); + } else if (target == xaSTRING) { + if (prop->format != 8) + return; + if (prop->type != xaSTRING) + return; + + vncServerCutText(prop->data, prop->size); + } else if (target == xaUTF8_STRING) { + unsigned char* buffer; + unsigned char* out; + size_t len; + + const unsigned char* in; + size_t in_len; + + if (prop->format != 8) + return; + if (prop->type != xaUTF8_STRING) + return; + + buffer = malloc(prop->size); + if (buffer == NULL) + return; + + out = buffer; + len = 0; + in = prop->data; + in_len = prop->size; + while (in_len > 0) { + if ((*in & 0x80) == 0x00) { + *out++ = *in++; + len++; + in_len--; + } else if ((*in & 0xe0) == 0xc0) { + unsigned ucs; + ucs = (*in++ & 0x1f) << 6; + in_len--; + if (in_len > 0) { + ucs |= (*in++ & 0x3f); + in_len--; + } + if (ucs <= 0xff) + *out++ = ucs; + else + *out++ = '?'; + len++; + } else { + *out++ = '?'; + len++; + do { + in++; + in_len--; + } while ((in_len > 0) && ((*in & 0xc0) == 0x80)); + } + } + + vncServerCutText((const char*)buffer, len); + + free(buffer); + } +} + +#define SEND_EVENT_BIT 0x80 + +static int vncProcSendEvent(ClientPtr client) +{ + REQUEST(xSendEventReq); + REQUEST_SIZE_MATCH(xSendEventReq); + + stuff->event.u.u.type &= ~(SEND_EVENT_BIT); + + if (stuff->event.u.u.type == SelectionNotify && + stuff->event.u.selectionNotify.requestor == wid) { + TimeStamp time; + time = ClientTimeToServerTime(stuff->event.u.selectionNotify.time); + vncHandleSelection(stuff->event.u.selectionNotify.selection, + stuff->event.u.selectionNotify.target, + stuff->event.u.selectionNotify.property, + stuff->event.u.selectionNotify.requestor, + time); + } + + return origProcSendEvent(client); +} + +static void vncSelectionCallback(CallbackListPtr *callbacks, + void * data, void * args) +{ + SelectionInfoRec *info = (SelectionInfoRec *) args; + + if (info->kind != SelectionSetOwner) + return; + if (info->client == serverClient) + return; + + if ((info->selection->selection != xaPRIMARY) && + (info->selection->selection != xaCLIPBOARD)) + return; + + if ((info->selection->selection == xaPRIMARY) && + !vncGetSendPrimary()) + return; + + vncSelectionRequest(info->selection->selection, xaTARGETS); +} diff --git a/common/rfb/Threading.h b/unix/xserver/hw/vnc/vncSelection.h index 66b3aa0f..969f8958 100644 --- a/common/rfb/Threading.h +++ b/unix/xserver/hw/vnc/vncSelection.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. +/* Copyright 2016 Pierre Ossman for Cendio AB * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,17 +15,19 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, * USA. */ +#ifndef __SELECTION_H__ +#define __SELECTION_H__ -// -=- Threading.h -// General purpose threading interface. -// If the current platform supports threading then __RFB_THREADING_IMPL -// will be defined after this header has been included. +#ifdef __cplusplus +extern "C" { +#endif + +void vncSelectionInit(void); -#ifndef __RFB_THREADING_H__ -#define __RFB_THREADING_H__ +void vncClientCutText(const char* str, int len); -#ifdef WIN32 -#include <rfb_win32/Threading.h> +#ifdef __cplusplus +} #endif -#endif // __RFB_THREADING_H__ +#endif diff --git a/unix/xserver/hw/vnc/xorg-version.h b/unix/xserver/hw/vnc/xorg-version.h index 60610cbd..9d1c0eb8 100644 --- a/unix/xserver/hw/vnc/xorg-version.h +++ b/unix/xserver/hw/vnc/xorg-version.h @@ -50,8 +50,10 @@ #define XORG 117 #elif XORG_VERSION_CURRENT < ((1 * 10000000) + (18 * 100000) + (99 * 1000)) #define XORG 118 +#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (19 * 100000) + (99 * 1000)) +#define XORG 119 #else -#error "X.Org newer than 1.18 is not supported" +#error "X.Org newer than 1.19 is not supported" #endif #endif diff --git a/unix/xserver/hw/vnc/xvnc.c b/unix/xserver/hw/vnc/xvnc.c index 57098930..c5b684de 100644 --- a/unix/xserver/hw/vnc/xvnc.c +++ b/unix/xserver/hw/vnc/xvnc.c @@ -85,7 +85,7 @@ from the X Consortium. #include "version-config.h" #include "site.h" -#define XVNCVERSION "TigerVNC 1.6.80" +#define XVNCVERSION "TigerVNC 1.7.80" #define XVNCCOPYRIGHT ("Copyright (C) 1999-2016 TigerVNC Team and many others (see README.txt)\n" \ "See http://www.tigervnc.org for information on TigerVNC.\n") @@ -854,6 +854,40 @@ vfbFreeFramebufferMemory(vfbFramebufferInfoPtr pfb) static Bool vfbCursorOffScreen (ScreenPtr *ppScreen, int *x, int *y) { + int absX, absY; + int i; + + if (screenInfo.numScreens == 1) + return FALSE; + + if ((*x >= 0) && (*x < (*ppScreen)->width) && + (*y >= 0) && (*y < (*ppScreen)->height)) + return FALSE; + + absX = *x + (*ppScreen)->x; + absY = *y + (*ppScreen)->y; + + for (i = 0;i < screenInfo.numScreens;i++) { + ScreenPtr newScreen; + + newScreen = screenInfo.screens[i]; + + if (absX < newScreen->x) + continue; + if (absY < newScreen->y) + continue; + if (absX >= (newScreen->x + newScreen->width)) + continue; + if (absY >= (newScreen->y + newScreen->height)) + continue; + + *ppScreen = newScreen; + *x = absX - newScreen->x; + *y = absY - newScreen->y; + + return TRUE; + } + return FALSE; } @@ -1456,11 +1490,10 @@ vfbScreenInit(int index, ScreenPtr pScreen, int argc, char **argv) vfbScreenInit(ScreenPtr pScreen, int argc, char **argv) #endif { -#if XORG < 113 - vfbScreenInfoPtr pvfb = &vfbScreens[index]; -#else - vfbScreenInfoPtr pvfb = &vfbScreens[pScreen->myNum]; +#if XORG >= 113 + int index = pScreen->myNum; #endif + vfbScreenInfoPtr pvfb = &vfbScreens[index]; int dpi; int ret; void *pbits; @@ -1481,13 +1514,8 @@ vfbScreenInit(ScreenPtr pScreen, int argc, char **argv) pbits = vfbAllocateFramebufferMemory(&pvfb->fb); if (!pbits) return FALSE; -#if XORG < 113 vncFbptr[index] = pbits; vncFbstride[index] = pvfb->fb.paddedWidth; -#else - vncFbptr[pScreen->myNum] = pbits; - vncFbstride[pScreen->myNum] = pvfb->fb.paddedWidth; -#endif miSetPixmapDepths(); @@ -1524,6 +1552,12 @@ vfbScreenInit(ScreenPtr pScreen, int argc, char **argv) return FALSE; } + if (index > 0) { + ScreenPtr prevScreen = screenInfo.screens[index-1]; + pScreen->x = prevScreen->x + prevScreen->width; + pScreen->y = 0; + } + ret = fbScreenInit(pScreen, pbits, pvfb->fb.width, pvfb->fb.height, dpi, dpi, pvfb->fb.paddedWidth, pvfb->fb.bitsPerPixel); diff --git a/unix/xserver113.patch b/unix/xserver113.patch index da0d590d..85ab2846 100644 --- a/unix/xserver113.patch +++ b/unix/xserver113.patch @@ -74,7 +74,7 @@ diff -up xserver/mi/miinitext.c.vnc xserver/mi/miinitext.c #include "globals.h" +#ifdef TIGERVNC -+extern void vncExtensionInit(INITARGS); ++extern void vncExtensionInit(void); +#endif + /* The following is only a small first step towards run-time diff --git a/unix/xserver114.patch b/unix/xserver114.patch index 81b1c709..2bfc8fff 100644 --- a/unix/xserver114.patch +++ b/unix/xserver114.patch @@ -66,7 +66,7 @@ diff -up xserver/mi/miinitext.c.vnc xserver/mi/miinitext.c #include "globals.h" +#ifdef TIGERVNC -+extern void vncExtensionInit(INITARGS); ++extern void vncExtensionInit(void); +#endif + /* The following is only a small first step towards run-time diff --git a/unix/xserver115.patch b/unix/xserver115.patch index 479039d7..31260208 100644 --- a/unix/xserver115.patch +++ b/unix/xserver115.patch @@ -66,7 +66,7 @@ diff -up xserver/mi/miinitext.c.vnc xserver/mi/miinitext.c #include "globals.h" +#ifdef TIGERVNC -+extern void vncExtensionInit(INITARGS); ++extern void vncExtensionInit(void); +#endif + /* The following is only a small first step towards run-time diff --git a/unix/xserver116.patch b/unix/xserver116.patch index d870ef7a..2edcd307 100644 --- a/unix/xserver116.patch +++ b/unix/xserver116.patch @@ -66,7 +66,7 @@ diff -up xorg-server-1.16.0/mi/miinitext.c.vnc xorg-server-1.16.0/mi/miinitext.c #include "globals.h" +#ifdef TIGERVNC -+extern void vncExtensionInit(INITARGS); ++extern void vncExtensionInit(void); +#endif + /* The following is only a small first step towards run-time diff --git a/unix/xserver117.patch b/unix/xserver117.patch index 8a21040c..f4cb94c3 100644 --- a/unix/xserver117.patch +++ b/unix/xserver117.patch @@ -66,7 +66,7 @@ diff -up xorg-server-1.17.1/mi/miinitext.c.vnc xorg-server-1.17.1/mi/miinitext.c #include "globals.h" +#ifdef TIGERVNC -+extern void vncExtensionInit(INITARGS); ++extern void vncExtensionInit(void); +#endif + /* The following is only a small first step towards run-time diff --git a/unix/xserver118.patch b/unix/xserver118.patch index 286a37bc..1c03317f 100644 --- a/unix/xserver118.patch +++ b/unix/xserver118.patch @@ -65,7 +65,7 @@ diff -ur xorg-server.orig/mi/miinitext.c xorg-server/mi/miinitext.c #include "globals.h" +#ifdef TIGERVNC -+extern void vncExtensionInit(INITARGS); ++extern void vncExtensionInit(void); +#endif + /* The following is only a small first step towards run-time diff --git a/unix/xserver119.patch b/unix/xserver119.patch new file mode 100644 index 00000000..614f104a --- /dev/null +++ b/unix/xserver119.patch @@ -0,0 +1,95 @@ +diff -up xserver/configure.ac.xserver116-rebased xserver/configure.ac +--- xserver/configure.ac.xserver116-rebased 2016-09-29 13:14:45.595441590 +0200 ++++ xserver/configure.ac 2016-09-29 13:14:45.631442006 +0200 +@@ -74,6 +74,7 @@ dnl forcing an entire recompile.x + AC_CONFIG_HEADERS(include/version-config.h) + + AM_PROG_AS ++AC_PROG_CXX + AC_PROG_LN_S + LT_PREREQ([2.2]) + LT_INIT([disable-static win32-dll]) +@@ -1863,6 +1864,10 @@ if test "x$XVFB" = xyes; then + AC_SUBST([XVFB_SYS_LIBS]) + fi + ++dnl Xvnc DDX ++AC_SUBST([XVNC_CPPFLAGS], ["-DHAVE_DIX_CONFIG_H $XSERVER_CFLAGS"]) ++AC_SUBST([XVNC_LIBS], ["$FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $DRI3_LIB $PRESENT_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $MAIN_LIB"]) ++AC_SUBST([XVNC_SYS_LIBS], ["$GLX_SYS_LIBS"]) + + dnl Xnest DDX + +@@ -1898,6 +1903,8 @@ if test "x$XORG" = xauto; then + fi + AC_MSG_RESULT([$XORG]) + ++AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version]) ++ + if test "x$XORG" = xyes; then + XORG_DDXINCS='-I$(top_srcdir)/hw/xfree86 -I$(top_srcdir)/hw/xfree86/include -I$(top_srcdir)/hw/xfree86/common' + XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os' +@@ -2116,7 +2123,6 @@ if test "x$XORG" = xyes; then + AC_DEFINE(XORG_SERVER, 1, [Building Xorg server]) + AC_DEFINE(XORGSERVER, 1, [Building Xorg server]) + AC_DEFINE(XFree86Server, 1, [Building XFree86 server]) +- AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version]) + AC_DEFINE(NEED_XF86_TYPES, 1, [Need XFree86 typedefs]) + AC_DEFINE(NEED_XF86_PROTOTYPES, 1, [Need XFree86 helper functions]) + AC_DEFINE(__XSERVERNAME__, "Xorg", [Name of X server]) +@@ -2691,6 +2697,7 @@ hw/dmx/Makefile + hw/dmx/man/Makefile + hw/vfb/Makefile + hw/vfb/man/Makefile ++hw/vnc/Makefile + hw/xnest/Makefile + hw/xnest/man/Makefile + hw/xwin/Makefile +diff -up xserver/hw/Makefile.am.xserver116-rebased xserver/hw/Makefile.am +--- xserver/hw/Makefile.am.xserver116-rebased 2016-09-29 13:14:45.601441659 +0200 ++++ xserver/hw/Makefile.am 2016-09-29 13:14:45.631442006 +0200 +@@ -38,7 +38,8 @@ SUBDIRS = \ + $(DMX_SUBDIRS) \ + $(KDRIVE_SUBDIRS) \ + $(XQUARTZ_SUBDIRS) \ +- $(XWAYLAND_SUBDIRS) ++ $(XWAYLAND_SUBDIRS) \ ++ vnc + + DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xwayland + +diff -up xserver/mi/miinitext.c.xserver116-rebased xserver/mi/miinitext.c +--- xserver/mi/miinitext.c.xserver116-rebased 2016-09-29 13:14:45.618441855 +0200 ++++ xserver/mi/miinitext.c 2016-09-29 13:14:45.631442006 +0200 +@@ -114,6 +114,10 @@ SOFTWARE. + #include "micmap.h" + #include "globals.h" + ++#ifdef TIGERVNC ++extern void vncExtensionInit(INITARGS); ++#endif ++ + /* The following is only a small first step towards run-time + * configurable extensions. + */ +@@ -238,6 +242,9 @@ EnableDisableExtensionError(const char * + + /* List of built-in (statically linked) extensions */ + static const ExtensionModule staticExtensions[] = { ++#ifdef TIGERVNC ++ {vncExtensionInit, "VNC-EXTENSION", NULL}, ++#endif + {GEExtensionInit, "Generic Event Extension", &noGEExtension}, + {ShapeExtensionInit, "SHAPE", NULL}, + #ifdef MITSHM +--- xserver/include/os.h~ 2016-10-03 09:07:29.000000000 +0200 ++++ xserver/include/os.h 2016-10-03 14:13:00.013654506 +0200 +@@ -621,7 +621,7 @@ + extern _X_EXPORT void + LogClose(enum ExitCode error); + extern _X_EXPORT Bool +-LogSetParameter(LogParameter param, int value); ++LogSetParameter(enum _LogParameter param, int value); + extern _X_EXPORT void + LogVWrite(int verb, const char *f, va_list args) + _X_ATTRIBUTE_PRINTF(2, 0); diff --git a/vncviewer/vncviewer.man b/vncviewer/vncviewer.man index 9ee616dc..d6a3708f 100644 --- a/vncviewer/vncviewer.man +++ b/vncviewer/vncviewer.man @@ -280,7 +280,10 @@ respectively. .SH FILES .TP $HOME/.vnc/default.tigervnc -Default configuration options. +Default configuration options. This file must have a "magic" first line of +"TigerVNC Configuration file Version 1.0" (without quotes), followed by simple +<setting>=<value> pairs of your choosing. The available settings are those +shown in this man page. .TP $HOME/.vnc/x509_ca.pem Default CA certificate for authenticating servers. diff --git a/win/rfb_win32/CMakeLists.txt b/win/rfb_win32/CMakeLists.txt index 047b0d86..305247a8 100644 --- a/win/rfb_win32/CMakeLists.txt +++ b/win/rfb_win32/CMakeLists.txt @@ -22,7 +22,6 @@ set(RFB_WIN32_SOURCES SInput.cxx SocketManager.cxx TCharArray.cxx - Threading.cxx TsSessions.cxx Win32Util.cxx WMCursor.cxx diff --git a/win/rfb_win32/Clipboard.h b/win/rfb_win32/Clipboard.h index 498f75fe..3da7bfca 100644 --- a/win/rfb_win32/Clipboard.h +++ b/win/rfb_win32/Clipboard.h @@ -25,7 +25,6 @@ #define __RFB_WIN32_CLIPBOARD_H__ #include <rfb/SDesktop.h> -#include <rfb/Threading.h> #include <rfb_win32/MsgWindow.h> #include <rfb_win32/DeviceFrameBuffer.h> diff --git a/win/rfb_win32/RegConfig.cxx b/win/rfb_win32/RegConfig.cxx index 30cb3102..5c89e780 100644 --- a/win/rfb_win32/RegConfig.cxx +++ b/win/rfb_win32/RegConfig.cxx @@ -85,30 +85,29 @@ void RegConfig::processEvent(HANDLE event_) { } -RegConfigThread::RegConfigThread() : Thread("RegConfigThread"), config(&eventMgr) { +RegConfigThread::RegConfigThread() : config(&eventMgr), thread_id(-1) { } RegConfigThread::~RegConfigThread() { - join(); + PostThreadMessage(thread_id, WM_QUIT, 0, 0); + wait(); } bool RegConfigThread::start(const HKEY rootKey, const TCHAR* keyname) { if (config.setKey(rootKey, keyname)) { Thread::start(); + while (thread_id == (DWORD)-1) + Sleep(0); return true; } return false; } -void RegConfigThread::run() { +void RegConfigThread::worker() { DWORD result = 0; MSG msg; + thread_id = GetCurrentThreadId(); while ((result = eventMgr.getMessage(&msg, 0, 0, 0)) > 0) {} if (result < 0) throw rdr::SystemException("RegConfigThread failed", GetLastError()); } - -Thread* RegConfigThread::join() { - PostThreadMessage(getThreadId(), WM_QUIT, 0, 0); - return Thread::join(); -} diff --git a/win/rfb_win32/RegConfig.h b/win/rfb_win32/RegConfig.h index e9c01b1d..c092090d 100644 --- a/win/rfb_win32/RegConfig.h +++ b/win/rfb_win32/RegConfig.h @@ -24,7 +24,8 @@ #ifndef __RFB_WIN32_REG_CONFIG_H__ #define __RFB_WIN32_REG_CONFIG_H__ -#include <rfb/Threading.h> +#include <os/Thread.h> + #include <rfb/Configuration.h> #include <rfb_win32/Registry.h> #include <rfb_win32/EventManager.h> @@ -63,7 +64,7 @@ namespace rfb { RegKey key; }; - class RegConfigThread : Thread { + class RegConfigThread : os::Thread { public: RegConfigThread(); ~RegConfigThread(); @@ -71,10 +72,10 @@ namespace rfb { // Start the thread, reading from the specified key bool start(const HKEY rootkey, const TCHAR* keyname); protected: - void run(); - Thread* join(); + virtual void worker(); EventManager eventMgr; RegConfig config; + DWORD thread_id; }; }; diff --git a/win/rfb_win32/Service.cxx b/win/rfb_win32/Service.cxx index d054ce4d..719c44b6 100644 --- a/win/rfb_win32/Service.cxx +++ b/win/rfb_win32/Service.cxx @@ -22,7 +22,7 @@ #include <rfb_win32/MsgWindow.h> #include <rfb_win32/ModuleFileName.h> #include <rfb_win32/Registry.h> -#include <rfb/Threading.h> +#include <rfb_win32/Handle.h> #include <logmessages/messages.h> #include <rdr/Exception.h> #include <rfb/LogWriter.h> diff --git a/win/rfb_win32/Threading.cxx b/win/rfb_win32/Threading.cxx deleted file mode 100644 index 5873b58f..00000000 --- a/win/rfb_win32/Threading.cxx +++ /dev/null @@ -1,151 +0,0 @@ -/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. - * - * This is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - */ - -// -=- Threading.cxx -// Win32 Threading interface implementation - -#include <malloc.h> - -#include <rdr/Exception.h> -#include <rfb/LogWriter.h> -#include <rfb/util.h> -#include <rfb_win32/Threading.h> - -using namespace rfb; - -static LogWriter vlog("Threading"); - -static DWORD threadStorage = TlsAlloc(); - - -inline void logAction(Thread* t, const char* action) { - vlog.debug("%-16.16s %s(%p)", action, t->getName(), t); -} - -inline void logError(Thread* t, const char* err) { - vlog.error("%-16.16s %s(%p):%s", "failed", t->getName(), t, err); -} - - -DWORD WINAPI -Thread::threadProc(LPVOID lpParameter) { - Thread* thread = (Thread*) lpParameter; - TlsSetValue(threadStorage, thread); - logAction(thread, "started"); - try { - thread->run(); - logAction(thread, "stopped"); - } catch (rdr::Exception& e) { - logError(thread, e.str()); - } - bool deleteThread = false; - { - Lock l(thread->mutex); - thread->state = ThreadStopped; - thread->sig->signal(); - deleteThread = thread->deleteAfterRun; - } - if (deleteThread) - delete thread; - return 0; -} - -Thread::Thread(const char* name_) : name(strDup(name_ ? name_ : "Unnamed")), sig(0), deleteAfterRun(false) { - sig = new Condition(mutex); - cond_event.h = CreateEvent(NULL, TRUE, FALSE, NULL); - thread.h = CreateThread(NULL, 0, threadProc, this, CREATE_SUSPENDED, &thread_id); - state = ThreadCreated; - logAction(this, "created"); -} - -Thread::Thread(HANDLE thread_, DWORD thread_id_) : - thread(thread_), thread_id(thread_id_), name(strDup("Native")), sig(0), deleteAfterRun(false) { - cond_event.h = CreateEvent(NULL, TRUE, FALSE, NULL); - state = ThreadNative; - logAction(this, "created"); -} - -Thread::~Thread() { - logAction(this, "destroying"); - if (!deleteAfterRun && state != ThreadNative) - this->join(); - if (sig) - delete sig; - logAction(this, "destroyed"); -} - -void -Thread::run() { -} - -void -Thread::start() { - Lock l(mutex); - if (state == ThreadCreated) { - state = ThreadStarted; - sig->signal(); - ResumeThread(thread); - } -} - -Thread* -Thread::join() { - if (deleteAfterRun) - throw rdr::Exception("attempt to join() with deleteAfterRun thread"); - Lock l(mutex); - if (state == ThreadJoined) { - logAction(this, "already joined"); - } else { - logAction(this, "joining"); - while (state == ThreadStarted) { - sig->wait(); - logAction(this, "checking"); - } - state = ThreadJoined; - logAction(this, "joined"); - } - return this; -} - -const char* -Thread::getName() const { - return name.buf; -} - -ThreadState -Thread::getState() const { - return state; -} - -unsigned long -Thread::getThreadId() const { - return thread_id; -} - - -Thread* -Thread::self() { - Thread* thread = (Thread*) TlsGetValue(threadStorage); - if (!thread) { - // *** memory leak - could use GetExitCodeThread to lazily detect when - // to clean up native thread objects - thread = new Thread(GetCurrentThread(), GetCurrentThreadId()); - TlsSetValue(threadStorage, thread); - } - return thread; -} diff --git a/win/rfb_win32/Threading.h b/win/rfb_win32/Threading.h deleted file mode 100644 index 70bef416..00000000 --- a/win/rfb_win32/Threading.h +++ /dev/null @@ -1,155 +0,0 @@ -/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. - * - * This is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - */ - -// -=- Threading_win32.h -// Win32 Threading interface implementation - -#ifndef __RFB_THREADING_IMPL_WIN32 -#define __RFB_THREADING_IMPL_WIN32 - -#define __RFB_THREADING_IMPL WIN32 - -#include <rfb_win32/Handle.h> -#include <rfb/util.h> -#include <rdr/Exception.h> -//#include <stdio.h> - - -namespace rfb { - class Condition; - - class Mutex { - public: - Mutex() { - InitializeCriticalSection(&crit); - } - ~Mutex() { - DeleteCriticalSection(&crit); - } - friend class Lock; - friend class Condition; - protected: - void enter() {EnterCriticalSection(&crit);} - void exit() {LeaveCriticalSection(&crit);} - CRITICAL_SECTION crit; - }; - - class Lock { - public: - Lock(Mutex& m) : mutex(m) {m.enter();} - ~Lock() {mutex.exit();} - protected: - Mutex& mutex; - }; - - enum ThreadState {ThreadCreated, ThreadStarted, ThreadStopped, ThreadJoined, ThreadNative}; - - class Thread { - public: - Thread(const char* name_=0); - virtual ~Thread(); - - virtual void run(); - - virtual void start(); - virtual Thread* join(); - - const char* getName() const; - ThreadState getState() const; - - // Determines whether the thread should delete itself when run() returns - // If you set this, you must NEVER call join()! - void setDeleteAfterRun() {deleteAfterRun = true;}; - - unsigned long getThreadId() const; - - static Thread* self(); - - friend class Condition; - - protected: - Thread(HANDLE thread_, DWORD thread_id_); - static DWORD WINAPI threadProc(LPVOID lpParameter); - - win32::Handle thread; - DWORD thread_id; - CharArray name; - ThreadState state; - Condition* sig; - Mutex mutex; - - win32::Handle cond_event; - Thread* cond_next; - - bool deleteAfterRun; - }; - - class Condition { - public: - Condition(Mutex& m) : mutex(m), waiting(0) { - } - ~Condition() { - } - - // Wake up the specified number of threads that are waiting - // on this Condition, or all of them if -1 is specified. - void signal(int howMany=1) { - Lock l(cond_lock); - while (waiting && howMany!=0) { - SetEvent(waiting->cond_event); - waiting = waiting->cond_next; - if (howMany>0) --howMany; - } - } - - // NB: Must hold "mutex" to call wait() - // Wait until either the Condition is signalled or the timeout - // expires. - void wait(DWORD timeout=INFINITE) { - Thread* self = Thread::self(); - ResetEvent(self->cond_event); - { Lock l(cond_lock); - self->cond_next = waiting; - waiting = self; - } - mutex.exit(); - DWORD result = WaitForSingleObject(self->cond_event, timeout); - mutex.enter(); - if (result == WAIT_TIMEOUT) { - Lock l(cond_lock); - // Remove this thread from the Condition - for (Thread** removeFrom = &waiting; *removeFrom; removeFrom = &(*removeFrom)->cond_next) { - if (*removeFrom == self) { - *removeFrom = self->cond_next; - break; - } - } - } else if (result == WAIT_FAILED) { - throw rdr::SystemException("failed to wait on Condition", GetLastError()); - } - } - - protected: - Mutex& mutex; - Mutex cond_lock; - Thread* waiting; - }; - -}; - -#endif // __RFB_THREADING_IMPL diff --git a/win/rfb_win32/WMHooks.cxx b/win/rfb_win32/WMHooks.cxx index 0e5e70a4..bbc15088 100644 --- a/win/rfb_win32/WMHooks.cxx +++ b/win/rfb_win32/WMHooks.cxx @@ -18,11 +18,13 @@ // -=- WMHooks.cxx +#include <os/Mutex.h> +#include <os/Thread.h> + #include <rfb_win32/WMHooks.h> #include <rfb_win32/Service.h> #include <rfb_win32/MsgWindow.h> #include <rfb_win32/IntervalTimer.h> -#include <rfb/Threading.h> #include <rfb/LogWriter.h> #include <list> @@ -108,20 +110,21 @@ error: } -class WMHooksThread : public Thread { +class WMHooksThread : public os::Thread { public: - WMHooksThread() : Thread("WMHookThread"), - active(true) { - } - virtual void run(); - virtual Thread* join(); + WMHooksThread() : active(true), thread_id(-1) { } + void stop(); + DWORD getThreadId() { return thread_id; } +protected: + virtual void worker(); protected: bool active; + DWORD thread_id; }; static WMHooksThread* hook_mgr = 0; static std::list<WMHooks*> hooks; -static Mutex hook_mgr_lock; +static os::Mutex hook_mgr_lock; static bool StartHookThread() { @@ -131,15 +134,17 @@ static bool StartHookThread() { return false; vlog.debug("creating thread"); hook_mgr = new WMHooksThread(); + hook_mgr->start(); + while (hook_mgr->getThreadId() == (DWORD)-1) + Sleep(0); vlog.debug("installing hooks"); if (!WM_Hooks_Install(hook_mgr->getThreadId(), 0)) { vlog.error("failed to initialise hooks"); - delete hook_mgr->join(); + hook_mgr->stop(); + delete hook_mgr; hook_mgr = 0; return false; } - vlog.debug("starting thread"); - hook_mgr->start(); return true; } @@ -149,14 +154,15 @@ static void StopHookThread() { if (!hooks.empty()) return; vlog.debug("closing thread"); - delete hook_mgr->join(); + hook_mgr->stop(); + delete hook_mgr; hook_mgr = 0; } static bool AddHook(WMHooks* hook) { vlog.debug("adding hook"); - Lock l(hook_mgr_lock); + os::AutoMutex a(&hook_mgr_lock); if (!StartHookThread()) return false; hooks.push_back(hook); @@ -166,7 +172,7 @@ static bool AddHook(WMHooks* hook) { static bool RemHook(WMHooks* hook) { { vlog.debug("removing hook"); - Lock l(hook_mgr_lock); + os::AutoMutex a(&hook_mgr_lock); hooks.remove(hook); } StopHookThread(); @@ -174,7 +180,7 @@ static bool RemHook(WMHooks* hook) { } static void NotifyHooksRegion(const Region& r) { - Lock l(hook_mgr_lock); + os::AutoMutex a(&hook_mgr_lock); std::list<WMHooks*>::iterator i; for (i=hooks.begin(); i!=hooks.end(); i++) (*i)->NotifyHooksRegion(r); @@ -182,7 +188,7 @@ static void NotifyHooksRegion(const Region& r) { void -WMHooksThread::run() { +WMHooksThread::worker() { // Obtain message ids for all supported hook messages UINT windowMsg = WM_Hooks_WindowChanged(); UINT clientAreaMsg = WM_Hooks_WindowClientAreaChanged(); @@ -208,6 +214,8 @@ WMHooksThread::run() { vlog.debug("starting hook thread"); + thread_id = GetCurrentThreadId(); + while (active && GetMessage(&msg, NULL, 0, 0)) { count++; @@ -283,13 +291,13 @@ WMHooksThread::run() { WM_Hooks_Remove(getThreadId()); } -Thread* -WMHooksThread::join() { +void +WMHooksThread::stop() { vlog.debug("stopping WMHooks thread"); active = false; PostThreadMessage(thread_id, WM_QUIT, 0, 0); - vlog.debug("joining WMHooks thread"); - return Thread::join(); + vlog.debug("waiting for WMHooks thread"); + wait(); } // -=- WMHooks class @@ -311,7 +319,7 @@ bool rfb::win32::WMHooks::setEvent(HANDLE ue) { bool rfb::win32::WMHooks::getUpdates(UpdateTracker* ut) { if (!updatesReady) return false; - Lock l(hook_mgr_lock); + os::AutoMutex a(&hook_mgr_lock); updates.copyTo(ut); updates.clear(); updatesReady = false; @@ -363,12 +371,12 @@ static bool blockRealInputs(bool block_) { return block_ == blocking; } -Mutex blockMutex; -int blockCount = 0; +static os::Mutex blockMutex; +static int blockCount = 0; bool rfb::win32::WMBlockInput::blockInputs(bool on) { if (active == on) return true; - Lock l(blockMutex); + os::AutoMutex a(&blockMutex); int newCount = on ? blockCount+1 : blockCount-1; if (!blockRealInputs(newCount > 0)) return false; diff --git a/win/rfb_win32/WMNotifier.h b/win/rfb_win32/WMNotifier.h index ada45d09..3855430b 100644 --- a/win/rfb_win32/WMNotifier.h +++ b/win/rfb_win32/WMNotifier.h @@ -28,7 +28,6 @@ #define __RFB_WIN32_NOTIFIER_H__ #include <rfb/SDesktop.h> -#include <rfb/Threading.h> #include <rfb_win32/MsgWindow.h> #include <rfb_win32/DeviceFrameBuffer.h> #include <rfb_win32/SInput.h> diff --git a/win/winvnc/QueryConnectDialog.cxx b/win/winvnc/QueryConnectDialog.cxx index 8e506966..103621ee 100644 --- a/win/winvnc/QueryConnectDialog.cxx +++ b/win/winvnc/QueryConnectDialog.cxx @@ -41,7 +41,7 @@ static IntParameter timeout("QueryConnectTimeout", QueryConnectDialog::QueryConnectDialog(network::Socket* sock_, const char* userName_, VNCServerWin32* s) -: Thread("QueryConnectDialog"), Dialog(GetModuleHandle(0)), +: Dialog(GetModuleHandle(0)), sock(sock_), approve(false), server(s) { peerIp.buf = sock->getPeerAddress(); userName.buf = strDup(userName_); @@ -54,7 +54,7 @@ void QueryConnectDialog::startDialog() { // - Thread overrides -void QueryConnectDialog::run() { +void QueryConnectDialog::worker() { countdown = timeout; try { if (desktopChangeRequired() && !changeDesktop()) diff --git a/win/winvnc/QueryConnectDialog.h b/win/winvnc/QueryConnectDialog.h index b28de198..de5e31ee 100644 --- a/win/winvnc/QueryConnectDialog.h +++ b/win/winvnc/QueryConnectDialog.h @@ -21,24 +21,26 @@ #ifndef __WINVNC_QUERY_CONNECT_DIALOG_H__ #define __WINVNC_QUERY_CONNECT_DIALOG_H__ -#include <rfb/Threading.h> #include <rfb_win32/Dialog.h> #include <rfb/util.h> +namespace os { class Thread; } + namespace network { class Socket; } namespace winvnc { class VNCServerWin32; - class QueryConnectDialog : public rfb::Thread, rfb::win32::Dialog { + class QueryConnectDialog : public os::Thread, rfb::win32::Dialog { public: QueryConnectDialog(network::Socket* sock, const char* userName, VNCServerWin32* s); virtual void startDialog(); - virtual void run(); network::Socket* getSock() {return sock;} bool isAccepted() const {return approve;} protected: + // Thread methods + virtual void worker(); // Dialog methods (protected) virtual void initDialog(); diff --git a/win/winvnc/STrayIcon.cxx b/win/winvnc/STrayIcon.cxx index 762a56af..05a38d6e 100644 --- a/win/winvnc/STrayIcon.cxx +++ b/win/winvnc/STrayIcon.cxx @@ -22,14 +22,19 @@ #include <winvnc/VNCServerService.h> #include <winvnc/resource.h> +#include <os/Mutex.h> +#include <os/Thread.h> + #include <rfb/LogWriter.h> #include <rfb/Configuration.h> + #include <rfb_win32/LaunchProcess.h> #include <rfb_win32/TrayIcon.h> #include <rfb_win32/AboutDialog.h> #include <rfb_win32/MsgBox.h> #include <rfb_win32/Service.h> #include <rfb_win32/CurrentUser.h> + #include <winvnc/ControlPanel.h> using namespace rfb; @@ -209,7 +214,7 @@ public: case WM_SET_TOOLTIP: { - rfb::Lock l(thread.lock); + os::AutoMutex a(thread.lock); if (thread.toolTip.buf) setToolTip(thread.toolTip.buf); } @@ -231,15 +236,24 @@ protected: STrayIconThread::STrayIconThread(VNCServerWin32& sm, UINT inactiveIcon_, UINT activeIcon_, UINT dis_inactiveIcon_, UINT dis_activeIcon_, UINT menu_) -: Thread("TrayIcon"), windowHandle(0), server(sm), +: thread_id(-1), windowHandle(0), server(sm), inactiveIcon(inactiveIcon_), activeIcon(activeIcon_), dis_inactiveIcon(dis_inactiveIcon_), dis_activeIcon(dis_activeIcon_), menu(menu_), runTrayIcon(true) { + lock = new os::Mutex; start(); + while (thread_id == (DWORD)-1) + Sleep(0); } +STrayIconThread::~STrayIconThread() { + runTrayIcon = false; + PostThreadMessage(thread_id, WM_QUIT, 0, 0); + delete lock; +} -void STrayIconThread::run() { +void STrayIconThread::worker() { + thread_id = GetCurrentThreadId(); while (runTrayIcon) { if (rfb::win32::desktopChangeRequired() && !rfb::win32::changeDesktop()) @@ -260,7 +274,7 @@ void STrayIconThread::run() { void STrayIconThread::setToolTip(const TCHAR* text) { if (!windowHandle) return; - Lock l(lock); + os::AutoMutex a(lock); delete [] toolTip.buf; toolTip.buf = tstrDup(text); PostMessage(windowHandle, WM_SET_TOOLTIP, 0, 0); diff --git a/win/winvnc/STrayIcon.h b/win/winvnc/STrayIcon.h index 309d3f4a..09066362 100644 --- a/win/winvnc/STrayIcon.h +++ b/win/winvnc/STrayIcon.h @@ -22,20 +22,19 @@ #include <winvnc/VNCServerWin32.h> #include <rfb_win32/TCharArray.h> #include <rfb/Configuration.h> -#include <rfb/Threading.h> + +namespace os { + class Mutex; + class Thread; +} namespace winvnc { - class STrayIconThread : rfb::Thread { + class STrayIconThread : os::Thread { public: STrayIconThread(VNCServerWin32& sm, UINT inactiveIcon, UINT activeIcon, UINT dis_inactiveIcon, UINT dis_activeIcon, UINT menu); - virtual ~STrayIconThread() { - runTrayIcon = false; - PostThreadMessage(getThreadId(), WM_QUIT, 0, 0); - } - - virtual void run(); + virtual ~STrayIconThread(); void setToolTip(const TCHAR* text); @@ -44,7 +43,10 @@ namespace winvnc { friend class STrayIcon; protected: - rfb::Mutex lock; + virtual void worker(); + + os::Mutex* lock; + DWORD thread_id; HWND windowHandle; rfb::TCharArray toolTip; VNCServerWin32& server; diff --git a/win/winvnc/VNCServerWin32.cxx b/win/winvnc/VNCServerWin32.cxx index 27aea9f6..d86384da 100644 --- a/win/winvnc/VNCServerWin32.cxx +++ b/win/winvnc/VNCServerWin32.cxx @@ -21,9 +21,13 @@ #include <winvnc/VNCServerWin32.h> #include <winvnc/resource.h> #include <winvnc/STrayIcon.h> + +#include <os/Mutex.h> + #include <rfb_win32/ComputerName.h> #include <rfb_win32/CurrentUser.h> #include <rfb_win32/Service.h> + #include <rfb/Hostname.h> #include <rfb/LogWriter.h> @@ -53,16 +57,21 @@ static BoolParameter showTrayIcon("ShowTrayIcon", VNCServerWin32::VNCServerWin32() - : command(NoCommand), commandSig(commandLock), + : command(NoCommand), commandEvent(CreateEvent(0, TRUE, FALSE, 0)), sessionEvent(isServiceProcess() ? CreateEvent(0, FALSE, FALSE, "Global\\SessionEventTigerVNC") : 0), vncServer(CStr(ComputerName().buf), &desktop), - hostThread(0), runServer(false), isDesktopStarted(false), + thread_id(-1), runServer(false), isDesktopStarted(false), httpServer(&vncServer), config(&sockMgr), rfbSock(&sockMgr), httpSock(&sockMgr), trayIcon(0), queryConnectDialog(0) { + commandLock = new os::Mutex; + commandSig = new os::Condition(commandLock); + + runLock = new os::Mutex; + // Initialise the desktop desktop.setStatusLocation(&isDesktopStarted); @@ -85,8 +94,15 @@ VNCServerWin32::~VNCServerWin32() { desktop.setStatusLocation(0); // Join the Accept/Reject dialog thread - if (queryConnectDialog) - delete queryConnectDialog->join(); + if (queryConnectDialog) { + queryConnectDialog->wait(); + delete queryConnectDialog; + } + + delete runLock; + + delete commandSig; + delete commandLock; } @@ -149,8 +165,9 @@ void VNCServerWin32::regConfigChanged() { int VNCServerWin32::run() { - { Lock l(runLock); - hostThread = Thread::self(); + { + os::AutoMutex a(runLock); + thread_id = GetCurrentThreadId(); runServer = true; } @@ -195,19 +212,20 @@ int VNCServerWin32::run() { vlog.error("%s", e.str()); } - { Lock l(runLock); + { + os::AutoMutex a(runLock); runServer = false; - hostThread = 0; + thread_id = (DWORD)-1; } return result; } void VNCServerWin32::stop() { - Lock l(runLock); + os::AutoMutex a(runLock); runServer = false; - if (hostThread) - PostThreadMessage(hostThread->getThreadId(), WM_QUIT, 0, 0); + if (thread_id != (DWORD)-1) + PostThreadMessage(thread_id, WM_QUIT, 0, 0); } @@ -261,17 +279,17 @@ void VNCServerWin32::queryConnectionComplete() { bool VNCServerWin32::queueCommand(Command cmd, const void* data, int len, bool wait) { - Lock l(commandLock); + os::AutoMutex a(commandLock); while (command != NoCommand) - commandSig.wait(); + commandSig->wait(); command = cmd; commandData = data; commandDataLen = len; SetEvent(commandEvent); if (wait) { while (command != NoCommand) - commandSig.wait(); - commandSig.signal(); + commandSig->wait(); + commandSig->signal(); } return true; } @@ -282,7 +300,7 @@ void VNCServerWin32::processEvent(HANDLE event_) { if (event_ == commandEvent.h) { // If there is no command queued then return immediately { - Lock l(commandLock); + os::AutoMutex a(commandLock); if (command == NoCommand) return; } @@ -312,7 +330,8 @@ void VNCServerWin32::processEvent(HANDLE event_) { vncServer.approveConnection(queryConnectDialog->getSock(), queryConnectDialog->isAccepted(), "Connection rejected by user"); - delete queryConnectDialog->join(); + queryConnectDialog->wait(); + delete queryConnectDialog; queryConnectDialog = 0; break; @@ -322,9 +341,9 @@ void VNCServerWin32::processEvent(HANDLE event_) { // Clear the command and signal completion { - Lock l(commandLock); + os::AutoMutex a(commandLock); command = NoCommand; - commandSig.signal(); + commandSig->signal(); } } else if (event_ == sessionEvent.h) { stop(); diff --git a/win/winvnc/VNCServerWin32.h b/win/winvnc/VNCServerWin32.h index b85814a4..225e6342 100644 --- a/win/winvnc/VNCServerWin32.h +++ b/win/winvnc/VNCServerWin32.h @@ -30,6 +30,12 @@ #include <winvnc/JavaViewer.h> #include <winvnc/ManagedListener.h> +namespace os { + class Mutex; + class Condition; + class Thread; +} + namespace winvnc { class STrayIconThread; @@ -99,16 +105,16 @@ namespace winvnc { Command command; const void* commandData; int commandDataLen; - rfb::Mutex commandLock; - rfb::Condition commandSig; + os::Mutex* commandLock; + os::Condition* commandSig; rfb::win32::Handle commandEvent; rfb::win32::Handle sessionEvent; // VNCServerWin32 Server-internal state rfb::win32::SDisplay desktop; rfb::VNCServerST vncServer; - rfb::Mutex runLock; - rfb::Thread* hostThread; + os::Mutex* runLock; + DWORD thread_id; bool runServer; bool isDesktopStarted; JavaViewerServer httpServer; diff --git a/win/winvnc/winvnc.cxx b/win/winvnc/winvnc.cxx index ff16aacd..aa41bcbf 100644 --- a/win/winvnc/winvnc.cxx +++ b/win/winvnc/winvnc.cxx @@ -168,6 +168,19 @@ static void processParams(int argc, char** argv) { runServer = false; int j = i; i = argc; + + // Try to clean up earlier services we've had + try { + rfb::win32::unregisterService("WinVNC4"); + } catch (rdr::SystemException) { + // Do nothing as we might fail simply because there was no + // service to remove + } + try { + rfb::win32::unregisterService("TigerVNC Server"); + } catch (rdr::SystemException) { + } + if (rfb::win32::registerService(VNCServerService::Name, _T("TigerVNC Server"), _T("Provides remote access to this machine via the VNC/RFB protocol."), |