mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Merge pull request #18786 from hrydgard/release-inputs-on-pause
Release all keys on pause.
This commit is contained in:
commit
cf1fd714fd
3 changed files with 40 additions and 0 deletions
|
@ -231,6 +231,42 @@ void ControlMapper::ForceReleaseVKey(int vkey) {
|
|||
KeyMap::UnlockMappings();
|
||||
}
|
||||
|
||||
void ControlMapper::ReleaseAll() {
|
||||
std::vector<AxisInput> axes;
|
||||
std::vector<KeyInput> keys;
|
||||
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(mutex_);
|
||||
|
||||
for (const auto &input : curInput_) {
|
||||
if (input.first.IsAxis()) {
|
||||
if (input.second.value != 0.0f) {
|
||||
AxisInput axis;
|
||||
axis.deviceId = input.first.deviceId;
|
||||
int dir;
|
||||
axis.axisId = (InputAxis)input.first.Axis(&dir);
|
||||
axis.value = 0.0;
|
||||
axes.push_back(axis);
|
||||
}
|
||||
} else {
|
||||
if (input.second.value != 0.0) {
|
||||
KeyInput key;
|
||||
key.deviceId = input.first.deviceId;
|
||||
key.flags = KEY_UP;
|
||||
key.keyCode = (InputKeyCode)input.first.keyCode;
|
||||
keys.push_back(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Axis(axes.data(), axes.size());;
|
||||
for (const auto &key : keys) {
|
||||
Key(key, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static int RotatePSPKeyCode(int x) {
|
||||
switch (x) {
|
||||
case CTRL_UP: return CTRL_RIGHT;
|
||||
|
|
|
@ -40,6 +40,9 @@ public:
|
|||
// Might replace this later by allowing through "key-up" and similar events to lower screens.
|
||||
void ForceReleaseVKey(int vkey);
|
||||
|
||||
// Call when the emu screen gets pushed behind some other screen, like the pause screen, to release all "down" inputs.
|
||||
void ReleaseAll();
|
||||
|
||||
void GetDebugString(char *buffer, size_t bufSize) const;
|
||||
|
||||
struct InputSample {
|
||||
|
|
|
@ -496,6 +496,7 @@ void EmuScreen::focusChanged(ScreenFocusChange focusChange) {
|
|||
switch (focusChange) {
|
||||
case ScreenFocusChange::FOCUS_LOST_TOP:
|
||||
g_Config.TimeTracker().Stop(gameID);
|
||||
controlMapper_.ReleaseAll();
|
||||
break;
|
||||
case ScreenFocusChange::FOCUS_BECAME_TOP:
|
||||
g_Config.TimeTracker().Start(gameID);
|
||||
|
|
Loading…
Add table
Reference in a new issue