Skip to content

Commit

Permalink
KeyboardSettings: Convert KeyboardSettingsWidget to a failable factory
Browse files Browse the repository at this point in the history
  • Loading branch information
krkk authored and awesomekling committed Jun 10, 2023
1 parent 90819e2 commit 956a932
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 9 deletions.
22 changes: 15 additions & 7 deletions Userland/Applications/KeyboardSettings/KeyboardSettingsWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,26 +149,33 @@ class KeymapModel final : public GUI::Model {
DeprecatedString m_active_keymap;
};

KeyboardSettingsWidget::KeyboardSettingsWidget()
ErrorOr<NonnullRefPtr<KeyboardSettingsWidget>> KeyboardSettingsWidget::try_create()
{
load_from_gml(keyboard_widget_gml).release_value_but_fixme_should_propagate_errors();
auto proc_keymap = MUST(Core::File::open("/sys/kernel/keymap"sv, Core::File::OpenMode::Read));
auto widget = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) KeyboardSettingsWidget()));
TRY(widget->setup());
return widget;
}

ErrorOr<void> KeyboardSettingsWidget::setup()
{
TRY(load_from_gml(keyboard_widget_gml));
auto proc_keymap = TRY(Core::File::open("/sys/kernel/keymap"sv, Core::File::OpenMode::Read));

auto keymap = proc_keymap->read_until_eof().release_value_but_fixme_should_propagate_errors();
auto json = JsonValue::from_string(keymap).release_value_but_fixme_should_propagate_errors();
auto keymap = TRY(proc_keymap->read_until_eof());
auto json = TRY(JsonValue::from_string(keymap));
auto const& keymap_object = json.as_object();
VERIFY(keymap_object.has("keymap"sv));
m_initial_active_keymap = keymap_object.get_deprecated_string("keymap"sv).value();
dbgln("KeyboardSettings thinks the current keymap is: {}", m_initial_active_keymap);

auto mapper_config(Core::ConfigFile::open("/etc/Keyboard.ini").release_value_but_fixme_should_propagate_errors());
auto mapper_config(TRY(Core::ConfigFile::open("/etc/Keyboard.ini")));
auto keymaps = mapper_config->read_entry("Mapping", "Keymaps", "");

auto keymaps_vector = keymaps.split(',');

m_selected_keymaps_listview = find_descendant_of_type_named<GUI::ListView>("selected_keymaps");
m_selected_keymaps_listview->horizontal_scrollbar().set_visible(false);
m_selected_keymaps_listview->set_model(adopt_ref(*new KeymapModel()));
m_selected_keymaps_listview->set_model(TRY(try_make_ref_counted<KeymapModel>()));
auto& keymaps_list_model = static_cast<KeymapModel&>(*m_selected_keymaps_listview->model());

for (auto& keymap : keymaps_vector) {
Expand Down Expand Up @@ -267,6 +274,7 @@ KeyboardSettingsWidget::KeyboardSettingsWidget()
m_caps_lock_checkbox->on_checked = [&](auto) {
set_modified(true);
};
return {};
}

KeyboardSettingsWidget::~KeyboardSettingsWidget()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,18 @@
#include <LibGUI/TextEditor.h>

class KeyboardSettingsWidget final : public GUI::SettingsWindow::Tab {
C_OBJECT(KeyboardSettingsWidget)
C_OBJECT_ABSTRACT(KeyboardSettingsWidget)
public:
static ErrorOr<NonnullRefPtr<KeyboardSettingsWidget>> try_create();
virtual ~KeyboardSettingsWidget() override;

virtual void apply_settings() override;

void window_activated(bool is_active_window);

private:
KeyboardSettingsWidget();
KeyboardSettingsWidget() = default;
ErrorOr<void> setup();

void set_keymaps(Vector<DeprecatedString> const& keymaps, DeprecatedString const& active_keymap);

Expand Down

0 comments on commit 956a932

Please sign in to comment.