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