/* _win_switch_in: * Puts the library in the foreground. */ void _win_switch_in(void) { int mode; _TRACE(PREFIX_I "switch in\n"); _win_app_foreground = TRUE; key_dinput_acquire(); mouse_dinput_acquire(); joystick_dinput_acquire(); if (win_gfx_driver && win_gfx_driver->switch_in) win_gfx_driver->switch_in(); /* handle switch modes */ mode = get_display_switch_mode(); if ((mode == SWITCH_AMNESIA) || (mode == SWITCH_PAUSE)) { _TRACE(PREFIX_I "AMNESIA or PAUSE mode recovery\n"); SetEvent(foreground_event); /* restore old priority and wake up */ SetThreadPriority(allegro_thread, allegro_thread_priority); } _switch_in(); }
/* mouse_dinput_grab: [window thread] * Grabs the mouse device. */ int mouse_dinput_grab(void) { HRESULT hr; DWORD level; HWND allegro_wnd = win_get_window(); if (mouse_dinput_device) { /* necessary in order to set the cooperative level */ mouse_dinput_unacquire(); if (gfx_driver && !gfx_driver->windowed) { level = DISCL_FOREGROUND | DISCL_EXCLUSIVE; _TRACE(PREFIX_I "foreground exclusive cooperative level requested for mouse\n"); } else { level = DISCL_FOREGROUND | DISCL_NONEXCLUSIVE; _TRACE(PREFIX_I "foreground non-exclusive cooperative level requested for mouse\n"); } /* set cooperative level */ hr = IDirectInputDevice_SetCooperativeLevel(mouse_dinput_device, allegro_wnd, level); if (FAILED(hr)) { _TRACE(PREFIX_E "set cooperative level failed: %s\n", dinput_err_str(hr)); return -1; } mouse_dinput_acquire(); /* update the system cursor */ mouse_set_syscursor(); return 0; } else { /* update the system cursor */ mouse_set_syscursor(); return -1; } }