(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:
22
window.c
22
window.c
@@ -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) {
|
||||
|
Reference in New Issue
Block a user