CharacterMap.cpp 1.3 KB

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