steamcompmgr: Add workaround for Disgaea PC (405900)
This app doesn't like using the controller unless its clicked on first.
This commit is contained in:
parent
9600bbaadf
commit
a3dc37f262
2 changed files with 35 additions and 12 deletions
|
@ -990,16 +990,25 @@ void MouseCursor::checkSuspension()
|
||||||
|
|
||||||
bool bWasHidden = m_hideForMovement;
|
bool bWasHidden = m_hideForMovement;
|
||||||
|
|
||||||
if (buttonMask & ( Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask )) {
|
steamcompmgr_win_t *window = m_ctx->focus.inputFocusWindow;
|
||||||
m_hideForMovement = false;
|
if (window && window->ignoreNextClickForVisibility)
|
||||||
m_lastMovedTime = get_time_in_milliseconds();
|
{
|
||||||
|
window->ignoreNextClickForVisibility--;
|
||||||
|
m_hideForMovement = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (buttonMask & ( Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask )) {
|
||||||
|
m_hideForMovement = false;
|
||||||
|
m_lastMovedTime = get_time_in_milliseconds();
|
||||||
|
|
||||||
// Move the cursor back to where we left it if the window didn't want us to give
|
// Move the cursor back to where we left it if the window didn't want us to give
|
||||||
// it hover/focus where we left it and we moved it before.
|
// it hover/focus where we left it and we moved it before.
|
||||||
steamcompmgr_win_t *window = m_ctx->focus.inputFocusWindow;
|
if (window_wants_no_focus_when_mouse_hidden(window) && bWasHidden)
|
||||||
if (window_wants_no_focus_when_mouse_hidden(window) && bWasHidden)
|
{
|
||||||
{
|
XWarpPointer(m_ctx->dpy, None, x11_win(m_ctx->focus.inputFocusWindow), 0, 0, 0, 0, m_lastX, m_lastY);
|
||||||
XWarpPointer(m_ctx->dpy, None, x11_win(m_ctx->focus.inputFocusWindow), 0, 0, 0, 0, m_lastX, m_lastY);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1007,8 +1016,6 @@ void MouseCursor::checkSuspension()
|
||||||
if (!m_hideForMovement && suspended) {
|
if (!m_hideForMovement && suspended) {
|
||||||
m_hideForMovement = true;
|
m_hideForMovement = true;
|
||||||
|
|
||||||
steamcompmgr_win_t *window = m_ctx->focus.inputFocusWindow;
|
|
||||||
|
|
||||||
// Rearm warp count
|
// Rearm warp count
|
||||||
if (window) {
|
if (window) {
|
||||||
window->mouseMoved = 0;
|
window->mouseMoved = 0;
|
||||||
|
@ -3176,7 +3183,22 @@ determine_and_apply_focus()
|
||||||
}
|
}
|
||||||
|
|
||||||
sdlwindow_visible( global_focus.focusWindow != nullptr );
|
sdlwindow_visible( global_focus.focusWindow != nullptr );
|
||||||
|
|
||||||
|
// Some games such as Disagea PC (405900) don't take controller input until
|
||||||
|
// the window is first clicked on despite it having focus.
|
||||||
|
if ( global_focus.inputFocusWindow && global_focus.inputFocusWindow->appID == 405900 )
|
||||||
|
{
|
||||||
|
global_focus.inputFocusWindow->mouseMoved = 0;
|
||||||
|
global_focus.inputFocusWindow->ignoreNextClickForVisibility = 2;
|
||||||
|
|
||||||
|
auto now = get_time_in_milliseconds();
|
||||||
|
|
||||||
|
wlserver_lock();
|
||||||
|
wlserver_touchdown( 0.5, 0.5, 0, now );
|
||||||
|
wlserver_touchup( 0, now + 1 );
|
||||||
|
wlserver_unlock();
|
||||||
|
}
|
||||||
|
|
||||||
focusDirty = false;
|
focusDirty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -114,6 +114,7 @@ struct steamcompmgr_win_t {
|
||||||
bool hasHwndStyle;
|
bool hasHwndStyle;
|
||||||
uint32_t hwndStyle;
|
uint32_t hwndStyle;
|
||||||
bool hasHwndStyleEx;
|
bool hasHwndStyleEx;
|
||||||
|
int ignoreNextClickForVisibility;
|
||||||
uint32_t hwndStyleEx;
|
uint32_t hwndStyleEx;
|
||||||
|
|
||||||
motif_hints_t *motif_hints;
|
motif_hints_t *motif_hints;
|
||||||
|
|
Loading…
Reference in a new issue