From 0fa3181d95582cdf165a9f9e1cfb08ab5bad158f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Mon, 31 Oct 2011 18:09:24 +0000 Subject: [PATCH] Implemented the patch on #7963 in a different way. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43037 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/input/InputServerTypes.h | 1 + .../devices/keyboard/KeyboardInputDevice.cpp | 9 +++++++++ .../devices/keyboard/KeyboardInputDevice.h | 1 + src/servers/input/InputServer.cpp | 13 +++++++++++-- src/servers/input/InputServer.h | 2 +- 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/headers/private/input/InputServerTypes.h b/headers/private/input/InputServerTypes.h index 68377e7851..7ba56de2ab 100644 --- a/headers/private/input/InputServerTypes.h +++ b/headers/private/input/InputServerTypes.h @@ -23,6 +23,7 @@ #define IS_GET_MOUSE_MAP 'Igmm' #define IS_SET_MOUSE_MAP 'Ismm' #define IS_GET_KEYBOARD_ID 'Igid' +#define IS_SET_KEYBOARD_ID 'Isid' #define IS_GET_CLICK_SPEED 'Igcs' #define IS_SET_CLICK_SPEED 'Iscs' #define IS_GET_KEY_REPEAT_RATE 'Igrr' diff --git a/src/add-ons/input_server/devices/keyboard/KeyboardInputDevice.cpp b/src/add-ons/input_server/devices/keyboard/KeyboardInputDevice.cpp index ef963d2621..a4c05f8c2b 100644 --- a/src/add-ons/input_server/devices/keyboard/KeyboardInputDevice.cpp +++ b/src/add-ons/input_server/devices/keyboard/KeyboardInputDevice.cpp @@ -131,6 +131,7 @@ KeyboardDevice::KeyboardDevice(KeyboardInputDevice* owner, const char* path) fThread(-1), fActive(false), fInputMethodStarted(false), + fKeyboardID(0), fUpdateSettings(false), fSettingsCommand(0), fKeymapLock("keymap lock") @@ -281,6 +282,14 @@ KeyboardDevice::_ControlThread() memset(states, 0, sizeof(states)); + if (fKeyboardID == 0) { + if (ioctl(fFD, KB_GET_KEYBOARD_ID, &fKeyboardID) == 0) { + BMessage message(IS_SET_KEYBOARD_ID); + message.AddInt16("id", fKeyboardID); + be_app->PostMessage(&message); + } + } + while (fActive) { if (ioctl(fFD, KB_READ, &keyInfo, sizeof(keyInfo)) != B_OK) { _ControlThreadCleanup(); diff --git a/src/add-ons/input_server/devices/keyboard/KeyboardInputDevice.h b/src/add-ons/input_server/devices/keyboard/KeyboardInputDevice.h index 1adc45c7aa..14a77c2885 100644 --- a/src/add-ons/input_server/devices/keyboard/KeyboardInputDevice.h +++ b/src/add-ons/input_server/devices/keyboard/KeyboardInputDevice.h @@ -61,6 +61,7 @@ private: uint32 fModifiers; uint32 fCommandKey; uint32 fControlKey; + uint16 fKeyboardID; volatile bool fUpdateSettings; volatile uint32 fSettingsCommand; diff --git a/src/servers/input/InputServer.cpp b/src/servers/input/InputServer.cpp index 8b44ef8eb5..a8c2e3c886 100644 --- a/src/servers/input/InputServer.cpp +++ b/src/servers/input/InputServer.cpp @@ -510,7 +510,10 @@ InputServer::MessageReceived(BMessage* message) status = HandleGetSetMouseMap(message, &reply); break; case IS_GET_KEYBOARD_ID: - status = HandleGetKeyboardID(message, &reply); + status = HandleGetSetKeyboardID(message, &reply); + break; + case IS_SET_KEYBOARD_ID: + status = HandleGetSetKeyboardID(message, &reply); break; case IS_GET_CLICK_SPEED: status = HandleGetSetClickSpeed(message, &reply); @@ -870,8 +873,14 @@ InputServer::HandleGetSetMouseMap(BMessage* message, BMessage* reply) status_t -InputServer::HandleGetKeyboardID(BMessage* message, BMessage* reply) +InputServer::HandleGetSetKeyboardID(BMessage* message, BMessage* reply) { + int16 id; +message->PrintToStream(); + if (message->FindInt16("id", &id) == B_OK) { + fKeyboardID = (uint16)id; + return B_OK; + } return reply->AddInt16("id", fKeyboardID); } diff --git a/src/servers/input/InputServer.h b/src/servers/input/InputServer.h index 44224790db..7b70b330ed 100644 --- a/src/servers/input/InputServer.h +++ b/src/servers/input/InputServer.h @@ -137,7 +137,7 @@ class InputServer : public BApplication { status_t HandleGetSetMouseSpeed(BMessage* message, BMessage* reply); status_t HandleSetMousePosition(BMessage* message, BMessage* reply); status_t HandleGetSetMouseMap(BMessage* message, BMessage* reply); - status_t HandleGetKeyboardID(BMessage* message, BMessage* reply); + status_t HandleGetSetKeyboardID(BMessage* message, BMessage* reply); status_t HandleGetSetClickSpeed(BMessage* message, BMessage* reply); status_t HandleGetSetKeyRepeatRate(BMessage* message, BMessage* reply); status_t HandleGetSetKeyMap(BMessage* message, BMessage* reply);