citra-qt: release all buttons when render window focus is lost
credit to @Hawkheart for the original idea
This commit is contained in:
parent
423ab5e2bc
commit
5245c86f26
|
@ -235,6 +235,11 @@ void GRenderWindow::mouseReleaseEvent(QMouseEvent* event) {
|
|||
motion_emu->EndTilt();
|
||||
}
|
||||
|
||||
void GRenderWindow::focusOutEvent(QFocusEvent* event) {
|
||||
QWidget::focusOutEvent(event);
|
||||
InputCommon::GetKeyboard()->ReleaseAllKeys();
|
||||
}
|
||||
|
||||
void GRenderWindow::ReloadSetKeymaps() {}
|
||||
|
||||
void GRenderWindow::OnClientAreaResized(unsigned width, unsigned height) {
|
||||
|
|
|
@ -128,6 +128,8 @@ public:
|
|||
void mouseMoveEvent(QMouseEvent* event) override;
|
||||
void mouseReleaseEvent(QMouseEvent* event) override;
|
||||
|
||||
void focusOutEvent(QFocusEvent* event) override;
|
||||
|
||||
void ReloadSetKeymaps();
|
||||
|
||||
void OnClientAreaResized(unsigned width, unsigned height);
|
||||
|
|
|
@ -53,6 +53,13 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
void ChangeAllKeyStatus(bool pressed) {
|
||||
std::lock_guard<std::mutex> guard(mutex);
|
||||
for (const KeyButtonPair& pair : list) {
|
||||
pair.key_button->status.store(pressed);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
std::mutex mutex;
|
||||
std::list<KeyButtonPair> list;
|
||||
|
@ -79,4 +86,8 @@ void Keyboard::ReleaseKey(int key_code) {
|
|||
key_button_list->ChangeKeyStatus(key_code, false);
|
||||
}
|
||||
|
||||
void Keyboard::ReleaseAllKeys() {
|
||||
key_button_list->ChangeAllKeyStatus(false);
|
||||
}
|
||||
|
||||
} // namespace InputCommon
|
||||
|
|
|
@ -38,6 +38,8 @@ public:
|
|||
*/
|
||||
void ReleaseKey(int key_code);
|
||||
|
||||
void ReleaseAllKeys();
|
||||
|
||||
private:
|
||||
std::shared_ptr<KeyButtonList> key_button_list;
|
||||
};
|
||||
|
|
Reference in New Issue