Emulator Issues #9320

Hotkeys - Modifier keys inconsistencies

Added by eckso over 4 years ago. Updated 5 months ago.

Fix pending
% Done:


Operating system:
Issue type:
Relates to usability:
Relates to performance:
Relates to maintainability:
Regression start:
Fixed in:


Game Name?


What's the problem? Describe what went wrong.

Hotkeys produce different outcomes depending on how it was written along modifier keys.

What steps will reproduce the problem?

On hotkeys "Ctrl + Return" for Fullscreen toggle allows either Ctrl or Return to individually toggle Fullscreen. "Ctrl & Return" instead works as expected
"LShift & F1" would additionally execute F1 key as if it was pressed alone. "LShift + F1" instead works as expected.

Which versions of Dolphin did you test on? Does using an older version of Dolphin solve your issue? If yes, which versions of Dolphin used to work?


What are your PC specifications? (CPU, GPU, Operating System, more)

4670K, 750 Ti, Win7 SP1 x64

Related issues

Related to Emulator - Emulator Issues #6513: Change the behavior of pressing tab ingame.Fixed


#1 Updated by pauldacheez over 4 years ago

  • Status changed from New to Working as intended

I can see how this would be confusing, but it's not at all inconsistent – why would you expect two different logic operators to do the exact same thing?

There's a certain amount of complexity required here to make hotkeys and other keyboard/button mappings as flexible as we need them to be; for example, without both & and +, I wouldn't be able to simultaneously map a hotkey to a keyboard shortcut and a gamepad button. There's ways we can make this UI simpler and cover most of the common use cases, but considering that I have to manually work around gamepad-related issues all the time and the flexibility required for some of the issues is rarely present outside of Dolphin, I really don't want this part of the UI to change.

(That said, the whole logic-op UI should only be necessary for actual gamepads – keyboard shortcuts on actual keyboards are another matter entirely and could do with a good bit of simplification.)

#2 Updated by eckso over 4 years ago

I might have not understood you, please elaborate.

I guess you haven't read into the problem enough, I fear.
Let me rephrase that:

"Ctrl + Return" -> sends "Ctrl", "Return", and "Ctrl & Return"
"LShift & F1" -> sends "LShift", "F1", and "LShift & F1"

As you can see I do not expect different operators to do the same, I instead expect different operators to NOT DO the same.

My interpretation is that the first case "Ctrl + Return", works as intended, you sum, so you send both keys, separated, and together.
The second case is flawed, because with "&" LShift is not locking its following key "F1". I understand "&" as a conditional where one can't live without the other, hence behaviour is inconsistent.

Next time, quote the piece of text you find of importance in your links please.

#3 Updated by pauldacheez over 4 years ago

  • Status changed from Working as intended to New

Okay, never mind, I indeed misread that – the "LShift & F1" case definitely shouldn't be accepting the LShift or F1 keys on their own. Sorry, my reading comprehension hasn't been at its best recently.

Next time, quote the piece of text you find of importance in your links please.

I usually do, but sometimes it's more fun to make people skim long articles about complex topics so that they know enough about the topic to argue about it properly. As much as I enjoy marking dumb issues invalid, I prefer a fair argument with a well-informed opponent. Keepo

#4 Updated by eckso over 4 years ago

Might be worse than expected...

While I hold "Shift" key to press then F1, several savestates are being saved...

#5 Updated by eckso over 4 years ago

And I meant this even with "Shift+F1" (obviously also using &).

#6 Updated by Lucario over 4 years ago

You must thinking of hotkey overlapping problem. It's working as intended. You'd have to tell other hotkeys to not trigger when they see the certain key assigned with !NOT being pressed.

So if you've assigned F1 as savestate 1 and you want LSHIFT+F1 to go to fullscreen, you should assign like this:

LSHIFT & F1 for fullscreen
!LSHIFT & F1 for savestate 1

&AND and +ADD are two huge different thing.

&AND will wait for both parameters to active at the same time to trigger, meanwhile + will wait for either parameter to active to trigger.

Dunno the difference between +ADD and |OR >_>

#7 Updated by eckso over 4 years ago

It's hard to follow your reasoning. Wouldn't the ! had to be used for the F1? As I said the problem is F1 executing on its own, not LSHIFT, or is what you mean ! being used just right in the beginning of the whole hotkey combo (LSHIFT & F1 in this case)?

Also, this statement of you isn't what's happening:
"meanwhile + will wait for either parameter to active to trigger."

Take the working example of "LSHIFT + F1", I normally press LSHIFT first then F1, and as you would expect it required me for "both" to be pressed at some time at the same time, not "either parameter to active", that behavior is what actually |OR is for. I explained above in post #2 what "+" means.

#8 Updated by Billiard26 over 1 year ago

  • Relates to usability changed from No to Yes
  • Assignee set to Billiard26
  • Status changed from New to Accepted

Hotkey modifier mapping is bad and confusing because ControllerInterface wasn't really designed with hotkeys in mind.

I plan on changing some things to make modifiers behave as most users would expect when configuring hotkeys.

#9 Updated by Billiard26 9 months ago

  • Status changed from Accepted to Work started

I have a clean solution "on paper". I should have a fix soonish.

#10 Updated by Billiard26 9 months ago

#11 Updated by Billiard26 5 months ago

  • Status changed from Work started to Fix pending

Also available in: Atom PDF