From 726bd6ee20cac571949804663d1e445374918f99 Mon Sep 17 00:00:00 2001 From: kreatordxx <> Date: Thu, 25 Feb 2010 04:27:15 +0000 Subject: [PATCH] Move call to callback outside of loop in key_handler, now deleting a second demo using CTRL-D actually works --- CHANGELOG.txt | 1 + arch/sdl/key.c | 24 +++++++++++++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index eebc43509..4c82de00a 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -3,6 +3,7 @@ D2X-Rebirth Changelog 20100225 -------- main/game.c, main/gamecntl.c, main/gameseq.c, main/state.c, main/state.h: Put fast save back, using Alt-F1 instead of F6 +arch/sdl/key.c: Move call to callback outside of loop in key_handler, now deleting a second demo using CTRL-D actually works 20100224 -------- diff --git a/arch/sdl/key.c b/arch/sdl/key.c index 05496dd39..296adf606 100644 --- a/arch/sdl/key.c +++ b/arch/sdl/key.c @@ -350,6 +350,7 @@ void key_handler(SDL_KeyboardEvent *event, int counter) int i, keycode, event_keysym=-1, key_state; Key_info *key; unsigned char temp; + int key_command = 0; // Read SDLK symbol and state event_keysym = event->keysym.sym; @@ -410,15 +411,7 @@ void key_handler(SDL_KeyboardEvent *event, int counter) if ( keyd_pressed[KEY_LMETA] || keyd_pressed[KEY_RMETA]) keycode |= KEY_METAED; - { - d_event_keycommand event; - window *wind; - - event.type = EVENT_KEY_COMMAND; - event.keycode = keycode; - if ((wind = window_get_front()) && window_send_event(wind, (d_event *)&event)) - /*return*/; // handled it - don't add to queue NOT YET: have to make all input loops into windows - } + key_command = keycode; temp = key_data.keytail+1; if ( temp >= KEY_BUFFER_SIZE ) temp=0; @@ -430,6 +423,19 @@ void key_handler(SDL_KeyboardEvent *event, int counter) } key->last_state = state; } + + // We allowed the key to be added to the queue for now, + // because there are still input loops without associated windows + if (key_command) + { + d_event_keycommand event; + window *wind; + + event.type = EVENT_KEY_COMMAND; + event.keycode = key_command; + if ((wind = window_get_front()) && window_send_event(wind, (d_event *)&event)) + /*return*/; // handled it - don't add to queue NOT YET: have to make all input loops into windows + } } void key_close()