From 7889cac6cf4c8b7b8378356eec3ab30a70650794 Mon Sep 17 00:00:00 2001 From: John Scipione Date: Sun, 12 May 2013 17:59:00 -0400 Subject: [PATCH] Keymap: Add Defaults button to revert keymap Fixes #9980 Since hrev44455 we save your modifier keys settings when you switch keymaps so you could get your modifiers keys messed up and unable to get back to normal. This Defaults button allows you to override all that and go back to the default US-International keymap with default modifiers so you can start with a fresh slate and set things up the way you want. Also moved Revert button to the left side next to the Defaults button. We do this on other preflets, the right side is reserved for an Apply or OK button, and, if the preflet doesn't have one, is left empty. --- src/preferences/keymap/Keymap.cpp | 19 ++++++++++++++ src/preferences/keymap/Keymap.h | 1 + src/preferences/keymap/KeymapWindow.cpp | 34 +++++++++++++++++++++---- src/preferences/keymap/KeymapWindow.h | 2 ++ 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/src/preferences/keymap/Keymap.cpp b/src/preferences/keymap/Keymap.cpp index e2225f9be4..0816da3de6 100644 --- a/src/preferences/keymap/Keymap.cpp +++ b/src/preferences/keymap/Keymap.cpp @@ -17,6 +17,8 @@ #include #include +#include +#include #include @@ -336,6 +338,23 @@ Keymap::SetDeadKeyTrigger(dead_key_index deadKeyIndex, const BString& trigger) } +status_t +Keymap::RestoreSystemDefault() +{ + BPath path; + status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &path); + if (status != B_OK) + return status; + + path.Append("Key_map"); + + BEntry entry(path.Path()); + entry.Remove(); + + return Use(); +} + + //! We make our input server use the map in /boot/home/config/settings/Keymap status_t Keymap::Use() diff --git a/src/preferences/keymap/Keymap.h b/src/preferences/keymap/Keymap.h index d604fcd47c..48e4349db2 100644 --- a/src/preferences/keymap/Keymap.h +++ b/src/preferences/keymap/Keymap.h @@ -48,6 +48,7 @@ public: void SetDeadKeyTrigger(dead_key_index deadKeyIndex, const BString& trigger); + status_t RestoreSystemDefault(); status_t Use(); void SetKey(uint32 keyCode, uint32 modifiers, diff --git a/src/preferences/keymap/KeymapWindow.cpp b/src/preferences/keymap/KeymapWindow.cpp index de078ef4f3..a9beba24c7 100644 --- a/src/preferences/keymap/KeymapWindow.cpp +++ b/src/preferences/keymap/KeymapWindow.cpp @@ -55,6 +55,7 @@ static const uint32 kMsgMenuFontChanged = 'mMFC'; static const uint32 kMsgSystemMapSelected = 'SmST'; static const uint32 kMsgUserMapSelected = 'UmST'; +static const uint32 kMsgDefaultKeymap = 'Dflt'; static const uint32 kMsgRevertKeymap = 'Rvrt'; static const uint32 kMsgKeymapUpdated = 'kMup'; @@ -67,6 +68,7 @@ static const uint32 kMsgDeadKeyTildeChanged = 'dkTc'; static const char* kDeadKeyTriggerNone = ""; static const char* kCurrentKeymapName = "(Current)"; +static const char* kDefaultKeymapName = "US-International"; KeymapWindow::KeymapWindow() @@ -85,9 +87,6 @@ KeymapWindow::KeymapWindow() fSwitchShortcutsButton = new BButton("switch", "", new BMessage(kMsgSwitchShortcuts)); - fRevertButton = new BButton("revertButton", B_TRANSLATE("Revert"), - new BMessage(kMsgRevertKeymap)); - // controls pane AddChild(BGroupLayoutBuilder(B_VERTICAL) .Add(_CreateMenu()) @@ -103,8 +102,12 @@ KeymapWindow::KeymapWindow() .Add(fTextControl) .AddGlue(0.0) .Add(BGroupLayoutBuilder(B_HORIZONTAL, 10) - .AddGlue(0.0) - .Add(fRevertButton))) + .Add(fDefaultsButton = new BButton("defaultsButton", + B_TRANSLATE("Defaults"), + new BMessage(kMsgDefaultKeymap))) + .Add(fRevertButton = new BButton("revertButton", + B_TRANSLATE("Revert"), new BMessage(kMsgRevertKeymap))) + .AddGlue())) .SetInsets(10, 10, 10, 10))); fKeyboardLayoutView->SetTarget(fTextControl->TextView()); @@ -292,6 +295,11 @@ KeymapWindow::MessageReceived(BMessage* message) break; } + case kMsgDefaultKeymap: + _DefaultKeymap(); + _UpdateButtons(); + break; + case kMsgRevertKeymap: _RevertKeymap(); _UpdateButtons(); @@ -735,6 +743,8 @@ KeymapWindow::_UpdateButtons() _UseKeymap(); } + fDefaultsButton->SetEnabled( + fCurrentMapName.ICompare(kDefaultKeymapName) != 0); fRevertButton->SetEnabled(fCurrentMap != fPreviousMap); _UpdateDeadKeyMenu(); @@ -763,6 +773,20 @@ KeymapWindow::_SwitchShortcutKeys() } +//! Restores the default keymap. +void +KeymapWindow::_DefaultKeymap() +{ + fCurrentMap.RestoreSystemDefault(); + fAppliedMap = fCurrentMap; + + fKeyboardLayoutView->SetKeymap(&fCurrentMap); + + fCurrentMapName = _GetActiveKeymapName(); + _SelectCurrentMap(); +} + + //! Saves previous map to the "Key_map" file. void KeymapWindow::_RevertKeymap() diff --git a/src/preferences/keymap/KeymapWindow.h b/src/preferences/keymap/KeymapWindow.h index a61f23b6a5..5796fe6d04 100644 --- a/src/preferences/keymap/KeymapWindow.h +++ b/src/preferences/keymap/KeymapWindow.h @@ -51,6 +51,7 @@ protected: void _SwitchShortcutKeys(); void _UseKeymap(); + void _DefaultKeymap(); void _RevertKeymap(); BMenuField* _CreateDeadKeyMenuField(); @@ -74,6 +75,7 @@ protected: private: BListView* fSystemListView; BListView* fUserListView; + BButton* fDefaultsButton; BButton* fRevertButton; BMenu* fLayoutMenu; BMenu* fFontMenu;