summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/Applications/KeyboardMapper/KeyboardMapperWidget.cpp58
-rw-r--r--Userland/Applications/KeyboardMapper/KeyboardMapperWidget.h9
-rw-r--r--Userland/Applications/KeyboardMapper/main.cpp27
3 files changed, 41 insertions, 53 deletions
diff --git a/Userland/Applications/KeyboardMapper/KeyboardMapperWidget.cpp b/Userland/Applications/KeyboardMapper/KeyboardMapperWidget.cpp
index ef6e6d846e..14187f3e6e 100644
--- a/Userland/Applications/KeyboardMapper/KeyboardMapperWidget.cpp
+++ b/Userland/Applications/KeyboardMapper/KeyboardMapperWidget.cpp
@@ -114,17 +114,12 @@ u32* KeyboardMapperWidget::map_from_name(const StringView map_name)
return map;
}
-void KeyboardMapperWidget::load_from_file(String filename)
+ErrorOr<void> KeyboardMapperWidget::load_map_from_file(const String& filename)
{
- auto result = Keyboard::CharacterMapFile::load_from_file(filename);
- if (!result.has_value()) {
- auto error_message = String::formatted("Failed to load character map from file {}", filename);
- GUI::MessageBox::show(window(), error_message, "Error", GUI::MessageBox::Type::Error);
- return;
- }
+ auto character_map = TRY(Keyboard::CharacterMapFile::load_from_file(filename));
m_filename = filename;
- m_character_map = result.value();
+ m_character_map = character_map;
set_current_map("map");
for (auto& widget : m_map_group->child_widgets()) {
@@ -133,15 +128,15 @@ void KeyboardMapperWidget::load_from_file(String filename)
}
update_window_title();
+ return {};
}
-void KeyboardMapperWidget::load_from_system()
+ErrorOr<void> KeyboardMapperWidget::load_map_from_system()
{
- auto result = Keyboard::CharacterMap::fetch_system_map();
- VERIFY(!result.is_error());
+ auto character_map = TRY(Keyboard::CharacterMap::fetch_system_map());
- m_filename = String::formatted("/res/keymaps/{}.json", result.value().character_map_name());
- m_character_map = result.value().character_map_data();
+ m_filename = String::formatted("/res/keymaps/{}.json", character_map.character_map_name());
+ m_character_map = character_map.character_map_data();
set_current_map("map");
for (auto& widget : m_map_group->child_widgets()) {
@@ -150,14 +145,15 @@ void KeyboardMapperWidget::load_from_system()
}
update_window_title();
+ return {};
}
-void KeyboardMapperWidget::save()
+ErrorOr<void> KeyboardMapperWidget::save()
{
- save_to_file(m_filename);
+ return save_to_file(m_filename);
}
-void KeyboardMapperWidget::save_to_file(StringView filename)
+ErrorOr<void> KeyboardMapperWidget::save_to_file(StringView filename)
{
JsonObject map_json;
@@ -182,34 +178,16 @@ void KeyboardMapperWidget::save_to_file(StringView filename)
// Write to file.
String file_content = map_json.to_string();
-
- auto file = Core::File::construct(filename);
- file->open(Core::OpenMode::WriteOnly);
- if (!file->is_open()) {
- StringBuilder sb;
- sb.append("Failed to open ");
- sb.append(filename);
- sb.append(" for write. Error: ");
- sb.append(file->error_string());
-
- GUI::MessageBox::show(window(), sb.to_string(), "Error", GUI::MessageBox::Type::Error);
- return;
- }
+ auto file = TRY(Core::File::open(filename, Core::OpenMode::WriteOnly));
bool result = file->write(file_content);
- if (!result) {
- int error_number = errno;
- StringBuilder sb;
- sb.append("Unable to save file. Error: ");
- sb.append(strerror(error_number));
-
- GUI::MessageBox::show(window(), sb.to_string(), "Error", GUI::MessageBox::Type::Error);
- return;
- }
+ if (!result)
+ return Error::from_errno(file->error());
m_modified = false;
m_filename = filename;
update_window_title();
+ return {};
}
void KeyboardMapperWidget::keydown_event(GUI::KeyEvent& event)
@@ -265,3 +243,7 @@ void KeyboardMapperWidget::update_window_title()
window()->set_title(sb.to_string());
}
+
+void KeyboardMapperWidget::show_error_to_user(Error error){
+ GUI::MessageBox::show_error(window(), error.string_literal());
+} \ No newline at end of file
diff --git a/Userland/Applications/KeyboardMapper/KeyboardMapperWidget.h b/Userland/Applications/KeyboardMapper/KeyboardMapperWidget.h
index c1cee773ce..810d1b1f1b 100644
--- a/Userland/Applications/KeyboardMapper/KeyboardMapperWidget.h
+++ b/Userland/Applications/KeyboardMapper/KeyboardMapperWidget.h
@@ -17,10 +17,11 @@ public:
virtual ~KeyboardMapperWidget() override;
void create_frame();
- void load_from_file(const String);
- void load_from_system();
- void save();
- void save_to_file(StringView);
+ ErrorOr<void> load_map_from_file(const String&);
+ ErrorOr<void> load_map_from_system();
+ ErrorOr<void> save();
+ ErrorOr<void> save_to_file(StringView);
+ void show_error_to_user(Error);
protected:
virtual void keydown_event(GUI::KeyEvent&) override;
diff --git a/Userland/Applications/KeyboardMapper/main.cpp b/Userland/Applications/KeyboardMapper/main.cpp
index ef8b59521b..962618fd65 100644
--- a/Userland/Applications/KeyboardMapper/main.cpp
+++ b/Userland/Applications/KeyboardMapper/main.cpp
@@ -17,7 +17,7 @@
ErrorOr<int> serenity_main(Main::Arguments arguments)
{
- const char* path = nullptr;
+ StringView path;
Core::ArgsParser args_parser;
args_parser.add_positional_argument(path, "Keyboard character mapping file.", "file", Core::ArgsParser::Required::No);
args_parser.parse(arguments);
@@ -38,25 +38,28 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
window->set_resizable(false);
auto keyboard_mapper_widget = (KeyboardMapperWidget*)window->main_widget();
- if (path != nullptr) {
- keyboard_mapper_widget->load_from_file(path);
- } else {
- keyboard_mapper_widget->load_from_system();
- }
+ if (path.is_empty())
+ TRY(keyboard_mapper_widget->load_map_from_system());
+ else
+ TRY(keyboard_mapper_widget->load_map_from_file(path));
TRY(Core::System::pledge("stdio thread rpath cpath wpath recvfd sendfd"));
auto open_action = GUI::CommonActions::make_open_action(
[&](auto&) {
Optional<String> path = GUI::FilePicker::get_open_filepath(window, "Open", "/res/keymaps/");
- if (path.has_value()) {
- keyboard_mapper_widget->load_from_file(path.value());
- }
+ if (!path.has_value()) return;
+
+ ErrorOr<void> error_or = keyboard_mapper_widget->load_map_from_file(path.value());
+ if (error_or.is_error())
+ keyboard_mapper_widget->show_error_to_user(error_or.error());
});
auto save_action = GUI::CommonActions::make_save_action(
[&](auto&) {
- keyboard_mapper_widget->save();
+ ErrorOr<void> error_or = keyboard_mapper_widget->save();
+ if (error_or.is_error())
+ keyboard_mapper_widget->show_error_to_user(error_or.error());
});
auto save_as_action = GUI::CommonActions::make_save_as_action([&](auto&) {
@@ -65,7 +68,9 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
if (!save_path.has_value())
return;
- keyboard_mapper_widget->save_to_file(save_path.value());
+ ErrorOr<void> error_or = keyboard_mapper_widget->save_to_file(save_path.value());
+ if (error_or.is_error())
+ keyboard_mapper_widget->show_error_to_user(error_or.error());
});
auto quit_action = GUI::CommonActions::make_quit_action(