diff options
Diffstat (limited to 'dinput/keybinding-worker.cpp')
-rw-r--r-- | dinput/keybinding-worker.cpp | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/dinput/keybinding-worker.cpp b/dinput/keybinding-worker.cpp index a3331323..3d792778 100644 --- a/dinput/keybinding-worker.cpp +++ b/dinput/keybinding-worker.cpp @@ -48,12 +48,12 @@ bool KeybindingWorker::init() } if (din->CreateDevice(GUID_SysKeyboard, &dinkeyboard, nullptr) != DI_OK) { - qDebug() << "setup CreateDevice function failed!" << GetLastError(); + qDebug() << "dinput: create keyboard failed" << GetLastError(); return false; } if (dinkeyboard->SetDataFormat(&c_dfDIKeyboard) != DI_OK) { - qDebug() << "setup SetDataFormat function failed!" << GetLastError(); + qDebug() << "dinput: keyboard SetDataFormat" << GetLastError(); dinkeyboard->Release(); dinkeyboard = nullptr; return false; @@ -62,34 +62,26 @@ bool KeybindingWorker::init() if (dinkeyboard->SetCooperativeLevel((HWND) fake_main_window.winId(), DISCL_NONEXCLUSIVE | DISCL_BACKGROUND) != DI_OK) { dinkeyboard->Release(); dinkeyboard = nullptr; - qDebug() << "setup SetCooperativeLevel function failed!" << GetLastError(); + qDebug() << "dinput: keyboard SetCooperativeLevel" << GetLastError(); return false; } { DIPROPDWORD dipdw; - dipdw.dwData = 128; + dipdw.dwData = num_keyboard_states; dipdw.diph.dwHeaderSize = sizeof(dipdw.diph); dipdw.diph.dwHow = DIPH_DEVICE; dipdw.diph.dwObj = 0; dipdw.diph.dwSize = sizeof(dipdw); if ( dinkeyboard->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph) != DI_OK) { - qDebug() << "setup keyboard buffer mode failed!"; + qDebug() << "dinput: DIPROP_BUFFERSIZE"; dinkeyboard->Release(); dinkeyboard = nullptr; return false; } } - if (dinkeyboard->Acquire() != DI_OK) - { - dinkeyboard->Release(); - dinkeyboard = nullptr; - qDebug() << "setup dinkeyboard Acquire failed!" << GetLastError(); - return false; - } - return true; } @@ -142,12 +134,15 @@ bool KeybindingWorker::run_keyboard_nolock() * Key-up events work on my end. */ + if (!di_t::poll_device(dinkeyboard)) + eval_once(qDebug() << "dinput: keyboard poll failed"); + DWORD sz = num_keyboard_states; - const HRESULT hr = dinkeyboard->GetDeviceData(sizeof(*keyboard_states), keyboard_states, &sz, 0); + HRESULT hr = dinkeyboard->GetDeviceData(sizeof(*keyboard_states), keyboard_states, &sz, 0); - if (hr != DI_OK) + if (FAILED(hr)) { - eval_once(qDebug() << "dinput: keyboard GetDeviceData failed" << hr); + eval_once(qDebug() << "dinput: keyboard GetDeviceData failed" << (void*)hr); return false; } @@ -210,7 +205,7 @@ bool KeybindingWorker::run_joystick_nolock() return true; } -KeybindingWorker::fun* KeybindingWorker::_add_receiver(fun& receiver) +KeybindingWorker::fun* KeybindingWorker::add_receiver(fun& receiver) { QMutexLocker l(&mtx); receivers.push_back(std::make_unique<fun>(receiver)); |