From 94c413f795e2899fc1b0e2690814b8009590c8d5 Mon Sep 17 00:00:00 2001
From: Peter Wang <novalazy@gmail.com>
Date: Sun, 2 Jan 2011 10:32:42 +1100
Subject: [PATCH] Don't generate KEY_CHAR events for modifier key presses.

Don't generate KEY_DOWN events for dummy key presses, e.g. as part of
compose key sequences.
---
 src/macosx/keybd.m  |    4 ++--
 src/win/wkeyboard.c |    4 ++--
 src/x/xkeyboard.c   |   13 ++++++-------
 3 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/src/macosx/keybd.m b/src/macosx/keybd.m
index 5592f0f..79522aa 100644
--- a/src/macosx/keybd.m
+++ b/src/macosx/keybd.m
@@ -90,11 +90,11 @@ static void _handle_key_press(ALLEGRO_DISPLAY* dpy, int unicode, int scancode, i
 			 event.keyboard.unichar   = 0;
 			 event.keyboard.modifiers = 0;
 			 event.keyboard.repeat    = false;
-			 if (!is_repeat) {
+			 if (scancode > 0 && !is_repeat) {
 				 _al_event_source_emit_event(&keyboard.es, &event);
 			 }
 
-			 {
+			 if (scancode < ALLEGRO_KEY_MODIFIERS) {
 				 event.keyboard.type = ALLEGRO_EVENT_KEY_CHAR;
 				 event.keyboard.unichar = unicode;
 				 event.keyboard.modifiers = modifiers;
diff --git a/src/win/wkeyboard.c b/src/win/wkeyboard.c
index 47f4283..3515fe0 100644
--- a/src/win/wkeyboard.c
+++ b/src/win/wkeyboard.c
@@ -313,11 +313,11 @@ void _al_win_kbd_handle_key_press(int scode, int vcode, bool repeated,
 
    _al_event_source_lock(&the_keyboard.es);
 
-   if (!repeated) {
+   if (my_code > 0 && !repeated) {
       _al_event_source_emit_event(&the_keyboard.es, &event);
    }
 
-   {
+   if (my_code < ALLEGRO_KEY_MODIFIERS) {
       event.keyboard.type = ALLEGRO_EVENT_KEY_CHAR;
       event.keyboard.unichar = ccode;
       event.keyboard.modifiers = modifiers;
diff --git a/src/x/xkeyboard.c b/src/x/xkeyboard.c
index f8afb11..ee3ee3e 100644
--- a/src/x/xkeyboard.c
+++ b/src/x/xkeyboard.c
@@ -410,13 +410,12 @@ void _al_xwin_keyboard_handler(XKeyEvent *event, ALLEGRO_DISPLAY *display)
       r = XFilterEvent((XEvent *)event, glx->window);
 #endif
       if (keycode || unicode) {
-         /* If we have a keycode, we want it to go to Allegro immediately, so the
-          * key[] array is updated, and the user callbacks are called. OTOH, a key
-          * should not be added to the keyboard buffer (parameter -1) if it was
-          * filtered out as a compose key, or if it is a modifier key.
+         /* If we have a keycode, we want it to go to Allegro immediately.
+          * OTOH, a key may be filtered out as a compose key, or if it is a
+          * modifier key.
           */
          if (r || keycode >= ALLEGRO_KEY_MODIFIERS)
-            unicode = -1;
+            unicode = 0;
          else {
             /* Historically, Allegro expects to get only the scancode when Alt is
              * held down.
@@ -985,11 +984,11 @@ static void handle_key_press(int mycode, int unichar, unsigned int modifiers,
          event.keyboard.modifiers = 0;
          event.keyboard.repeat = false;
 
-         if (!is_repeat) {
+         if (mycode > 0 && !is_repeat) {
             _al_event_source_emit_event(&the_keyboard.parent.es, &event);
          }
 
-         {
+         if (mycode < ALLEGRO_KEY_MODIFIERS) {
             event.keyboard.type = ALLEGRO_EVENT_KEY_CHAR;
             event.keyboard.unichar = unichar;
             event.keyboard.modifiers = modifiers;
-- 
1.7.0.2.msysgit.0

