mirror of https://github.com/PCSX2/pcsx2.git
Lilypad: Better focus/capture/uncapture handling.
1. After ALT-Tab to another window and back, now it accepts PCSX2 shortcuts properly (e.g. Esc or F6 etc) - focus changes were not always recognized before. 2. If Lilypad is set to capture mouse, now it releases it on Escape. This part is a small hack because the code looks as if it should handle it, but in practice doesn't. This adds explicit uncapture on Escape.
This commit is contained in:
parent
da4a785fae
commit
916d7502c8
|
@ -868,6 +868,16 @@ ExtraWndProcResult TitleHackWndProc(HWND hWndTop, UINT uMsg, WPARAM wParam, LPAR
|
|||
return CONTINUE_BLISSFULLY;
|
||||
}
|
||||
|
||||
// Useful sequence before changing into active/inactive state.
|
||||
// Handles hooking/unhooking of mouse and KB and also mouse cursor visibility.
|
||||
// towardsActive==true indicates we're gaining activity (on focus etc), false is for losing activity (on close, kill focus, etc).
|
||||
void PrepareActivityState(bool towardsActive) {
|
||||
if (!towardsActive)
|
||||
ReleaseModifierKeys();
|
||||
activeWindow = towardsActive;
|
||||
UpdateEnabledDevices();
|
||||
}
|
||||
|
||||
// responsible for monitoring device addition/removal, focus changes, and viewport closures.
|
||||
ExtraWndProcResult StatusWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *output) {
|
||||
switch (uMsg) {
|
||||
|
@ -887,11 +897,8 @@ ExtraWndProcResult StatusWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
case WM_ACTIVATE:
|
||||
// Release any buttons PCSX2 may think are down when
|
||||
// losing/gaining focus.
|
||||
if (!wParam) {
|
||||
ReleaseModifierKeys();
|
||||
}
|
||||
activeWindow = (LOWORD(wParam) != WA_INACTIVE);
|
||||
UpdateEnabledDevices();
|
||||
// Note - I never managed to see this case entered, but SET/KILLFOCUS are entered. - avih 2014-04-16
|
||||
PrepareActivityState(LOWORD(wParam) != WA_INACTIVE);
|
||||
break;
|
||||
case WM_CLOSE:
|
||||
if (config.closeHacks & 1) {
|
||||
|
@ -906,6 +913,12 @@ ExtraWndProcResult StatusWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
case WM_DESTROY:
|
||||
QueueKeyEvent(VK_ESCAPE, KEYPRESS);
|
||||
break;
|
||||
case WM_KILLFOCUS:
|
||||
PrepareActivityState(false);
|
||||
break;
|
||||
case WM_SETFOCUS:
|
||||
PrepareActivityState(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -1386,6 +1399,19 @@ keyEvent* CALLBACK PADkeyEvent() {
|
|||
static char altDown = 0;
|
||||
static keyEvent ev;
|
||||
if (!GetQueuedKeyEvent(&ev)) return 0;
|
||||
|
||||
if (miceEnabled && (ev.key == VK_ESCAPE || (int)ev.key == -2) && ev.evt == KEYPRESS) {
|
||||
// Disable mouse/KB hooks on escape (before going into paused mode).
|
||||
// This is a hack, since PADclose (which is called on pause) should enevtually also deactivate the
|
||||
// mouse/kb capture. In practice, WindowsMessagingMouse::Deactivate is called from PADclose, but doesn't
|
||||
// manage to release the mouse, maybe due to the thread from which it's called or some
|
||||
// state or somehow being too late.
|
||||
// This explicitly triggers inactivity (releasing mouse/kb hooks) before PCSX2 starts to close the plugins.
|
||||
// Regardless, the mouse/kb hooks will get re-enabled on resume if required without need for further hacks.
|
||||
|
||||
PrepareActivityState(false);
|
||||
}
|
||||
|
||||
if ((ev.key == VK_ESCAPE || (int)ev.key == -2) && ev.evt == KEYPRESS && config.escapeFullscreenHack) {
|
||||
static int t;
|
||||
if ((int)ev.key != -2 && IsWindowMaximized(hWndTop)) {
|
||||
|
|
Loading…
Reference in New Issue