[HID] Fixed spam caused by incorrect controller visibility
- Little cleanup in HID related code
This commit is contained in:
parent
3d79874828
commit
11f14e8488
|
@ -41,7 +41,8 @@ void InputSystem::AddDriver(std::unique_ptr<InputDriver> driver) {
|
||||||
void InputSystem::UpdateUsedSlot(InputDriver* driver, uint8_t slot,
|
void InputSystem::UpdateUsedSlot(InputDriver* driver, uint8_t slot,
|
||||||
bool connected) {
|
bool connected) {
|
||||||
if (slot == XUserIndexAny) {
|
if (slot == XUserIndexAny) {
|
||||||
slot = 0;
|
XELOGW("{} received requrest for slot any! Unsupported", __func__);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (connected_slots.test(slot) == connected) {
|
if (connected_slots.test(slot) == connected) {
|
||||||
|
@ -136,18 +137,16 @@ X_RESULT InputSystem::GetKeystroke(uint32_t user_index, uint32_t flags,
|
||||||
|
|
||||||
bool any_connected = false;
|
bool any_connected = false;
|
||||||
for (auto& driver : drivers_) {
|
for (auto& driver : drivers_) {
|
||||||
|
// connected_slots
|
||||||
X_RESULT result = driver->GetKeystroke(user_index, flags, out_keystroke);
|
X_RESULT result = driver->GetKeystroke(user_index, flags, out_keystroke);
|
||||||
if (result == X_ERROR_INVALID_PARAMETER) {
|
if (result == X_ERROR_INVALID_PARAMETER ||
|
||||||
|
result == X_ERROR_DEVICE_NOT_CONNECTED) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result != X_ERROR_DEVICE_NOT_CONNECTED) {
|
|
||||||
any_connected = true;
|
any_connected = true;
|
||||||
}
|
|
||||||
|
|
||||||
if (result == X_ERROR_SUCCESS || result == X_ERROR_EMPTY) {
|
if (result == X_ERROR_SUCCESS || result == X_ERROR_EMPTY) {
|
||||||
UpdateUsedSlot(driver.get(), user_index, any_connected);
|
|
||||||
|
|
||||||
if (result == X_ERROR_SUCCESS) {
|
if (result == X_ERROR_SUCCESS) {
|
||||||
last_used_slot = user_index;
|
last_used_slot = user_index;
|
||||||
}
|
}
|
||||||
|
@ -158,7 +157,6 @@ X_RESULT InputSystem::GetKeystroke(uint32_t user_index, uint32_t flags,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UpdateUsedSlot(nullptr, user_index, any_connected);
|
|
||||||
return any_connected ? X_ERROR_EMPTY : X_ERROR_DEVICE_NOT_CONNECTED;
|
return any_connected ? X_ERROR_EMPTY : X_ERROR_DEVICE_NOT_CONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ namespace xe {
|
||||||
namespace hid {
|
namespace hid {
|
||||||
namespace winkey {
|
namespace winkey {
|
||||||
|
|
||||||
bool static IsPassthroughEnabled(uint32_t user_index) {
|
bool static IsPassthroughEnabled() {
|
||||||
return static_cast<KeyboardMode>(cvars::keyboard_mode) ==
|
return static_cast<KeyboardMode>(cvars::keyboard_mode) ==
|
||||||
KeyboardMode::Passthrough;
|
KeyboardMode::Passthrough;
|
||||||
}
|
}
|
||||||
|
@ -272,6 +272,14 @@ X_RESULT WinKeyInputDriver::SetState(uint32_t user_index,
|
||||||
|
|
||||||
X_RESULT WinKeyInputDriver::GetKeystroke(uint32_t user_index, uint32_t flags,
|
X_RESULT WinKeyInputDriver::GetKeystroke(uint32_t user_index, uint32_t flags,
|
||||||
X_INPUT_KEYSTROKE* out_keystroke) {
|
X_INPUT_KEYSTROKE* out_keystroke) {
|
||||||
|
if (!is_active()) {
|
||||||
|
return X_ERROR_DEVICE_NOT_CONNECTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IsKeyboardForUserEnabled(user_index) && !IsPassthroughEnabled()) {
|
||||||
|
return X_ERROR_DEVICE_NOT_CONNECTED;
|
||||||
|
}
|
||||||
|
|
||||||
// Pop from the queue.
|
// Pop from the queue.
|
||||||
KeyEvent evt;
|
KeyEvent evt;
|
||||||
{
|
{
|
||||||
|
@ -284,15 +292,6 @@ X_RESULT WinKeyInputDriver::GetKeystroke(uint32_t user_index, uint32_t flags,
|
||||||
key_events_.pop();
|
key_events_.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!IsKeyboardForUserEnabled(user_index) &&
|
|
||||||
!IsPassthroughEnabled(user_index)) {
|
|
||||||
return X_ERROR_DEVICE_NOT_CONNECTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_active()) {
|
|
||||||
return X_ERROR_EMPTY;
|
|
||||||
}
|
|
||||||
|
|
||||||
X_RESULT result = X_ERROR_EMPTY;
|
X_RESULT result = X_ERROR_EMPTY;
|
||||||
|
|
||||||
ui::VirtualKey xinput_virtual_key = ui::VirtualKey::kNone;
|
ui::VirtualKey xinput_virtual_key = ui::VirtualKey::kNone;
|
||||||
|
@ -302,7 +301,7 @@ X_RESULT WinKeyInputDriver::GetKeystroke(uint32_t user_index, uint32_t flags,
|
||||||
|
|
||||||
bool capital = IsKeyToggled(VK_CAPITAL) || IsKeyDown(VK_SHIFT);
|
bool capital = IsKeyToggled(VK_CAPITAL) || IsKeyDown(VK_SHIFT);
|
||||||
|
|
||||||
if (!IsPassthroughEnabled(user_index)) {
|
if (!IsPassthroughEnabled()) {
|
||||||
if (IsKeyboardForUserEnabled(user_index)) {
|
if (IsKeyboardForUserEnabled(user_index)) {
|
||||||
for (const KeyBinding& b : key_bindings_) {
|
for (const KeyBinding& b : key_bindings_) {
|
||||||
if (b.input_key == evt.virtual_key &&
|
if (b.input_key == evt.virtual_key &&
|
||||||
|
@ -338,7 +337,7 @@ X_RESULT WinKeyInputDriver::GetKeystroke(uint32_t user_index, uint32_t flags,
|
||||||
keystroke_flags |= 0x0002; // XINPUT_KEYSTROKE_KEYUP
|
keystroke_flags |= 0x0002; // XINPUT_KEYSTROKE_KEYUP
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsPassthroughEnabled(user_index)) {
|
if (IsPassthroughEnabled()) {
|
||||||
if (GetKeyboardState(key_map_)) {
|
if (GetKeyboardState(key_map_)) {
|
||||||
WCHAR buf;
|
WCHAR buf;
|
||||||
if (ToUnicode(uint8_t(xinput_virtual_key), 0, key_map_, &buf, 1, 0) ==
|
if (ToUnicode(uint8_t(xinput_virtual_key), 0, key_map_, &buf, 1, 0) ==
|
||||||
|
@ -373,7 +372,8 @@ void WinKeyInputDriver::WinKeyWindowInputListener::OnKeyUp(ui::KeyEvent& e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void WinKeyInputDriver::OnKey(ui::KeyEvent& e, bool is_down) {
|
void WinKeyInputDriver::OnKey(ui::KeyEvent& e, bool is_down) {
|
||||||
if (!is_active()) {
|
if (!is_active() || static_cast<KeyboardMode>(cvars::keyboard_mode) ==
|
||||||
|
KeyboardMode::Disabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue