input_server: prepare for multiple mouse settings handling
Add MultipleMouseSettings class in input_server mouse settings code. It is identical to the one in input preferencdes, but manages a different implementation of the MouseSettings (which is kept as it was before) Change-Id: I4d96bb3702160c4ab9cf5411573e9609ee1f88a6 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3129 Reviewed-by: Adrien Destugues <[email protected]>
This commit is contained in:
committed by
Adrien Destugues
parent
82430c4028
commit
33f4d9b52b
@@ -30,10 +30,9 @@ static const bool kDefaultAcceptFirstClick = true;
|
|||||||
MouseSettings::MouseSettings()
|
MouseSettings::MouseSettings()
|
||||||
{
|
{
|
||||||
Defaults();
|
Defaults();
|
||||||
RetrieveSettings();
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Dump();
|
Dump();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fOriginalSettings = fSettings;
|
fOriginalSettings = fSettings;
|
||||||
@@ -43,9 +42,27 @@ MouseSettings::MouseSettings()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
MouseSettings::MouseSettings(mouse_settings* originalSettings)
|
||||||
|
{
|
||||||
|
Defaults();
|
||||||
|
fMode = mouse_mode();
|
||||||
|
fAcceptFirstClick = accept_first_click();
|
||||||
|
|
||||||
|
fOriginalSettings = *originalSettings;
|
||||||
|
fSettings = *originalSettings;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
Dump();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fOriginalMode = fMode;
|
||||||
|
fOriginalFocusFollowsMouseMode = fFocusFollowsMouseMode;
|
||||||
|
fOriginalAcceptFirstClick = fAcceptFirstClick;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
MouseSettings::~MouseSettings()
|
MouseSettings::~MouseSettings()
|
||||||
{
|
{
|
||||||
SaveSettings();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -92,31 +109,6 @@ MouseSettings::RetrieveSettings()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
|
||||||
MouseSettings::SaveSettings()
|
|
||||||
{
|
|
||||||
#ifdef DEBUG
|
|
||||||
Dump();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
BPath path;
|
|
||||||
status_t status = GetSettingsPath(path);
|
|
||||||
if (status < B_OK)
|
|
||||||
return status;
|
|
||||||
|
|
||||||
BFile file(path.Path(), B_READ_WRITE | B_CREATE_FILE);
|
|
||||||
status = file.InitCheck();
|
|
||||||
if (status != B_OK)
|
|
||||||
return status;
|
|
||||||
|
|
||||||
file.Write(&fSettings, sizeof(fSettings));
|
|
||||||
|
|
||||||
// who is responsible for saving the mouse mode and accept_first_click?
|
|
||||||
|
|
||||||
return B_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
void
|
void
|
||||||
MouseSettings::Dump()
|
MouseSettings::Dump()
|
||||||
@@ -270,3 +262,186 @@ MouseSettings::SetAcceptFirstClick(bool acceptFirstClick)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* MultiMouseSettings functions */
|
||||||
|
|
||||||
|
MultipleMouseSettings::MultipleMouseSettings()
|
||||||
|
{
|
||||||
|
fDeprecatedMouseSettings = NULL;
|
||||||
|
RetrieveSettings();
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
Dump();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
MultipleMouseSettings::~MultipleMouseSettings()
|
||||||
|
{
|
||||||
|
SaveSettings();
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
Dump();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
std::map<BString, MouseSettings*>::iterator itr;
|
||||||
|
for (itr = fMouseSettingsObject.begin(); itr != fMouseSettingsObject.end();
|
||||||
|
++itr)
|
||||||
|
delete itr->second;
|
||||||
|
|
||||||
|
delete fDeprecatedMouseSettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
MultipleMouseSettings::GetSettingsPath(BPath &path)
|
||||||
|
{
|
||||||
|
status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &path);
|
||||||
|
if (status < B_OK)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
path.Append(mouse_settings_file);
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MultipleMouseSettings::RetrieveSettings()
|
||||||
|
{
|
||||||
|
BPath path;
|
||||||
|
if (GetSettingsPath(path) < B_OK)
|
||||||
|
return;
|
||||||
|
|
||||||
|
BFile file(path.Path(), B_READ_ONLY);
|
||||||
|
if (file.InitCheck() < B_OK)
|
||||||
|
return;
|
||||||
|
|
||||||
|
BMessage message;
|
||||||
|
|
||||||
|
if (message.Unflatten(&file) == B_OK) {
|
||||||
|
int i = 0;
|
||||||
|
BString deviceName;
|
||||||
|
mouse_settings* settings;
|
||||||
|
ssize_t size = 0;
|
||||||
|
|
||||||
|
while (message.FindString("mouseDevice", i, &deviceName) == B_OK) {
|
||||||
|
message.FindData("mouseSettings", B_ANY_TYPE, i,
|
||||||
|
(const void**)&settings, &size);
|
||||||
|
MouseSettings* mouseSettings = new MouseSettings(settings);
|
||||||
|
fMouseSettingsObject.insert(std::pair<BString, MouseSettings*>
|
||||||
|
(deviceName, mouseSettings));
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fDeprecatedMouseSettings = new MouseSettings();
|
||||||
|
fDeprecatedMouseSettings->RetrieveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
MultipleMouseSettings::Archive(BMessage* into, bool deep) const
|
||||||
|
{
|
||||||
|
std::map<BString, MouseSettings*>::const_iterator itr;
|
||||||
|
for (itr = fMouseSettingsObject.begin(); itr != fMouseSettingsObject.end();
|
||||||
|
++itr) {
|
||||||
|
into->AddString("mouseDevice", itr->first);
|
||||||
|
into->AddData("mouseSettings", B_ANY_TYPE, itr->second->GetSettings(),
|
||||||
|
sizeof(*(itr->second->GetSettings())));
|
||||||
|
}
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
MultipleMouseSettings::SaveSettings()
|
||||||
|
{
|
||||||
|
BPath path;
|
||||||
|
status_t status = GetSettingsPath(path);
|
||||||
|
if (status < B_OK)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
BFile file(path.Path(), B_WRITE_ONLY | B_CREATE_FILE | B_ERASE_FILE);
|
||||||
|
status = file.InitCheck();
|
||||||
|
if (status != B_OK)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
BMessage message;
|
||||||
|
Archive(&message, true);
|
||||||
|
message.Flatten(&file);
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MultipleMouseSettings::Defaults()
|
||||||
|
{
|
||||||
|
std::map<BString, MouseSettings*>::iterator itr;
|
||||||
|
for (itr = fMouseSettingsObject.begin(); itr != fMouseSettingsObject.end();
|
||||||
|
++itr) {
|
||||||
|
itr->second->Defaults();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
void
|
||||||
|
MultipleMouseSettings::Dump()
|
||||||
|
{
|
||||||
|
std::map<const char*, mouse_settings>::iterator itr;
|
||||||
|
for (itr = fMultipleMouseSettings.begin();
|
||||||
|
itr != fMultipleMouseSettings.end(); ++itr) {
|
||||||
|
printf("mouse_name:\t%ld\n", itr->first);
|
||||||
|
itr->second->Dump();
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
MouseSettings*
|
||||||
|
MultipleMouseSettings::AddMouseSettings(BString mouse_name)
|
||||||
|
{
|
||||||
|
if(fDeprecatedMouseSettings != NULL) {
|
||||||
|
MouseSettings* RetrievedSettings = new (std::nothrow) MouseSettings
|
||||||
|
(*fDeprecatedMouseSettings);
|
||||||
|
|
||||||
|
if (RetrievedSettings != NULL) {
|
||||||
|
fMouseSettingsObject.insert(std::pair<BString, MouseSettings*>
|
||||||
|
(mouse_name, RetrievedSettings));
|
||||||
|
|
||||||
|
return RetrievedSettings;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<BString, MouseSettings*>::iterator itr;
|
||||||
|
itr = fMouseSettingsObject.find(mouse_name);
|
||||||
|
|
||||||
|
if (itr != fMouseSettingsObject.end())
|
||||||
|
return GetMouseSettings(mouse_name);
|
||||||
|
|
||||||
|
MouseSettings* settings = new (std::nothrow) MouseSettings();
|
||||||
|
|
||||||
|
if(settings !=NULL) {
|
||||||
|
fMouseSettingsObject.insert(std::pair<BString, MouseSettings*>
|
||||||
|
(mouse_name, settings));
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
MouseSettings*
|
||||||
|
MultipleMouseSettings::GetMouseSettings(BString mouse_name)
|
||||||
|
{
|
||||||
|
std::map<BString, MouseSettings*>::iterator itr;
|
||||||
|
itr = fMouseSettingsObject.find(mouse_name);
|
||||||
|
|
||||||
|
if (itr != fMouseSettingsObject.end())
|
||||||
|
return itr->second;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -18,15 +18,20 @@
|
|||||||
#ifndef MOUSE_SETTINGS_H_
|
#ifndef MOUSE_SETTINGS_H_
|
||||||
#define MOUSE_SETTINGS_H_
|
#define MOUSE_SETTINGS_H_
|
||||||
|
|
||||||
|
#include <Archivable.h>
|
||||||
#include <InterfaceDefs.h>
|
#include <InterfaceDefs.h>
|
||||||
#include <kb_mouse_settings.h>
|
#include <kb_mouse_settings.h>
|
||||||
#include <Path.h>
|
#include <Path.h>
|
||||||
|
#include <String.h>
|
||||||
#include <SupportDefs.h>
|
#include <SupportDefs.h>
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
|
||||||
class MouseSettings {
|
class MouseSettings {
|
||||||
public:
|
public:
|
||||||
MouseSettings();
|
MouseSettings();
|
||||||
|
MouseSettings(mouse_settings* originalSettings);
|
||||||
~MouseSettings();
|
~MouseSettings();
|
||||||
|
|
||||||
void Defaults();
|
void Defaults();
|
||||||
@@ -60,13 +65,18 @@ class MouseSettings {
|
|||||||
bool AcceptFirstClick() const { return fAcceptFirstClick; }
|
bool AcceptFirstClick() const { return fAcceptFirstClick; }
|
||||||
void SetAcceptFirstClick(bool acceptFirstClick);
|
void SetAcceptFirstClick(bool acceptFirstClick);
|
||||||
|
|
||||||
|
void RetrieveSettings();
|
||||||
status_t SaveSettings();
|
status_t SaveSettings();
|
||||||
|
|
||||||
|
const mouse_settings* GetSettings() { return &fSettings; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static status_t GetSettingsPath(BPath &path);
|
static status_t GetSettingsPath(BPath &path);
|
||||||
void RetrieveSettings();
|
|
||||||
|
|
||||||
mouse_settings fSettings, fOriginalSettings;
|
mouse_settings fSettings, fOriginalSettings;
|
||||||
|
|
||||||
|
// FIXME all these extra settings are not specific to each mouse.
|
||||||
|
// They should be moved into MultipleMouseSettings directly
|
||||||
mode_mouse fMode, fOriginalMode;
|
mode_mouse fMode, fOriginalMode;
|
||||||
mode_focus_follows_mouse fFocusFollowsMouseMode;
|
mode_focus_follows_mouse fFocusFollowsMouseMode;
|
||||||
mode_focus_follows_mouse fOriginalFocusFollowsMouseMode;
|
mode_focus_follows_mouse fOriginalFocusFollowsMouseMode;
|
||||||
@@ -74,4 +84,30 @@ class MouseSettings {
|
|||||||
bool fOriginalAcceptFirstClick;
|
bool fOriginalAcceptFirstClick;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
|
||||||
|
class MultipleMouseSettings: public BArchivable {
|
||||||
|
public:
|
||||||
|
MultipleMouseSettings();
|
||||||
|
~MultipleMouseSettings();
|
||||||
|
|
||||||
|
status_t Archive(BMessage* into, bool deep = false) const;
|
||||||
|
|
||||||
|
void Defaults();
|
||||||
|
void Dump();
|
||||||
|
status_t SaveSettings();
|
||||||
|
|
||||||
|
|
||||||
|
MouseSettings* AddMouseSettings(BString mouse_name);
|
||||||
|
MouseSettings* GetMouseSettings(BString mouse_name);
|
||||||
|
|
||||||
|
private:
|
||||||
|
static status_t GetSettingsPath(BPath &path);
|
||||||
|
void RetrieveSettings();
|
||||||
|
|
||||||
|
MouseSettings* fDeprecatedMouseSettings;
|
||||||
|
|
||||||
|
typedef std::map<BString, MouseSettings*> mouse_settings_object;
|
||||||
|
mouse_settings_object fMouseSettingsObject;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MOUSE_SETTINGS_H
|
||||||
|
|||||||
Reference in New Issue
Block a user