changeset 8177:1471a78e5abc draft

(svn r11740) -Fix [FS#1610]: Modify and possibly discard key events for code points in the unicode private use area.
author egladil <egladil@openttd.org>
date Tue, 01 Jan 2008 18:55:15 +0000
parents a3f3d90e82e8
children 682fb03eb247
files src/window.cpp
diffstat 1 files changed, 14 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -1643,6 +1643,20 @@
 	e.we.keypress.keycode = GB(key, 16, 16);
 	e.we.keypress.cont = true;
 
+	/*
+	 * The Unicode standard defines an area called the private use area. Code points in this
+	 * area are reserved for private use and thus not portable between systems. For instance,
+	 * Apple defines code points for the arrow keys in this area, but these are only printable
+	 * on a system running OS X. We don't want these keys to show up in text fields and such,
+	 * and thus we have to clear the unicode character when we encounter such a key.
+	 */
+	if (e.we.keypress.key >= 0xE000 && e.we.keypress.key <= 0xF8FF) e.we.keypress.key = 0;
+
+	/*
+	 * If both key and keycode is zero, we don't bother to process the event.
+	 */
+	if (e.we.keypress.key == 0 && e.we.keypress.keycode == 0) return;
+
 	/* check if we have a query string window open before allowing hotkeys */
 	if (FindWindowById(WC_QUERY_STRING,            0) != NULL ||
 			FindWindowById(WC_SEND_NETWORK_MSG,        0) != NULL ||