2020-05-31 16:23:55 +03:00
|
|
|
|
/*
|
|
|
|
|
|
* Copyright (c) 2020, Hüseyin Aslıtürk <asliturk@hotmail.com>
|
|
|
|
|
|
*
|
2021-04-22 01:24:48 -07:00
|
|
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
2020-05-31 16:23:55 +03:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#include "CharacterMap.h"
|
2020-06-13 13:51:20 +03:00
|
|
|
|
#include <AK/StringBuilder.h>
|
2022-01-21 15:22:36 +02:00
|
|
|
|
#include <LibKeyboard/CharacterMapFile.h>
|
|
|
|
|
|
#include <errno.h>
|
|
|
|
|
|
#include <serenity.h>
|
2021-02-03 23:15:13 +01:00
|
|
|
|
|
2020-05-31 16:23:55 +03:00
|
|
|
|
namespace Keyboard {
|
|
|
|
|
|
|
2021-12-16 17:46:49 +01:00
|
|
|
|
ErrorOr<CharacterMap> CharacterMap::load_from_file(const String& map_name)
|
2020-05-31 16:23:55 +03:00
|
|
|
|
{
|
2021-12-16 17:46:49 +01:00
|
|
|
|
auto result = TRY(CharacterMapFile::load_from_file(map_name));
|
2020-05-31 16:23:55 +03:00
|
|
|
|
|
2021-12-16 17:46:49 +01:00
|
|
|
|
return CharacterMap(map_name, result);
|
2021-01-30 22:01:34 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CharacterMap::CharacterMap(const String& map_name, const CharacterMapData& map_data)
|
|
|
|
|
|
: m_character_map_data(map_data)
|
|
|
|
|
|
, m_character_map_name(map_name)
|
|
|
|
|
|
{
|
2020-05-31 16:23:55 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int CharacterMap::set_system_map()
|
|
|
|
|
|
{
|
2021-02-03 23:15:13 +01:00
|
|
|
|
return setkeymap(m_character_map_name.characters(), m_character_map_data.map, m_character_map_data.shift_map, m_character_map_data.alt_map, m_character_map_data.altgr_map, m_character_map_data.shift_altgr_map);
|
2020-05-31 16:23:55 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-11-07 11:25:25 +01:00
|
|
|
|
ErrorOr<CharacterMap> CharacterMap::fetch_system_map()
|
2021-01-30 22:01:34 +01:00
|
|
|
|
{
|
|
|
|
|
|
CharacterMapData map_data;
|
|
|
|
|
|
char keymap_name[50 + 1] = { 0 };
|
|
|
|
|
|
|
2021-11-07 11:25:25 +01:00
|
|
|
|
if (getkeymap(keymap_name, sizeof(keymap_name), map_data.map, map_data.shift_map, map_data.alt_map, map_data.altgr_map, map_data.shift_altgr_map) < 0)
|
|
|
|
|
|
return Error::from_errno(errno);
|
2021-01-30 22:01:34 +01:00
|
|
|
|
|
|
|
|
|
|
return CharacterMap { keymap_name, map_data };
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-04-02 21:12:47 +03:00
|
|
|
|
const String& CharacterMap::character_map_name() const
|
2020-08-06 02:03:32 +03:00
|
|
|
|
{
|
|
|
|
|
|
return m_character_map_name;
|
|
|
|
|
|
}
|
2020-05-31 16:23:55 +03:00
|
|
|
|
}
|