diff options
author | Tarek Soliman | 2011-10-21 22:54:33 -0500 |
---|---|---|
committer | Tarek Soliman | 2011-10-27 10:46:22 -0500 |
commit | a5082ffa5d12483f2e65fe653509989b1314164c (patch) | |
tree | 4520e7b2893856274100b23187f105499ab238f6 /backends | |
parent | ac85d134b31f770f27d085c0fe4c307e278c1875 (diff) | |
download | scummvm-rg350-a5082ffa5d12483f2e65fe653509989b1314164c.tar.gz scummvm-rg350-a5082ffa5d12483f2e65fe653509989b1314164c.tar.bz2 scummvm-rg350-a5082ffa5d12483f2e65fe653509989b1314164c.zip |
KEYMAPPER: Skip GUI keymap when displaying active keymap in keymapper dialog
This fixes a problem where opening the keymapper dialog would cause the current game
keymap to be displayed as the active keymap but then changing the keymap selection
back to it would cause the GUI keymap to be displayed as the active one. The GUI keymap
was indeed at the top of the stack but that's not the desired effect.
Also move the pushing and popping of the keymap to Dialog::Open/Close
Also constantify the GUI keymap name
Diffstat (limited to 'backends')
-rw-r--r-- | backends/keymapper/keymapper.h | 2 | ||||
-rw-r--r-- | backends/keymapper/remap-dialog.cpp | 12 |
2 files changed, 11 insertions, 3 deletions
diff --git a/backends/keymapper/keymapper.h b/backends/keymapper/keymapper.h index 347b9e0ec0..4722de5774 100644 --- a/backends/keymapper/keymapper.h +++ b/backends/keymapper/keymapper.h @@ -36,6 +36,8 @@ namespace Common { +const char *const kGuiKeymapName = "gui"; + class Keymapper : public Common::EventMapper, private Common::ArtificialEventSource { public: diff --git a/backends/keymapper/remap-dialog.cpp b/backends/keymapper/remap-dialog.cpp index 0882c69080..adbf199960 100644 --- a/backends/keymapper/remap-dialog.cpp +++ b/backends/keymapper/remap-dialog.cpp @@ -307,8 +307,14 @@ void RemapDialog::loadKeymap() { List<const HardwareKey*> freeKeys(_keymapper->getHardwareKeys()); + int topIndex = activeKeymaps.size() - 1; + // skip all gui maps + // TODO: Don't use the keymap name as a way to discriminate GUI maps + while (topIndex > 0 && activeKeymaps[topIndex].keymap->getName().equals(kGuiKeymapName)) + --topIndex; + // add most active keymap's keys - Keymapper::MapRecord top = activeKeymaps.top(); + Keymapper::MapRecord top = activeKeymaps[topIndex]; List<Action*>::iterator actIt; debug(3, "RemapDialog::loadKeymap top keymap: %s", top.keymap->getName().c_str()); for (actIt = top.keymap->getActions().begin(); actIt != top.keymap->getActions().end(); ++actIt) { @@ -322,8 +328,8 @@ void RemapDialog::loadKeymap() { } // loop through remaining finding mappings for unmapped keys - if (top.inherit) { - for (int i = activeKeymaps.size() - 2; i >= 0; --i) { + if (top.inherit && topIndex >= 0) { + for (int i = topIndex - 1; i >= 0; --i) { Keymapper::MapRecord mr = activeKeymaps[i]; debug(3, "RemapDialog::loadKeymap keymap: %s", mr.keymap->getName().c_str()); List<const HardwareKey*>::iterator keyIt = freeKeys.begin(); |