Serenity Operating System
1/*
2 * Copyright (c) 2020, Hüseyin Aslıtürk <asliturk@hotmail.com>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include "CharacterMap.h"
8#include <AK/StringBuilder.h>
9#include <LibKeyboard/CharacterMapFile.h>
10#include <errno.h>
11#include <serenity.h>
12
13namespace Keyboard {
14
15ErrorOr<CharacterMap> CharacterMap::load_from_file(DeprecatedString const& map_name)
16{
17 auto result = TRY(CharacterMapFile::load_from_file(map_name));
18
19 return CharacterMap(map_name, result);
20}
21
22CharacterMap::CharacterMap(DeprecatedString const& map_name, CharacterMapData const& map_data)
23 : m_character_map_data(map_data)
24 , m_character_map_name(map_name)
25{
26}
27
28int CharacterMap::set_system_map()
29{
30 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);
31}
32
33ErrorOr<CharacterMap> CharacterMap::fetch_system_map()
34{
35 CharacterMapData map_data;
36 char keymap_name[50 + 1] = { 0 };
37
38 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)
39 return Error::from_errno(errno);
40
41 return CharacterMap { keymap_name, map_data };
42}
43
44DeprecatedString const& CharacterMap::character_map_name() const
45{
46 return m_character_map_name;
47}
48}