Qt: Fix ClearBindStateFromSource() executing on wrong thread

This commit is contained in:
Stenzek 2023-06-01 23:18:35 +10:00
parent af5f1c711c
commit 72f7225ec2
3 changed files with 13 additions and 1 deletions

View File

@ -690,7 +690,7 @@ void MainWindow::onApplicationStateChanged(Qt::ApplicationState state)
// Clear the state of all keyboard binds.
// That way, if we had a key held down, and lost focus, the bind won't be stuck enabled because we never
// got the key release message, because it happened in another window which "stole" the event.
InputManager::ClearBindStateFromSource(InputManager::MakeHostKeyboardKey(0));
g_emu_thread->clearInputBindStateFromSource(InputManager::MakeHostKeyboardKey(0));
}
else
{

View File

@ -1065,6 +1065,17 @@ void EmuThread::reloadPostProcessingShaders()
System::ReloadPostProcessingShaders();
}
void EmuThread::clearInputBindStateFromSource(InputBindingKey key)
{
if (!isOnThread())
{
QMetaObject::invokeMethod(this, "clearInputBindStateFromSource", Qt::QueuedConnection, Q_ARG(InputBindingKey, key));
return;
}
InputManager::ClearBindStateFromSource(key);
}
void EmuThread::runOnEmuThread(std::function<void()> callback)
{
callback();

View File

@ -187,6 +187,7 @@ public Q_SLOTS:
void setCheatEnabled(quint32 index, bool enabled);
void applyCheat(quint32 index);
void reloadPostProcessingShaders();
void clearInputBindStateFromSource(InputBindingKey key);
private Q_SLOTS:
void stopInThread();