[client] don't attempt to align to the guest with invalid pos data

This commit is contained in:
Geoffrey McRae 2021-01-19 05:56:40 +11:00
parent 1da24af6ee
commit b2ac2980d5
2 changed files with 20 additions and 3 deletions

View File

@ -132,6 +132,7 @@ void app_updateCursorPos(double x, double y)
{
g_cursor.pos.x = x;
g_cursor.pos.y = y;
g_cursor.valid = true;
}
void app_handleFocusEvent(bool focused)
@ -258,6 +259,12 @@ static void updatePositionInfo(void)
g_cursor.scale.y = (float)srcW / (float)g_state.dstRect.w;
g_cursor.dpiScale = g_cursor.guest.dpiScale / 100.0f;
if (!g_state.posInfoValid)
{
g_state.posInfoValid = true;
alignToGuest();
}
done:
atomic_fetch_add(&g_state.lgrResize, 1);
}
@ -1166,8 +1173,11 @@ static void rotatePoint(struct DoublePoint *point)
}
}
static void guestCurToLocal(struct DoublePoint *local)
static bool guestCurToLocal(struct DoublePoint *local)
{
if (!g_cursor.guest.valid || !g_state.posInfoValid)
return false;
const struct DoublePoint point =
{
.x = g_cursor.guest.x + g_cursor.guest.hx,
@ -1200,6 +1210,8 @@ static void guestCurToLocal(struct DoublePoint *local)
point.x / g_cursor.scale.x;
break;
}
return true;
}
inline static void localCurToGuest(struct DoublePoint *guest)
@ -1561,8 +1573,8 @@ int eventFilter(void * userdata, SDL_Event * event)
break;
struct DoublePoint local;
guestCurToLocal(&local);
warpPointer(round(local.x), round(local.y), false);
if (guestCurToLocal(&local))
warpPointer(round(local.x), round(local.y), false);
break;
}
}

View File

@ -59,6 +59,8 @@ struct AppState
SDL_Rect border;
SDL_Point srcSize;
LG_RendererRect dstRect;
bool posInfoValid;
bool alignToGuest;
const LG_Renderer * lgr;
void * lgrData;
@ -229,6 +231,9 @@ struct CursorState
/* the local position */
struct DoublePoint pos;
/* true if the position is valid */
bool valid;
/* the button state */
unsigned int buttons;