mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-08-09 08:41:31 +00:00
[client/idd] input: avoid replaying absolute position
Some checks failed
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
Some checks failed
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
This commit is contained in:
@@ -200,17 +200,20 @@ bool CInputPipeServer::QueueResetLocked()
|
||||
switch (m_mouseMode)
|
||||
{
|
||||
case MouseMode::RELATIVE_INPUT:
|
||||
if (!QueueRawLocked(
|
||||
if (m_relativeButtons && !QueueRawLocked(
|
||||
LG_INPUT_PIPE_MESSAGE_MOUSE_RELATIVE, payload, false))
|
||||
return false;
|
||||
break;
|
||||
|
||||
case MouseMode::ABSOLUTE_INPUT:
|
||||
payload.mouseAbsolute.x = m_absoluteX;
|
||||
payload.mouseAbsolute.y = m_absoluteY;
|
||||
if (!QueueRawLocked(
|
||||
LG_INPUT_PIPE_MESSAGE_MOUSE_ABSOLUTE, payload, false))
|
||||
return false;
|
||||
if (m_absoluteButtons)
|
||||
{
|
||||
payload.mouseAbsolute.x = m_absoluteX;
|
||||
payload.mouseAbsolute.y = m_absoluteY;
|
||||
if (!QueueRawLocked(
|
||||
LG_INPUT_PIPE_MESSAGE_MOUSE_ABSOLUTE, payload, false))
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case MouseMode::NONE:
|
||||
@@ -270,7 +273,7 @@ bool CInputPipeServer::SendMouseRelative(
|
||||
const bool pureMotion = wheel == 0 && buttons == m_relativeButtons;
|
||||
const bool switching = m_mouseMode == MouseMode::ABSOLUTE_INPUT;
|
||||
bool queued = (m_state.load(std::memory_order_relaxed) & 1) != 0;
|
||||
if (queued && switching)
|
||||
if (queued && switching && m_absoluteButtons)
|
||||
{
|
||||
KVMFRInputPayload neutral = {};
|
||||
neutral.mouseAbsolute.x = m_absoluteX;
|
||||
@@ -317,7 +320,7 @@ bool CInputPipeServer::SendMouseAbsolute(
|
||||
const bool pureMotion = wheel == 0 && buttons == m_absoluteButtons;
|
||||
const bool switching = m_mouseMode == MouseMode::RELATIVE_INPUT;
|
||||
bool queued = (m_state.load(std::memory_order_relaxed) & 1) != 0;
|
||||
if (queued && switching)
|
||||
if (queued && switching && m_relativeButtons)
|
||||
{
|
||||
const KVMFRInputPayload neutral = {};
|
||||
queued = QueueRawLocked(
|
||||
|
||||
@@ -569,9 +569,10 @@ NTSTATUS CHIDDevice::SubmitReport(
|
||||
|
||||
NTSTATUS CHIDDevice::ResetReports()
|
||||
{
|
||||
UCHAR mouseMode = 0;
|
||||
uint16_t absoluteX = 0;
|
||||
uint16_t absoluteY = 0;
|
||||
UCHAR mouseMode = 0;
|
||||
uint32_t mouseButtons = 0;
|
||||
uint16_t absoluteX = 0;
|
||||
uint16_t absoluteY = 0;
|
||||
{
|
||||
CSRWSharedLock deviceLock(&s_deviceLock);
|
||||
HIDDeviceContext * context = s_device;
|
||||
@@ -583,6 +584,8 @@ NTSTATUS CHIDDevice::ResetReports()
|
||||
return STATUS_DEVICE_NOT_READY;
|
||||
|
||||
mouseMode = context->mouseMode;
|
||||
mouseButtons = mouseMode == HID_REPORT_ID_MOUSE_ABSOLUTE ?
|
||||
context->absoluteButtons : context->relativeButtons;
|
||||
absoluteX = context->absoluteX;
|
||||
absoluteY = context->absoluteY;
|
||||
context->statistics.resetDiscarded += context->reportCount;
|
||||
@@ -602,36 +605,39 @@ NTSTATUS CHIDDevice::ResetReports()
|
||||
};
|
||||
|
||||
NTSTATUS status = STATUS_SUCCESS;
|
||||
switch (mouseMode)
|
||||
if (mouseButtons)
|
||||
{
|
||||
case HID_REPORT_ID_MOUSE_RELATIVE:
|
||||
switch (mouseMode)
|
||||
{
|
||||
const HIDMouseRelativeReport relative = {
|
||||
HID_REPORT_ID_MOUSE_RELATIVE,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
};
|
||||
status = SubmitReport(&relative, sizeof(relative));
|
||||
break;
|
||||
}
|
||||
case HID_REPORT_ID_MOUSE_RELATIVE:
|
||||
{
|
||||
const HIDMouseRelativeReport relative = {
|
||||
HID_REPORT_ID_MOUSE_RELATIVE,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
};
|
||||
status = SubmitReport(&relative, sizeof(relative));
|
||||
break;
|
||||
}
|
||||
|
||||
case HID_REPORT_ID_MOUSE_ABSOLUTE:
|
||||
{
|
||||
const HIDMouseAbsoluteReport absolute = {
|
||||
HID_REPORT_ID_MOUSE_ABSOLUTE,
|
||||
0,
|
||||
absoluteX,
|
||||
absoluteY,
|
||||
0,
|
||||
};
|
||||
status = SubmitReport(&absolute, sizeof(absolute));
|
||||
break;
|
||||
}
|
||||
case HID_REPORT_ID_MOUSE_ABSOLUTE:
|
||||
{
|
||||
const HIDMouseAbsoluteReport absolute = {
|
||||
HID_REPORT_ID_MOUSE_ABSOLUTE,
|
||||
0,
|
||||
absoluteX,
|
||||
absoluteY,
|
||||
0,
|
||||
};
|
||||
status = SubmitReport(&absolute, sizeof(absolute));
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const NTSTATUS keyboardStatus =
|
||||
|
||||
Reference in New Issue
Block a user