(svn r7153) -Fix [FS#279]: Some keyboard events possibly lost under high CPU load, handle

keyboard input in place instead of global variables magic. (KUDr)
This commit is contained in:
Darkvater
2006-11-15 19:35:52 +00:00
parent 791d20a011
commit eaddac35be
6 changed files with 27 additions and 17 deletions

View File

@@ -1397,7 +1397,10 @@ void SendWindowMessageClass(WindowClass wnd_class, uint msg, uint wparam, uint l
}
}
static void HandleKeypress(uint32 key)
/** Handle keyboard input.
* @param key Lower 8 bits contain the ASCII character, the higher
* 16 bits the keycode */
void HandleKeypress(uint32 key)
{
Window *w;
WindowEvent e;
@@ -1406,6 +1409,17 @@ static void HandleKeypress(uint32 key)
* to thein this main toolbar. */
bool query_open = false;
/*
* During the generation of the world, there might be
* another thread that is currently building for example
* a road. To not interfere with those tasks, we should
* NOT change the _current_player here.
*
* This is not necessary either, as the only events that
* can be handled are the 'close application' events
*/
if (!IsGeneratingWorld()) _current_player = _local_player;
// Setup event
e.event = WE_KEYPRESS;
e.we.keypress.ascii = key & 0xFF;
@@ -1564,12 +1578,6 @@ void InputLoop(void)
*/
if (!IsGeneratingWorld()) _current_player = _local_player;
// Handle pressed keys
if (_pressed_key != 0) {
HandleKeypress(_pressed_key);
_pressed_key = 0;
}
// Mouse event?
click = 0;
if (_left_button_down && !_left_button_clicked) {