Index: chrome/browser/chromeos/preferences.cc |
diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc |
index 7a993d9434872667054883c22fcf10dffdb2c6a8..d5cbcd1c29f70def8a11e3eb086eeae125e30856 100644 |
--- a/chrome/browser/chromeos/preferences.cc |
+++ b/chrome/browser/chromeos/preferences.cc |
@@ -8,6 +8,7 @@ |
#include "base/utf_string_conversions.h" |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/chromeos/cros/cros_library.h" |
+#include "chrome/browser/chromeos/cros/keyboard_library.h" |
#include "chrome/browser/chromeos/cros/input_method_library.h" |
#include "chrome/browser/chromeos/cros/synaptics_library.h" |
#include "chrome/browser/chromeos/input_method/input_method_util.h" |
@@ -83,6 +84,9 @@ void Preferences::RegisterUserPrefs(PrefService* prefs) { |
prefs->RegisterIntegerPref(kMozcIntegerPrefs[i].pref_name, |
kMozcIntegerPrefs[i].default_pref_value); |
} |
+ prefs->RegisterIntegerPref( |
+ kXkbModifierMultipleChoicePrefs.pref_name, |
+ kXkbModifierMultipleChoicePrefs.default_pref_value); |
} |
void Preferences::Init(PrefService* prefs) { |
@@ -137,6 +141,8 @@ void Preferences::Init(PrefService* prefs) { |
language_mozc_integer_prefs_[i].Init( |
kMozcIntegerPrefs[i].pref_name, prefs, this); |
} |
+ language_xkb_modifier_remap_.Init( |
+ kXkbModifierMultipleChoicePrefs.pref_name, prefs, this); |
std::string locale(g_browser_process->GetApplicationLocale()); |
// Add input methods based on the application locale when the user first |
@@ -296,6 +302,32 @@ void Preferences::NotifyPrefChanged(const std::wstring* pref_name) { |
language_mozc_integer_prefs_[i].GetValue()); |
} |
} |
+ if (!pref_name || *pref_name == kXkbModifierMultipleChoicePrefs.pref_name) { |
+ chromeos::ModifierMap modifier_map; |
+ const int remap_type = language_xkb_modifier_remap_.GetValue(); |
+ switch (remap_type) { |
+ default: |
+ LOG(ERROR) << "Unknown XKB remapping type: " << remap_type; |
+ /* fall through */ |
+ case kNoRemap: |
+ modifier_map.push_back(ModifierKeyPair(kSearchKey, kSearchKey)); |
+ modifier_map.push_back( |
+ ModifierKeyPair(kLeftControlKey, kLeftControlKey)); |
+ modifier_map.push_back(ModifierKeyPair(kLeftAltKey, kLeftAltKey)); |
+ break; |
+ case kSwapCtrlAndAlt: |
+ modifier_map.push_back(ModifierKeyPair(kSearchKey, kSearchKey)); |
+ modifier_map.push_back(ModifierKeyPair(kLeftControlKey, kLeftAltKey)); |
+ modifier_map.push_back(ModifierKeyPair(kLeftAltKey, kLeftControlKey)); |
+ break; |
+ case kSwapSearchAndCtrl: |
+ modifier_map.push_back(ModifierKeyPair(kSearchKey, kLeftControlKey)); |
+ modifier_map.push_back(ModifierKeyPair(kLeftControlKey, kSearchKey)); |
+ modifier_map.push_back(ModifierKeyPair(kLeftAltKey, kLeftAltKey)); |
+ break; |
+ } |
+ CrosLibrary::Get()->GetKeyboardLibrary()->RemapModifierKeys(modifier_map); |
+ } |
} |
void Preferences::SetLanguageConfigBoolean(const char* section, |