input_server: manage settings for multiple mouses

Change-Id: Ib879ab30057e365cf96e4b9e6295489b8aa1199a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3128
Reviewed-by: Adrien Destugues <[email protected]>
This commit is contained in:
Adrien Destugues
2020-09-10 17:15:09 +00:00
committed by Adrien Destugues
parent 33f4d9b52b
commit 68c67d9c5a
2 changed files with 108 additions and 12 deletions
+107 -11
View File
@@ -634,9 +634,23 @@ InputServer::HandleSetMethod(BMessage* message)
status_t
InputServer::HandleGetSetMouseType(BMessage* message, BMessage* reply)
{
BString mouseName;
MouseSettings* settings = NULL;
if (message->FindString("mouse_name", &mouseName) == B_OK) {
settings = fMouseSettings.GetMouseSettings(mouseName);
if (settings == NULL)
return B_NAME_NOT_FOUND;
}
int32 type;
if (message->FindInt32("mouse_type", &type) == B_OK) {
fMouseSettings.SetMouseType(type);
if (settings != NULL)
settings->SetMouseType(type);
else {
// TODO if no mouse_name was specified, apply the setting to
// all mouses
return B_NOT_SUPPORTED;
}
be_app_messenger.SendMessage(IS_SAVE_SETTINGS);
BMessage msg(IS_CONTROL_DEVICES);
@@ -645,7 +659,13 @@ InputServer::HandleGetSetMouseType(BMessage* message, BMessage* reply)
return fAddOnManager->PostMessage(&msg);
}
return reply->AddInt32("mouse_type", fMouseSettings.MouseType());
if (settings != NULL) {
return reply->AddInt32("mouse_type",
settings->MouseType());
} else {
// TODO return type of the "first" mouse?
return B_NOT_SUPPORTED;
}
}
@@ -653,9 +673,23 @@ status_t
InputServer::HandleGetSetMouseAcceleration(BMessage* message,
BMessage* reply)
{
BString mouseName;
MouseSettings* settings = NULL;
if (message->FindString("mouse_name", &mouseName) == B_OK) {
settings = fMouseSettings.GetMouseSettings(mouseName);
if (settings == NULL)
return B_NAME_NOT_FOUND;
}
int32 factor;
if (message->FindInt32("speed", &factor) == B_OK) {
fMouseSettings.SetAccelerationFactor(factor);
if (settings != NULL)
settings->SetAccelerationFactor(factor);
else {
// TODO if no mouse_name was specified, apply the setting to
// all mouses
return B_NOT_SUPPORTED;
}
be_app_messenger.SendMessage(IS_SAVE_SETTINGS);
BMessage msg(IS_CONTROL_DEVICES);
@@ -664,7 +698,12 @@ InputServer::HandleGetSetMouseAcceleration(BMessage* message,
return fAddOnManager->PostMessage(&msg);
}
return reply->AddInt32("speed", fMouseSettings.AccelerationFactor());
if (settings != NULL)
return reply->AddInt32("speed", settings->AccelerationFactor());
else {
// TODO return type of the "first" mouse?
return B_NOT_SUPPORTED;
}
}
@@ -817,9 +856,23 @@ InputServer::HandleSetKeyboardLocks(BMessage* message, BMessage* reply)
status_t
InputServer::HandleGetSetMouseSpeed(BMessage* message, BMessage* reply)
{
BString mouseName;
MouseSettings* settings = NULL;
if (message->FindString("mouse_name", &mouseName) == B_OK) {
settings = fMouseSettings.GetMouseSettings(mouseName);
if (settings == NULL)
return B_NAME_NOT_FOUND;
}
int32 speed;
if (message->FindInt32("speed", &speed) == B_OK) {
fMouseSettings.SetMouseSpeed(speed);
if (settings != NULL)
settings->SetMouseSpeed(speed);
else {
// TODO if no mouse_name was specified, apply the setting to
// all mouses
return B_NOT_SUPPORTED;
}
be_app_messenger.SendMessage(IS_SAVE_SETTINGS);
BMessage msg(IS_CONTROL_DEVICES);
@@ -828,7 +881,12 @@ InputServer::HandleGetSetMouseSpeed(BMessage* message, BMessage* reply)
return fAddOnManager->PostMessage(&msg);
}
return reply->AddInt32("speed", fMouseSettings.MouseSpeed());
if (settings != NULL)
return reply->AddInt32("speed", settings->MouseSpeed());
else {
// TODO return type of the "first" mouse?
return B_NOT_SUPPORTED;
}
}
@@ -861,20 +919,39 @@ InputServer::HandleSetMousePosition(BMessage* message, BMessage* reply)
status_t
InputServer::HandleGetSetMouseMap(BMessage* message, BMessage* reply)
{
BString mouseName;
MouseSettings* settings = NULL;
if (message->FindString("mouse_name", &mouseName) == B_OK) {
settings = fMouseSettings.GetMouseSettings(mouseName);
if (settings == NULL)
return B_NAME_NOT_FOUND;
}
mouse_map *map;
ssize_t size;
if (message->FindData("mousemap", B_RAW_TYPE, (const void**)&map, &size) == B_OK) {
fMouseSettings.SetMapping(*map);
if (settings != NULL)
settings->SetMapping(*map);
else {
// TODO if no mouse_name was specified, apply the setting to
// all mouses
return B_NOT_SUPPORTED;
}
be_app_messenger.SendMessage(IS_SAVE_SETTINGS);
BMessage msg(IS_CONTROL_DEVICES);
msg.AddInt32("type", B_POINTING_DEVICE);
msg.AddInt32("code", B_MOUSE_MAP_CHANGED);
return fAddOnManager->PostMessage(&msg);
} else {
}
if (settings != NULL) {
mouse_map map;
fMouseSettings.Mapping(map);
settings->Mapping(map);
return reply->AddData("mousemap", B_RAW_TYPE, &map, sizeof(mouse_map));
} else {
// TODO return type of the "first" mouse?
return B_NOT_SUPPORTED;
}
}
@@ -894,9 +971,23 @@ InputServer::HandleGetSetKeyboardID(BMessage* message, BMessage* reply)
status_t
InputServer::HandleGetSetClickSpeed(BMessage* message, BMessage* reply)
{
BString mouseName;
MouseSettings* settings = NULL;
if (message->FindString("mouse_name", &mouseName) == B_OK) {
settings = fMouseSettings.GetMouseSettings(mouseName);
if (settings == NULL)
return B_NAME_NOT_FOUND;
}
bigtime_t clickSpeed;
if (message->FindInt64("speed", &clickSpeed) == B_OK) {
fMouseSettings.SetClickSpeed(clickSpeed);
if (settings != NULL)
settings->SetClickSpeed(clickSpeed);
else {
// TODO if no mouse_name was specified, apply the setting to
// all mouses
return B_NOT_SUPPORTED;
}
be_app_messenger.SendMessage(IS_SAVE_SETTINGS);
BMessage msg(IS_CONTROL_DEVICES);
@@ -905,7 +996,12 @@ InputServer::HandleGetSetClickSpeed(BMessage* message, BMessage* reply)
return fAddOnManager->PostMessage(&msg);
}
return reply->AddInt64("speed", fMouseSettings.ClickSpeed());
if (settings != NULL) {
return reply->AddInt64("speed", settings->ClickSpeed());
} else {
// TODO return type of the "first" mouse?
return B_NOT_SUPPORTED;
}
}
+1 -1
View File
@@ -212,7 +212,7 @@ class InputServer : public BApplication {
BLocker fInputDeviceListLocker;
KeyboardSettings fKeyboardSettings;
MouseSettings fMouseSettings;
MultipleMouseSettings fMouseSettings;
BPoint fMousePos; // current mouse position
key_info fKeyInfo; // current key info