diff --git a/CONFIG/MainDlg.cpp b/CONFIG/MainDlg.cpp index dbbe4bc0..b1d49b23 100644 --- a/CONFIG/MainDlg.cpp +++ b/CONFIG/MainDlg.cpp @@ -758,15 +758,24 @@ void CMainDialog::ForwardKeyChanged() { void CMainDialog::RebindInput(QPushButton* &button, SDL_Scancode &key) { + SDL_InitSubSystem(SDL_INIT_EVENTS); button->setText(QString("Press a key...")); currentKeyBind = &key; + + inputWindow = SDL_CreateWindow("Press a key...", 256, 128, SDL_WINDOW_HIDDEN | SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_ALWAYS_ON_TOP | SDL_WINDOW_UTILITY | SDL_WINDOW_KEYBOARD_GRABBED); +#ifdef MINIWIN + hWnd = reinterpret_cast(inputWindow); +#else + hWnd = (HWND) SDL_GetPointerProperty(SDL_GetWindowProperties(inputWindow), SDL_PROP_WINDOW_WIN32_HWND_POINTER, NULL); +#endif + inputTimeout.setSingleShot(true); inputTimeout.setInterval(3 * 1000); sdlPoller.setSingleShot(false); sdlPoller.setInterval(10); connect(&inputTimeout, &QTimer::timeout, this, &CMainDialog::RebindTimeout); connect(&sdlPoller, &QTimer::timeout, this, &CMainDialog::PollInputs); - SDL_InitSubSystem(SDL_INIT_EVENTS); + SDL_ShowWindow(inputWindow); sdlPoller.start(); inputTimeout.start(); } @@ -781,6 +790,8 @@ void CMainDialog::PollInputs() *currentKeyBind = sc; sdlPoller.disconnect(); inputTimeout.disconnect(); + SDL_DestroyWindow(inputWindow); + m_modified = true; UpdateInterface(); } } @@ -791,5 +802,6 @@ void CMainDialog::RebindTimeout() SDL_Log("Timeout"); sdlPoller.disconnect(); inputTimeout.disconnect(); + SDL_DestroyWindow(inputWindow); UpdateInterface(); } diff --git a/CONFIG/MainDlg.h b/CONFIG/MainDlg.h index 5663e6f7..03559e5f 100644 --- a/CONFIG/MainDlg.h +++ b/CONFIG/MainDlg.h @@ -5,6 +5,12 @@ #include "decomp.h" #include "res/resource.h" +#ifdef MINIWIN +#include "miniwin/d3d.h" +#else +#include +#endif + #include #include #include @@ -33,6 +39,8 @@ class CMainDialog : public QDialog { QStringList assetPaths = QStringList(); Ui::MainDialog* m_ui = nullptr; SDL_DisplayMode** displayModes; + SDL_Window* inputWindow; + HWND hWnd; QTimer sdlPoller; QTimer inputTimeout; SDL_Scancode* currentKeyBind = nullptr;