summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibKeyboard
diff options
context:
space:
mode:
authorIdan Horowitz <idan.horowitz@gmail.com>2022-01-21 15:22:36 +0200
committerAndreas Kling <kling@serenityos.org>2022-01-21 18:25:44 +0100
commit0adee378fd0486134bc059cd197ddf2d408328f4 (patch)
tree50075069553e1156e03bf096fc078a6b9d2f3191 /Userland/Libraries/LibKeyboard
parentcecfd42916d9376282126343c4ca01e8660ff9d5 (diff)
downloadserenity-0adee378fd0486134bc059cd197ddf2d408328f4.zip
Kernel: Stop using LibKeyboard's CharacterMap in HIDManagement
This was easily done, as the Kernel and Userland don't actually share any of the APIs exposed by it, so instead the Kernel APIs were moved to the Kernel, and the Userland APIs stayed in LibKeyboard. This has multiple advantages: * The non OOM-fallible String is not longer used for storing the character map name in the Kernel * The kernel no longer has to link to the userland LibKeyboard code * A lot of #ifdef KERNEL cruft can be removed from LibKeyboard
Diffstat (limited to 'Userland/Libraries/LibKeyboard')
-rw-r--r--Userland/Libraries/LibKeyboard/CharacterMap.cpp63
-rw-r--r--Userland/Libraries/LibKeyboard/CharacterMap.h11
2 files changed, 4 insertions, 70 deletions
diff --git a/Userland/Libraries/LibKeyboard/CharacterMap.cpp b/Userland/Libraries/LibKeyboard/CharacterMap.cpp
index 4d661f15bd..dec8014d0e 100644
--- a/Userland/Libraries/LibKeyboard/CharacterMap.cpp
+++ b/Userland/Libraries/LibKeyboard/CharacterMap.cpp
@@ -6,24 +6,18 @@
#include "CharacterMap.h"
#include <AK/StringBuilder.h>
-
-#ifndef KERNEL
-# include <LibKeyboard/CharacterMapFile.h>
-# include <serenity.h>
-#endif
+#include <LibKeyboard/CharacterMapFile.h>
+#include <errno.h>
+#include <serenity.h>
namespace Keyboard {
-#ifndef KERNEL
-// The Kernel explicitly and exclusively links only this file into it.
-// Thus, we cannot even include a reference to the symbol `CharacterMapFile::load_from_file`.
ErrorOr<CharacterMap> CharacterMap::load_from_file(const String& map_name)
{
auto result = TRY(CharacterMapFile::load_from_file(map_name));
return CharacterMap(map_name, result);
}
-#endif
CharacterMap::CharacterMap(const String& map_name, const CharacterMapData& map_data)
: m_character_map_data(map_data)
@@ -31,8 +25,6 @@ CharacterMap::CharacterMap(const String& map_name, const CharacterMapData& map_d
{
}
-#ifndef KERNEL
-
int CharacterMap::set_system_map()
{
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);
@@ -49,55 +41,6 @@ ErrorOr<CharacterMap> CharacterMap::fetch_system_map()
return CharacterMap { keymap_name, map_data };
}
-#endif
-
-u32 CharacterMap::get_char(KeyEvent event) const
-{
- auto modifiers = event.modifiers();
- auto index = event.scancode & 0xFF; // Index is last byte of scan code.
- auto caps_lock_on = event.caps_lock_on;
-
- u32 code_point;
- if (modifiers & Mod_Alt)
- code_point = m_character_map_data.alt_map[index];
- else if ((modifiers & Mod_Shift) && (modifiers & Mod_AltGr))
- code_point = m_character_map_data.shift_altgr_map[index];
- else if (modifiers & Mod_Shift)
- code_point = m_character_map_data.shift_map[index];
- else if (modifiers & Mod_AltGr)
- code_point = m_character_map_data.altgr_map[index];
- else
- code_point = m_character_map_data.map[index];
-
- if (caps_lock_on && (modifiers == 0 || modifiers == Mod_Shift)) {
- if (code_point >= 'a' && code_point <= 'z')
- code_point &= ~0x20;
- else if (code_point >= 'A' && code_point <= 'Z')
- code_point |= 0x20;
- }
-
- if (event.e0_prefix && event.key == Key_Slash) {
- // If Key_Slash (scancode = 0x35) mapped to other form "/", we fix num pad key of "/" with this case.
- code_point = '/';
- } else if (event.e0_prefix && event.key != Key_Return) {
- // Except for `keypad-/` and 'keypad-return', all e0 scan codes are not actually characters. i.e., `keypad-0` and
- // `Insert` have the same scancode except for the prefix, but insert should not have a code_point.
- code_point = 0;
- }
-
- return code_point;
-}
-
-void CharacterMap::set_character_map_data(CharacterMapData character_map_data)
-{
- m_character_map_data = character_map_data;
-}
-
-void CharacterMap::set_character_map_name(const String& character_map_name)
-{
- m_character_map_name = character_map_name;
-}
-
const String& CharacterMap::character_map_name() const
{
return m_character_map_name;
diff --git a/Userland/Libraries/LibKeyboard/CharacterMap.h b/Userland/Libraries/LibKeyboard/CharacterMap.h
index b4d00477db..7d3e96f176 100644
--- a/Userland/Libraries/LibKeyboard/CharacterMap.h
+++ b/Userland/Libraries/LibKeyboard/CharacterMap.h
@@ -6,11 +6,8 @@
#pragma once
-#ifndef KERNEL
-# include <AK/Error.h>
-#endif
+#include <AK/Error.h>
#include <AK/String.h>
-#include <Kernel/API/KeyCode.h>
#include <LibKeyboard/CharacterMapData.h>
namespace Keyboard {
@@ -21,14 +18,8 @@ public:
CharacterMap(const String& map_name, const CharacterMapData& map_data);
static ErrorOr<CharacterMap> load_from_file(const String& filename);
-#ifndef KERNEL
int set_system_map();
static ErrorOr<CharacterMap> fetch_system_map();
-#endif
-
- u32 get_char(KeyEvent) const;
- void set_character_map_data(CharacterMapData character_map_data);
- void set_character_map_name(const String& character_map_name);
const CharacterMapData& character_map_data() const { return m_character_map_data; };
const String& character_map_name() const;