summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vncviewer/CConn.cxx33
-rw-r--r--vncviewer/CConn.h2
-rw-r--r--vncviewer/Viewport.cxx8
3 files changed, 42 insertions, 1 deletions
diff --git a/vncviewer/CConn.cxx b/vncviewer/CConn.cxx
index faf85cc9..45189d73 100644
--- a/vncviewer/CConn.cxx
+++ b/vncviewer/CConn.cxx
@@ -107,6 +107,39 @@ void CConn::refreshFramebuffer()
forceNonincremental = true;
}
+const char *CConn::connectionInfo()
+{
+ static char infoText[1024] = "";
+
+ char pfStr[100];
+ char spfStr[100];
+
+ cp.pf().print(pfStr, 100);
+ serverPF.print(spfStr, 100);
+
+ int secType = csecurity->getType();
+
+ snprintf(infoText, sizeof(infoText),
+ _("Desktop name: %.80s\n"
+ "Host: %.80s port: %d\n"
+ "Size: %d x %d\n"
+ "Pixel format: %s\n"
+ "(server default %s)\n"
+ "Requested encoding: %s\n"
+ "Last used encoding: %s\n"
+ "Line speed estimate: %d kbit/s\n"
+ "Protocol version: %d.%d\n"
+ "Security method: %s\n"),
+ cp.name(), serverHost, serverPort, cp.width, cp.height,
+ pfStr, spfStr, encodingName(currentEncoding),
+ encodingName(lastServerEncoding),
+ sock->inStream().kbitsPerSecond(),
+ cp.majorVersion, cp.minorVersion,
+ secTypeName(secType));
+
+ return infoText;
+}
+
// The RFB core is not properly asynchronous, so it calls this callback
// whenever it needs to block to wait for more data. Since FLTK is
// monitoring the socket, we just make sure FLTK gets to run.
diff --git a/vncviewer/CConn.h b/vncviewer/CConn.h
index 45928878..9a15762d 100644
--- a/vncviewer/CConn.h
+++ b/vncviewer/CConn.h
@@ -34,6 +34,8 @@ public:
void refreshFramebuffer();
+ const char *connectionInfo();
+
// FdInStreamBlockCallback methods
void blockCallback();
diff --git a/vncviewer/Viewport.cxx b/vncviewer/Viewport.cxx
index 74f9340f..3e829905 100644
--- a/vncviewer/Viewport.cxx
+++ b/vncviewer/Viewport.cxx
@@ -22,6 +22,7 @@
#include <string.h>
#include <FL/fl_draw.H>
+#include <FL/fl_ask.H>
#include <rfb/CMsgWriter.h>
#include <rfb/LogWriter.h>
@@ -54,7 +55,7 @@ static rfb::LogWriter vlog("Viewport");
// Menu constants
enum { ID_EXIT, ID_CTRL, ID_ALT, ID_MENUKEY, ID_CTRLALTDEL,
- ID_REFRESH, ID_OPTIONS, ID_ABOUT, ID_DISMISS };
+ ID_REFRESH, ID_OPTIONS, ID_INFO, ID_ABOUT, ID_DISMISS };
Viewport::Viewport(int w, int h, const rfb::PixelFormat& serverPF, CConn* cc_)
: Fl_Widget(0, 0, w, h), cc(cc_), frameBuffer(NULL), pixelTrans(NULL),
@@ -452,6 +453,7 @@ void Viewport::initContextMenu()
contextMenu->add(_("Refresh screen"), 0, NULL, (void*)ID_REFRESH, FL_MENU_DIVIDER);
contextMenu->add(_("Options..."), 0, NULL, (void*)ID_OPTIONS, 0);
+ contextMenu->add(_("Connection info..."), 0, NULL, (void*)ID_INFO, 0);
contextMenu->add(_("About TigerVNC viewer..."), 0, NULL, (void*)ID_ABOUT, FL_MENU_DIVIDER);
contextMenu->add(_("Dismiss menu"), 0, NULL, (void*)ID_DISMISS, 0);
@@ -503,6 +505,10 @@ void Viewport::popupContextMenu()
case ID_OPTIONS:
OptionsDialog::showDialog();
break;
+ case ID_INFO:
+ fl_message_title(_("VNC connection info"));
+ fl_message(cc->connectionInfo());
+ break;
case ID_ABOUT:
about_vncviewer();
break;