Use a STL map to track keys so we don't have to care what range FLTK key codes
can have.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4368 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/DesktopWindow.cxx b/vncviewer/DesktopWindow.cxx
index 8c08aa7..4c1775f 100644
--- a/vncviewer/DesktopWindow.cxx
+++ b/vncviewer/DesktopWindow.cxx
@@ -479,17 +479,23 @@
   if (viewOnly)
     return;
 
-  if (keyCode > 0xFFFF) {
-      vlog.error(_("Too large FLTK key code %d (0x%08x)"), keyCode, keyCode);
-      return;
-  }
-
   // Because of the way keyboards work, we cannot expect to have the same
   // symbol on release as when pressed. This breaks the VNC protocol however,
   // so we need to keep track of what keysym a key _code_ generated on press
   // and send the same on release.
   if (!down) {
-    cc->writer()->keyEvent(downKeySym[keyCode], false);
+    DownMap::iterator iter;
+
+    iter = downKeySym.find(keyCode);
+    if (iter == downKeySym.end()) {
+      vlog.error(_("Unexpected release of FLTK key code %d (0x%04x)"), keyCode, keyCode);
+      return;
+    }
+
+    cc->writer()->keyEvent(iter->second, false);
+
+    downKeySym.erase(iter);
+
     return;
   }
 
diff --git a/vncviewer/DesktopWindow.h b/vncviewer/DesktopWindow.h
index a3178fb..bf54c21 100644
--- a/vncviewer/DesktopWindow.h
+++ b/vncviewer/DesktopWindow.h
@@ -20,6 +20,8 @@
 #ifndef __DESKTOPWINDOW_H__
 #define __DESKTOPWINDOW_H__
 
+#include <map>
+
 #include <FL/Fl.H>
 #include <FL/Fl_Window.H>
 
@@ -116,7 +118,8 @@
   rfb::Point lastPointerPos;
   int lastButtonMask;
 
-  rdr::U32 downKeySym[65536];
+  typedef std::map<int, rdr::U32> DownMap;
+  DownMap downKeySym;
 };
 
 #endif