Add connection information dialog based on the one in the unix viewer.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4417 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/CConn.cxx b/vncviewer/CConn.cxx
index faf85cc..45189d7 100644
--- a/vncviewer/CConn.cxx
+++ b/vncviewer/CConn.cxx
@@ -107,6 +107,39 @@
     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 4592887..9a15762 100644
--- a/vncviewer/CConn.h
+++ b/vncviewer/CConn.h
@@ -34,6 +34,8 @@
 
   void refreshFramebuffer();
 
+  const char *connectionInfo();
+
   // FdInStreamBlockCallback methods
   void blockCallback();
 
diff --git a/vncviewer/Viewport.cxx b/vncviewer/Viewport.cxx
index 74f9340..3e82990 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 @@
 // 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 @@
   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 @@
   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;