summaryrefslogtreecommitdiffhomepage
path: root/dinput/keybinding-worker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dinput/keybinding-worker.cpp')
-rw-r--r--dinput/keybinding-worker.cpp29
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));