From: Eric B. <ebo...@us...> - 2002-05-26 17:43:21
|
Update of /cvsroot/alleg/allegro/src/win In directory usw-pr-cvs1:/tmp/cvs-serv30819/src/win Modified Files: wkeybd.c wmouse.c wwnd.c Log Message: Fixed input problems under Windows caused by a lack of compartmentation between threads Index: wkeybd.c =================================================================== RCS file: /cvsroot/alleg/allegro/src/win/wkeybd.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- wkeybd.c 26 May 2002 15:04:16 -0000 1.16 +++ wkeybd.c 26 May 2002 17:43:13 -0000 1.17 @@ -110,7 +110,7 @@ -/* key_dinput_handle_scancode: +/* key_dinput_handle_scancode: [input thread] * Handles a single scancode. */ static void key_dinput_handle_scancode(unsigned char scancode, int pressed) @@ -149,7 +149,7 @@ -/* key_dinput_handle: +/* key_dinput_handle: [input thread] * Handles queued keyboard input. */ static void key_dinput_handle(void) @@ -191,7 +191,7 @@ -/* key_dinput_acquire: +/* key_dinput_acquire: [window thread] * Acquires the keyboard device. This must be called after a * window switch for example if the device is in foreground * cooperative level. @@ -238,7 +238,7 @@ -/* key_dinput_unacquire: +/* key_dinput_unacquire: [window thread] * Unacquires the keyboard device. */ int key_dinput_unacquire(void) @@ -261,7 +261,7 @@ -/* key_dinput_exit: +/* key_dinput_exit: [primary thread] * Shuts down the DirectInput keyboard device. */ static int key_dinput_exit(void) @@ -271,7 +271,7 @@ wnd_unregister_event(key_input_event); /* unacquire device */ - key_dinput_unacquire(); + wnd_unacquire_keyboard(); /* now it can be released */ IDirectInputDevice_Release(key_dinput_device); @@ -295,7 +295,7 @@ -/* key_dinput_init: +/* key_dinput_init: [primary thread] * Sets up the DirectInput keyboard device. */ static int key_dinput_init(void) @@ -351,7 +351,7 @@ goto Error; /* Acquire the device */ - key_dinput_acquire(); + wnd_acquire_keyboard(); return 0; @@ -362,7 +362,7 @@ -/* key_directx_init: +/* key_directx_init: [primary thread] */ static int key_directx_init(void) { @@ -375,7 +375,7 @@ /* keyboard input is handled by the window thread */ key_input_processed_event = CreateEvent(NULL, FALSE, FALSE, NULL); - if (wnd_call_proc(key_dinput_init) != 0) { + if (key_dinput_init() != 0) { /* something has gone wrong */ _TRACE("keyboard handler init failed\n"); CloseHandle(key_input_processed_event); @@ -389,14 +389,14 @@ -/* key_directx_exit: +/* key_directx_exit: [primary thread] */ static void key_directx_exit(void) { if (key_dinput_device) { /* command keyboard handler shutdown */ _TRACE("keyboard handler exits\n"); - wnd_call_proc(key_dinput_exit); + key_dinput_exit(); /* now we can free all resources */ CloseHandle(key_input_processed_event); @@ -405,7 +405,7 @@ -/* key_directx_wait_for_input: +/* key_directx_wait_for_input: [primary thread] */ static void key_directx_wait_for_input(void) { @@ -414,9 +414,10 @@ -/* static void key_directx_stop_wait: +/* static void key_directx_stop_wait: [primary thread] */ static void key_directx_stop_wait(void) { SetEvent(key_input_processed_event); } + Index: wmouse.c =================================================================== RCS file: /cvsroot/alleg/allegro/src/win/wmouse.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- wmouse.c 26 May 2002 15:04:16 -0000 1.22 +++ wmouse.c 26 May 2002 17:43:16 -0000 1.23 @@ -137,13 +137,13 @@ (p.y < mouse_miny) || (p.y > mouse_maxy)) { \ if (_mouse_on) { \ _mouse_on = FALSE; \ - mouse_set_syscursor(TRUE); \ + wnd_set_syscursor(TRUE); \ } \ } \ else { \ if (!_mouse_on) { \ _mouse_on = TRUE; \ - mouse_set_syscursor(FALSE); \ [...172 lines suppressed...] static void mouse_directx_set_range(int x1, int y1, int x2, int y2) { @@ -667,7 +666,7 @@ -/* mouse_directx_set_speed: +/* mouse_directx_set_speed: [primary thread] */ static void mouse_directx_set_speed(int xspeed, int yspeed) { @@ -686,7 +685,7 @@ -/* mouse_directx_get_mickeys: +/* mouse_directx_get_mickeys: [primary thread] */ static void mouse_directx_get_mickeys(int *mickeyx, int *mickeyy) { Index: wwnd.c =================================================================== RCS file: /cvsroot/alleg/allegro/src/win/wwnd.c,v retrieving revision 1.48 retrieving revision 1.49 diff -u -d -r1.48 -r1.49 --- wwnd.c 3 May 2002 07:27:24 -0000 1.48 +++ wwnd.c 26 May 2002 17:43:17 -0000 1.49 @@ -79,6 +79,7 @@ static UINT msg_unacquire_mouse = 0; static UINT msg_acquire_joystick = 0; static UINT msg_unacquire_joystick = 0; +static UINT msg_set_syscursor = 0; static UINT msg_suicide = 0; @@ -199,6 +200,16 @@ +/* wnd_set_syscursor: + * Posts msg to window to set the system mouse cursor. + */ +void wnd_set_syscursor(int state) +{ + PostMessage(allegro_wnd, msg_set_syscursor, state, 0); +} + + + /* wnd_thread_input_proc: * Thread function that handles the input. */ @@ -332,6 +343,9 @@ if (message == msg_unacquire_joystick) return joystick_dinput_unacquire(); + if (message == msg_set_syscursor) + return mouse_set_syscursor(wparam); + if (message == msg_suicide) { DestroyWindow(wnd); return 0; @@ -679,6 +693,7 @@ msg_unacquire_mouse = RegisterWindowMessage("Allegro mouse unacquire proc"); msg_acquire_joystick = RegisterWindowMessage("Allegro joystick acquire proc"); msg_unacquire_joystick = RegisterWindowMessage("Allegro joystick unacquire proc"); + msg_set_syscursor = RegisterWindowMessage("Allegro mouse cursor proc"); msg_suicide = RegisterWindowMessage("Allegro window suicide"); /* event #0 is reserved */ |