diff --git a/Userland/Applications/KeyboardSettings/CMakeLists.txt b/Userland/Applications/KeyboardSettings/CMakeLists.txt index 8de2daeda6..e87afc7756 100644 --- a/Userland/Applications/KeyboardSettings/CMakeLists.txt +++ b/Userland/Applications/KeyboardSettings/CMakeLists.txt @@ -4,17 +4,14 @@ serenity_component( TARGETS KeyboardSettings ) -stringify_gml(Keyboard.gml KeyboardWidgetGML.h keyboard_widget_gml) -stringify_gml(KeymapDialog.gml KeymapDialogGML.h keymap_dialog_gml) +compile_gml(Keyboard.gml KeyboardWidgetGML.cpp) +compile_gml(KeymapDialog.gml KeymapDialogGML.cpp) set(SOURCES KeyboardSettingsWidget.cpp main.cpp -) - -set(GENERATED_SOURCES - KeyboardWidgetGML.h - KeymapDialogGML.h + KeyboardWidgetGML.cpp + KeymapDialogGML.cpp ) serenity_app(KeyboardSettings ICON app-keyboard-settings) diff --git a/Userland/Applications/KeyboardSettings/Keyboard.gml b/Userland/Applications/KeyboardSettings/Keyboard.gml index b3785c8c9f..b7ffadccd2 100644 --- a/Userland/Applications/KeyboardSettings/Keyboard.gml +++ b/Userland/Applications/KeyboardSettings/Keyboard.gml @@ -1,4 +1,4 @@ -@GUI::Frame { +@KeyboardSettings::KeyboardSettingsWidget { fill_with_background_color: true layout: @GUI::VerticalBoxLayout { margins: [8] diff --git a/Userland/Applications/KeyboardSettings/KeyboardSettingsWidget.cpp b/Userland/Applications/KeyboardSettings/KeyboardSettingsWidget.cpp index 755fee6999..937c50cad4 100644 --- a/Userland/Applications/KeyboardSettings/KeyboardSettingsWidget.cpp +++ b/Userland/Applications/KeyboardSettings/KeyboardSettingsWidget.cpp @@ -8,10 +8,9 @@ */ #include "KeyboardSettingsWidget.h" +#include "KeymapDialog.h" #include #include -#include -#include #include #include #include @@ -29,6 +28,7 @@ #include #include +namespace KeyboardSettings { class KeymapSelectionDialog final : public GUI::Dialog { C_OBJECT(KeymapSelectionDialog) public: @@ -36,7 +36,13 @@ public: static ByteString select_keymap(Window* parent_window, Vector const& selected_keymaps) { - auto dialog = KeymapSelectionDialog::construct(parent_window, selected_keymaps); + auto dialog_or_error = KeymapSelectionDialog::create(parent_window, selected_keymaps); + if (dialog_or_error.is_error()) { + GUI::MessageBox::show(parent_window, "Couldn't load \"add keymap\" dialog"sv, "Error while opening \"add keymap\" dialog"sv, GUI::MessageBox::Type::Error); + return ByteString::empty(); + } + + auto dialog = dialog_or_error.release_value(); dialog->set_title("Add a keymap"); if (dialog->exec() == ExecResult::OK) { @@ -49,11 +55,17 @@ public: ByteString selected_keymap() { return m_selected_keymap; } private: - KeymapSelectionDialog(Window* parent_window, Vector const& selected_keymaps) + static ErrorOr> create(Window* parent_window, Vector const& selected_keymaps) + { + auto widget = TRY(KeyboardSettings::KeymapDialog::try_create()); + auto dialog = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) KeymapSelectionDialog(parent_window, selected_keymaps, widget))); + return dialog; + } + + KeymapSelectionDialog(Window* parent_window, Vector const& selected_keymaps, NonnullRefPtr widget) : Dialog(parent_window) { - auto widget = set_main_widget(); - widget->load_from_gml(keymap_dialog_gml).release_value_but_fixme_should_propagate_errors(); + set_main_widget(widget); set_resizable(false); resize(190, 54); @@ -149,16 +161,15 @@ private: ByteString m_active_keymap; }; -ErrorOr> KeyboardSettingsWidget::try_create() +ErrorOr> KeyboardSettingsWidget::create() { - auto widget = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) KeyboardSettingsWidget())); + auto widget = TRY(try_create()); TRY(widget->setup()); return widget; } ErrorOr 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 = TRY(proc_keymap->read_until_eof()); @@ -327,3 +338,5 @@ ErrorOr KeyboardSettingsWidget::read_caps_lock_to_ctrl_sys_variable() StringView contents_string((char const*)buffer.data(), min(1, buffer.size())); return contents_string == "1"; } + +} diff --git a/Userland/Applications/KeyboardSettings/KeyboardSettingsWidget.h b/Userland/Applications/KeyboardSettings/KeyboardSettingsWidget.h index 15eb7c4a7e..94e06d69c4 100644 --- a/Userland/Applications/KeyboardSettings/KeyboardSettingsWidget.h +++ b/Userland/Applications/KeyboardSettings/KeyboardSettingsWidget.h @@ -15,17 +15,20 @@ #include #include +namespace KeyboardSettings { + class KeyboardSettingsWidget final : public GUI::SettingsWindow::Tab { C_OBJECT_ABSTRACT(KeyboardSettingsWidget) public: - static ErrorOr> try_create(); virtual ~KeyboardSettingsWidget() override; virtual void apply_settings() override; void window_activated(bool is_active_window); + static ErrorOr> create(); private: + static ErrorOr> try_create(); KeyboardSettingsWidget() = default; ErrorOr setup(); @@ -50,3 +53,5 @@ private: Function m_activate_keymap_event; }; + +} diff --git a/Userland/Applications/KeyboardSettings/KeymapDialog.gml b/Userland/Applications/KeyboardSettings/KeymapDialog.gml index f9c0a0aafe..cdcaf5f065 100644 --- a/Userland/Applications/KeyboardSettings/KeymapDialog.gml +++ b/Userland/Applications/KeyboardSettings/KeymapDialog.gml @@ -1,4 +1,4 @@ -@GUI::Widget { +@KeyboardSettings::KeymapDialog { fill_with_background_color: true layout: @GUI::VerticalBoxLayout { margins: [4] diff --git a/Userland/Applications/KeyboardSettings/KeymapDialog.h b/Userland/Applications/KeyboardSettings/KeymapDialog.h new file mode 100644 index 0000000000..9c9a3c0bca --- /dev/null +++ b/Userland/Applications/KeyboardSettings/KeymapDialog.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2024, Sanil Gupta . + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace KeyboardSettings { + +class KeymapDialog : public GUI::Widget { + C_OBJECT_ABSTRACT(KeymapDialog) +public: + static ErrorOr> try_create(); + virtual ~KeymapDialog() override = default; + +private: + KeymapDialog() = default; +}; + +} diff --git a/Userland/Applications/KeyboardSettings/main.cpp b/Userland/Applications/KeyboardSettings/main.cpp index 8837727488..3a1da59dd2 100644 --- a/Userland/Applications/KeyboardSettings/main.cpp +++ b/Userland/Applications/KeyboardSettings/main.cpp @@ -37,7 +37,9 @@ ErrorOr serenity_main(Main::Arguments arguments) auto window = TRY(GUI::SettingsWindow::create("Keyboard Settings")); window->set_icon(app_icon.bitmap_for_size(16)); - auto keyboard_settings_widget = TRY(window->add_tab("Keyboard"_string, "keyboard"sv)); + + auto keyboard_settings_widget = TRY(KeyboardSettings::KeyboardSettingsWidget::create()); + TRY(window->add_tab(keyboard_settings_widget, "Keyboard"_string, "keyboard"sv)); window->set_active_tab(selected_tab); window->on_active_window_change = [&](bool is_active_window) {