diff --git a/headers/private/input/InputServerTypes.h b/headers/private/input/InputServerTypes.h index d7f69716e2..7ccec544d4 100644 --- a/headers/private/input/InputServerTypes.h +++ b/headers/private/input/InputServerTypes.h @@ -40,6 +40,7 @@ #define SYSTEM_SHUTTING_DOWN 'SSDn' #define IS_SAVE_SETTINGS 'Isst' +#define IS_SAVE_KEYMAP 'Iskp' // app_server communication #define IS_ACQUIRE_INPUT 'Iaqi' diff --git a/src/servers/input/InputServer.cpp b/src/servers/input/InputServer.cpp index 9d7257f58f..2629c71ea6 100644 --- a/src/servers/input/InputServer.cpp +++ b/src/servers/input/InputServer.cpp @@ -322,6 +322,13 @@ InputServer::_LoadSystemKeymap() memcpy(fChars, kSystemKeyChars, fCharsSize); // TODO: why are we doing this? + return _SaveKeymap(); +} + + +status_t +InputServer::_SaveKeymap() +{ // we save this keymap to file BPath path; if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK) @@ -585,6 +592,10 @@ InputServer::MessageReceived(BMessage* message) fMouseSettings.SaveSettings(); return; + case IS_SAVE_KEYMAP: + _SaveKeymap(); + return; + case B_SOME_APP_LAUNCHED: { const char *signature; @@ -738,6 +749,8 @@ InputServer::HandleSetModifierKey(BMessage* message, BMessage* reply) // TODO: unmap the key ? + be_app_messenger.SendMessage(IS_SAVE_KEYMAP); + BMessage msg(IS_CONTROL_DEVICES); msg.AddInt32("type", B_KEYBOARD_DEVICE); msg.AddInt32("code", B_KEY_MAP_CHANGED); @@ -752,6 +765,8 @@ status_t InputServer::HandleSetKeyboardLocks(BMessage* message, BMessage* reply) { if (message->FindInt32("locks", (int32*)&fKeys.lock_settings) == B_OK) { + be_app_messenger.SendMessage(IS_SAVE_KEYMAP); + BMessage msg(IS_CONTROL_DEVICES); msg.AddInt32("type", B_KEYBOARD_DEVICE); msg.AddInt32("code", B_KEY_LOCKS_CHANGED); diff --git a/src/servers/input/InputServer.h b/src/servers/input/InputServer.h index d1653f9eca..e5273322dd 100644 --- a/src/servers/input/InputServer.h +++ b/src/servers/input/InputServer.h @@ -171,6 +171,7 @@ class InputServer : public BApplication { status_t _LoadKeymap(); status_t _LoadSystemKeymap(); + status_t _SaveKeymap(); void _InitKeyboardMouseStates(); status_t _StartEventLoop();