Browse Source

LibGfx: Use ErrorOr<T> for Bitmap::try_load_from_file()

This was used in a lot of places, so this patch makes liberal use of
ErrorOr<T>::release_value_but_fixme_should_propagate_errors().
Andreas Kling 3 years ago
parent
commit
235f39e449
100 changed files with 381 additions and 367 deletions
  1. 5 5
      Userland/Applets/Audio/main.cpp
  2. 2 2
      Userland/Applets/Network/main.cpp
  3. 6 2
      Userland/Applications/3DFileViewer/main.cpp
  4. 2 2
      Userland/Applications/Browser/BookmarksBarWidget.cpp
  5. 2 2
      Userland/Applications/Browser/BrowserWindow.cpp
  6. 1 1
      Userland/Applications/Browser/ConsoleWidget.cpp
  7. 8 8
      Userland/Applications/Browser/Tab.cpp
  8. 1 1
      Userland/Applications/Browser/WindowActions.cpp
  9. 7 7
      Userland/Applications/Calendar/main.cpp
  10. 1 1
      Userland/Applications/DisplaySettings/BackgroundSettingsWidget.cpp
  11. 1 1
      Userland/Applications/DisplaySettings/DesktopSettingsWidget.cpp
  12. 2 2
      Userland/Applications/DisplaySettings/MonitorWidget.cpp
  13. 6 6
      Userland/Applications/FileManager/DirectoryView.cpp
  14. 1 1
      Userland/Applications/FileManager/PropertiesWindow.cpp
  15. 10 10
      Userland/Applications/FileManager/main.cpp
  16. 7 7
      Userland/Applications/FontEditor/FontEditor.cpp
  17. 3 3
      Userland/Applications/Help/ManualModel.cpp
  18. 6 6
      Userland/Applications/HexEditor/HexEditorWidget.cpp
  19. 4 4
      Userland/Applications/ImageViewer/main.cpp
  20. 3 3
      Userland/Applications/Mail/MailboxTreeModel.cpp
  21. 2 2
      Userland/Applications/MailSettings/MailSettingsWindow.cpp
  22. 1 1
      Userland/Applications/MouseSettings/DoubleClickArrowWidget.cpp
  23. 3 3
      Userland/Applications/MouseSettings/MouseWidget.cpp
  24. 1 1
      Userland/Applications/MouseSettings/ThemeWidget.cpp
  25. 2 2
      Userland/Applications/PDFViewer/OutlineModel.cpp
  26. 3 3
      Userland/Applications/PDFViewer/PDFViewerWidget.cpp
  27. 4 4
      Userland/Applications/Piano/PlayerWidget.cpp
  28. 1 1
      Userland/Applications/Piano/SamplerWidget.cpp
  29. 6 6
      Userland/Applications/PixelPaint/MainWidget.cpp
  30. 1 1
      Userland/Applications/PixelPaint/ToolboxWidget.cpp
  31. 1 3
      Userland/Applications/PixelPaint/Tools/BucketTool.cpp
  32. 2 2
      Userland/Applications/PixelPaint/Tools/GuideTool.cpp
  33. 2 4
      Userland/Applications/SoundPlayer/NoVisualizationWidget.cpp
  34. 5 5
      Userland/Applications/SoundPlayer/SoundPlayerWidgetAdvancedView.cpp
  35. 3 3
      Userland/Applications/SpaceAnalyzer/main.cpp
  36. 1 1
      Userland/Applications/Spreadsheet/HelpWindow.cpp
  37. 1 1
      Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp
  38. 2 2
      Userland/Applications/SystemMonitor/NetworkStatisticsWidget.cpp
  39. 4 4
      Userland/Applications/SystemMonitor/main.cpp
  40. 6 6
      Userland/Applications/Terminal/main.cpp
  41. 7 7
      Userland/Applications/TextEditor/MainWidget.cpp
  42. 12 10
      Userland/Applications/ThemeEditor/PreviewWidget.cpp
  43. 3 3
      Userland/Applications/Welcome/WelcomeWidget.cpp
  44. 21 21
      Userland/Demos/CatDog/CatDog.h
  45. 2 2
      Userland/Demos/LibGfxDemo/main.cpp
  46. 3 3
      Userland/Demos/LibGfxScaleDemo/main.cpp
  47. 1 1
      Userland/Demos/Mandelbrot/Mandelbrot.cpp
  48. 2 2
      Userland/Demos/ModelGallery/GalleryWidget.cpp
  49. 3 3
      Userland/Demos/WidgetGallery/GalleryModels.h
  50. 7 7
      Userland/Demos/WidgetGallery/GalleryWidget.cpp
  51. 4 4
      Userland/DevTools/HackStudio/Debugger/DebugInfoWidget.cpp
  52. 1 1
      Userland/DevTools/HackStudio/Debugger/VariablesModel.h
  53. 2 2
      Userland/DevTools/HackStudio/Editor.cpp
  54. 4 4
      Userland/DevTools/HackStudio/Git/GitWidget.cpp
  55. 14 14
      Userland/DevTools/HackStudio/HackStudioWidget.cpp
  56. 2 2
      Userland/DevTools/HackStudio/LanguageClient.cpp
  57. 7 7
      Userland/DevTools/HackStudio/ProjectDeclarations.cpp
  58. 3 2
      Userland/DevTools/HackStudio/ProjectTemplate.cpp
  59. 2 2
      Userland/DevTools/HackStudio/main.cpp
  60. 4 4
      Userland/DevTools/Inspector/RemoteObjectGraphModel.cpp
  61. 1 1
      Userland/DevTools/Inspector/main.cpp
  62. 2 2
      Userland/DevTools/Profiler/ProfileModel.cpp
  63. 2 2
      Userland/DevTools/Profiler/SamplesModel.cpp
  64. 3 3
      Userland/DevTools/Profiler/main.cpp
  65. 1 1
      Userland/Games/Chess/ChessWidget.cpp
  66. 1 1
      Userland/Games/Chess/main.cpp
  67. 7 7
      Userland/Games/FlappyBug/Game.h
  68. 6 6
      Userland/Games/GameOfLife/main.cpp
  69. 8 8
      Userland/Games/Minesweeper/Field.cpp
  70. 2 2
      Userland/Games/Minesweeper/main.cpp
  71. 4 4
      Userland/Games/Snake/SnakeGame.cpp
  72. 1 2
      Userland/Libraries/LibCards/Card.cpp
  73. 2 2
      Userland/Libraries/LibGUI/AutocompleteProvider.cpp
  74. 1 1
      Userland/Libraries/LibGUI/ColorPicker.cpp
  75. 1 1
      Userland/Libraries/LibGUI/ComboBox.cpp
  76. 23 23
      Userland/Libraries/LibGUI/CommonActions.cpp
  77. 2 2
      Userland/Libraries/LibGUI/FileIconProvider.cpp
  78. 4 4
      Userland/Libraries/LibGUI/FilePicker.cpp
  79. 6 5
      Userland/Libraries/LibGUI/FileSystemModel.cpp
  80. 1 1
      Userland/Libraries/LibGUI/FontPicker.cpp
  81. 6 2
      Userland/Libraries/LibGUI/Icon.cpp
  82. 1 1
      Userland/Libraries/LibGUI/LinkLabel.cpp
  83. 4 4
      Userland/Libraries/LibGUI/MessageBox.cpp
  84. 3 3
      Userland/Libraries/LibGUI/MultiView.cpp
  85. 1 1
      Userland/Libraries/LibGUI/PasswordInputDialog.cpp
  86. 2 2
      Userland/Libraries/LibGUI/SpinBox.cpp
  87. 1 1
      Userland/Libraries/LibGUI/TextEditor.cpp
  88. 2 2
      Userland/Libraries/LibGUI/TreeView.cpp
  89. 12 10
      Userland/Libraries/LibGfx/Bitmap.cpp
  90. 2 2
      Userland/Libraries/LibGfx/Bitmap.h
  91. 4 4
      Userland/Libraries/LibGfx/ClassicStylePainter.cpp
  92. 3 3
      Userland/Libraries/LibGfx/Emoji.cpp
  93. 2 2
      Userland/Libraries/LibVT/TerminalWidget.cpp
  94. 3 3
      Userland/Libraries/LibWeb/DOMTreeModel.cpp
  95. 1 1
      Userland/Libraries/LibWeb/Loader/FrameLoader.cpp
  96. 4 4
      Userland/Services/Taskbar/ClockWidget.cpp
  97. 2 2
      Userland/Services/Taskbar/ShutdownDialog.cpp
  98. 1 1
      Userland/Services/Taskbar/TaskbarWindow.cpp
  99. 9 8
      Userland/Services/Taskbar/main.cpp
  100. 7 3
      Userland/Services/WindowServer/Compositor.cpp

+ 5 - 5
Userland/Applets/Audio/main.cpp

@@ -46,11 +46,11 @@ public:
                 update();
                 update();
         };
         };
 
 
-        m_volume_level_bitmaps.append({ 66, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-high.png") });
-        m_volume_level_bitmaps.append({ 33, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-medium.png") });
-        m_volume_level_bitmaps.append({ 1, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-low.png") });
-        m_volume_level_bitmaps.append({ 0, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-zero.png") });
-        m_volume_level_bitmaps.append({ 0, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-muted.png") });
+        m_volume_level_bitmaps.append({ 66, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-high.png").release_value_but_fixme_should_propagate_errors() });
+        m_volume_level_bitmaps.append({ 33, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-medium.png").release_value_but_fixme_should_propagate_errors() });
+        m_volume_level_bitmaps.append({ 1, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-low.png").release_value_but_fixme_should_propagate_errors() });
+        m_volume_level_bitmaps.append({ 0, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-zero.png").release_value_but_fixme_should_propagate_errors() });
+        m_volume_level_bitmaps.append({ 0, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-muted.png").release_value_but_fixme_should_propagate_errors() });
 
 
         m_slider_window = add<GUI::Window>(window());
         m_slider_window = add<GUI::Window>(window());
         m_slider_window->set_frameless(true);
         m_slider_window->set_frameless(true);

+ 2 - 2
Userland/Applets/Network/main.cpp

@@ -151,8 +151,8 @@ private:
     String m_adapter_info;
     String m_adapter_info;
     bool m_connected = false;
     bool m_connected = false;
     bool m_notifications = true;
     bool m_notifications = true;
-    RefPtr<Gfx::Bitmap> m_connected_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/network.png");
-    RefPtr<Gfx::Bitmap> m_disconnected_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/network-disconnected.png");
+    RefPtr<Gfx::Bitmap> m_connected_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/network.png").release_value_but_fixme_should_propagate_errors();
+    RefPtr<Gfx::Bitmap> m_disconnected_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/network-disconnected.png").release_value_but_fixme_should_propagate_errors();
 };
 };
 
 
 int main(int argc, char* argv[])
 int main(int argc, char* argv[])

+ 6 - 2
Userland/Applications/3DFileViewer/main.cpp

@@ -250,7 +250,9 @@ bool GLContextWidget::load_file(Core::File& file, String const& filename)
     // Attempt to open the texture file from disk
     // Attempt to open the texture file from disk
     RefPtr<Gfx::Bitmap> texture_image;
     RefPtr<Gfx::Bitmap> texture_image;
     if (Core::File::exists(texture_path)) {
     if (Core::File::exists(texture_path)) {
-        texture_image = Gfx::Bitmap::try_load_from_file(texture_path);
+        auto bitmap_or_error = Gfx::Bitmap::try_load_from_file(texture_path);
+        if (!bitmap_or_error.is_error())
+            texture_image = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
     } else {
     } else {
         auto result = FileSystemAccessClient::Client::the().request_file(window()->window_id(), builder.string_view(), Core::OpenMode::ReadOnly);
         auto result = FileSystemAccessClient::Client::the().request_file(window()->window_id(), builder.string_view(), Core::OpenMode::ReadOnly);
 
 
@@ -258,7 +260,9 @@ bool GLContextWidget::load_file(Core::File& file, String const& filename)
             return false;
             return false;
         }
         }
 
 
-        texture_image = Gfx::Bitmap::try_load_from_fd_and_close(*result.fd, *result.chosen_file);
+        auto bitmap_or_error = Gfx::Bitmap::try_load_from_fd_and_close(*result.fd, *result.chosen_file);
+        if (!bitmap_or_error.is_error())
+            texture_image = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
     }
     }
 
 
     GLuint tex;
     GLuint tex;

+ 2 - 2
Userland/Applications/Browser/BookmarksBarWidget.cpp

@@ -190,7 +190,7 @@ void BookmarksBarWidget::model_did_update(unsigned)
 
 
         button.set_button_style(Gfx::ButtonStyle::Coolbar);
         button.set_button_style(Gfx::ButtonStyle::Coolbar);
         button.set_text(title);
         button.set_text(title);
-        button.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-html.png"));
+        button.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-html.png").release_value_but_fixme_should_propagate_errors());
         button.set_fixed_size(font().width(title) + 32, 20);
         button.set_fixed_size(font().width(title) + 32, 20);
         button.set_relative_rect(rect);
         button.set_relative_rect(rect);
         button.set_focus_policy(GUI::FocusPolicy::TabFocus);
         button.set_focus_policy(GUI::FocusPolicy::TabFocus);
@@ -242,7 +242,7 @@ void BookmarksBarWidget::update_content_size()
             auto& bookmark = m_bookmarks.at(i);
             auto& bookmark = m_bookmarks.at(i);
             bookmark.set_visible(false);
             bookmark.set_visible(false);
             m_additional_menu->add_action(GUI::Action::create(bookmark.text(),
             m_additional_menu->add_action(GUI::Action::create(bookmark.text(),
-                Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-html.png"),
+                Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-html.png").release_value_but_fixme_should_propagate_errors(),
                 [&](auto&) {
                 [&](auto&) {
                     bookmark.on_click(0);
                     bookmark.on_click(0);
                 }));
                 }));

+ 2 - 2
Userland/Applications/Browser/BrowserWindow.cpp

@@ -238,7 +238,7 @@ void BrowserWindow::build_menus()
 
 
     m_search_engine_actions.set_exclusive(true);
     m_search_engine_actions.set_exclusive(true);
     auto& search_engine_menu = settings_menu.add_submenu("&Search Engine");
     auto& search_engine_menu = settings_menu.add_submenu("&Search Engine");
-    search_engine_menu.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png"));
+    search_engine_menu.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png").release_value_but_fixme_should_propagate_errors());
     bool search_engine_set = false;
     bool search_engine_set = false;
     auto add_search_engine = [&](auto& name, auto& url_format) {
     auto add_search_engine = [&](auto& name, auto& url_format) {
         auto action = GUI::Action::create_checkable(
         auto action = GUI::Action::create_checkable(
@@ -301,7 +301,7 @@ void BrowserWindow::build_menus()
     }
     }
 
 
     auto& color_scheme_menu = settings_menu.add_submenu("&Color Scheme");
     auto& color_scheme_menu = settings_menu.add_submenu("&Color Scheme");
-    color_scheme_menu.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/color-chooser.png"));
+    color_scheme_menu.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/color-chooser.png").release_value_but_fixme_should_propagate_errors());
     {
     {
         auto current_setting = Web::CSS::preferred_color_scheme_from_string(Config::read_string("Browser", "Preferences", "ColorScheme", "auto"));
         auto current_setting = Web::CSS::preferred_color_scheme_from_string(Config::read_string("Browser", "Preferences", "ColorScheme", "auto"));
         m_color_scheme_actions.set_exclusive(true);
         m_color_scheme_actions.set_exclusive(true);

+ 1 - 1
Userland/Applications/Browser/ConsoleWidget.cpp

@@ -60,7 +60,7 @@ ConsoleWidget::ConsoleWidget()
 
 
     auto& clear_button = bottom_container.add<GUI::Button>();
     auto& clear_button = bottom_container.add<GUI::Button>();
     clear_button.set_fixed_size(22, 22);
     clear_button.set_fixed_size(22, 22);
-    clear_button.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png"));
+    clear_button.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png").release_value_but_fixme_should_propagate_errors());
     clear_button.set_tooltip("Clear the console output");
     clear_button.set_tooltip("Clear the console output");
     clear_button.on_click = [this](auto) {
     clear_button.on_click = [this](auto) {
         clear_output();
         clear_output();

+ 8 - 8
Userland/Applications/Browser/Tab.cpp

@@ -73,7 +73,7 @@ void Tab::view_source(const URL& url, const String& source)
     editor.set_ruler_visible(true);
     editor.set_ruler_visible(true);
     window->resize(640, 480);
     window->resize(640, 480);
     window->set_title(url.to_string());
     window->set_title(url.to_string());
-    window->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-text.png"));
+    window->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-text.png").release_value_but_fixme_should_propagate_errors());
     window->show();
     window->show();
 }
 }
 
 
@@ -98,7 +98,7 @@ Tab::Tab(BrowserWindow& window)
         for (auto& url : m_history.get_back_title_history()) {
         for (auto& url : m_history.get_back_title_history()) {
             i++;
             i++;
             m_go_back_context_menu->add_action(GUI::Action::create(url.to_string(),
             m_go_back_context_menu->add_action(GUI::Action::create(url.to_string(),
-                Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-html.png"),
+                Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-html.png").release_value_but_fixme_should_propagate_errors(),
                 [this, i](auto&) { go_back(i); }));
                 [this, i](auto&) { go_back(i); }));
         }
         }
         m_go_back_context_menu->popup(context_menu_event.screen_position());
         m_go_back_context_menu->popup(context_menu_event.screen_position());
@@ -113,7 +113,7 @@ Tab::Tab(BrowserWindow& window)
         for (auto& url : m_history.get_forward_title_history()) {
         for (auto& url : m_history.get_forward_title_history()) {
             i++;
             i++;
             m_go_forward_context_menu->add_action(GUI::Action::create(url.to_string(),
             m_go_forward_context_menu->add_action(GUI::Action::create(url.to_string(),
-                Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-html.png"),
+                Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-html.png").release_value_but_fixme_should_propagate_errors(),
                 [this, i](auto&) { go_forward(i); }));
                 [this, i](auto&) { go_forward(i); }));
         }
         }
         m_go_forward_context_menu->popup(context_menu_event.screen_position());
         m_go_forward_context_menu->popup(context_menu_event.screen_position());
@@ -148,7 +148,7 @@ Tab::Tab(BrowserWindow& window)
     m_bookmark_button = toolbar.add<GUI::Button>();
     m_bookmark_button = toolbar.add<GUI::Button>();
     m_bookmark_button->set_button_style(Gfx::ButtonStyle::Coolbar);
     m_bookmark_button->set_button_style(Gfx::ButtonStyle::Coolbar);
     m_bookmark_button->set_focus_policy(GUI::FocusPolicy::TabFocus);
     m_bookmark_button->set_focus_policy(GUI::FocusPolicy::TabFocus);
-    m_bookmark_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/bookmark-contour.png"));
+    m_bookmark_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/bookmark-contour.png").release_value_but_fixme_should_propagate_errors());
     m_bookmark_button->set_fixed_size(22, 22);
     m_bookmark_button->set_fixed_size(22, 22);
 
 
     m_bookmark_button->on_click = [this](auto) {
     m_bookmark_button->on_click = [this](auto) {
@@ -411,10 +411,10 @@ void Tab::bookmark_current_url()
 void Tab::update_bookmark_button(const String& url)
 void Tab::update_bookmark_button(const String& url)
 {
 {
     if (BookmarksBarWidget::the().contains_bookmark(url)) {
     if (BookmarksBarWidget::the().contains_bookmark(url)) {
-        m_bookmark_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/bookmark-filled.png"));
+        m_bookmark_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/bookmark-filled.png").release_value_but_fixme_should_propagate_errors());
         m_bookmark_button->set_tooltip("Remove Bookmark");
         m_bookmark_button->set_tooltip("Remove Bookmark");
     } else {
     } else {
-        m_bookmark_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/bookmark-contour.png"));
+        m_bookmark_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/bookmark-contour.png").release_value_but_fixme_should_propagate_errors());
         m_bookmark_button->set_tooltip("Add Bookmark");
         m_bookmark_button->set_tooltip("Add Bookmark");
     }
     }
 }
 }
@@ -483,7 +483,7 @@ void Tab::show_inspector_window(Browser::Tab::InspectorTarget inspector_target)
         auto window = GUI::Window::construct(&this->window());
         auto window = GUI::Window::construct(&this->window());
         window->resize(300, 500);
         window->resize(300, 500);
         window->set_title("Inspector");
         window->set_title("Inspector");
-        window->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png"));
+        window->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png").release_value_but_fixme_should_propagate_errors());
         window->on_close = [&]() {
         window->on_close = [&]() {
             m_web_content_view->clear_inspected_dom_node();
             m_web_content_view->clear_inspected_dom_node();
         };
         };
@@ -512,7 +512,7 @@ void Tab::show_console_window()
         auto console_window = GUI::Window::construct(&window());
         auto console_window = GUI::Window::construct(&window());
         console_window->resize(500, 300);
         console_window->resize(500, 300);
         console_window->set_title("JS Console");
         console_window->set_title("JS Console");
-        console_window->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-javascript.png"));
+        console_window->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-javascript.png").release_value_but_fixme_should_propagate_errors());
         m_console_widget = console_window->set_main_widget<ConsoleWidget>();
         m_console_widget = console_window->set_main_widget<ConsoleWidget>();
         m_console_widget->on_js_input = [this](String const& js_source) {
         m_console_widget->on_js_input = [this](String const& js_source) {
             m_web_content_view->js_console_input(js_source);
             m_web_content_view->js_console_input(js_source);

+ 1 - 1
Userland/Applications/Browser/WindowActions.cpp

@@ -24,7 +24,7 @@ WindowActions::WindowActions(GUI::Window& window)
     VERIFY(!s_the);
     VERIFY(!s_the);
     s_the = this;
     s_the = this;
     m_create_new_tab_action = GUI::Action::create(
     m_create_new_tab_action = GUI::Action::create(
-        "&New Tab", { Mod_Ctrl, Key_T }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-tab.png"), [this](auto&) {
+        "&New Tab", { Mod_Ctrl, Key_T }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-tab.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
             if (on_create_new_tab)
             if (on_create_new_tab)
                 on_create_new_tab();
                 on_create_new_tab();
         },
         },

+ 7 - 7
Userland/Applications/Calendar/main.cpp

@@ -53,7 +53,7 @@ int main(int argc, char** argv)
     auto toolbar = main_widget.find_descendant_of_type_named<GUI::Toolbar>("toolbar");
     auto toolbar = main_widget.find_descendant_of_type_named<GUI::Toolbar>("toolbar");
     auto calendar = main_widget.find_descendant_of_type_named<GUI::Calendar>("calendar");
     auto calendar = main_widget.find_descendant_of_type_named<GUI::Calendar>("calendar");
 
 
-    auto prev_date_action = GUI::Action::create({}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png"), [&](const GUI::Action&) {
+    auto prev_date_action = GUI::Action::create({}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
         unsigned view_month = calendar->view_month();
         unsigned view_month = calendar->view_month();
         unsigned view_year = calendar->view_year();
         unsigned view_year = calendar->view_year();
         if (calendar->mode() == GUI::Calendar::Month) {
         if (calendar->mode() == GUI::Calendar::Month) {
@@ -68,7 +68,7 @@ int main(int argc, char** argv)
         calendar->update_tiles(view_year, view_month);
         calendar->update_tiles(view_year, view_month);
     });
     });
 
 
-    auto next_date_action = GUI::Action::create({}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png"), [&](const GUI::Action&) {
+    auto next_date_action = GUI::Action::create({}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
         unsigned view_month = calendar->view_month();
         unsigned view_month = calendar->view_month();
         unsigned view_year = calendar->view_year();
         unsigned view_year = calendar->view_year();
         if (calendar->mode() == GUI::Calendar::Month) {
         if (calendar->mode() == GUI::Calendar::Month) {
@@ -83,22 +83,22 @@ int main(int argc, char** argv)
         calendar->update_tiles(view_year, view_month);
         calendar->update_tiles(view_year, view_month);
     });
     });
 
 
-    auto add_event_action = GUI::Action::create("&Add Event", {}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/add-event.png"), [&](const GUI::Action&) {
+    auto add_event_action = GUI::Action::create("&Add Event", {}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/add-event.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
         AddEventDialog::show(calendar->selected_date(), window);
         AddEventDialog::show(calendar->selected_date(), window);
     });
     });
 
 
-    auto jump_to_action = GUI::Action::create("Jump to &Today", {}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/calendar-date.png"), [&](const GUI::Action&) {
+    auto jump_to_action = GUI::Action::create("Jump to &Today", {}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/calendar-date.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
         calendar->set_selected_date(Core::DateTime::now());
         calendar->set_selected_date(Core::DateTime::now());
         calendar->update_tiles(Core::DateTime::now().year(), Core::DateTime::now().month());
         calendar->update_tiles(Core::DateTime::now().year(), Core::DateTime::now().month());
     });
     });
 
 
-    auto view_month_action = GUI::Action::create_checkable("&Month View", { Mod_Ctrl, KeyCode::Key_1 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/calendar-month-view.png"), [&](const GUI::Action&) {
+    auto view_month_action = GUI::Action::create_checkable("&Month View", { Mod_Ctrl, KeyCode::Key_1 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/calendar-month-view.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
         if (calendar->mode() == GUI::Calendar::Year)
         if (calendar->mode() == GUI::Calendar::Year)
             calendar->toggle_mode();
             calendar->toggle_mode();
     });
     });
     view_month_action->set_checked(true);
     view_month_action->set_checked(true);
 
 
-    auto view_year_action = GUI::Action::create_checkable("&Year View", { Mod_Ctrl, KeyCode::Key_2 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/icon-view.png"), [&](const GUI::Action&) {
+    auto view_year_action = GUI::Action::create_checkable("&Year View", { Mod_Ctrl, KeyCode::Key_2 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/icon-view.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
         if (calendar->mode() == GUI::Calendar::Month)
         if (calendar->mode() == GUI::Calendar::Month)
             calendar->toggle_mode();
             calendar->toggle_mode();
     });
     });
@@ -126,7 +126,7 @@ int main(int argc, char** argv)
     };
     };
 
 
     auto& file_menu = window->add_menu("&File");
     auto& file_menu = window->add_menu("&File");
-    file_menu.add_action(GUI::Action::create("&Add Event", { Mod_Ctrl | Mod_Shift, Key_E }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/add-event.png"),
+    file_menu.add_action(GUI::Action::create("&Add Event", { Mod_Ctrl | Mod_Shift, Key_E }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/add-event.png").release_value_but_fixme_should_propagate_errors(),
         [&](const GUI::Action&) {
         [&](const GUI::Action&) {
             AddEventDialog::show(calendar->selected_date(), window);
             AddEventDialog::show(calendar->selected_date(), window);
         }));
         }));

+ 1 - 1
Userland/Applications/DisplaySettings/BackgroundSettingsWidget.cpp

@@ -65,7 +65,7 @@ void BackgroundSettingsWidget::create_frame()
     };
     };
 
 
     m_context_menu = GUI::Menu::construct();
     m_context_menu = GUI::Menu::construct();
-    m_show_in_file_manager_action = GUI::Action::create("Show in File Manager", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-file-manager.png"), [this](GUI::Action const&) {
+    m_show_in_file_manager_action = GUI::Action::create("Show in File Manager", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-file-manager.png").release_value_but_fixme_should_propagate_errors(), [this](GUI::Action const&) {
         LexicalPath path { m_monitor_widget->wallpaper() };
         LexicalPath path { m_monitor_widget->wallpaper() };
         Desktop::Launcher::open(URL::create_with_file_protocol(path.dirname(), path.basename()));
         Desktop::Launcher::open(URL::create_with_file_protocol(path.dirname(), path.basename()));
     });
     });

+ 1 - 1
Userland/Applications/DisplaySettings/DesktopSettingsWidget.cpp

@@ -30,7 +30,7 @@ void DesktopSettingsWidget::create_frame()
     load_from_gml(desktop_settings_gml);
     load_from_gml(desktop_settings_gml);
 
 
     auto& light_bulb_label = *find_descendant_of_type_named<GUI::Label>("light_bulb_label");
     auto& light_bulb_label = *find_descendant_of_type_named<GUI::Label>("light_bulb_label");
-    light_bulb_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/app-welcome.png"));
+    light_bulb_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/app-welcome.png").release_value_but_fixme_should_propagate_errors());
 
 
     m_virtual_desktop_rows_spinbox = *find_descendant_of_type_named<GUI::SpinBox>("virtual_desktop_rows_spinbox");
     m_virtual_desktop_rows_spinbox = *find_descendant_of_type_named<GUI::SpinBox>("virtual_desktop_rows_spinbox");
     m_virtual_desktop_columns_spinbox = *find_descendant_of_type_named<GUI::SpinBox>("virtual_desktop_columns_spinbox");
     m_virtual_desktop_columns_spinbox = *find_descendant_of_type_named<GUI::SpinBox>("virtual_desktop_columns_spinbox");

+ 2 - 2
Userland/Applications/DisplaySettings/MonitorWidget.cpp

@@ -19,7 +19,7 @@ namespace DisplaySettings {
 MonitorWidget::MonitorWidget()
 MonitorWidget::MonitorWidget()
 {
 {
     m_desktop_resolution = GUI::Desktop::the().rect().size();
     m_desktop_resolution = GUI::Desktop::the().rect().size();
-    m_monitor_bitmap = Gfx::Bitmap::try_load_from_file("/res/graphics/monitor.png");
+    m_monitor_bitmap = Gfx::Bitmap::try_load_from_file("/res/graphics/monitor.png").release_value_but_fixme_should_propagate_errors();
     m_desktop_bitmap = Gfx::Bitmap::try_create(m_monitor_bitmap->format(), { 280, 158 });
     m_desktop_bitmap = Gfx::Bitmap::try_create(m_monitor_bitmap->format(), { 280, 158 });
     m_monitor_rect = { { 12, 13 }, m_desktop_bitmap->size() };
     m_monitor_rect = { { 12, 13 }, m_desktop_bitmap->size() };
     set_fixed_size(304, 201);
     set_fixed_size(304, 201);
@@ -34,7 +34,7 @@ bool MonitorWidget::set_wallpaper(String path)
         [path](auto&) {
         [path](auto&) {
             RefPtr<Gfx::Bitmap> bmp;
             RefPtr<Gfx::Bitmap> bmp;
             if (!path.is_empty())
             if (!path.is_empty())
-                bmp = Gfx::Bitmap::try_load_from_file(path);
+                bmp = Gfx::Bitmap::try_load_from_file(path).release_value_but_fixme_should_propagate_errors();
             return bmp;
             return bmp;
         },
         },
 
 

+ 6 - 6
Userland/Applications/FileManager/DirectoryView.cpp

@@ -534,7 +534,7 @@ void DirectoryView::handle_selection_change()
 
 
 void DirectoryView::setup_actions()
 void DirectoryView::setup_actions()
 {
 {
-    m_mkdir_action = GUI::Action::create("&New Directory...", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/mkdir.png"), [&](GUI::Action const&) {
+    m_mkdir_action = GUI::Action::create("&New Directory...", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/mkdir.png").release_value_but_fixme_should_propagate_errors(), [&](GUI::Action const&) {
         String value;
         String value;
         if (GUI::InputBox::show(window(), value, "Enter name:", "New directory") == GUI::InputBox::ExecOK && !value.is_empty()) {
         if (GUI::InputBox::show(window(), value, "Enter name:", "New directory") == GUI::InputBox::ExecOK && !value.is_empty()) {
             auto new_dir_path = LexicalPath::canonicalized_path(String::formatted("{}/{}", path(), value));
             auto new_dir_path = LexicalPath::canonicalized_path(String::formatted("{}/{}", path(), value));
@@ -546,7 +546,7 @@ void DirectoryView::setup_actions()
         }
         }
     });
     });
 
 
-    m_touch_action = GUI::Action::create("New &File...", { Mod_Ctrl | Mod_Shift, Key_F }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new.png"), [&](GUI::Action const&) {
+    m_touch_action = GUI::Action::create("New &File...", { Mod_Ctrl | Mod_Shift, Key_F }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new.png").release_value_but_fixme_should_propagate_errors(), [&](GUI::Action const&) {
         String value;
         String value;
         if (GUI::InputBox::show(window(), value, "Enter name:", "New file") == GUI::InputBox::ExecOK && !value.is_empty()) {
         if (GUI::InputBox::show(window(), value, "Enter name:", "New file") == GUI::InputBox::ExecOK && !value.is_empty()) {
             auto new_file_path = LexicalPath::canonicalized_path(String::formatted("{}/{}", path(), value));
             auto new_file_path = LexicalPath::canonicalized_path(String::formatted("{}/{}", path(), value));
@@ -572,7 +572,7 @@ void DirectoryView::setup_actions()
         }
         }
     });
     });
 
 
-    m_open_terminal_action = GUI::Action::create("Open &Terminal Here", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-terminal.png"), [&](auto&) {
+    m_open_terminal_action = GUI::Action::create("Open &Terminal Here", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-terminal.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         spawn_terminal(path());
         spawn_terminal(path());
     });
     });
 
 
@@ -588,21 +588,21 @@ void DirectoryView::setup_actions()
         window());
         window());
 
 
     m_view_as_icons_action = GUI::Action::create_checkable(
     m_view_as_icons_action = GUI::Action::create_checkable(
-        "View as &Icons", { Mod_Ctrl, KeyCode::Key_1 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/icon-view.png"), [&](GUI::Action const&) {
+        "View as &Icons", { Mod_Ctrl, KeyCode::Key_1 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/icon-view.png").release_value_but_fixme_should_propagate_errors(), [&](GUI::Action const&) {
             set_view_mode(DirectoryView::ViewMode::Icon);
             set_view_mode(DirectoryView::ViewMode::Icon);
             Config::write_string("FileManager", "DirectoryView", "ViewMode", "Icon");
             Config::write_string("FileManager", "DirectoryView", "ViewMode", "Icon");
         },
         },
         window());
         window());
 
 
     m_view_as_table_action = GUI::Action::create_checkable(
     m_view_as_table_action = GUI::Action::create_checkable(
-        "View as &Table", { Mod_Ctrl, KeyCode::Key_2 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/table-view.png"), [&](GUI::Action const&) {
+        "View as &Table", { Mod_Ctrl, KeyCode::Key_2 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/table-view.png").release_value_but_fixme_should_propagate_errors(), [&](GUI::Action const&) {
             set_view_mode(DirectoryView::ViewMode::Table);
             set_view_mode(DirectoryView::ViewMode::Table);
             Config::write_string("FileManager", "DirectoryView", "ViewMode", "Table");
             Config::write_string("FileManager", "DirectoryView", "ViewMode", "Table");
         },
         },
         window());
         window());
 
 
     m_view_as_columns_action = GUI::Action::create_checkable(
     m_view_as_columns_action = GUI::Action::create_checkable(
-        "View as &Columns", { Mod_Ctrl, KeyCode::Key_3 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/columns-view.png"), [&](GUI::Action const&) {
+        "View as &Columns", { Mod_Ctrl, KeyCode::Key_3 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/columns-view.png").release_value_but_fixme_should_propagate_errors(), [&](GUI::Action const&) {
             set_view_mode(DirectoryView::ViewMode::Columns);
             set_view_mode(DirectoryView::ViewMode::Columns);
             Config::write_string("FileManager", "DirectoryView", "ViewMode", "Columns");
             Config::write_string("FileManager", "DirectoryView", "ViewMode", "Columns");
         },
         },

+ 1 - 1
Userland/Applications/FileManager/PropertiesWindow.cpp

@@ -39,7 +39,7 @@ PropertiesWindow::PropertiesWindow(String const& path, bool disable_rename, Wind
     set_rect({ 0, 0, 360, 420 });
     set_rect({ 0, 0, 360, 420 });
     set_resizable(false);
     set_resizable(false);
 
 
-    set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/properties.png"));
+    set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/properties.png").release_value_but_fixme_should_propagate_errors());
 
 
     auto& tab_widget = main_widget.add<GUI::TabWidget>();
     auto& tab_widget = main_widget.add<GUI::TabWidget>();
 
 

+ 10 - 10
Userland/Applications/FileManager/main.cpp

@@ -353,7 +353,7 @@ int run_in_desktop_mode()
 
 
     auto desktop_view_context_menu = GUI::Menu::construct("Directory View");
     auto desktop_view_context_menu = GUI::Menu::construct("Directory View");
 
 
-    auto file_manager_action = GUI::Action::create("Open in File &Manager", {}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-file-manager.png"), [&](auto&) {
+    auto file_manager_action = GUI::Action::create("Open in File &Manager", {}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-file-manager.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         auto paths = directory_view.selected_file_paths();
         auto paths = directory_view.selected_file_paths();
         if (paths.is_empty()) {
         if (paths.is_empty()) {
             Desktop::Launcher::open(URL::create_with_file_protocol(directory_view.path()));
             Desktop::Launcher::open(URL::create_with_file_protocol(directory_view.path()));
@@ -366,7 +366,7 @@ int run_in_desktop_mode()
         }
         }
     });
     });
 
 
-    auto open_terminal_action = GUI::Action::create("Open in &Terminal", {}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-terminal.png"), [&](auto&) {
+    auto open_terminal_action = GUI::Action::create("Open in &Terminal", {}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-terminal.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         auto paths = directory_view.selected_file_paths();
         auto paths = directory_view.selected_file_paths();
         if (paths.is_empty()) {
         if (paths.is_empty()) {
             spawn_terminal(directory_view.path());
             spawn_terminal(directory_view.path());
@@ -380,7 +380,7 @@ int run_in_desktop_mode()
         }
         }
     });
     });
 
 
-    auto display_properties_action = GUI::Action::create("&Display Settings", {}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-display-settings.png"), [&](GUI::Action const&) {
+    auto display_properties_action = GUI::Action::create("&Display Settings", {}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-display-settings.png").release_value_but_fixme_should_propagate_errors(), [&](GUI::Action const&) {
         Desktop::Launcher::open(URL::create_with_file_protocol("/bin/DisplaySettings"));
         Desktop::Launcher::open(URL::create_with_file_protocol("/bin/DisplaySettings"));
     });
     });
 
 
@@ -563,7 +563,7 @@ int run_in_windowed_mode(String initial_location, String entry_focused_on_init)
     auto directory_view_context_menu = GUI::Menu::construct("Directory View");
     auto directory_view_context_menu = GUI::Menu::construct("Directory View");
     auto tree_view_directory_context_menu = GUI::Menu::construct("Tree View Directory");
     auto tree_view_directory_context_menu = GUI::Menu::construct("Tree View Directory");
 
 
-    auto open_parent_directory_action = GUI::Action::create("Open &Parent Directory", { Mod_Alt, Key_Up }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open-parent-directory.png"), [&](GUI::Action const&) {
+    auto open_parent_directory_action = GUI::Action::create("Open &Parent Directory", { Mod_Alt, Key_Up }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open-parent-directory.png").release_value_but_fixme_should_propagate_errors(), [&](GUI::Action const&) {
         directory_view.open_parent_directory();
         directory_view.open_parent_directory();
     });
     });
 
 
@@ -690,7 +690,7 @@ int run_in_windowed_mode(String initial_location, String entry_focused_on_init)
         = GUI::Action::create(
         = GUI::Action::create(
             "Open in New &Window",
             "Open in New &Window",
             {},
             {},
-            Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-file-manager.png"),
+            Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-file-manager.png").release_value_but_fixme_should_propagate_errors(),
             [&](GUI::Action const& action) {
             [&](GUI::Action const& action) {
                 Vector<String> paths;
                 Vector<String> paths;
                 if (action.activator() == tree_view_directory_context_menu)
                 if (action.activator() == tree_view_directory_context_menu)
@@ -709,7 +709,7 @@ int run_in_windowed_mode(String initial_location, String entry_focused_on_init)
         = GUI::Action::create(
         = GUI::Action::create(
             "Open in &Terminal",
             "Open in &Terminal",
             {},
             {},
-            Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-terminal.png"),
+            Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-terminal.png").release_value_but_fixme_should_propagate_errors(),
             [&](GUI::Action const& action) {
             [&](GUI::Action const& action) {
                 Vector<String> paths;
                 Vector<String> paths;
                 if (action.activator() == tree_view_directory_context_menu)
                 if (action.activator() == tree_view_directory_context_menu)
@@ -729,7 +729,7 @@ int run_in_windowed_mode(String initial_location, String entry_focused_on_init)
         = GUI::Action::create(
         = GUI::Action::create(
             "Create Desktop &Shortcut",
             "Create Desktop &Shortcut",
             {},
             {},
-            Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-symlink.png"),
+            Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-symlink.png").release_value_but_fixme_should_propagate_errors(),
             [&](GUI::Action const&) {
             [&](GUI::Action const&) {
                 auto paths = directory_view.selected_file_paths();
                 auto paths = directory_view.selected_file_paths();
                 if (paths.is_empty()) {
                 if (paths.is_empty()) {
@@ -836,12 +836,12 @@ int run_in_windowed_mode(String initial_location, String entry_focused_on_init)
     });
     });
     focus_dependent_delete_action->set_enabled(false);
     focus_dependent_delete_action->set_enabled(false);
 
 
-    auto mkdir_action = GUI::Action::create("&New Directory...", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/mkdir.png"), [&](GUI::Action const&) {
+    auto mkdir_action = GUI::Action::create("&New Directory...", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/mkdir.png").release_value_but_fixme_should_propagate_errors(), [&](GUI::Action const&) {
         directory_view.mkdir_action().activate();
         directory_view.mkdir_action().activate();
         refresh_tree_view();
         refresh_tree_view();
     });
     });
 
 
-    auto touch_action = GUI::Action::create("New &File...", { Mod_Ctrl | Mod_Shift, Key_F }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new.png"), [&](GUI::Action const&) {
+    auto touch_action = GUI::Action::create("New &File...", { Mod_Ctrl | Mod_Shift, Key_F }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new.png").release_value_but_fixme_should_propagate_errors(), [&](GUI::Action const&) {
         directory_view.touch_action().activate();
         directory_view.touch_action().activate();
         refresh_tree_view();
         refresh_tree_view();
     });
     });
@@ -1042,7 +1042,7 @@ int run_in_windowed_mode(String initial_location, String entry_focused_on_init)
             || !directory_view.current_view().selection().is_empty());
             || !directory_view.current_view().selection().is_empty());
     };
     };
 
 
-    auto directory_open_action = GUI::Action::create("Open", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png"), [&](auto&) {
+    auto directory_open_action = GUI::Action::create("Open", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         directory_view.open(directory_view.selected_file_paths().first());
         directory_view.open(directory_view.selected_file_paths().first());
     });
     });
 
 

+ 7 - 7
Userland/Applications/FontEditor/FontEditor.cpp

@@ -92,7 +92,7 @@ static RefPtr<GUI::Window> create_font_preview_window(FontEditorWidget& editor)
     };
     };
 
 
     auto& reload_button = textbox_button_container.add<GUI::Button>();
     auto& reload_button = textbox_button_container.add<GUI::Button>();
-    reload_button.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/reload.png"));
+    reload_button.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/reload.png").release_value_but_fixme_should_propagate_errors());
     reload_button.set_fixed_width(22);
     reload_button.set_fixed_width(22);
     reload_button.on_click = [&](auto) {
     reload_button.on_click = [&](auto) {
         static int i = 1;
         static int i = 1;
@@ -131,7 +131,7 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::BitmapFont>&&
     m_glyph_editor_widget = m_glyph_editor_container->add<GlyphEditorWidget>();
     m_glyph_editor_widget = m_glyph_editor_container->add<GlyphEditorWidget>();
     m_glyph_map_widget = glyph_map_container.add<GlyphMapWidget>();
     m_glyph_map_widget = glyph_map_container.add<GlyphMapWidget>();
 
 
-    m_new_action = GUI::Action::create("&New Font...", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-font.png"), [&](auto&) {
+    m_new_action = GUI::Action::create("&New Font...", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-font.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         if (window()->is_modified()) {
         if (window()->is_modified()) {
             auto result = GUI::MessageBox::show(window(), "Save changes to the current font?", "Unsaved changes", GUI::MessageBox::Type::Warning, GUI::MessageBox::InputType::YesNoCancel);
             auto result = GUI::MessageBox::show(window(), "Save changes to the current font?", "Unsaved changes", GUI::MessageBox::Type::Warning, GUI::MessageBox::InputType::YesNoCancel);
             if (result == GUI::Dialog::ExecResult::ExecYes) {
             if (result == GUI::Dialog::ExecResult::ExecYes) {
@@ -214,7 +214,7 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::BitmapFont>&&
     m_redo_action = GUI::CommonActions::make_redo_action([&](auto&) {
     m_redo_action = GUI::CommonActions::make_redo_action([&](auto&) {
         redo();
         redo();
     });
     });
-    m_open_preview_action = GUI::Action::create("&Preview Font", { Mod_Ctrl, Key_P }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png"), [&](auto&) {
+    m_open_preview_action = GUI::Action::create("&Preview Font", { Mod_Ctrl, Key_P }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         if (!m_font_preview_window)
         if (!m_font_preview_window)
             m_font_preview_window = create_font_preview_window(*this);
             m_font_preview_window = create_font_preview_window(*this);
         m_font_preview_window->show();
         m_font_preview_window->show();
@@ -227,7 +227,7 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::BitmapFont>&&
     });
     });
     m_show_metadata_action->set_checked(true);
     m_show_metadata_action->set_checked(true);
     m_show_metadata_action->set_status_tip("Show or hide metadata about the current font");
     m_show_metadata_action->set_status_tip("Show or hide metadata about the current font");
-    m_go_to_glyph_action = GUI::Action::create("&Go to Glyph...", { Mod_Ctrl, Key_G }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-to.png"), [&](auto&) {
+    m_go_to_glyph_action = GUI::Action::create("&Go to Glyph...", { Mod_Ctrl, Key_G }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-to.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         String input;
         String input;
         if (GUI::InputBox::show(window(), input, "Hexadecimal:", "Go to Glyph") == GUI::InputBox::ExecOK && !input.is_empty()) {
         if (GUI::InputBox::show(window(), input, "Hexadecimal:", "Go to Glyph") == GUI::InputBox::ExecOK && !input.is_empty()) {
             int code_point = strtoul(&input[0], nullptr, 16);
             int code_point = strtoul(&input[0], nullptr, 16);
@@ -238,7 +238,7 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::BitmapFont>&&
         }
         }
     });
     });
     m_go_to_glyph_action->set_status_tip("Go to the specified code point");
     m_go_to_glyph_action->set_status_tip("Go to the specified code point");
-    m_previous_glyph_action = GUI::Action::create("Pre&vious Glyph", { Mod_Alt, Key_Left }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png"), [&](auto&) {
+    m_previous_glyph_action = GUI::Action::create("Pre&vious Glyph", { Mod_Alt, Key_Left }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         bool search_wrapped = false;
         bool search_wrapped = false;
         for (int i = m_glyph_map_widget->selected_glyph() - 1;; --i) {
         for (int i = m_glyph_map_widget->selected_glyph() - 1;; --i) {
             if (i < 0 && !search_wrapped) {
             if (i < 0 && !search_wrapped) {
@@ -256,7 +256,7 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::BitmapFont>&&
         }
         }
     });
     });
     m_previous_glyph_action->set_status_tip("Seek the previous visible glyph");
     m_previous_glyph_action->set_status_tip("Seek the previous visible glyph");
-    m_next_glyph_action = GUI::Action::create("&Next Glyph", { Mod_Alt, Key_Right }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png"), [&](auto&) {
+    m_next_glyph_action = GUI::Action::create("&Next Glyph", { Mod_Alt, Key_Right }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         bool search_wrapped = false;
         bool search_wrapped = false;
         for (int i = m_glyph_map_widget->selected_glyph() + 1;; ++i) {
         for (int i = m_glyph_map_widget->selected_glyph() + 1;; ++i) {
             if (i > 0x10FFFF && !search_wrapped) {
             if (i > 0x10FFFF && !search_wrapped) {
@@ -327,7 +327,7 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::BitmapFont>&&
             m_glyph_editor_widget->set_mode(GlyphEditorWidget::Paint);
             m_glyph_editor_widget->set_mode(GlyphEditorWidget::Paint);
     };
     };
     move_glyph_button.set_checkable(true);
     move_glyph_button.set_checkable(true);
-    move_glyph_button.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/selection-move.png"));
+    move_glyph_button.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/selection-move.png").release_value_but_fixme_should_propagate_errors());
 
 
     GUI::Clipboard::the().on_change = [&](const String& data_type) {
     GUI::Clipboard::the().on_change = [&](const String& data_type) {
         m_paste_action->set_enabled(data_type == "glyph/x-fonteditor");
         m_paste_action->set_enabled(data_type == "glyph/x-fonteditor");

+ 3 - 3
Userland/Applications/Help/ManualModel.cpp

@@ -25,9 +25,9 @@ static ManualSectionNode s_sections[] = {
 
 
 ManualModel::ManualModel()
 ManualModel::ManualModel()
 {
 {
-    m_section_open_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/book-open.png"));
-    m_section_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/book.png"));
-    m_page_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-unknown.png"));
+    m_section_open_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/book-open.png").release_value_but_fixme_should_propagate_errors());
+    m_section_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/book.png").release_value_but_fixme_should_propagate_errors());
+    m_page_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-unknown.png").release_value_but_fixme_should_propagate_errors());
 }
 }
 
 
 Optional<GUI::ModelIndex> ManualModel::index_from_path(const StringView& path) const
 Optional<GUI::ModelIndex> ManualModel::index_from_path(const StringView& path) const

+ 6 - 6
Userland/Applications/HexEditor/HexEditorWidget.cpp

@@ -69,7 +69,7 @@ HexEditorWidget::HexEditorWidget()
         m_editor->update();
         m_editor->update();
     };
     };
 
 
-    m_new_action = GUI::Action::create("New", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new.png"), [this](const GUI::Action&) {
+    m_new_action = GUI::Action::create("New", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new.png").release_value_but_fixme_should_propagate_errors(), [this](const GUI::Action&) {
         String value;
         String value;
         if (request_close() && GUI::InputBox::show(window(), value, "Enter new file size:", "New file size") == GUI::InputBox::ExecOK && !value.is_empty()) {
         if (request_close() && GUI::InputBox::show(window(), value, "Enter new file size:", "New file size") == GUI::InputBox::ExecOK && !value.is_empty()) {
             auto file_size = value.to_int();
             auto file_size = value.to_int();
@@ -149,7 +149,7 @@ HexEditorWidget::HexEditorWidget()
         dbgln("Wrote document to {}", *response.chosen_file);
         dbgln("Wrote document to {}", *response.chosen_file);
     });
     });
 
 
-    m_find_action = GUI::Action::create("&Find", { Mod_Ctrl, Key_F }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png"), [&](const GUI::Action&) {
+    m_find_action = GUI::Action::create("&Find", { Mod_Ctrl, Key_F }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
         auto old_buffer = m_search_buffer;
         auto old_buffer = m_search_buffer;
         bool find_all = false;
         bool find_all = false;
         if (FindDialog::show(window(), m_search_text, m_search_buffer, find_all) == GUI::InputBox::ExecOK) {
         if (FindDialog::show(window(), m_search_text, m_search_buffer, find_all) == GUI::InputBox::ExecOK) {
@@ -186,7 +186,7 @@ HexEditorWidget::HexEditorWidget()
         }
         }
     });
     });
 
 
-    m_goto_offset_action = GUI::Action::create("&Go to Offset ...", { Mod_Ctrl, Key_G }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-to.png"), [this](const GUI::Action&) {
+    m_goto_offset_action = GUI::Action::create("&Go to Offset ...", { Mod_Ctrl, Key_G }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-to.png").release_value_but_fixme_should_propagate_errors(), [this](const GUI::Action&) {
         int new_offset;
         int new_offset;
         auto result = GoToOffsetDialog::show(
         auto result = GoToOffsetDialog::show(
             window(),
             window(),
@@ -253,7 +253,7 @@ void HexEditorWidget::initialize_menubar(GUI::Window& window)
     edit_menu.add_action(GUI::Action::create("Copy &Hex", { Mod_Ctrl, Key_C }, [&](const GUI::Action&) {
     edit_menu.add_action(GUI::Action::create("Copy &Hex", { Mod_Ctrl, Key_C }, [&](const GUI::Action&) {
         m_editor->copy_selected_hex_to_clipboard();
         m_editor->copy_selected_hex_to_clipboard();
     }));
     }));
-    edit_menu.add_action(GUI::Action::create("Copy &Text", { Mod_Ctrl | Mod_Shift, Key_C }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png"), [&](const GUI::Action&) {
+    edit_menu.add_action(GUI::Action::create("Copy &Text", { Mod_Ctrl | Mod_Shift, Key_C }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
         m_editor->copy_selected_text_to_clipboard();
         m_editor->copy_selected_text_to_clipboard();
     }));
     }));
     edit_menu.add_action(GUI::Action::create("Copy as &C Code", { Mod_Alt | Mod_Shift, Key_C }, [&](const GUI::Action&) {
     edit_menu.add_action(GUI::Action::create("Copy as &C Code", { Mod_Alt | Mod_Shift, Key_C }, [&](const GUI::Action&) {
@@ -261,7 +261,7 @@ void HexEditorWidget::initialize_menubar(GUI::Window& window)
     }));
     }));
     edit_menu.add_separator();
     edit_menu.add_separator();
     edit_menu.add_action(*m_find_action);
     edit_menu.add_action(*m_find_action);
-    edit_menu.add_action(GUI::Action::create("Find &Next", { Mod_None, Key_F3 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find-next.png"), [&](const GUI::Action&) {
+    edit_menu.add_action(GUI::Action::create("Find &Next", { Mod_None, Key_F3 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find-next.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
         if (m_search_text.is_empty() || m_search_buffer.is_empty()) {
         if (m_search_text.is_empty() || m_search_buffer.is_empty()) {
             GUI::MessageBox::show(&window, "Nothing to search for", "Not found", GUI::MessageBox::Type::Warning);
             GUI::MessageBox::show(&window, "Nothing to search for", "Not found", GUI::MessageBox::Type::Warning);
             return;
             return;
@@ -276,7 +276,7 @@ void HexEditorWidget::initialize_menubar(GUI::Window& window)
         m_last_found_index = result.value();
         m_last_found_index = result.value();
     }));
     }));
 
 
-    edit_menu.add_action(GUI::Action::create("Find All &Strings", { Mod_Ctrl | Mod_Shift, Key_S }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png"), [&](const GUI::Action&) {
+    edit_menu.add_action(GUI::Action::create("Find All &Strings", { Mod_Ctrl | Mod_Shift, Key_S }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
         int min_length = 4;
         int min_length = 4;
         auto matches = m_editor->find_all_strings(min_length);
         auto matches = m_editor->find_all_strings(min_length);
         m_search_results->set_model(*new SearchResultsModel(move(matches)));
         m_search_results->set_model(*new SearchResultsModel(move(matches)));

+ 4 - 4
Userland/Applications/ImageViewer/main.cpp

@@ -187,22 +187,22 @@ int main(int argc, char** argv)
             GUI::Desktop::the().set_wallpaper(widget.path());
             GUI::Desktop::the().set_wallpaper(widget.path());
         });
         });
 
 
-    auto go_first_action = GUI::Action::create("&Go to First", { Mod_None, Key_Home }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-first.png"),
+    auto go_first_action = GUI::Action::create("&Go to First", { Mod_None, Key_Home }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-first.png").release_value_but_fixme_should_propagate_errors(),
         [&](auto&) {
         [&](auto&) {
             widget.navigate(ViewWidget::Directions::First);
             widget.navigate(ViewWidget::Directions::First);
         });
         });
 
 
-    auto go_back_action = GUI::Action::create("Go &Back", { Mod_None, Key_Left }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png"),
+    auto go_back_action = GUI::Action::create("Go &Back", { Mod_None, Key_Left }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png").release_value_but_fixme_should_propagate_errors(),
         [&](auto&) {
         [&](auto&) {
             widget.navigate(ViewWidget::Directions::Back);
             widget.navigate(ViewWidget::Directions::Back);
         });
         });
 
 
-    auto go_forward_action = GUI::Action::create("Go &Forward", { Mod_None, Key_Right }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png"),
+    auto go_forward_action = GUI::Action::create("Go &Forward", { Mod_None, Key_Right }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png").release_value_but_fixme_should_propagate_errors(),
         [&](auto&) {
         [&](auto&) {
             widget.navigate(ViewWidget::Directions::Forward);
             widget.navigate(ViewWidget::Directions::Forward);
         });
         });
 
 
-    auto go_last_action = GUI::Action::create("Go to &Last", { Mod_None, Key_End }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-last.png"),
+    auto go_last_action = GUI::Action::create("Go to &Last", { Mod_None, Key_End }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-last.png").release_value_but_fixme_should_propagate_errors(),
         [&](auto&) {
         [&](auto&) {
             widget.navigate(ViewWidget::Directions::Last);
             widget.navigate(ViewWidget::Directions::Last);
         });
         });

+ 3 - 3
Userland/Applications/Mail/MailboxTreeModel.cpp

@@ -10,9 +10,9 @@
 MailboxTreeModel::MailboxTreeModel(AccountHolder const& account_holder)
 MailboxTreeModel::MailboxTreeModel(AccountHolder const& account_holder)
     : m_account_holder(account_holder)
     : m_account_holder(account_holder)
 {
 {
-    m_mail_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-mail.png"));
-    m_folder_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-folder.png"));
-    m_account_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/home-directory.png"));
+    m_mail_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-mail.png").release_value_but_fixme_should_propagate_errors());
+    m_folder_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-folder.png").release_value_but_fixme_should_propagate_errors());
+    m_account_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/home-directory.png").release_value_but_fixme_should_propagate_errors());
 }
 }
 
 
 MailboxTreeModel::~MailboxTreeModel()
 MailboxTreeModel::~MailboxTreeModel()

+ 2 - 2
Userland/Applications/MailSettings/MailSettingsWindow.cpp

@@ -57,10 +57,10 @@ MailSettingsWindow::MailSettingsWindow()
     mail_widget.load_from_gml(mail_settings_window_gml);
     mail_widget.load_from_gml(mail_settings_window_gml);
 
 
     auto& server_settings_image_label = *main_widget.find_descendant_of_type_named<GUI::Label>("server_settings_image_label");
     auto& server_settings_image_label = *main_widget.find_descendant_of_type_named<GUI::Label>("server_settings_image_label");
-    server_settings_image_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/graphics/mail-server-settings.png"));
+    server_settings_image_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/graphics/mail-server-settings.png").release_value_but_fixme_should_propagate_errors());
 
 
     auto& user_settings_image_label = *main_widget.find_descendant_of_type_named<GUI::Label>("user_settings_image_label");
     auto& user_settings_image_label = *main_widget.find_descendant_of_type_named<GUI::Label>("user_settings_image_label");
-    user_settings_image_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/graphics/mail-user-settings.png"));
+    user_settings_image_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/graphics/mail-user-settings.png").release_value_but_fixme_should_propagate_errors());
 
 
     m_server_inputbox = *main_widget.find_descendant_of_type_named<GUI::TextBox>("server_input");
     m_server_inputbox = *main_widget.find_descendant_of_type_named<GUI::TextBox>("server_input");
     m_server_inputbox->set_text(Config::read_string("Mail", "Connection", "Server", ""));
     m_server_inputbox->set_text(Config::read_string("Mail", "Connection", "Server", ""));

+ 1 - 1
Userland/Applications/MouseSettings/DoubleClickArrowWidget.cpp

@@ -27,7 +27,7 @@ void DoubleClickArrowWidget::set_double_click_speed(int speed)
 
 
 DoubleClickArrowWidget::DoubleClickArrowWidget()
 DoubleClickArrowWidget::DoubleClickArrowWidget()
 {
 {
-    m_arrow_bitmap = Gfx::Bitmap::try_load_from_file("/res/graphics/double-click-down-arrow.png");
+    m_arrow_bitmap = Gfx::Bitmap::try_load_from_file("/res/graphics/double-click-down-arrow.png").release_value_but_fixme_should_propagate_errors();
 }
 }
 
 
 void DoubleClickArrowWidget::paint_event(GUI::PaintEvent& event)
 void DoubleClickArrowWidget::paint_event(GUI::PaintEvent& event)

+ 3 - 3
Userland/Applications/MouseSettings/MouseWidget.cpp

@@ -32,10 +32,10 @@ MouseWidget::MouseWidget()
     m_speed_slider->set_value(slider_value);
     m_speed_slider->set_value(slider_value);
 
 
     auto& cursor_speed_image_label = *find_descendant_of_type_named<GUI::Label>("cursor_speed_image_label");
     auto& cursor_speed_image_label = *find_descendant_of_type_named<GUI::Label>("cursor_speed_image_label");
-    cursor_speed_image_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/graphics/mouse-cursor-speed.png"));
+    cursor_speed_image_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/graphics/mouse-cursor-speed.png").release_value_but_fixme_should_propagate_errors());
 
 
     auto& scroll_step_size_image_label = *find_descendant_of_type_named<GUI::Label>("scroll_step_size_image_label");
     auto& scroll_step_size_image_label = *find_descendant_of_type_named<GUI::Label>("scroll_step_size_image_label");
-    scroll_step_size_image_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/graphics/scroll-wheel-step-size.png"));
+    scroll_step_size_image_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/graphics/scroll-wheel-step-size.png").release_value_but_fixme_should_propagate_errors());
 
 
     m_scroll_length_spinbox = *find_descendant_of_type_named<GUI::SpinBox>("scroll_length_spinbox");
     m_scroll_length_spinbox = *find_descendant_of_type_named<GUI::SpinBox>("scroll_length_spinbox");
     m_scroll_length_spinbox->set_min(WindowServer::scroll_step_size_min);
     m_scroll_length_spinbox->set_min(WindowServer::scroll_step_size_min);
@@ -54,7 +54,7 @@ MouseWidget::MouseWidget()
     m_switch_buttons_checkbox = *find_descendant_of_type_named<GUI::CheckBox>("switch_buttons_input");
     m_switch_buttons_checkbox = *find_descendant_of_type_named<GUI::CheckBox>("switch_buttons_input");
     m_switch_buttons_checkbox->set_checked(GUI::WindowServerConnection::the().get_buttons_switched());
     m_switch_buttons_checkbox->set_checked(GUI::WindowServerConnection::the().get_buttons_switched());
     auto& switch_buttons_image_label = *find_descendant_of_type_named<GUI::Label>("switch_buttons_image_label");
     auto& switch_buttons_image_label = *find_descendant_of_type_named<GUI::Label>("switch_buttons_image_label");
-    switch_buttons_image_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/graphics/switch-mouse-buttons.png"));
+    switch_buttons_image_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/graphics/switch-mouse-buttons.png").release_value_but_fixme_should_propagate_errors());
 }
 }
 
 
 void MouseWidget::update_window_server()
 void MouseWidget::update_window_server()

+ 1 - 1
Userland/Applications/MouseSettings/ThemeWidget.cpp

@@ -63,7 +63,7 @@ void MouseCursorModel::invalidate()
         cursor.name = LexicalPath::basename(cursor.path);
         cursor.name = LexicalPath::basename(cursor.path);
 
 
         // FIXME: Animated cursor bitmaps
         // FIXME: Animated cursor bitmaps
-        auto cursor_bitmap = Gfx::Bitmap::try_load_from_file(cursor.path);
+        auto cursor_bitmap = Gfx::Bitmap::try_load_from_file(cursor.path).release_value_but_fixme_should_propagate_errors();
         auto cursor_bitmap_rect = cursor_bitmap->rect();
         auto cursor_bitmap_rect = cursor_bitmap->rect();
         cursor.params = Gfx::CursorParams::parse_from_filename(cursor.name, cursor_bitmap_rect.center()).constrained(*cursor_bitmap);
         cursor.params = Gfx::CursorParams::parse_from_filename(cursor.name, cursor_bitmap_rect.center()).constrained(*cursor_bitmap);
         cursor.bitmap = cursor_bitmap->cropped(Gfx::IntRect(Gfx::FloatRect(cursor_bitmap_rect).scaled(1.0 / cursor.params.frames(), 1.0))).release_value_but_fixme_should_propagate_errors();
         cursor.bitmap = cursor_bitmap->cropped(Gfx::IntRect(Gfx::FloatRect(cursor_bitmap_rect).scaled(1.0 / cursor.params.frames(), 1.0))).release_value_but_fixme_should_propagate_errors();

+ 2 - 2
Userland/Applications/PDFViewer/OutlineModel.cpp

@@ -15,8 +15,8 @@ NonnullRefPtr<OutlineModel> OutlineModel::create(const NonnullRefPtr<PDF::Outlin
 OutlineModel::OutlineModel(const NonnullRefPtr<PDF::OutlineDict>& outline)
 OutlineModel::OutlineModel(const NonnullRefPtr<PDF::OutlineDict>& outline)
     : m_outline(outline)
     : m_outline(outline)
 {
 {
-    m_closed_item_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/book.png"));
-    m_open_item_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/book-open.png"));
+    m_closed_item_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/book.png").release_value_but_fixme_should_propagate_errors());
+    m_open_item_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/book-open.png").release_value_but_fixme_should_propagate_errors());
 }
 }
 
 
 void OutlineModel::set_index_open_state(const GUI::ModelIndex& index, bool is_open)
 void OutlineModel::set_index_open_state(const GUI::ModelIndex& index, bool is_open)

+ 3 - 3
Userland/Applications/PDFViewer/PDFViewerWidget.cpp

@@ -66,7 +66,7 @@ void PDFViewerWidget::create_toolbar()
     auto& toolbar = toolbar_container.add<GUI::Toolbar>();
     auto& toolbar = toolbar_container.add<GUI::Toolbar>();
 
 
     auto open_outline_action = GUI::Action::create(
     auto open_outline_action = GUI::Action::create(
-        "Open &Sidebar", { Mod_Ctrl, Key_O }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/sidebar.png"), [&](auto& action) {
+        "Open &Sidebar", { Mod_Ctrl, Key_O }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/sidebar.png").release_value_but_fixme_should_propagate_errors(), [&](auto& action) {
             m_sidebar_open = !m_sidebar_open;
             m_sidebar_open = !m_sidebar_open;
             m_sidebar->set_fixed_width(m_sidebar_open ? 0 : 200);
             m_sidebar->set_fixed_width(m_sidebar_open ? 0 : 200);
             action.set_text(m_sidebar_open ? "Open &Sidebar" : "Close &Sidebar");
             action.set_text(m_sidebar_open ? "Open &Sidebar" : "Close &Sidebar");
@@ -78,13 +78,13 @@ void PDFViewerWidget::create_toolbar()
     toolbar.add_action(*open_outline_action);
     toolbar.add_action(*open_outline_action);
     toolbar.add_separator();
     toolbar.add_separator();
 
 
-    m_go_to_prev_page_action = GUI::Action::create("Go to &Previous Page", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-up.png"), [&](auto&) {
+    m_go_to_prev_page_action = GUI::Action::create("Go to &Previous Page", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-up.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         VERIFY(m_viewer->current_page() > 0);
         VERIFY(m_viewer->current_page() > 0);
         m_page_text_box->set_current_number(m_viewer->current_page());
         m_page_text_box->set_current_number(m_viewer->current_page());
     });
     });
     m_go_to_prev_page_action->set_enabled(false);
     m_go_to_prev_page_action->set_enabled(false);
 
 
-    m_go_to_next_page_action = GUI::Action::create("Go to &Next Page", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-down.png"), [&](auto&) {
+    m_go_to_next_page_action = GUI::Action::create("Go to &Next Page", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-down.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         VERIFY(m_viewer->current_page() < m_viewer->document()->get_page_count() - 1);
         VERIFY(m_viewer->current_page() < m_viewer->document()->get_page_count() - 1);
         m_page_text_box->set_current_number(m_viewer->current_page() + 2);
         m_page_text_box->set_current_number(m_viewer->current_page() + 2);
     });
     });

+ 4 - 4
Userland/Applications/Piano/PlayerWidget.cpp

@@ -19,10 +19,10 @@ PlayerWidget::PlayerWidget(TrackManager& manager, AudioPlayerLoop& loop)
     set_layout<GUI::HorizontalBoxLayout>();
     set_layout<GUI::HorizontalBoxLayout>();
     set_fill_with_background_color(true);
     set_fill_with_background_color(true);
 
 
-    m_play_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/play.png");
-    m_pause_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/pause.png");
-    m_back_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png");    // Go back a note
-    m_next_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png"); // Advance a note
+    m_play_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/play.png").release_value_but_fixme_should_propagate_errors();
+    m_pause_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/pause.png").release_value_but_fixme_should_propagate_errors();
+    m_back_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png").release_value_but_fixme_should_propagate_errors();    // Go back a note
+    m_next_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png").release_value_but_fixme_should_propagate_errors(); // Advance a note
 
 
     m_play_button = add<GUI::Button>();
     m_play_button = add<GUI::Button>();
     m_play_button->set_icon(*m_pause_icon);
     m_play_button->set_icon(*m_pause_icon);

+ 1 - 1
Userland/Applications/Piano/SamplerWidget.cpp

@@ -84,7 +84,7 @@ SamplerWidget::SamplerWidget(TrackManager& track_manager)
     m_open_button = m_open_button_and_recorded_sample_name_container->add<GUI::Button>();
     m_open_button = m_open_button_and_recorded_sample_name_container->add<GUI::Button>();
     m_open_button->set_fixed_size(24, 24);
     m_open_button->set_fixed_size(24, 24);
     m_open_button->set_focus_policy(GUI::FocusPolicy::TabFocus);
     m_open_button->set_focus_policy(GUI::FocusPolicy::TabFocus);
-    m_open_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png"));
+    m_open_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png").release_value_but_fixme_should_propagate_errors());
     m_open_button->on_click = [this](auto) {
     m_open_button->on_click = [this](auto) {
         Optional<String> open_path = GUI::FilePicker::get_open_filepath(window());
         Optional<String> open_path = GUI::FilePicker::get_open_filepath(window());
         if (!open_path.has_value())
         if (!open_path.has_value())

+ 6 - 6
Userland/Applications/PixelPaint/MainWidget.cpp

@@ -91,7 +91,7 @@ void MainWidget::initialize_menubar(GUI::Window& window)
     auto& file_menu = window.add_menu("&File");
     auto& file_menu = window.add_menu("&File");
 
 
     m_new_image_action = GUI::Action::create(
     m_new_image_action = GUI::Action::create(
-        "&New Image...", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new.png"), [&](auto&) {
+        "&New Image...", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
             auto dialog = PixelPaint::CreateNewImageDialog::construct(&window);
             auto dialog = PixelPaint::CreateNewImageDialog::construct(&window);
             if (dialog->exec() == GUI::Dialog::ExecOK) {
             if (dialog->exec() == GUI::Dialog::ExecOK) {
                 auto image = PixelPaint::Image::try_create_with_size(dialog->image_size());
                 auto image = PixelPaint::Image::try_create_with_size(dialog->image_size());
@@ -198,7 +198,7 @@ void MainWidget::initialize_menubar(GUI::Window& window)
     });
     });
 
 
     m_copy_merged_action = GUI::Action::create(
     m_copy_merged_action = GUI::Action::create(
-        "Copy &Merged", { Mod_Ctrl | Mod_Shift, Key_C }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png"),
+        "Copy &Merged", { Mod_Ctrl | Mod_Shift, Key_C }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png").release_value_but_fixme_should_propagate_errors(),
         [&](auto&) {
         [&](auto&) {
             auto* editor = current_image_editor();
             auto* editor = current_image_editor();
             if (!editor)
             if (!editor)
@@ -434,7 +434,7 @@ void MainWidget::initialize_menubar(GUI::Window& window)
 
 
     auto& layer_menu = window.add_menu("&Layer");
     auto& layer_menu = window.add_menu("&Layer");
     layer_menu.add_action(GUI::Action::create(
     layer_menu.add_action(GUI::Action::create(
-        "New &Layer...", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-layer.png"), [&](auto&) {
+        "New &Layer...", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-layer.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
             auto* editor = current_image_editor();
             auto* editor = current_image_editor();
             if (!editor)
             if (!editor)
                 return;
                 return;
@@ -461,11 +461,11 @@ void MainWidget::initialize_menubar(GUI::Window& window)
             m_layer_list_widget->cycle_through_selection(-1);
             m_layer_list_widget->cycle_through_selection(-1);
         }));
         }));
     layer_menu.add_action(GUI::Action::create(
     layer_menu.add_action(GUI::Action::create(
-        "Select &Top Layer", { 0, Key_Home }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/top-layer.png"), [&](auto&) {
+        "Select &Top Layer", { 0, Key_Home }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/top-layer.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
             m_layer_list_widget->select_top_layer();
             m_layer_list_widget->select_top_layer();
         }));
         }));
     layer_menu.add_action(GUI::Action::create(
     layer_menu.add_action(GUI::Action::create(
-        "Select B&ottom Layer", { 0, Key_End }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/bottom-layer.png"), [&](auto&) {
+        "Select B&ottom Layer", { 0, Key_End }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/bottom-layer.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
             m_layer_list_widget->select_bottom_layer();
             m_layer_list_widget->select_bottom_layer();
         }));
         }));
     layer_menu.add_separator();
     layer_menu.add_separator();
@@ -514,7 +514,7 @@ void MainWidget::initialize_menubar(GUI::Window& window)
         }));
         }));
     layer_menu.add_separator();
     layer_menu.add_separator();
     layer_menu.add_action(GUI::Action::create(
     layer_menu.add_action(GUI::Action::create(
-        "&Remove Active Layer", { Mod_Ctrl, Key_D }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png"), [&](auto&) {
+        "&Remove Active Layer", { Mod_Ctrl, Key_D }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
             auto* editor = current_image_editor();
             auto* editor = current_image_editor();
             if (!editor)
             if (!editor)
                 return;
                 return;

+ 1 - 1
Userland/Applications/PixelPaint/ToolboxWidget.cpp

@@ -52,7 +52,7 @@ ToolboxWidget::~ToolboxWidget()
 void ToolboxWidget::setup_tools()
 void ToolboxWidget::setup_tools()
 {
 {
     auto add_tool = [&](String name, StringView const& icon_name, GUI::Shortcut const& shortcut, NonnullOwnPtr<Tool> tool) {
     auto add_tool = [&](String name, StringView const& icon_name, GUI::Shortcut const& shortcut, NonnullOwnPtr<Tool> tool) {
-        auto action = GUI::Action::create_checkable(move(name), shortcut, Gfx::Bitmap::try_load_from_file(String::formatted("/res/icons/pixelpaint/{}.png", icon_name)),
+        auto action = GUI::Action::create_checkable(move(name), shortcut, Gfx::Bitmap::try_load_from_file(String::formatted("/res/icons/pixelpaint/{}.png", icon_name)).release_value_but_fixme_should_propagate_errors(),
             [this, tool = tool.ptr()](auto& action) {
             [this, tool = tool.ptr()](auto& action) {
                 if (action.is_checked()) {
                 if (action.is_checked()) {
                     on_tool_selection(tool);
                     on_tool_selection(tool);

+ 1 - 3
Userland/Applications/PixelPaint/Tools/BucketTool.cpp

@@ -20,9 +20,7 @@ namespace PixelPaint {
 
 
 BucketTool::BucketTool()
 BucketTool::BucketTool()
 {
 {
-    auto bucket_icon = Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/bucket.png");
-    if (!bucket_icon.is_null())
-        m_cursor = bucket_icon.release_nonnull();
+    m_cursor = Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/bucket.png").release_value_but_fixme_should_propagate_errors();
 }
 }
 
 
 BucketTool::~BucketTool()
 BucketTool::~BucketTool()

+ 2 - 2
Userland/Applications/PixelPaint/Tools/GuideTool.cpp

@@ -142,7 +142,7 @@ void GuideTool::on_context_menu(Layer*, GUI::ContextMenuEvent& event)
     if (!m_context_menu) {
     if (!m_context_menu) {
         m_context_menu = GUI::Menu::construct();
         m_context_menu = GUI::Menu::construct();
         m_context_menu->add_action(GUI::Action::create(
         m_context_menu->add_action(GUI::Action::create(
-            "Set &Offset", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/gear.png"), [this](auto&) {
+            "Set &Offset", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/gear.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
                 if (!m_context_menu_guide)
                 if (!m_context_menu_guide)
                     return;
                     return;
                 auto dialog = EditGuideDialog::construct(
                 auto dialog = EditGuideDialog::construct(
@@ -160,7 +160,7 @@ void GuideTool::on_context_menu(Layer*, GUI::ContextMenuEvent& event)
             },
             },
             editor()));
             editor()));
         m_context_menu->add_action(GUI::Action::create(
         m_context_menu->add_action(GUI::Action::create(
-            "&Delete Guide", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png"), [this](auto&) {
+            "&Delete Guide", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
                 if (!m_context_menu_guide)
                 if (!m_context_menu_guide)
                     return;
                     return;
                 editor()->remove_guide(*m_context_menu_guide);
                 editor()->remove_guide(*m_context_menu_guide);

+ 2 - 4
Userland/Applications/SoundPlayer/NoVisualizationWidget.cpp

@@ -20,11 +20,9 @@ void NoVisualizationWidget::paint_event(GUI::PaintEvent& event)
     Frame::paint_event(event);
     Frame::paint_event(event);
     GUI::Painter painter(*this);
     GUI::Painter painter(*this);
 
 
-    if (m_serenity_bg.is_null()) {
-        m_serenity_bg = Gfx::Bitmap::try_load_from_file("/res/wallpapers/sunset-retro.png");
-    }
+    if (!m_serenity_bg)
+        m_serenity_bg = Gfx::Bitmap::try_load_from_file("/res/wallpapers/sunset-retro.png").release_value_but_fixme_should_propagate_errors();
     painter.draw_scaled_bitmap(frame_inner_rect(), *m_serenity_bg, m_serenity_bg->rect(), 1.0f);
     painter.draw_scaled_bitmap(frame_inner_rect(), *m_serenity_bg, m_serenity_bg->rect(), 1.0f);
-    return;
 }
 }
 
 
 void NoVisualizationWidget::set_buffer(RefPtr<Audio::Buffer>)
 void NoVisualizationWidget::set_buffer(RefPtr<Audio::Buffer>)

+ 5 - 5
Userland/Applications/SoundPlayer/SoundPlayerWidgetAdvancedView.cpp

@@ -43,11 +43,11 @@ SoundPlayerWidgetAdvancedView::SoundPlayerWidgetAdvancedView(GUI::Window& window
 
 
     m_player_view->set_layout<GUI::VerticalBoxLayout>();
     m_player_view->set_layout<GUI::VerticalBoxLayout>();
 
 
-    m_play_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/play.png");
-    m_pause_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/pause.png");
-    m_stop_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/stop.png");
-    m_back_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png");
-    m_next_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png");
+    m_play_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/play.png").release_value_but_fixme_should_propagate_errors();
+    m_pause_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/pause.png").release_value_but_fixme_should_propagate_errors();
+    m_stop_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/stop.png").release_value_but_fixme_should_propagate_errors();
+    m_back_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png").release_value_but_fixme_should_propagate_errors();
+    m_next_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png").release_value_but_fixme_should_propagate_errors();
 
 
     m_visualization = m_player_view->add<BarsVisualizationWidget>();
     m_visualization = m_player_view->add<BarsVisualizationWidget>();
 
 

+ 3 - 3
Userland/Applications/SpaceAnalyzer/main.cpp

@@ -332,14 +332,14 @@ int main(int argc, char* argv[])
     help_menu.add_action(GUI::CommonActions::make_about_action(APP_NAME, app_icon, window));
     help_menu.add_action(GUI::CommonActions::make_about_action(APP_NAME, app_icon, window));
 
 
     // Configure the nodes context menu.
     // Configure the nodes context menu.
-    auto open_folder_action = GUI::Action::create("Open Folder", { Mod_Ctrl, Key_O }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png"), [&](auto&) {
+    auto open_folder_action = GUI::Action::create("Open Folder", { Mod_Ctrl, Key_O }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         Desktop::Launcher::open(URL::create_with_file_protocol(get_absolute_path_to_selected_node(treemapwidget)));
         Desktop::Launcher::open(URL::create_with_file_protocol(get_absolute_path_to_selected_node(treemapwidget)));
     });
     });
-    auto open_containing_folder_action = GUI::Action::create("Open Containing Folder", { Mod_Ctrl, Key_O }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png"), [&](auto&) {
+    auto open_containing_folder_action = GUI::Action::create("Open Containing Folder", { Mod_Ctrl, Key_O }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         LexicalPath path { get_absolute_path_to_selected_node(treemapwidget) };
         LexicalPath path { get_absolute_path_to_selected_node(treemapwidget) };
         Desktop::Launcher::open(URL::create_with_file_protocol(path.dirname(), path.basename()));
         Desktop::Launcher::open(URL::create_with_file_protocol(path.dirname(), path.basename()));
     });
     });
-    auto copy_path_action = GUI::Action::create("Copy Path to Clipboard", { Mod_Ctrl, Key_C }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png"), [&](auto&) {
+    auto copy_path_action = GUI::Action::create("Copy Path to Clipboard", { Mod_Ctrl, Key_C }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         GUI::Clipboard::the().set_plain_text(get_absolute_path_to_selected_node(treemapwidget));
         GUI::Clipboard::the().set_plain_text(get_absolute_path_to_selected_node(treemapwidget));
     });
     });
     auto delete_action = GUI::CommonActions::make_delete_action([&](auto&) {
     auto delete_action = GUI::CommonActions::make_delete_action([&](auto&) {

+ 1 - 1
Userland/Applications/Spreadsheet/HelpWindow.cpp

@@ -63,7 +63,7 @@ HelpWindow::HelpWindow(GUI::Window* parent)
 {
 {
     resize(530, 365);
     resize(530, 365);
     set_title("Spreadsheet Functions Help");
     set_title("Spreadsheet Functions Help");
-    set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-help.png"));
+    set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-help.png").release_value_but_fixme_should_propagate_errors());
     set_accessory(true);
     set_accessory(true);
 
 
     auto& widget = set_main_widget<GUI::Widget>();
     auto& widget = set_main_widget<GUI::Widget>();

+ 1 - 1
Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp

@@ -114,7 +114,7 @@ SpreadsheetWidget::SpreadsheetWidget(NonnullRefPtrVector<Sheet>&& sheets, bool s
 
 
     setup_tabs(m_workbook->sheets());
     setup_tabs(m_workbook->sheets());
 
 
-    m_new_action = GUI::Action::create("Add New Sheet", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-tab.png"), [&](auto&) {
+    m_new_action = GUI::Action::create("Add New Sheet", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-tab.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         add_sheet();
         add_sheet();
     });
     });
 
 

+ 2 - 2
Userland/Applications/SystemMonitor/NetworkStatisticsWidget.cpp

@@ -19,8 +19,8 @@ NetworkStatisticsWidget::NetworkStatisticsWidget()
         layout()->set_margins(4);
         layout()->set_margins(4);
         set_fill_with_background_color(true);
         set_fill_with_background_color(true);
 
 
-        m_network_connected_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/network-connected.png");
-        m_network_disconnected_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/network-disconnected.png");
+        m_network_connected_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/network-connected.png").release_value_but_fixme_should_propagate_errors();
+        m_network_disconnected_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/network-disconnected.png").release_value_but_fixme_should_propagate_errors();
 
 
         m_network_link_down_bitmap = Gfx::Bitmap::try_create(m_network_connected_bitmap->format(), m_network_connected_bitmap->size());
         m_network_link_down_bitmap = Gfx::Bitmap::try_create(m_network_connected_bitmap->format(), m_network_connected_bitmap->size());
         {
         {

+ 4 - 4
Userland/Applications/SystemMonitor/main.cpp

@@ -255,7 +255,7 @@ int main(int argc, char** argv)
     };
     };
 
 
     auto kill_action = GUI::Action::create(
     auto kill_action = GUI::Action::create(
-        "&Kill Process", { Mod_Ctrl, Key_K }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/kill.png"), [&](const GUI::Action&) {
+        "&Kill Process", { Mod_Ctrl, Key_K }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/kill.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
             pid_t pid = selected_id(ProcessModel::Column::PID);
             pid_t pid = selected_id(ProcessModel::Column::PID);
             if (pid != -1)
             if (pid != -1)
                 kill(pid, SIGKILL);
                 kill(pid, SIGKILL);
@@ -263,7 +263,7 @@ int main(int argc, char** argv)
         &process_table_view);
         &process_table_view);
 
 
     auto stop_action = GUI::Action::create(
     auto stop_action = GUI::Action::create(
-        "&Stop Process", { Mod_Ctrl, Key_S }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/stop-hand.png"), [&](const GUI::Action&) {
+        "&Stop Process", { Mod_Ctrl, Key_S }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/stop-hand.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
             pid_t pid = selected_id(ProcessModel::Column::PID);
             pid_t pid = selected_id(ProcessModel::Column::PID);
             if (pid != -1)
             if (pid != -1)
                 kill(pid, SIGSTOP);
                 kill(pid, SIGSTOP);
@@ -271,7 +271,7 @@ int main(int argc, char** argv)
         &process_table_view);
         &process_table_view);
 
 
     auto continue_action = GUI::Action::create(
     auto continue_action = GUI::Action::create(
-        "&Continue Process", { Mod_Ctrl, Key_C }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/continue.png"), [&](const GUI::Action&) {
+        "&Continue Process", { Mod_Ctrl, Key_C }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/continue.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
             pid_t pid = selected_id(ProcessModel::Column::PID);
             pid_t pid = selected_id(ProcessModel::Column::PID);
             if (pid != -1)
             if (pid != -1)
                 kill(pid, SIGCONT);
                 kill(pid, SIGCONT);
@@ -280,7 +280,7 @@ int main(int argc, char** argv)
 
 
     auto profile_action = GUI::Action::create(
     auto profile_action = GUI::Action::create(
         "&Profile Process", { Mod_Ctrl, Key_P },
         "&Profile Process", { Mod_Ctrl, Key_P },
-        Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-profiler.png"), [&](auto&) {
+        Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-profiler.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
             pid_t pid = selected_id(ProcessModel::Column::PID);
             pid_t pid = selected_id(ProcessModel::Column::PID);
             if (pid != -1) {
             if (pid != -1) {
                 auto pid_string = String::number(pid);
                 auto pid_string = String::number(pid);

+ 6 - 6
Userland/Applications/Terminal/main.cpp

@@ -202,10 +202,10 @@ static RefPtr<GUI::Window> create_find_window(VT::TerminalWidget& terminal)
         find_textbox.set_text(terminal.selected_text().replace("\n", " ", true));
         find_textbox.set_text(terminal.selected_text().replace("\n", " ", true));
     auto& find_backwards = find.add<GUI::Button>();
     auto& find_backwards = find.add<GUI::Button>();
     find_backwards.set_fixed_width(25);
     find_backwards.set_fixed_width(25);
-    find_backwards.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/upward-triangle.png"));
+    find_backwards.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/upward-triangle.png").release_value_but_fixme_should_propagate_errors());
     auto& find_forwards = find.add<GUI::Button>();
     auto& find_forwards = find.add<GUI::Button>();
     find_forwards.set_fixed_width(25);
     find_forwards.set_fixed_width(25);
-    find_forwards.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/downward-triangle.png"));
+    find_forwards.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/downward-triangle.png").release_value_but_fixme_should_propagate_errors());
 
 
     find_textbox.on_return_pressed = [&]() {
     find_textbox.on_return_pressed = [&]() {
         find_backwards.click();
         find_backwards.click();
@@ -345,7 +345,7 @@ int main(int argc, char** argv)
     auto new_scrollback_size = Config::read_i32("Terminal", "Terminal", "MaxHistorySize", terminal.max_history_size());
     auto new_scrollback_size = Config::read_i32("Terminal", "Terminal", "MaxHistorySize", terminal.max_history_size());
     terminal.set_max_history_size(new_scrollback_size);
     terminal.set_max_history_size(new_scrollback_size);
 
 
-    auto open_settings_action = GUI::Action::create("&Settings", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/settings.png"),
+    auto open_settings_action = GUI::Action::create("&Settings", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/settings.png").release_value_but_fixme_should_propagate_errors(),
         [&](const GUI::Action&) {
         [&](const GUI::Action&) {
             if (!settings_window)
             if (!settings_window)
                 settings_window = create_settings_window(terminal);
                 settings_window = create_settings_window(terminal);
@@ -369,7 +369,7 @@ int main(int argc, char** argv)
         });
         });
 
 
     terminal.context_menu().add_separator();
     terminal.context_menu().add_separator();
-    auto pick_font_action = GUI::Action::create("&Terminal Font...", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-font-editor.png"),
+    auto pick_font_action = GUI::Action::create("&Terminal Font...", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-font-editor.png").release_value_but_fixme_should_propagate_errors(),
         [&](auto&) {
         [&](auto&) {
             auto picker = GUI::FontPicker::construct(window, &terminal.font(), true);
             auto picker = GUI::FontPicker::construct(window, &terminal.font(), true);
             if (picker->exec() == GUI::Dialog::ExecOK) {
             if (picker->exec() == GUI::Dialog::ExecOK) {
@@ -385,7 +385,7 @@ int main(int argc, char** argv)
     terminal.context_menu().add_action(open_settings_action);
     terminal.context_menu().add_action(open_settings_action);
 
 
     auto& file_menu = window->add_menu("&File");
     auto& file_menu = window->add_menu("&File");
-    file_menu.add_action(GUI::Action::create("Open New &Terminal", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-terminal.png"), [&](auto&) {
+    file_menu.add_action(GUI::Action::create("Open New &Terminal", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-terminal.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         Core::Process::spawn("/bin/Terminal");
         Core::Process::spawn("/bin/Terminal");
     }));
     }));
 
 
@@ -400,7 +400,7 @@ int main(int argc, char** argv)
     edit_menu.add_action(terminal.copy_action());
     edit_menu.add_action(terminal.copy_action());
     edit_menu.add_action(terminal.paste_action());
     edit_menu.add_action(terminal.paste_action());
     edit_menu.add_separator();
     edit_menu.add_separator();
-    edit_menu.add_action(GUI::Action::create("&Find...", { Mod_Ctrl | Mod_Shift, Key_F }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png"),
+    edit_menu.add_action(GUI::Action::create("&Find...", { Mod_Ctrl | Mod_Shift, Key_F }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png").release_value_but_fixme_should_propagate_errors(),
         [&](auto&) {
         [&](auto&) {
             if (!find_window)
             if (!find_window)
                 find_window = create_find_window(terminal);
                 find_window = create_find_window(terminal);

+ 7 - 7
Userland/Applications/TextEditor/MainWidget.cpp

@@ -92,7 +92,7 @@ MainWidget::MainWidget()
     };
     };
     m_wrap_around_checkbox->set_checked(true);
     m_wrap_around_checkbox->set_checked(true);
 
 
-    m_find_next_action = GUI::Action::create("Find &Next", { Mod_Ctrl, Key_G }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find-next.png"), [&](auto&) {
+    m_find_next_action = GUI::Action::create("Find &Next", { Mod_Ctrl, Key_G }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find-next.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         auto needle = m_find_textbox->text();
         auto needle = m_find_textbox->text();
         if (needle.is_empty())
         if (needle.is_empty())
             return;
             return;
@@ -111,7 +111,7 @@ MainWidget::MainWidget()
         }
         }
     });
     });
 
 
-    m_find_previous_action = GUI::Action::create("Find Pr&evious", { Mod_Ctrl | Mod_Shift, Key_G }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find-previous.png"), [&](auto&) {
+    m_find_previous_action = GUI::Action::create("Find Pr&evious", { Mod_Ctrl | Mod_Shift, Key_G }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find-previous.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         auto needle = m_find_textbox->text();
         auto needle = m_find_textbox->text();
         if (needle.is_empty())
         if (needle.is_empty())
             return;
             return;
@@ -174,11 +174,11 @@ MainWidget::MainWidget()
 
 
     m_find_previous_button = *find_descendant_of_type_named<GUI::Button>("find_previous_button");
     m_find_previous_button = *find_descendant_of_type_named<GUI::Button>("find_previous_button");
     m_find_previous_button->set_action(*m_find_previous_action);
     m_find_previous_button->set_action(*m_find_previous_action);
-    m_find_previous_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find-previous.png"));
+    m_find_previous_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find-previous.png").release_value_but_fixme_should_propagate_errors());
 
 
     m_find_next_button = *find_descendant_of_type_named<GUI::Button>("find_next_button");
     m_find_next_button = *find_descendant_of_type_named<GUI::Button>("find_next_button");
     m_find_next_button->set_action(*m_find_next_action);
     m_find_next_button->set_action(*m_find_next_action);
-    m_find_next_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find-next.png"));
+    m_find_next_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find-next.png").release_value_but_fixme_should_propagate_errors());
 
 
     m_find_textbox->on_return_pressed = [this] {
     m_find_textbox->on_return_pressed = [this] {
         m_find_next_button->click();
         m_find_next_button->click();
@@ -212,7 +212,7 @@ MainWidget::MainWidget()
     });
     });
     m_vim_emulation_setting_action->set_checked(false);
     m_vim_emulation_setting_action->set_checked(false);
 
 
-    m_find_replace_action = GUI::Action::create("&Find/Replace...", { Mod_Ctrl, Key_F }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png"), [this](auto&) {
+    m_find_replace_action = GUI::Action::create("&Find/Replace...", { Mod_Ctrl, Key_F }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
         m_find_replace_widget->set_visible(true);
         m_find_replace_widget->set_visible(true);
         m_find_widget->set_visible(true);
         m_find_widget->set_visible(true);
         m_replace_widget->set_visible(true);
         m_replace_widget->set_visible(true);
@@ -245,7 +245,7 @@ MainWidget::MainWidget()
     m_editor->on_cursor_change = [this] { update_statusbar(); };
     m_editor->on_cursor_change = [this] { update_statusbar(); };
     m_editor->on_selection_change = [this] { update_statusbar(); };
     m_editor->on_selection_change = [this] { update_statusbar(); };
 
 
-    m_new_action = GUI::Action::create("&New", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new.png"), [this](GUI::Action const&) {
+    m_new_action = GUI::Action::create("&New", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new.png").release_value_but_fixme_should_propagate_errors(), [this](GUI::Action const&) {
         if (editor().document().is_modified()) {
         if (editor().document().is_modified()) {
             auto save_document_first_result = GUI::MessageBox::show(window(), "Save changes to current document first?", "Warning", GUI::MessageBox::Type::Warning, GUI::MessageBox::InputType::YesNoCancel);
             auto save_document_first_result = GUI::MessageBox::show(window(), "Save changes to current document first?", "Warning", GUI::MessageBox::Type::Warning, GUI::MessageBox::InputType::YesNoCancel);
             if (save_document_first_result == GUI::Dialog::ExecResult::ExecYes)
             if (save_document_first_result == GUI::Dialog::ExecResult::ExecYes)
@@ -448,7 +448,7 @@ void MainWidget::initialize_menubar(GUI::Window& window)
 
 
     view_menu.add_separator();
     view_menu.add_separator();
 
 
-    view_menu.add_action(GUI::Action::create("Editor &Font...", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-font-editor.png"),
+    view_menu.add_action(GUI::Action::create("Editor &Font...", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-font-editor.png").release_value_but_fixme_should_propagate_errors(),
         [&](auto&) {
         [&](auto&) {
             auto picker = GUI::FontPicker::construct(&window, &m_editor->font(), false);
             auto picker = GUI::FontPicker::construct(&window, &m_editor->font(), false);
             if (picker->exec() == GUI::Dialog::ExecOK) {
             if (picker->exec() == GUI::Dialog::ExecOK) {

+ 12 - 10
Userland/Applications/ThemeEditor/PreviewWidget.cpp

@@ -79,12 +79,12 @@ private:
 PreviewWidget::PreviewWidget(const Gfx::Palette& preview_palette)
 PreviewWidget::PreviewWidget(const Gfx::Palette& preview_palette)
     : m_preview_palette(preview_palette)
     : m_preview_palette(preview_palette)
 {
 {
-    m_active_window_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/window.png");
-    m_inactive_window_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/window.png");
+    m_active_window_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/window.png").release_value_but_fixme_should_propagate_errors();
+    m_inactive_window_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/window.png").release_value_but_fixme_should_propagate_errors();
 
 
-    m_default_close_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/window-close.png");
-    m_default_maximize_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/upward-triangle.png");
-    m_default_minimize_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/downward-triangle.png");
+    m_default_close_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/window-close.png").release_value_but_fixme_should_propagate_errors();
+    m_default_maximize_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/upward-triangle.png").release_value_but_fixme_should_propagate_errors();
+    m_default_minimize_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/downward-triangle.png").release_value_but_fixme_should_propagate_errors();
 
 
     VERIFY(m_active_window_icon);
     VERIFY(m_active_window_icon);
     VERIFY(m_inactive_window_icon);
     VERIFY(m_inactive_window_icon);
@@ -105,15 +105,17 @@ PreviewWidget::~PreviewWidget()
 void PreviewWidget::load_theme_bitmaps()
 void PreviewWidget::load_theme_bitmaps()
 {
 {
     auto load_bitmap = [](String const& path, String& last_path, RefPtr<Gfx::Bitmap>& bitmap) {
     auto load_bitmap = [](String const& path, String& last_path, RefPtr<Gfx::Bitmap>& bitmap) {
+        bitmap = nullptr;
         if (path.is_empty()) {
         if (path.is_empty()) {
             last_path = String::empty();
             last_path = String::empty();
-            bitmap = nullptr;
         } else if (last_path != path) {
         } else if (last_path != path) {
-            bitmap = Gfx::Bitmap::try_load_from_file(path);
-            if (bitmap)
-                last_path = path;
-            else
+            auto bitmap_or_error = Gfx::Bitmap::try_load_from_file(path);
+            if (bitmap_or_error.is_error()) {
                 last_path = String::empty();
                 last_path = String::empty();
+            } else {
+                last_path = path;
+                bitmap = bitmap_or_error.release_value();
+            }
         }
         }
     };
     };
 
 

+ 3 - 3
Userland/Applications/Welcome/WelcomeWidget.cpp

@@ -30,14 +30,14 @@ WelcomeWidget::WelcomeWidget()
     tip_frame.set_fill_with_background_color(true);
     tip_frame.set_fill_with_background_color(true);
 
 
     auto& light_bulb_label = *find_descendant_of_type_named<GUI::Label>("light_bulb_label");
     auto& light_bulb_label = *find_descendant_of_type_named<GUI::Label>("light_bulb_label");
-    light_bulb_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/app-welcome.png"));
+    light_bulb_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/app-welcome.png").release_value_but_fixme_should_propagate_errors());
 
 
     m_web_view = *find_descendant_of_type_named<Web::OutOfProcessWebView>("web_view");
     m_web_view = *find_descendant_of_type_named<Web::OutOfProcessWebView>("web_view");
 
 
     m_tip_label = *find_descendant_of_type_named<GUI::Label>("tip_label");
     m_tip_label = *find_descendant_of_type_named<GUI::Label>("tip_label");
 
 
     m_next_button = *find_descendant_of_type_named<GUI::Button>("next_button");
     m_next_button = *find_descendant_of_type_named<GUI::Button>("next_button");
-    m_next_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png"));
+    m_next_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png").release_value_but_fixme_should_propagate_errors());
     m_next_button->on_click = [&](auto) {
     m_next_button->on_click = [&](auto) {
         if (!tip_frame.is_visible()) {
         if (!tip_frame.is_visible()) {
             m_web_view->set_visible(false);
             m_web_view->set_visible(false);
@@ -52,7 +52,7 @@ WelcomeWidget::WelcomeWidget()
     };
     };
 
 
     m_help_button = *find_descendant_of_type_named<GUI::Button>("help_button");
     m_help_button = *find_descendant_of_type_named<GUI::Button>("help_button");
-    m_help_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/book-open.png"));
+    m_help_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/book-open.png").release_value_but_fixme_should_propagate_errors());
     m_help_button->on_click = [](auto) {
     m_help_button->on_click = [](auto) {
         Core::Process::spawn("/bin/Help"sv);
         Core::Process::spawn("/bin/Help"sv);
     };
     };

+ 21 - 21
Userland/Demos/CatDog/CatDog.h

@@ -49,28 +49,28 @@ private:
     bool m_up, m_down, m_left, m_right, m_sleeping = false;
     bool m_up, m_down, m_left, m_right, m_sleeping = false;
     bool m_roaming { true };
     bool m_roaming { true };
 
 
-    AK::NonnullRefPtr<Gfx::Bitmap> m_alert = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/alert.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_erun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/erun1.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_erun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/erun2.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_nerun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/nerun1.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_nerun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/nerun2.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_nrun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/nrun1.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_nrun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/nrun2.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_nwrun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/nwrun1.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_nwrun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/nwrun2.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_serun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/serun1.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_serun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/serun2.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_sleep1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/sleep1.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_sleep2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/sleep2.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_srun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/srun1.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_srun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/srun2.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_still = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/still.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_swrun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/swrun1.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_swrun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/swrun2.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_wrun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/wrun1.png");
-    AK::NonnullRefPtr<Gfx::Bitmap> m_wrun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/wrun2.png");
+    NonnullRefPtr<Gfx::Bitmap> m_alert = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/alert.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_erun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/erun1.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_erun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/erun2.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_nerun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/nerun1.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_nerun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/nerun2.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_nrun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/nrun1.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_nrun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/nrun2.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_nwrun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/nwrun1.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_nwrun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/nwrun2.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_serun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/serun1.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_serun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/serun2.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_sleep1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/sleep1.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_sleep2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/sleep2.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_srun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/srun1.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_srun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/srun2.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_still = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/still.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_swrun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/swrun1.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_swrun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/swrun2.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_wrun1 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/wrun1.png").release_value_but_fixme_should_propagate_errors();
+    NonnullRefPtr<Gfx::Bitmap> m_wrun2 = *Gfx::Bitmap::try_load_from_file("/res/icons/catdog/wrun2.png").release_value_but_fixme_should_propagate_errors();
 
 
-    AK::NonnullRefPtr<Gfx::Bitmap> m_curr_bmp = m_alert;
+    NonnullRefPtr<Gfx::Bitmap> m_curr_bmp = m_alert;
     CatDog()
     CatDog()
         : m_temp_pos { 0, 0 }
         : m_temp_pos { 0, 0 }
     {
     {

+ 2 - 2
Userland/Demos/LibGfxDemo/main.cpp

@@ -108,7 +108,7 @@ void Canvas::draw()
     painter.draw_line({ 740, 140 }, { 640, 240 }, Color::Red, 5, Gfx::Painter::LineStyle::Solid);
     painter.draw_line({ 740, 140 }, { 640, 240 }, Color::Red, 5, Gfx::Painter::LineStyle::Solid);
     painter.draw_line({ 690, 140 }, { 640, 240 }, Color::Blue, 10, Gfx::Painter::LineStyle::Solid);
     painter.draw_line({ 690, 140 }, { 640, 240 }, Color::Blue, 10, Gfx::Painter::LineStyle::Solid);
 
 
-    auto bg = Gfx::Bitmap::try_load_from_file("/res/html/misc/90s-bg.png");
+    auto bg = Gfx::Bitmap::try_load_from_file("/res/html/misc/90s-bg.png").release_value_but_fixme_should_propagate_errors();
     painter.draw_tiled_bitmap({ 20, 260, 480, 320 }, *bg);
     painter.draw_tiled_bitmap({ 20, 260, 480, 320 }, *bg);
 
 
     painter.draw_line({ 40, 480 }, { 20, 260 }, Color::Red);
     painter.draw_line({ 40, 480 }, { 20, 260 }, Color::Red);
@@ -129,7 +129,7 @@ void Canvas::draw()
     path.close();
     path.close();
     painter.fill_path(path, Color::Yellow, Gfx::Painter::WindingRule::EvenOdd);
     painter.fill_path(path, Color::Yellow, Gfx::Painter::WindingRule::EvenOdd);
 
 
-    auto buggie = Gfx::Bitmap::try_load_from_file("/res/graphics/buggie.png");
+    auto buggie = Gfx::Bitmap::try_load_from_file("/res/graphics/buggie.png").release_value_but_fixme_should_propagate_errors();
     painter.blit({ 280, 280 }, *buggie, buggie->rect(), 0.5);
     painter.blit({ 280, 280 }, *buggie, buggie->rect(), 0.5);
     painter.draw_scaled_bitmap({ 360, 280, buggie->rect().width() * 2, buggie->rect().height() * 2 }, *buggie, buggie->rect());
     painter.draw_scaled_bitmap({ 360, 280, buggie->rect().width() * 2, buggie->rect().height() * 2 }, *buggie, buggie->rect());
 
 

+ 3 - 3
Userland/Demos/LibGfxScaleDemo/main.cpp

@@ -75,14 +75,14 @@ void Canvas::paint_event(GUI::PaintEvent& event)
 
 
 void Canvas::draw(Gfx::Painter& painter)
 void Canvas::draw(Gfx::Painter& painter)
 {
 {
-    auto active_window_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/window.png");
+    auto active_window_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/window.png").release_value_but_fixme_should_propagate_errors();
     Gfx::WindowTheme::current().paint_normal_frame(painter, Gfx::WindowTheme::WindowState::Active, { 4, 18, WIDTH - 8, HEIGHT - 29 }, "Well hello friends 🐞", *active_window_icon, palette(), { WIDTH - 20, 6, 16, 16 }, 0, false);
     Gfx::WindowTheme::current().paint_normal_frame(painter, Gfx::WindowTheme::WindowState::Active, { 4, 18, WIDTH - 8, HEIGHT - 29 }, "Well hello friends 🐞", *active_window_icon, palette(), { WIDTH - 20, 6, 16, 16 }, 0, false);
 
 
     painter.draw_rect({ 20, 34, WIDTH - 40, HEIGHT - 45 }, palette().color(Gfx::ColorRole::Selection), true);
     painter.draw_rect({ 20, 34, WIDTH - 40, HEIGHT - 45 }, palette().color(Gfx::ColorRole::Selection), true);
     painter.draw_rect({ 24, 38, WIDTH - 48, HEIGHT - 53 }, palette().color(Gfx::ColorRole::Selection));
     painter.draw_rect({ 24, 38, WIDTH - 48, HEIGHT - 53 }, palette().color(Gfx::ColorRole::Selection));
 
 
     // buggie.png has an alpha channel.
     // buggie.png has an alpha channel.
-    auto buggie = Gfx::Bitmap::try_load_from_file("/res/graphics/buggie.png");
+    auto buggie = Gfx::Bitmap::try_load_from_file("/res/graphics/buggie.png").release_value_but_fixme_should_propagate_errors();
     painter.blit({ 25, 39 }, *buggie, { 2, 30, 62, 20 });
     painter.blit({ 25, 39 }, *buggie, { 2, 30, 62, 20 });
     painter.draw_scaled_bitmap({ 88, 39, 62 * 2, 20 * 2 }, *buggie, Gfx::IntRect { 2, 30, 62, 20 });
     painter.draw_scaled_bitmap({ 88, 39, 62 * 2, 20 * 2 }, *buggie, Gfx::IntRect { 2, 30, 62, 20 });
     painter.draw_scaled_bitmap({ 202, 39, 80, 40 }, *buggie, Gfx::IntRect { 2, 30, 62, 20 });
     painter.draw_scaled_bitmap({ 202, 39, 80, 40 }, *buggie, Gfx::IntRect { 2, 30, 62, 20 });
@@ -92,7 +92,7 @@ void Canvas::draw(Gfx::Painter& painter)
     painter.blit({ 25, 101 }, *buggie, { 2, 30, 3 * buggie->width(), 20 });
     painter.blit({ 25, 101 }, *buggie, { 2, 30, 3 * buggie->width(), 20 });
 
 
     // grid does not have an alpha channel.
     // grid does not have an alpha channel.
-    auto grid = Gfx::Bitmap::try_load_from_file("/res/wallpapers/grid.png");
+    auto grid = Gfx::Bitmap::try_load_from_file("/res/wallpapers/grid.png").release_value_but_fixme_should_propagate_errors();
     VERIFY(!grid->has_alpha_channel());
     VERIFY(!grid->has_alpha_channel());
     painter.fill_rect({ 25, 122, 62, 20 }, Color::Green);
     painter.fill_rect({ 25, 122, 62, 20 }, Color::Green);
     painter.blit({ 25, 122 }, *grid, { (grid->width() - 62) / 2, (grid->height() - 20) / 2 + 40, 62, 20 }, 0.9);
     painter.blit({ 25, 122 }, *grid, { (grid->width() - 62) / 2, (grid->height() - 20) / 2 + 40, 62, 20 }, 0.9);

+ 1 - 1
Userland/Demos/Mandelbrot/Mandelbrot.cpp

@@ -400,7 +400,7 @@ int main(int argc, char** argv)
     auto& mandelbrot = window->set_main_widget<Mandelbrot>();
     auto& mandelbrot = window->set_main_widget<Mandelbrot>();
 
 
     auto& file_menu = window->add_menu("&File");
     auto& file_menu = window->add_menu("&File");
-    file_menu.add_action(GUI::Action::create("&Export...", { Mod_Ctrl | Mod_Shift, Key_S }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/save.png"),
+    file_menu.add_action(GUI::Action::create("&Export...", { Mod_Ctrl | Mod_Shift, Key_S }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/save.png").release_value_but_fixme_should_propagate_errors(),
         [&](GUI::Action&) {
         [&](GUI::Action&) {
             Optional<String> export_path = GUI::FilePicker::get_save_filepath(window, "untitled", "png");
             Optional<String> export_path = GUI::FilePicker::get_save_filepath(window, "untitled", "png");
             if (!export_path.has_value())
             if (!export_path.has_value())

+ 2 - 2
Userland/Demos/ModelGallery/GalleryWidget.cpp

@@ -47,8 +47,8 @@ void GalleryWidget::load_basic_model_tab()
     m_add_new_item = *tab.find_descendant_of_type_named<GUI::Button>("add_new_item");
     m_add_new_item = *tab.find_descendant_of_type_named<GUI::Button>("add_new_item");
     m_remove_selected_item = *tab.find_descendant_of_type_named<GUI::Button>("remove_selected_item");
     m_remove_selected_item = *tab.find_descendant_of_type_named<GUI::Button>("remove_selected_item");
 
 
-    m_add_new_item->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/plus.png"));
-    m_remove_selected_item->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/minus.png"));
+    m_add_new_item->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/plus.png").release_value_but_fixme_should_propagate_errors());
+    m_remove_selected_item->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/minus.png").release_value_but_fixme_should_propagate_errors());
 
 
     m_new_item_name->on_return_pressed = [&] { add_textbox_contents_to_basic_model(); };
     m_new_item_name->on_return_pressed = [&] { add_textbox_contents_to_basic_model(); };
     m_add_new_item->on_click = [&](auto) { add_textbox_contents_to_basic_model(); };
     m_add_new_item->on_click = [&](auto) { add_textbox_contents_to_basic_model(); };

+ 3 - 3
Userland/Demos/WidgetGallery/GalleryModels.h

@@ -73,7 +73,7 @@ public:
             cursor.name = LexicalPath::basename(cursor.path);
             cursor.name = LexicalPath::basename(cursor.path);
 
 
             // FIXME: Animated cursor bitmaps
             // FIXME: Animated cursor bitmaps
-            auto cursor_bitmap = Gfx::Bitmap::try_load_from_file(cursor.path);
+            auto cursor_bitmap = Gfx::Bitmap::try_load_from_file(cursor.path).release_value_but_fixme_should_propagate_errors();
             auto cursor_bitmap_rect = cursor_bitmap->rect();
             auto cursor_bitmap_rect = cursor_bitmap->rect();
 
 
             cursor.params = Gfx::CursorParams::parse_from_filename(cursor.name, cursor_bitmap_rect.center()).constrained(*cursor_bitmap);
             cursor.params = Gfx::CursorParams::parse_from_filename(cursor.name, cursor_bitmap_rect.center()).constrained(*cursor_bitmap);
@@ -158,7 +158,7 @@ public:
             if (!path.contains("filetype-") && !path.contains("app-"))
             if (!path.contains("filetype-") && !path.contains("app-"))
                 continue;
                 continue;
             IconSet icon_set;
             IconSet icon_set;
-            icon_set.big_icon = Gfx::Bitmap::try_load_from_file(path);
+            icon_set.big_icon = Gfx::Bitmap::try_load_from_file(path).release_value_but_fixme_should_propagate_errors();
             icon_set.name = LexicalPath::basename(path);
             icon_set.name = LexicalPath::basename(path);
             m_icon_sets.append(move(icon_set));
             m_icon_sets.append(move(icon_set));
         }
         }
@@ -172,7 +172,7 @@ public:
             if (!path.contains("filetype-") && !path.contains("app-"))
             if (!path.contains("filetype-") && !path.contains("app-"))
                 continue;
                 continue;
             IconSet icon_set;
             IconSet icon_set;
-            icon_set.little_icon = Gfx::Bitmap::try_load_from_file(path);
+            icon_set.little_icon = Gfx::Bitmap::try_load_from_file(path).release_value_but_fixme_should_propagate_errors();
             icon_set.name = LexicalPath::basename(path);
             icon_set.name = LexicalPath::basename(path);
             for (size_t i = 0; i < big_icons_found; i++) {
             for (size_t i = 0; i < big_icons_found; i++) {
                 if (icon_set.name == m_icon_sets[i].name) {
                 if (icon_set.name == m_icon_sets[i].name) {

+ 7 - 7
Userland/Demos/WidgetGallery/GalleryWidget.cpp

@@ -73,9 +73,9 @@ GalleryWidget::GalleryWidget()
         m_label_frame->set_frame_thickness(value);
         m_label_frame->set_frame_thickness(value);
     };
     };
 
 
-    m_button_icons.append(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/book-open.png"));
-    m_button_icons.append(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png"));
-    m_button_icons.append(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/ladybug.png"));
+    m_button_icons.append(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/book-open.png").release_value_but_fixme_should_propagate_errors());
+    m_button_icons.append(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png").release_value_but_fixme_should_propagate_errors());
+    m_button_icons.append(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/ladybug.png").release_value_but_fixme_should_propagate_errors());
 
 
     m_icon_button = basics_tab.find_descendant_of_type_named<GUI::Button>("icon_button");
     m_icon_button = basics_tab.find_descendant_of_type_named<GUI::Button>("icon_button");
     m_icon_button->set_icon(*m_button_icons[2]);
     m_icon_button->set_icon(*m_button_icons[2]);
@@ -95,7 +95,7 @@ GalleryWidget::GalleryWidget()
     m_text_editor = basics_tab.find_descendant_of_type_named<GUI::TextEditor>("text_editor");
     m_text_editor = basics_tab.find_descendant_of_type_named<GUI::TextEditor>("text_editor");
 
 
     m_font_button = basics_tab.find_descendant_of_type_named<GUI::Button>("font_button");
     m_font_button = basics_tab.find_descendant_of_type_named<GUI::Button>("font_button");
-    m_font_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-font-editor.png"));
+    m_font_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-font-editor.png").release_value_but_fixme_should_propagate_errors());
 
 
     m_font_button->on_click = [&](auto) {
     m_font_button->on_click = [&](auto) {
         auto picker = GUI::FontPicker::construct(window(), &m_text_editor->font(), false);
         auto picker = GUI::FontPicker::construct(window(), &m_text_editor->font(), false);
@@ -105,7 +105,7 @@ GalleryWidget::GalleryWidget()
     };
     };
 
 
     m_file_button = basics_tab.find_descendant_of_type_named<GUI::Button>("file_button");
     m_file_button = basics_tab.find_descendant_of_type_named<GUI::Button>("file_button");
-    m_file_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png"));
+    m_file_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png").release_value_but_fixme_should_propagate_errors());
 
 
     m_file_button->on_click = [&](auto) {
     m_file_button->on_click = [&](auto) {
         Optional<String> open_path = GUI::FilePicker::get_open_filepath(window());
         Optional<String> open_path = GUI::FilePicker::get_open_filepath(window());
@@ -115,7 +115,7 @@ GalleryWidget::GalleryWidget()
     };
     };
 
 
     m_input_button = basics_tab.find_descendant_of_type_named<GUI::Button>("input_button");
     m_input_button = basics_tab.find_descendant_of_type_named<GUI::Button>("input_button");
-    m_input_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/properties.png"));
+    m_input_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/properties.png").release_value_but_fixme_should_propagate_errors());
 
 
     m_input_button->on_click = [&](auto) {
     m_input_button->on_click = [&](auto) {
         String value;
         String value;
@@ -133,7 +133,7 @@ GalleryWidget::GalleryWidget()
     };
     };
 
 
     m_msgbox_button = basics_tab.find_descendant_of_type_named<GUI::Button>("msgbox_button");
     m_msgbox_button = basics_tab.find_descendant_of_type_named<GUI::Button>("msgbox_button");
-    m_msgbox_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-browser.png"));
+    m_msgbox_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-browser.png").release_value_but_fixme_should_propagate_errors());
 
 
     m_msgbox_type = GUI::MessageBox::Type::None;
     m_msgbox_type = GUI::MessageBox::Type::None;
     m_msgbox_input_type = GUI::MessageBox::InputType::OK;
     m_msgbox_input_type = GUI::MessageBox::InputType::OK;

+ 4 - 4
Userland/DevTools/HackStudio/Debugger/DebugInfoWidget.cpp

@@ -25,19 +25,19 @@ namespace HackStudio {
 
 
 void DebugInfoWidget::init_toolbar()
 void DebugInfoWidget::init_toolbar()
 {
 {
-    m_continue_action = GUI::Action::create("Continue", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-continue.png"), [](auto&) {
+    m_continue_action = GUI::Action::create("Continue", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-continue.png").release_value_but_fixme_should_propagate_errors(), [](auto&) {
         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::Continue);
         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::Continue);
     });
     });
 
 
-    m_singlestep_action = GUI::Action::create("Step Over", { Mod_None, Key_F10 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-step-over.png"), [](auto&) {
+    m_singlestep_action = GUI::Action::create("Step Over", { Mod_None, Key_F10 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-step-over.png").release_value_but_fixme_should_propagate_errors(), [](auto&) {
         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::SourceStepOver);
         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::SourceStepOver);
     });
     });
 
 
-    m_step_in_action = GUI::Action::create("Step In", { Mod_None, Key_F11 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-step-in.png"), [](auto&) {
+    m_step_in_action = GUI::Action::create("Step In", { Mod_None, Key_F11 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-step-in.png").release_value_but_fixme_should_propagate_errors(), [](auto&) {
         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::SourceSingleStep);
         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::SourceSingleStep);
     });
     });
 
 
-    m_step_out_action = GUI::Action::create("Step Out", { Mod_Shift, Key_F11 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-step-out.png"), [](auto&) {
+    m_step_out_action = GUI::Action::create("Step Out", { Mod_Shift, Key_F11 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-step-out.png").release_value_but_fixme_should_propagate_errors(), [](auto&) {
         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::SourceStepOut);
         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::SourceStepOut);
     });
     });
 
 

+ 1 - 1
Userland/DevTools/HackStudio/Debugger/VariablesModel.h

@@ -31,7 +31,7 @@ private:
         : m_variables(move(variables))
         : m_variables(move(variables))
         , m_regs(regs)
         , m_regs(regs)
     {
     {
-        m_variable_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png"));
+        m_variable_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png").release_value_but_fixme_should_propagate_errors());
     }
     }
     NonnullOwnPtrVector<Debug::DebugInfo::VariableInfo> m_variables;
     NonnullOwnPtrVector<Debug::DebugInfo::VariableInfo> m_variables;
     PtraceRegisters m_regs;
     PtraceRegisters m_regs;

+ 2 - 2
Userland/DevTools/HackStudio/Editor.cpp

@@ -433,13 +433,13 @@ void Editor::clear_execution_position()
 
 
 const Gfx::Bitmap& Editor::breakpoint_icon_bitmap()
 const Gfx::Bitmap& Editor::breakpoint_icon_bitmap()
 {
 {
-    static auto bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/breakpoint.png");
+    static auto bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/breakpoint.png").release_value_but_fixme_should_propagate_errors();
     return *bitmap;
     return *bitmap;
 }
 }
 
 
 const Gfx::Bitmap& Editor::current_position_icon_bitmap()
 const Gfx::Bitmap& Editor::current_position_icon_bitmap()
 {
 {
-    static auto bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png");
+    static auto bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png").release_value_but_fixme_should_propagate_errors();
     return *bitmap;
     return *bitmap;
 }
 }
 
 

+ 4 - 4
Userland/DevTools/HackStudio/Git/GitWidget.cpp

@@ -31,7 +31,7 @@ GitWidget::GitWidget(const LexicalPath& repo_root)
     unstaged_header.set_layout<GUI::HorizontalBoxLayout>();
     unstaged_header.set_layout<GUI::HorizontalBoxLayout>();
 
 
     auto& refresh_button = unstaged_header.add<GUI::Button>();
     auto& refresh_button = unstaged_header.add<GUI::Button>();
-    refresh_button.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/reload.png"));
+    refresh_button.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/reload.png").release_value_but_fixme_should_propagate_errors());
     refresh_button.set_fixed_size(16, 16);
     refresh_button.set_fixed_size(16, 16);
     refresh_button.set_tooltip("refresh");
     refresh_button.set_tooltip("refresh");
     refresh_button.on_click = [this](int) { refresh(); };
     refresh_button.on_click = [this](int) { refresh(); };
@@ -42,7 +42,7 @@ GitWidget::GitWidget(const LexicalPath& repo_root)
     unstaged_header.set_fixed_height(20);
     unstaged_header.set_fixed_height(20);
     m_unstaged_files = unstaged.add<GitFilesView>(
     m_unstaged_files = unstaged.add<GitFilesView>(
         [this](const auto& file) { stage_file(file); },
         [this](const auto& file) { stage_file(file); },
-        Gfx::Bitmap::try_load_from_file("/res/icons/16x16/plus.png").release_nonnull());
+        Gfx::Bitmap::try_load_from_file("/res/icons/16x16/plus.png").release_value_but_fixme_should_propagate_errors());
     m_unstaged_files->on_selection_change = [this] {
     m_unstaged_files->on_selection_change = [this] {
         const auto& index = m_unstaged_files->selection().first();
         const auto& index = m_unstaged_files->selection().first();
         const auto& selected = index.data().as_string();
         const auto& selected = index.data().as_string();
@@ -56,7 +56,7 @@ GitWidget::GitWidget(const LexicalPath& repo_root)
     staged_header.set_layout<GUI::HorizontalBoxLayout>();
     staged_header.set_layout<GUI::HorizontalBoxLayout>();
 
 
     auto& commit_button = staged_header.add<GUI::Button>();
     auto& commit_button = staged_header.add<GUI::Button>();
-    commit_button.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/commit.png"));
+    commit_button.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/commit.png").release_value_but_fixme_should_propagate_errors());
     commit_button.set_fixed_size(16, 16);
     commit_button.set_fixed_size(16, 16);
     commit_button.set_tooltip("commit");
     commit_button.set_tooltip("commit");
     commit_button.on_click = [this](int) { commit(); };
     commit_button.on_click = [this](int) { commit(); };
@@ -67,7 +67,7 @@ GitWidget::GitWidget(const LexicalPath& repo_root)
     staged_header.set_fixed_height(20);
     staged_header.set_fixed_height(20);
     m_staged_files = staged.add<GitFilesView>(
     m_staged_files = staged.add<GitFilesView>(
         [this](const auto& file) { unstage_file(file); },
         [this](const auto& file) { unstage_file(file); },
-        Gfx::Bitmap::try_load_from_file("/res/icons/16x16/minus.png").release_nonnull());
+        Gfx::Bitmap::try_load_from_file("/res/icons/16x16/minus.png").release_value_but_fixme_should_propagate_errors());
 }
 }
 
 
 bool GitWidget::initialize()
 bool GitWidget::initialize()

+ 14 - 14
Userland/DevTools/HackStudio/HackStudioWidget.cpp

@@ -418,7 +418,7 @@ NonnullRefPtr<GUI::Menu> HackStudioWidget::create_project_tree_view_context_menu
 
 
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_new_file_action(String const& label, String const& icon, String const& extension)
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_new_file_action(String const& label, String const& icon, String const& extension)
 {
 {
-    return GUI::Action::create(label, Gfx::Bitmap::try_load_from_file(icon), [this, extension](const GUI::Action&) {
+    return GUI::Action::create(label, Gfx::Bitmap::try_load_from_file(icon).release_value_but_fixme_should_propagate_errors(), [this, extension](const GUI::Action&) {
         String filename;
         String filename;
         if (GUI::InputBox::show(window(), filename, "Enter name of new file:", "Add new file to project") != GUI::InputBox::ExecOK)
         if (GUI::InputBox::show(window(), filename, "Enter name of new file:", "Add new file to project") != GUI::InputBox::ExecOK)
             return;
             return;
@@ -459,7 +459,7 @@ NonnullRefPtr<GUI::Action> HackStudioWidget::create_new_file_action(String const
 
 
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_new_directory_action()
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_new_directory_action()
 {
 {
-    return GUI::Action::create("&New Directory...", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/mkdir.png"), [this](const GUI::Action&) {
+    return GUI::Action::create("&New Directory...", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/mkdir.png").release_value_but_fixme_should_propagate_errors(), [this](const GUI::Action&) {
         String directory_name;
         String directory_name;
         if (GUI::InputBox::show(window(), directory_name, "Enter name of new directory:", "Add new folder to project") != GUI::InputBox::ExecOK)
         if (GUI::InputBox::show(window(), directory_name, "Enter name of new directory:", "Add new folder to project") != GUI::InputBox::ExecOK)
             return;
             return;
@@ -569,7 +569,7 @@ NonnullRefPtr<GUI::Action> HackStudioWidget::create_delete_action()
 
 
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_new_project_action()
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_new_project_action()
 {
 {
-    return GUI::Action::create("&New Project...", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/hackstudio-project.png"), [this](const GUI::Action&) {
+    return GUI::Action::create("&New Project...", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/hackstudio-project.png").release_value_but_fixme_should_propagate_errors(), [this](const GUI::Action&) {
         auto dialog = NewProjectDialog::construct(window());
         auto dialog = NewProjectDialog::construct(window());
         dialog->set_icon(window()->icon());
         dialog->set_icon(window()->icon());
         auto result = dialog->exec();
         auto result = dialog->exec();
@@ -666,7 +666,7 @@ NonnullRefPtr<GUI::Action> HackStudioWidget::create_remove_current_editor_action
 
 
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_open_action()
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_open_action()
 {
 {
-    return GUI::Action::create("&Open Project...", { Mod_Ctrl | Mod_Shift, Key_O }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png"), [this](auto&) {
+    return GUI::Action::create("&Open Project...", { Mod_Ctrl | Mod_Shift, Key_O }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
         auto open_path = GUI::FilePicker::get_open_filepath(window(), "Open project", m_project->root_path(), true);
         auto open_path = GUI::FilePicker::get_open_filepath(window(), "Open project", m_project->root_path(), true);
         if (!open_path.has_value())
         if (!open_path.has_value())
             return;
             return;
@@ -746,7 +746,7 @@ NonnullRefPtr<GUI::Action> HackStudioWidget::create_remove_current_terminal_acti
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_add_editor_action()
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_add_editor_action()
 {
 {
     return GUI::Action::create("Add New &Editor", { Mod_Ctrl | Mod_Alt, Key_E },
     return GUI::Action::create("Add New &Editor", { Mod_Ctrl | Mod_Alt, Key_E },
-        Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-text-editor.png"),
+        Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-text-editor.png").release_value_but_fixme_should_propagate_errors(),
         [this](auto&) {
         [this](auto&) {
             add_new_editor(*m_editors_splitter);
             add_new_editor(*m_editors_splitter);
             update_actions();
             update_actions();
@@ -756,7 +756,7 @@ NonnullRefPtr<GUI::Action> HackStudioWidget::create_add_editor_action()
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_add_terminal_action()
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_add_terminal_action()
 {
 {
     return GUI::Action::create("Add New &Terminal", { Mod_Ctrl | Mod_Alt, Key_T },
     return GUI::Action::create("Add New &Terminal", { Mod_Ctrl | Mod_Alt, Key_T },
-        Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-terminal.png"),
+        Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-terminal.png").release_value_but_fixme_should_propagate_errors(),
         [this](auto&) {
         [this](auto&) {
             auto& terminal_wrapper = m_action_tab_widget->add_tab<TerminalWrapper>("Terminal");
             auto& terminal_wrapper = m_action_tab_widget->add_tab<TerminalWrapper>("Terminal");
             reveal_action_tab(terminal_wrapper);
             reveal_action_tab(terminal_wrapper);
@@ -774,7 +774,7 @@ void HackStudioWidget::reveal_action_tab(GUI::Widget& widget)
 
 
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_debug_action()
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_debug_action()
 {
 {
-    return GUI::Action::create("&Debug", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-run.png"), [this](auto&) {
+    return GUI::Action::create("&Debug", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-run.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
         if (!Core::File::exists(get_project_executable_path())) {
         if (!Core::File::exists(get_project_executable_path())) {
             GUI::MessageBox::show(window(), String::formatted("Could not find file: {}. (did you build the project?)", get_project_executable_path()), "Error", GUI::MessageBox::Type::Error);
             GUI::MessageBox::show(window(), String::formatted("Could not find file: {}. (did you build the project?)", get_project_executable_path()), "Error", GUI::MessageBox::Type::Error);
             return;
             return;
@@ -1024,7 +1024,7 @@ void HackStudioWidget::create_toolbar(GUI::Widget& parent)
 
 
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_build_action()
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_build_action()
 {
 {
-    return GUI::Action::create("&Build", { Mod_Ctrl, Key_B }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/build.png"), [this](auto&) {
+    return GUI::Action::create("&Build", { Mod_Ctrl, Key_B }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/build.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
         if (warn_unsaved_changes("There are unsaved changes, do you want to save before building?") == ContinueDecision::No)
         if (warn_unsaved_changes("There are unsaved changes, do you want to save before building?") == ContinueDecision::No)
             return;
             return;
 
 
@@ -1036,7 +1036,7 @@ NonnullRefPtr<GUI::Action> HackStudioWidget::create_build_action()
 
 
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_run_action()
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_run_action()
 {
 {
-    return GUI::Action::create("&Run", { Mod_Ctrl, Key_R }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/program-run.png"), [this](auto&) {
+    return GUI::Action::create("&Run", { Mod_Ctrl, Key_R }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/program-run.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
         reveal_action_tab(*m_terminal_wrapper);
         reveal_action_tab(*m_terminal_wrapper);
         run(*m_terminal_wrapper);
         run(*m_terminal_wrapper);
         m_stop_action->set_enabled(true);
         m_stop_action->set_enabled(true);
@@ -1125,7 +1125,7 @@ void HackStudioWidget::create_project_menu(GUI::Window& window)
 void HackStudioWidget::create_edit_menu(GUI::Window& window)
 void HackStudioWidget::create_edit_menu(GUI::Window& window)
 {
 {
     auto& edit_menu = window.add_menu("&Edit");
     auto& edit_menu = window.add_menu("&Edit");
-    edit_menu.add_action(GUI::Action::create("&Find in Files...", { Mod_Ctrl | Mod_Shift, Key_F }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png"), [this](auto&) {
+    edit_menu.add_action(GUI::Action::create("&Find in Files...", { Mod_Ctrl | Mod_Shift, Key_F }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
         reveal_action_tab(*m_find_in_files_widget);
         reveal_action_tab(*m_find_in_files_widget);
         m_find_in_files_widget->focus_textbox_and_select_all();
         m_find_in_files_widget->focus_textbox_and_select_all();
     }));
     }));
@@ -1196,7 +1196,7 @@ void HackStudioWidget::create_view_menu(GUI::Window& window)
 
 
     m_no_wrapping_action->set_checked(true);
     m_no_wrapping_action->set_checked(true);
 
 
-    m_editor_font_action = GUI::Action::create("Editor &Font...", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-font-editor.png"),
+    m_editor_font_action = GUI::Action::create("Editor &Font...", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-font-editor.png").release_value_but_fixme_should_propagate_errors(),
         [&](auto&) {
         [&](auto&) {
             auto picker = GUI::FontPicker::construct(&window, m_editor_font, false);
             auto picker = GUI::FontPicker::construct(&window, m_editor_font, false);
             if (picker->exec() == GUI::Dialog::ExecOK) {
             if (picker->exec() == GUI::Dialog::ExecOK) {
@@ -1226,7 +1226,7 @@ void HackStudioWidget::create_help_menu(GUI::Window& window)
 
 
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_stop_action()
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_stop_action()
 {
 {
-    auto action = GUI::Action::create("&Stop", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/program-stop.png"), [this](auto&) {
+    auto action = GUI::Action::create("&Stop", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/program-stop.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
         if (!Debugger::the().session()) {
         if (!Debugger::the().session()) {
             m_terminal_wrapper->kill_running_command();
             m_terminal_wrapper->kill_running_command();
             return;
             return;
@@ -1380,7 +1380,7 @@ void HackStudioWidget::on_cursor_change()
 
 
 void HackStudioWidget::create_location_history_actions()
 void HackStudioWidget::create_location_history_actions()
 {
 {
-    m_locations_history_back_action = GUI::Action::create("Go Back", { Mod_Alt | Mod_Shift, Key_Left }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png"), [this](auto&) {
+    m_locations_history_back_action = GUI::Action::create("Go Back", { Mod_Alt | Mod_Shift, Key_Left }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
         if (m_locations_history_end_index <= 1)
         if (m_locations_history_end_index <= 1)
             return;
             return;
 
 
@@ -1394,7 +1394,7 @@ void HackStudioWidget::create_location_history_actions()
         update_history_actions();
         update_history_actions();
     });
     });
 
 
-    m_locations_history_forward_action = GUI::Action::create("Go Forward", { Mod_Alt | Mod_Shift, Key_Right }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png"), [this](auto&) {
+    m_locations_history_forward_action = GUI::Action::create("Go Forward", { Mod_Alt | Mod_Shift, Key_Right }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
         if (m_locations_history_end_index == m_locations_history.size())
         if (m_locations_history_end_index == m_locations_history.size())
             return;
             return;
 
 

+ 2 - 2
Userland/DevTools/HackStudio/LanguageClient.cpp

@@ -185,7 +185,7 @@ void ServerConnectionWrapper::on_crash()
 void ServerConnectionWrapper::show_frequenct_crashes_notification() const
 void ServerConnectionWrapper::show_frequenct_crashes_notification() const
 {
 {
     auto notification = GUI::Notification::construct();
     auto notification = GUI::Notification::construct();
-    notification->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/app-hack-studio.png"));
+    notification->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/app-hack-studio.png").release_value_but_fixme_should_propagate_errors());
     notification->set_title("LanguageServer Crashes too much!");
     notification->set_title("LanguageServer Crashes too much!");
     notification->set_text("LanguageServer aided features will not be available in this session");
     notification->set_text("LanguageServer aided features will not be available in this session");
     notification->show();
     notification->show();
@@ -193,7 +193,7 @@ void ServerConnectionWrapper::show_frequenct_crashes_notification() const
 void ServerConnectionWrapper::show_crash_notification() const
 void ServerConnectionWrapper::show_crash_notification() const
 {
 {
     auto notification = GUI::Notification::construct();
     auto notification = GUI::Notification::construct();
-    notification->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/app-hack-studio.png"));
+    notification->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/app-hack-studio.png").release_value_but_fixme_should_propagate_errors());
     notification->set_title("Oops!");
     notification->set_title("Oops!");
     notification->set_text(String::formatted("LanguageServer has crashed"));
     notification->set_text(String::formatted("LanguageServer has crashed"));
     notification->show();
     notification->show();

+ 7 - 7
Userland/DevTools/HackStudio/ProjectDeclarations.cpp

@@ -20,13 +20,13 @@ void HackStudio::ProjectDeclarations::set_declared_symbols(const String& filenam
 
 
 Optional<GUI::Icon> HackStudio::ProjectDeclarations::get_icon_for(GUI::AutocompleteProvider::DeclarationType type)
 Optional<GUI::Icon> HackStudio::ProjectDeclarations::get_icon_for(GUI::AutocompleteProvider::DeclarationType type)
 {
 {
-    static GUI::Icon struct_icon(Gfx::Bitmap::try_load_from_file("/res/icons/hackstudio/Struct.png"));
-    static GUI::Icon class_icon(Gfx::Bitmap::try_load_from_file("/res/icons/hackstudio/Class.png"));
-    static GUI::Icon function_icon(Gfx::Bitmap::try_load_from_file("/res/icons/hackstudio/Function.png"));
-    static GUI::Icon variable_icon(Gfx::Bitmap::try_load_from_file("/res/icons/hackstudio/Variable.png"));
-    static GUI::Icon preprocessor_icon(Gfx::Bitmap::try_load_from_file("/res/icons/hackstudio/Preprocessor.png"));
-    static GUI::Icon member_icon(Gfx::Bitmap::try_load_from_file("/res/icons/hackstudio/Member.png"));
-    static GUI::Icon namespace_icon(Gfx::Bitmap::try_load_from_file("/res/icons/hackstudio/Namespace.png"));
+    static GUI::Icon struct_icon(Gfx::Bitmap::try_load_from_file("/res/icons/hackstudio/Struct.png").release_value_but_fixme_should_propagate_errors());
+    static GUI::Icon class_icon(Gfx::Bitmap::try_load_from_file("/res/icons/hackstudio/Class.png").release_value_but_fixme_should_propagate_errors());
+    static GUI::Icon function_icon(Gfx::Bitmap::try_load_from_file("/res/icons/hackstudio/Function.png").release_value_but_fixme_should_propagate_errors());
+    static GUI::Icon variable_icon(Gfx::Bitmap::try_load_from_file("/res/icons/hackstudio/Variable.png").release_value_but_fixme_should_propagate_errors());
+    static GUI::Icon preprocessor_icon(Gfx::Bitmap::try_load_from_file("/res/icons/hackstudio/Preprocessor.png").release_value_but_fixme_should_propagate_errors());
+    static GUI::Icon member_icon(Gfx::Bitmap::try_load_from_file("/res/icons/hackstudio/Member.png").release_value_but_fixme_should_propagate_errors());
+    static GUI::Icon namespace_icon(Gfx::Bitmap::try_load_from_file("/res/icons/hackstudio/Namespace.png").release_value_but_fixme_should_propagate_errors());
     switch (type) {
     switch (type) {
     case GUI::AutocompleteProvider::DeclarationType::Struct:
     case GUI::AutocompleteProvider::DeclarationType::Struct:
         return struct_icon;
         return struct_icon;

+ 3 - 2
Userland/DevTools/HackStudio/ProjectTemplate.cpp

@@ -50,8 +50,9 @@ RefPtr<ProjectTemplate> ProjectTemplate::load_from_manifest(const String& manife
     auto bitmap_path_32 = String::formatted("/res/icons/hackstudio/templates-32x32/{}.png", config->read_entry("HackStudioTemplate", "IconName32x"));
     auto bitmap_path_32 = String::formatted("/res/icons/hackstudio/templates-32x32/{}.png", config->read_entry("HackStudioTemplate", "IconName32x"));
 
 
     if (Core::File::exists(bitmap_path_32)) {
     if (Core::File::exists(bitmap_path_32)) {
-        auto bitmap32 = Gfx::Bitmap::try_load_from_file(bitmap_path_32);
-        icon = GUI::Icon(move(bitmap32));
+        auto bitmap_or_error = Gfx::Bitmap::try_load_from_file(bitmap_path_32);
+        if (!bitmap_or_error.is_error())
+            icon = GUI::Icon(bitmap_or_error.release_value());
     }
     }
 
 
     return adopt_ref(*new ProjectTemplate(id, name, description, icon, priority));
     return adopt_ref(*new ProjectTemplate(id, name, description, icon, priority));

+ 2 - 2
Userland/DevTools/HackStudio/main.cpp

@@ -43,7 +43,7 @@ int main(int argc, char** argv)
 
 
     auto window = GUI::Window::construct();
     auto window = GUI::Window::construct();
     window->resize(840, 600);
     window->resize(840, 600);
-    window->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-hack-studio.png"));
+    window->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-hack-studio.png").release_value_but_fixme_should_propagate_errors());
 
 
     update_path_environment_variable();
     update_path_environment_variable();
 
 
@@ -103,7 +103,7 @@ static bool make_is_available()
 static void notify_make_not_available()
 static void notify_make_not_available()
 {
 {
     auto notification = GUI::Notification::construct();
     auto notification = GUI::Notification::construct();
-    notification->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/app-hack-studio.png"));
+    notification->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/app-hack-studio.png").release_value_but_fixme_should_propagate_errors());
     notification->set_title("'make' Not Available");
     notification->set_title("'make' Not Available");
     notification->set_text("You probably want to install the binutils, gcc, and make ports from the root of the Serenity repository");
     notification->set_text("You probably want to install the binutils, gcc, and make ports from the root of the Serenity repository");
     notification->show();
     notification->show();

+ 4 - 4
Userland/DevTools/Inspector/RemoteObjectGraphModel.cpp

@@ -16,10 +16,10 @@ namespace Inspector {
 RemoteObjectGraphModel::RemoteObjectGraphModel(RemoteProcess& process)
 RemoteObjectGraphModel::RemoteObjectGraphModel(RemoteProcess& process)
     : m_process(process)
     : m_process(process)
 {
 {
-    m_object_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png"));
-    m_window_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/window.png"));
-    m_layout_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/layout.png"));
-    m_timer_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/timer.png"));
+    m_object_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png").release_value_but_fixme_should_propagate_errors());
+    m_window_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/window.png").release_value_but_fixme_should_propagate_errors());
+    m_layout_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/layout.png").release_value_but_fixme_should_propagate_errors());
+    m_timer_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/timer.png").release_value_but_fixme_should_propagate_errors());
 }
 }
 
 
 RemoteObjectGraphModel::~RemoteObjectGraphModel()
 RemoteObjectGraphModel::~RemoteObjectGraphModel()

+ 1 - 1
Userland/DevTools/Inspector/main.cpp

@@ -153,7 +153,7 @@ int main(int argc, char** argv)
 
 
     auto properties_tree_view_context_menu = GUI::Menu::construct("Properties Tree View");
     auto properties_tree_view_context_menu = GUI::Menu::construct("Properties Tree View");
 
 
-    auto copy_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png");
+    auto copy_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png").release_value_but_fixme_should_propagate_errors();
     auto copy_property_name_action = GUI::Action::create("Copy Property Name", copy_bitmap, [&](auto&) {
     auto copy_property_name_action = GUI::Action::create("Copy Property Name", copy_bitmap, [&](auto&) {
         GUI::Clipboard::the().set_plain_text(properties_tree_view.selection().first().data().to_string());
         GUI::Clipboard::the().set_plain_text(properties_tree_view.selection().first().data().to_string());
     });
     });

+ 2 - 2
Userland/DevTools/Profiler/ProfileModel.cpp

@@ -15,8 +15,8 @@ namespace Profiler {
 ProfileModel::ProfileModel(Profile& profile)
 ProfileModel::ProfileModel(Profile& profile)
     : m_profile(profile)
     : m_profile(profile)
 {
 {
-    m_user_frame_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png"));
-    m_kernel_frame_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object-red.png"));
+    m_user_frame_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png").release_value_but_fixme_should_propagate_errors());
+    m_kernel_frame_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object-red.png").release_value_but_fixme_should_propagate_errors());
 }
 }
 
 
 ProfileModel::~ProfileModel()
 ProfileModel::~ProfileModel()

+ 2 - 2
Userland/DevTools/Profiler/SamplesModel.cpp

@@ -13,8 +13,8 @@ namespace Profiler {
 SamplesModel::SamplesModel(Profile& profile)
 SamplesModel::SamplesModel(Profile& profile)
     : m_profile(profile)
     : m_profile(profile)
 {
 {
-    m_user_frame_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png"));
-    m_kernel_frame_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object-red.png"));
+    m_user_frame_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png").release_value_but_fixme_should_propagate_errors());
+    m_kernel_frame_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object-red.png").release_value_but_fixme_should_propagate_errors());
 }
 }
 
 
 SamplesModel::~SamplesModel()
 SamplesModel::~SamplesModel()

+ 3 - 3
Userland/DevTools/Profiler/main.cpp

@@ -158,7 +158,7 @@ int main(int argc, char** argv)
         update_disassembly_model();
         update_disassembly_model();
     };
     };
 
 
-    auto disassembly_action = GUI::Action::create_checkable("Show &Disassembly", { Mod_Ctrl, Key_D }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/x86.png"), [&](auto& action) {
+    auto disassembly_action = GUI::Action::create_checkable("Show &Disassembly", { Mod_Ctrl, Key_D }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/x86.png").release_value_but_fixme_should_propagate_errors(), [&](auto& action) {
         disassembly_view.set_visible(action.is_checked());
         disassembly_view.set_visible(action.is_checked());
         update_disassembly_model();
         update_disassembly_model();
     });
     });
@@ -277,7 +277,7 @@ static bool prompt_to_stop_profiling(pid_t pid, const String& process_name)
     auto window = GUI::Window::construct();
     auto window = GUI::Window::construct();
     window->set_title(String::formatted("Profiling {}({})", process_name, pid));
     window->set_title(String::formatted("Profiling {}({})", process_name, pid));
     window->resize(240, 100);
     window->resize(240, 100);
-    window->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-profiler.png"));
+    window->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-profiler.png").release_value_but_fixme_should_propagate_errors());
     window->center_on_screen();
     window->center_on_screen();
 
 
     auto& widget = window->set_main_widget<GUI::Widget>();
     auto& widget = window->set_main_widget<GUI::Widget>();
@@ -305,7 +305,7 @@ static bool prompt_to_stop_profiling(pid_t pid, const String& process_name)
 bool generate_profile(pid_t& pid)
 bool generate_profile(pid_t& pid)
 {
 {
     if (!pid) {
     if (!pid) {
-        auto process_chooser = GUI::ProcessChooser::construct("Profiler", "Profile", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-profiler.png"));
+        auto process_chooser = GUI::ProcessChooser::construct("Profiler", "Profile", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-profiler.png").release_value_but_fixme_should_propagate_errors());
         if (process_chooser->exec() == GUI::Dialog::ExecCancel)
         if (process_chooser->exec() == GUI::Dialog::ExecCancel)
             return false;
             return false;
         pid = process_chooser->pid();
         pid = process_chooser->pid();

+ 1 - 1
Userland/Games/Chess/ChessWidget.cpp

@@ -373,7 +373,7 @@ static RefPtr<Gfx::Bitmap> get_piece(const StringView& set, const StringView& im
     builder.append(set);
     builder.append(set);
     builder.append('/');
     builder.append('/');
     builder.append(image);
     builder.append(image);
-    return Gfx::Bitmap::try_load_from_file(builder.build());
+    return Gfx::Bitmap::try_load_from_file(builder.build()).release_value_but_fixme_should_propagate_errors();
 }
 }
 
 
 void ChessWidget::set_piece_set(const StringView& set)
 void ChessWidget::set_piece_set(const StringView& set)

+ 1 - 1
Userland/Games/Chess/main.cpp

@@ -155,7 +155,7 @@ int main(int argc, char** argv)
     GUI::ActionGroup board_theme_action_group;
     GUI::ActionGroup board_theme_action_group;
     board_theme_action_group.set_exclusive(true);
     board_theme_action_group.set_exclusive(true);
     auto& board_theme_menu = style_menu.add_submenu("Board Theme");
     auto& board_theme_menu = style_menu.add_submenu("Board Theme");
-    board_theme_menu.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/chess/mini-board.png"));
+    board_theme_menu.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/chess/mini-board.png").release_value_but_fixme_should_propagate_errors());
 
 
     for (auto& theme : Vector({ "Beige", "Green", "Blue" })) {
     for (auto& theme : Vector({ "Beige", "Green", "Blue" })) {
         auto action = GUI::Action::create_checkable(theme, [&](auto& action) {
         auto action = GUI::Action::create_checkable(theme, [&](auto& action) {

+ 7 - 7
Userland/Games/FlappyBug/Game.h

@@ -43,8 +43,8 @@ private:
         const float x { 50 };
         const float x { 50 };
         const float radius { 16 };
         const float radius { 16 };
         const float starting_y { 200 };
         const float starting_y { 200 };
-        const RefPtr<Gfx::Bitmap> falling_bitmap { Gfx::Bitmap::try_load_from_file("/res/icons/flappybug/falling.png") };
-        const RefPtr<Gfx::Bitmap> flapping_bitmap { Gfx::Bitmap::try_load_from_file("/res/icons/flappybug/flapping.png") };
+        NonnullRefPtr<Gfx::Bitmap> falling_bitmap { Gfx::Bitmap::try_load_from_file("/res/icons/flappybug/falling.png").release_value_but_fixme_should_propagate_errors() };
+        NonnullRefPtr<Gfx::Bitmap> flapping_bitmap { Gfx::Bitmap::try_load_from_file("/res/icons/flappybug/flapping.png").release_value_but_fixme_should_propagate_errors() };
         float y {};
         float y {};
         float velocity {};
         float velocity {};
 
 
@@ -106,10 +106,10 @@ private:
     };
     };
 
 
     struct Cloud {
     struct Cloud {
-        const Vector<RefPtr<Gfx::Bitmap>> cloud_bitmaps {
-            Gfx::Bitmap::try_load_from_file("/res/icons/flappybug/cloud_0.png"),
-            Gfx::Bitmap::try_load_from_file("/res/icons/flappybug/cloud_1.png"),
-            Gfx::Bitmap::try_load_from_file("/res/icons/flappybug/cloud_2.png"),
+        Vector<NonnullRefPtr<Gfx::Bitmap>> const cloud_bitmaps {
+            Gfx::Bitmap::try_load_from_file("/res/icons/flappybug/cloud_0.png").release_value_but_fixme_should_propagate_errors(),
+            Gfx::Bitmap::try_load_from_file("/res/icons/flappybug/cloud_1.png").release_value_but_fixme_should_propagate_errors(),
+            Gfx::Bitmap::try_load_from_file("/res/icons/flappybug/cloud_2.png").release_value_but_fixme_should_propagate_errors(),
         };
         };
         float x {};
         float x {};
         float y {};
         float y {};
@@ -147,7 +147,7 @@ private:
     float m_last_score {};
     float m_last_score {};
     float m_difficulty {};
     float m_difficulty {};
     float m_restart_cooldown {};
     float m_restart_cooldown {};
-    const RefPtr<Gfx::Bitmap> m_background_bitmap { Gfx::Bitmap::try_load_from_file("/res/icons/flappybug/background.png") };
+    NonnullRefPtr<Gfx::Bitmap> m_background_bitmap { Gfx::Bitmap::try_load_from_file("/res/icons/flappybug/background.png").release_value_but_fixme_should_propagate_errors() };
     const Gfx::IntRect m_score_rect { 10, 10, 20, 20 };
     const Gfx::IntRect m_score_rect { 10, 10, 20, 20 };
     const Gfx::IntRect m_text_rect { game_width / 2 - 80, game_height / 2 - 40, 160, 80 };
     const Gfx::IntRect m_text_rect { game_width / 2 - 80, game_height / 2 - 40, 160, 80 };
 };
 };

+ 6 - 6
Userland/Games/GameOfLife/main.cpp

@@ -96,8 +96,8 @@ int main(int argc, char** argv)
 
 
     interval_spinbox.set_value(150);
     interval_spinbox.set_value(150);
 
 
-    auto paused_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/pause.png");
-    auto play_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/play.png");
+    auto paused_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/pause.png").release_value_but_fixme_should_propagate_errors();
+    auto play_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/play.png").release_value_but_fixme_should_propagate_errors();
 
 
     auto toggle_running_action = GUI::Action::create("&Toggle Running", { Mod_None, Key_Return }, *play_icon, [&](GUI::Action&) {
     auto toggle_running_action = GUI::Action::create("&Toggle Running", { Mod_None, Key_Return }, *play_icon, [&](GUI::Action&) {
         board_widget.set_running(!board_widget.is_running());
         board_widget.set_running(!board_widget.is_running());
@@ -106,27 +106,27 @@ int main(int argc, char** argv)
     toggle_running_action->set_checkable(true);
     toggle_running_action->set_checkable(true);
     auto& toggle_running_toolbar_button = main_toolbar.add_action(toggle_running_action);
     auto& toggle_running_toolbar_button = main_toolbar.add_action(toggle_running_action);
 
 
-    auto run_one_generation_action = GUI::Action::create("Run &Next Generation", { Mod_Ctrl, Key_Equal }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png"), [&](const GUI::Action&) {
+    auto run_one_generation_action = GUI::Action::create("Run &Next Generation", { Mod_Ctrl, Key_Equal }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
         statusbar.set_text(click_tip);
         statusbar.set_text(click_tip);
         board_widget.run_generation();
         board_widget.run_generation();
     });
     });
     main_toolbar.add_action(run_one_generation_action);
     main_toolbar.add_action(run_one_generation_action);
 
 
-    auto clear_board_action = GUI::Action::create("&Clear board", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png"), [&](auto&) {
+    auto clear_board_action = GUI::Action::create("&Clear board", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         statusbar.set_text(click_tip);
         statusbar.set_text(click_tip);
         board_widget.clear_cells();
         board_widget.clear_cells();
         board_widget.update();
         board_widget.update();
     });
     });
     main_toolbar.add_action(clear_board_action);
     main_toolbar.add_action(clear_board_action);
 
 
-    auto randomize_cells_action = GUI::Action::create("&Randomize board", { Mod_Ctrl, Key_R }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/reload.png"), [&](auto&) {
+    auto randomize_cells_action = GUI::Action::create("&Randomize board", { Mod_Ctrl, Key_R }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/reload.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         statusbar.set_text(click_tip);
         statusbar.set_text(click_tip);
         board_widget.randomize_cells();
         board_widget.randomize_cells();
         board_widget.update();
         board_widget.update();
     });
     });
     main_toolbar.add_action(randomize_cells_action);
     main_toolbar.add_action(randomize_cells_action);
 
 
-    auto rotate_pattern_action = GUI::Action::create("&Rotate pattern", { 0, Key_R }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/redo.png"), [&](auto&) {
+    auto rotate_pattern_action = GUI::Action::create("&Rotate pattern", { 0, Key_R }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/redo.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
         board_widget.selected_pattern()->rotate_clockwise();
         board_widget.selected_pattern()->rotate_clockwise();
     });
     });
     rotate_pattern_action->set_enabled(false);
     rotate_pattern_action->set_enabled(false);

+ 8 - 8
Userland/Games/Minesweeper/Field.cpp

@@ -117,15 +117,15 @@ Field::Field(GUI::Label& flag_label, GUI::Label& time_label, GUI::Button& face_b
         m_time_label.set_text(String::formatted("{}.{}", m_time_elapsed / 10, m_time_elapsed % 10));
         m_time_label.set_text(String::formatted("{}.{}", m_time_elapsed / 10, m_time_elapsed % 10));
     };
     };
     m_timer->set_interval(100);
     m_timer->set_interval(100);
-    m_mine_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/mine.png");
-    m_flag_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/flag.png");
-    m_badflag_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/badflag.png");
-    m_consider_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/consider.png");
-    m_default_face_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/face-default.png");
-    m_good_face_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/face-good.png");
-    m_bad_face_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/face-bad.png");
+    m_mine_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/mine.png").release_value_but_fixme_should_propagate_errors();
+    m_flag_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/flag.png").release_value_but_fixme_should_propagate_errors();
+    m_badflag_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/badflag.png").release_value_but_fixme_should_propagate_errors();
+    m_consider_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/consider.png").release_value_but_fixme_should_propagate_errors();
+    m_default_face_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/face-default.png").release_value_but_fixme_should_propagate_errors();
+    m_good_face_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/face-good.png").release_value_but_fixme_should_propagate_errors();
+    m_bad_face_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/face-bad.png").release_value_but_fixme_should_propagate_errors();
     for (int i = 0; i < 8; ++i)
     for (int i = 0; i < 8; ++i)
-        m_number_bitmap[i] = Gfx::Bitmap::try_load_from_file(String::formatted("/res/icons/minesweeper/{}.png", i + 1));
+        m_number_bitmap[i] = Gfx::Bitmap::try_load_from_file(String::formatted("/res/icons/minesweeper/{}.png", i + 1)).release_value_but_fixme_should_propagate_errors();
     // Square with mine will be filled with background color later, i.e. red
     // Square with mine will be filled with background color later, i.e. red
     m_mine_palette.set_color(Gfx::ColorRole::Base, Color::from_rgb(0xff4040));
     m_mine_palette.set_color(Gfx::ColorRole::Base, Color::from_rgb(0xff4040));
 
 

+ 2 - 2
Userland/Games/Minesweeper/main.cpp

@@ -67,7 +67,7 @@ int main(int argc, char** argv)
     container.layout()->add_spacer();
     container.layout()->add_spacer();
 
 
     auto& flag_image = container.add<GUI::Label>();
     auto& flag_image = container.add<GUI::Label>();
-    flag_image.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/flag.png"));
+    flag_image.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/flag.png").release_value_but_fixme_should_propagate_errors());
     flag_image.set_fixed_width(16);
     flag_image.set_fixed_width(16);
 
 
     auto& flag_label = container.add<GUI::Label>();
     auto& flag_label = container.add<GUI::Label>();
@@ -85,7 +85,7 @@ int main(int argc, char** argv)
 
 
     auto& time_image = container.add<GUI::Label>();
     auto& time_image = container.add<GUI::Label>();
     time_image.set_fixed_width(16);
     time_image.set_fixed_width(16);
-    time_image.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/timer.png"));
+    time_image.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/minesweeper/timer.png").release_value_but_fixme_should_propagate_errors());
 
 
     auto& time_label = container.add<GUI::Label>();
     auto& time_label = container.add<GUI::Label>();
     time_label.set_fixed_width(50);
     time_label.set_fixed_width(50);

+ 4 - 4
Userland/Games/Snake/SnakeGame.cpp

@@ -16,10 +16,10 @@
 SnakeGame::SnakeGame()
 SnakeGame::SnakeGame()
 {
 {
     set_font(Gfx::FontDatabase::default_fixed_width_font().bold_variant());
     set_font(Gfx::FontDatabase::default_fixed_width_font().bold_variant());
-    m_fruit_bitmaps.append(*Gfx::Bitmap::try_load_from_file("/res/icons/snake/paprika.png"));
-    m_fruit_bitmaps.append(*Gfx::Bitmap::try_load_from_file("/res/icons/snake/eggplant.png"));
-    m_fruit_bitmaps.append(*Gfx::Bitmap::try_load_from_file("/res/icons/snake/cauliflower.png"));
-    m_fruit_bitmaps.append(*Gfx::Bitmap::try_load_from_file("/res/icons/snake/tomato.png"));
+    m_fruit_bitmaps.append(*Gfx::Bitmap::try_load_from_file("/res/icons/snake/paprika.png").release_value_but_fixme_should_propagate_errors());
+    m_fruit_bitmaps.append(*Gfx::Bitmap::try_load_from_file("/res/icons/snake/eggplant.png").release_value_but_fixme_should_propagate_errors());
+    m_fruit_bitmaps.append(*Gfx::Bitmap::try_load_from_file("/res/icons/snake/cauliflower.png").release_value_but_fixme_should_propagate_errors());
+    m_fruit_bitmaps.append(*Gfx::Bitmap::try_load_from_file("/res/icons/snake/tomato.png").release_value_but_fixme_should_propagate_errors());
     reset();
     reset();
 
 
     m_high_score = Config::read_i32("Snake", "Snake", "HighScore", 0);
     m_high_score = Config::read_i32("Snake", "Snake", "HighScore", 0);

+ 1 - 2
Userland/Libraries/LibCards/Card.cpp

@@ -75,8 +75,7 @@ Card::Card(Type type, uint8_t value)
         s_background = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { width, height });
         s_background = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { width, height });
         Gfx::Painter bg_painter(*s_background);
         Gfx::Painter bg_painter(*s_background);
 
 
-        auto image = Gfx::Bitmap::try_load_from_file("/res/icons/cards/buggie-deck.png");
-        VERIFY(!image.is_null());
+        auto image = Gfx::Bitmap::try_load_from_file("/res/icons/cards/buggie-deck.png").release_value_but_fixme_should_propagate_errors();
 
 
         float aspect_ratio = image->width() / static_cast<float>(image->height());
         float aspect_ratio = image->width() / static_cast<float>(image->height());
         auto target_size = Gfx::IntSize(static_cast<int>(aspect_ratio * (height - 5)), height - 5);
         auto target_size = Gfx::IntSize(static_cast<int>(aspect_ratio * (height - 5)), height - 5);

+ 2 - 2
Userland/Libraries/LibGUI/AutocompleteProvider.cpp

@@ -52,13 +52,13 @@ public:
             if (index.column() == Column::Icon) {
             if (index.column() == Column::Icon) {
                 if (suggestion.language == GUI::AutocompleteProvider::Language::Cpp) {
                 if (suggestion.language == GUI::AutocompleteProvider::Language::Cpp) {
                     if (!s_cpp_identifier_icon) {
                     if (!s_cpp_identifier_icon) {
-                        s_cpp_identifier_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/completion/cpp-identifier.png");
+                        s_cpp_identifier_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/completion/cpp-identifier.png").release_value_but_fixme_should_propagate_errors();
                     }
                     }
                     return *s_cpp_identifier_icon;
                     return *s_cpp_identifier_icon;
                 }
                 }
                 if (suggestion.language == GUI::AutocompleteProvider::Language::Unspecified) {
                 if (suggestion.language == GUI::AutocompleteProvider::Language::Unspecified) {
                     if (!s_unspecified_identifier_icon) {
                     if (!s_unspecified_identifier_icon) {
-                        s_unspecified_identifier_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/completion/unspecified-identifier.png");
+                        s_unspecified_identifier_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/completion/unspecified-identifier.png").release_value_but_fixme_should_propagate_errors();
                     }
                     }
                     return *s_unspecified_identifier_icon;
                     return *s_unspecified_identifier_icon;
                 }
                 }

+ 1 - 1
Userland/Libraries/LibGUI/ColorPicker.cpp

@@ -184,7 +184,7 @@ ColorPicker::ColorPicker(Color color, Window* parent_window, String title)
     : Dialog(parent_window)
     : Dialog(parent_window)
     , m_color(color)
     , m_color(color)
 {
 {
-    set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/color-chooser.png"));
+    set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/color-chooser.png").release_value_but_fixme_should_propagate_errors());
     set_title(title);
     set_title(title);
     set_resizable(false);
     set_resizable(false);
     resize(458, 326);
     resize(458, 326);

+ 1 - 1
Userland/Libraries/LibGUI/ComboBox.cpp

@@ -88,7 +88,7 @@ ComboBox::ComboBox()
 
 
     m_open_button = add<Button>();
     m_open_button = add<Button>();
     m_open_button->set_button_style(Gfx::ButtonStyle::ThickCap);
     m_open_button->set_button_style(Gfx::ButtonStyle::ThickCap);
-    m_open_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/downward-triangle.png"));
+    m_open_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/downward-triangle.png").release_value_but_fixme_should_propagate_errors());
     m_open_button->set_focus_policy(GUI::FocusPolicy::NoFocus);
     m_open_button->set_focus_policy(GUI::FocusPolicy::NoFocus);
     m_open_button->on_click = [this](auto) {
     m_open_button->on_click = [this](auto) {
         if (m_list_window->is_visible())
         if (m_list_window->is_visible())

+ 23 - 23
Userland/Libraries/LibGUI/CommonActions.cpp

@@ -27,71 +27,71 @@ NonnullRefPtr<Action> make_about_action(const String& app_name, const Icon& app_
 
 
 NonnullRefPtr<Action> make_open_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_open_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    auto action = Action::create("&Open...", { Mod_Ctrl, Key_O }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png"), move(callback), parent);
+    auto action = Action::create("&Open...", { Mod_Ctrl, Key_O }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
     action->set_status_tip("Open an existing file");
     action->set_status_tip("Open an existing file");
     return action;
     return action;
 }
 }
 
 
 NonnullRefPtr<Action> make_save_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_save_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    auto action = Action::create("&Save", { Mod_Ctrl, Key_S }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/save.png"), move(callback), parent);
+    auto action = Action::create("&Save", { Mod_Ctrl, Key_S }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/save.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
     action->set_status_tip("Save the current file");
     action->set_status_tip("Save the current file");
     return action;
     return action;
 }
 }
 
 
 NonnullRefPtr<Action> make_save_as_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_save_as_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    auto action = Action::create("Save &As...", { Mod_Ctrl | Mod_Shift, Key_S }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/save.png"), move(callback), parent);
+    auto action = Action::create("Save &As...", { Mod_Ctrl | Mod_Shift, Key_S }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/save.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
     action->set_status_tip("Save the current file with a new name");
     action->set_status_tip("Save the current file with a new name");
     return action;
     return action;
 }
 }
 
 
 NonnullRefPtr<Action> make_move_to_front_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_move_to_front_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    auto action = Action::create("Move to &Front", { Mod_Ctrl | Mod_Shift, Key_Up }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/move-to-front.png"), move(callback), parent);
+    auto action = Action::create("Move to &Front", { Mod_Ctrl | Mod_Shift, Key_Up }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/move-to-front.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
     action->set_status_tip("Move to the top of the stack");
     action->set_status_tip("Move to the top of the stack");
     return action;
     return action;
 }
 }
 
 
 NonnullRefPtr<Action> make_move_to_back_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_move_to_back_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    auto action = Action::create("Move to &Back", { Mod_Ctrl | Mod_Shift, Key_Down }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/move-to-back.png"), move(callback), parent);
+    auto action = Action::create("Move to &Back", { Mod_Ctrl | Mod_Shift, Key_Down }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/move-to-back.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
     action->set_status_tip("Move to the bottom of the stack");
     action->set_status_tip("Move to the bottom of the stack");
     return action;
     return action;
 }
 }
 
 
 NonnullRefPtr<Action> make_undo_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_undo_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    return Action::create("&Undo", { Mod_Ctrl, Key_Z }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/undo.png"), move(callback), parent);
+    return Action::create("&Undo", { Mod_Ctrl, Key_Z }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/undo.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
 }
 }
 
 
 NonnullRefPtr<Action> make_redo_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_redo_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    return Action::create("&Redo", { Mod_Ctrl, Key_Y }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/redo.png"), move(callback), parent);
+    return Action::create("&Redo", { Mod_Ctrl, Key_Y }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/redo.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
 }
 }
 
 
 NonnullRefPtr<Action> make_delete_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_delete_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    return Action::create("&Delete", { Mod_None, Key_Delete }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png"), move(callback), parent);
+    return Action::create("&Delete", { Mod_None, Key_Delete }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
 }
 }
 
 
 NonnullRefPtr<Action> make_cut_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_cut_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    auto action = Action::create("Cu&t", { Mod_Ctrl, Key_X }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-cut.png"), move(callback), parent);
+    auto action = Action::create("Cu&t", { Mod_Ctrl, Key_X }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-cut.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
     action->set_status_tip("Cut to clipboard");
     action->set_status_tip("Cut to clipboard");
     return action;
     return action;
 }
 }
 
 
 NonnullRefPtr<Action> make_copy_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_copy_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    auto action = Action::create("&Copy", { Mod_Ctrl, Key_C }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png"), move(callback), parent);
+    auto action = Action::create("&Copy", { Mod_Ctrl, Key_C }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
     action->set_status_tip("Copy to clipboard");
     action->set_status_tip("Copy to clipboard");
     return action;
     return action;
 }
 }
 
 
 NonnullRefPtr<Action> make_paste_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_paste_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    auto action = Action::create("&Paste", { Mod_Ctrl, Key_V }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/paste.png"), move(callback), parent);
+    auto action = Action::create("&Paste", { Mod_Ctrl, Key_V }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/paste.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
     action->set_status_tip("Paste from clipboard");
     action->set_status_tip("Paste from clipboard");
     return action;
     return action;
 }
 }
@@ -112,70 +112,70 @@ NonnullRefPtr<Action> make_quit_action(Function<void(Action&)> callback)
 
 
 NonnullRefPtr<Action> make_help_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_help_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    auto action = Action::create("&Contents", { Mod_None, Key_F1 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-help.png"), move(callback), parent);
+    auto action = Action::create("&Contents", { Mod_None, Key_F1 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-help.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
     action->set_status_tip("Show help contents");
     action->set_status_tip("Show help contents");
     return action;
     return action;
 }
 }
 
 
 NonnullRefPtr<Action> make_go_back_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_go_back_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    auto action = Action::create("Go &Back", { Mod_Alt, Key_Left }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png"), move(callback), parent);
+    auto action = Action::create("Go &Back", { Mod_Alt, Key_Left }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
     action->set_status_tip("Move one step backward in history");
     action->set_status_tip("Move one step backward in history");
     return action;
     return action;
 }
 }
 
 
 NonnullRefPtr<Action> make_go_forward_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_go_forward_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    auto action = Action::create("Go &Forward", { Mod_Alt, Key_Right }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png"), move(callback), parent);
+    auto action = Action::create("Go &Forward", { Mod_Alt, Key_Right }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
     action->set_status_tip("Move one step forward in history");
     action->set_status_tip("Move one step forward in history");
     return action;
     return action;
 }
 }
 
 
 NonnullRefPtr<Action> make_go_home_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_go_home_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    return Action::create("Go &Home", { Mod_Alt, Key_Home }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-home.png"), move(callback), parent);
+    return Action::create("Go &Home", { Mod_Alt, Key_Home }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-home.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
 }
 }
 
 
 NonnullRefPtr<Action> make_close_tab_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_close_tab_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    auto action = Action::create("&Close Tab", { Mod_Ctrl, Key_W }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/close-tab.png"), move(callback), parent);
+    auto action = Action::create("&Close Tab", { Mod_Ctrl, Key_W }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/close-tab.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
     action->set_status_tip("Close current tab");
     action->set_status_tip("Close current tab");
     return action;
     return action;
 }
 }
 
 
 NonnullRefPtr<Action> make_reload_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_reload_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    return Action::create("&Reload", { Mod_Ctrl, Key_R }, Key_F5, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/reload.png"), move(callback), parent);
+    return Action::create("&Reload", { Mod_Ctrl, Key_R }, Key_F5, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/reload.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
 }
 }
 
 
 NonnullRefPtr<Action> make_select_all_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_select_all_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    return Action::create("Select &All", { Mod_Ctrl, Key_A }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/select-all.png"), move(callback), parent);
+    return Action::create("Select &All", { Mod_Ctrl, Key_A }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/select-all.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
 }
 }
 
 
 NonnullRefPtr<Action> make_rename_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_rename_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    return Action::create("Re&name", Key_F2, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/rename.png"), move(callback), parent);
+    return Action::create("Re&name", Key_F2, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/rename.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
 }
 }
 
 
 NonnullRefPtr<Action> make_properties_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_properties_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    return Action::create("P&roperties", { Mod_Alt, Key_Return }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/properties.png"), move(callback), parent);
+    return Action::create("P&roperties", { Mod_Alt, Key_Return }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/properties.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
 }
 }
 
 
 NonnullRefPtr<Action> make_zoom_in_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_zoom_in_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    return GUI::Action::create("Zoom &In", { Mod_Ctrl, Key_Equal }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/zoom-in.png"), move(callback), parent);
+    return GUI::Action::create("Zoom &In", { Mod_Ctrl, Key_Equal }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/zoom-in.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
 }
 }
 
 
 NonnullRefPtr<Action> make_reset_zoom_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_reset_zoom_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    return GUI::Action::create("&Reset Zoom", { Mod_Ctrl, Key_0 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/zoom-reset.png"), move(callback), parent);
+    return GUI::Action::create("&Reset Zoom", { Mod_Ctrl, Key_0 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/zoom-reset.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
 }
 }
 
 
 NonnullRefPtr<Action> make_zoom_out_action(Function<void(Action&)> callback, Core::Object* parent)
 NonnullRefPtr<Action> make_zoom_out_action(Function<void(Action&)> callback, Core::Object* parent)
 {
 {
-    return GUI::Action::create("Zoom &Out", { Mod_Ctrl, Key_Minus }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/zoom-out.png"), move(callback), parent);
+    return GUI::Action::create("Zoom &Out", { Mod_Ctrl, Key_Minus }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/zoom-out.png").release_value_but_fixme_should_propagate_errors(), move(callback), parent);
 }
 }
 
 
 }
 }

+ 2 - 2
Userland/Libraries/LibGUI/FileIconProvider.cpp

@@ -65,8 +65,8 @@ static void initialize_if_needed()
 
 
     auto config = Core::ConfigFile::open("/etc/FileIconProvider.ini");
     auto config = Core::ConfigFile::open("/etc/FileIconProvider.ini");
 
 
-    s_symlink_emblem = Gfx::Bitmap::try_load_from_file("/res/icons/symlink-emblem.png");
-    s_symlink_emblem_small = Gfx::Bitmap::try_load_from_file("/res/icons/symlink-emblem-small.png");
+    s_symlink_emblem = Gfx::Bitmap::try_load_from_file("/res/icons/symlink-emblem.png").release_value_but_fixme_should_propagate_errors();
+    s_symlink_emblem_small = Gfx::Bitmap::try_load_from_file("/res/icons/symlink-emblem-small.png").release_value_but_fixme_should_propagate_errors();
 
 
     s_hard_disk_icon = Icon::default_icon("hard-disk");
     s_hard_disk_icon = Icon::default_icon("hard-disk");
     s_directory_icon = Icon::default_icon("filetype-folder");
     s_directory_icon = Icon::default_icon("filetype-folder");

+ 4 - 4
Userland/Libraries/LibGUI/FilePicker.cpp

@@ -75,11 +75,11 @@ FilePicker::FilePicker(Window* parent_window, Mode mode, const StringView& filen
     case Mode::OpenMultiple:
     case Mode::OpenMultiple:
     case Mode::OpenFolder:
     case Mode::OpenFolder:
         set_title("Open");
         set_title("Open");
-        set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png"));
+        set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png").release_value_but_fixme_should_propagate_errors());
         break;
         break;
     case Mode::Save:
     case Mode::Save:
         set_title("Save as");
         set_title("Save as");
-        set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/save.png"));
+        set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/save.png").release_value_but_fixme_should_propagate_errors());
         break;
         break;
     }
     }
     resize(560, 320);
     resize(560, 320);
@@ -115,7 +115,7 @@ FilePicker::FilePicker(Window* parent_window, Mode mode, const StringView& filen
     };
     };
 
 
     auto open_parent_directory_action = Action::create(
     auto open_parent_directory_action = Action::create(
-        "Open parent directory", { Mod_Alt, Key_Up }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open-parent-directory.png"), [this](const Action&) {
+        "Open parent directory", { Mod_Alt, Key_Up }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open-parent-directory.png").release_value_but_fixme_should_propagate_errors(), [this](const Action&) {
             set_path(String::formatted("{}/..", m_model->root_path()));
             set_path(String::formatted("{}/..", m_model->root_path()));
         },
         },
         this);
         this);
@@ -129,7 +129,7 @@ FilePicker::FilePicker(Window* parent_window, Mode mode, const StringView& filen
     toolbar.add_separator();
     toolbar.add_separator();
 
 
     auto mkdir_action = Action::create(
     auto mkdir_action = Action::create(
-        "New directory...", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/mkdir.png"), [this](const Action&) {
+        "New directory...", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/mkdir.png").release_value_but_fixme_should_propagate_errors(), [this](const Action&) {
             String value;
             String value;
             if (InputBox::show(this, value, "Enter name:", "New directory") == InputBox::ExecOK && !value.is_empty()) {
             if (InputBox::show(this, value, "Enter name:", "New directory") == InputBox::ExecOK && !value.is_empty()) {
                 auto new_dir_path = LexicalPath::canonicalized_path(String::formatted("{}/{}", m_model->root_path(), value));
                 auto new_dir_path = LexicalPath::canonicalized_path(String::formatted("{}/{}", m_model->root_path(), value));

+ 6 - 5
Userland/Libraries/LibGUI/FileSystemModel.cpp

@@ -617,17 +617,18 @@ static HashMap<String, RefPtr<Gfx::Bitmap>> s_thumbnail_cache;
 
 
 static RefPtr<Gfx::Bitmap> render_thumbnail(StringView const& path)
 static RefPtr<Gfx::Bitmap> render_thumbnail(StringView const& path)
 {
 {
-    auto png_bitmap = Gfx::Bitmap::try_load_from_file(path);
-    if (!png_bitmap)
+    auto bitmap_or_error = Gfx::Bitmap::try_load_from_file(path);
+    if (bitmap_or_error.is_error())
         return nullptr;
         return nullptr;
+    auto bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
 
 
-    double scale = min(32 / (double)png_bitmap->width(), 32 / (double)png_bitmap->height());
+    double scale = min(32 / (double)bitmap->width(), 32 / (double)bitmap->height());
 
 
     auto thumbnail = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { 32, 32 });
     auto thumbnail = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { 32, 32 });
-    auto destination = Gfx::IntRect(0, 0, (int)(png_bitmap->width() * scale), (int)(png_bitmap->height() * scale)).centered_within(thumbnail->rect());
+    auto destination = Gfx::IntRect(0, 0, (int)(bitmap->width() * scale), (int)(bitmap->height() * scale)).centered_within(thumbnail->rect());
 
 
     Painter painter(*thumbnail);
     Painter painter(*thumbnail);
-    painter.draw_scaled_bitmap(destination, *png_bitmap, png_bitmap->rect());
+    painter.draw_scaled_bitmap(destination, *bitmap, bitmap->rect());
     return thumbnail;
     return thumbnail;
 }
 }
 
 

+ 1 - 1
Userland/Libraries/LibGUI/FontPicker.cpp

@@ -23,7 +23,7 @@ FontPicker::FontPicker(Window* parent_window, const Gfx::Font* current_font, boo
 {
 {
     set_title("Font picker");
     set_title("Font picker");
     resize(430, 280);
     resize(430, 280);
-    set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-font-editor.png"));
+    set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-font-editor.png").release_value_but_fixme_should_propagate_errors());
 
 
     auto& widget = set_main_widget<GUI::Widget>();
     auto& widget = set_main_widget<GUI::Widget>();
     if (!widget.load_from_gml(font_picker_dialog_gml))
     if (!widget.load_from_gml(font_picker_dialog_gml))

+ 6 - 2
Userland/Libraries/LibGUI/Icon.cpp

@@ -74,8 +74,12 @@ void IconImpl::set_bitmap_for_size(int size, RefPtr<Gfx::Bitmap>&& bitmap)
 
 
 Icon Icon::default_icon(const StringView& name)
 Icon Icon::default_icon(const StringView& name)
 {
 {
-    auto bitmap16 = Gfx::Bitmap::try_load_from_file(String::formatted("/res/icons/16x16/{}.png", name));
-    auto bitmap32 = Gfx::Bitmap::try_load_from_file(String::formatted("/res/icons/32x32/{}.png", name));
+    RefPtr<Gfx::Bitmap> bitmap16;
+    RefPtr<Gfx::Bitmap> bitmap32;
+    if (auto bitmap_or_error = Gfx::Bitmap::try_load_from_file(String::formatted("/res/icons/16x16/{}.png", name)); !bitmap_or_error.is_error())
+        bitmap16 = bitmap_or_error.release_value();
+    if (auto bitmap_or_error = Gfx::Bitmap::try_load_from_file(String::formatted("/res/icons/32x32/{}.png", name)); !bitmap_or_error.is_error())
+        bitmap32 = bitmap_or_error.release_value();
     return Icon(move(bitmap16), move(bitmap32));
     return Icon(move(bitmap16), move(bitmap32));
 }
 }
 
 

+ 1 - 1
Userland/Libraries/LibGUI/LinkLabel.cpp

@@ -28,7 +28,7 @@ LinkLabel::LinkLabel(String text)
 
 
 void LinkLabel::setup_actions()
 void LinkLabel::setup_actions()
 {
 {
-    m_open_action = GUI::Action::create("Show in File Manager", {}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-file-manager.png"), [&](const GUI::Action&) {
+    m_open_action = GUI::Action::create("Show in File Manager", {}, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-file-manager.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
         if (on_click)
         if (on_click)
             on_click();
             on_click();
     });
     });

+ 4 - 4
Userland/Libraries/LibGUI/MessageBox.cpp

@@ -44,13 +44,13 @@ RefPtr<Gfx::Bitmap> MessageBox::icon() const
 {
 {
     switch (m_type) {
     switch (m_type) {
     case Type::Information:
     case Type::Information:
-        return Gfx::Bitmap::try_load_from_file("/res/icons/32x32/msgbox-information.png");
+        return Gfx::Bitmap::try_load_from_file("/res/icons/32x32/msgbox-information.png").release_value_but_fixme_should_propagate_errors();
     case Type::Warning:
     case Type::Warning:
-        return Gfx::Bitmap::try_load_from_file("/res/icons/32x32/msgbox-warning.png");
+        return Gfx::Bitmap::try_load_from_file("/res/icons/32x32/msgbox-warning.png").release_value_but_fixme_should_propagate_errors();
     case Type::Error:
     case Type::Error:
-        return Gfx::Bitmap::try_load_from_file("/res/icons/32x32/msgbox-error.png");
+        return Gfx::Bitmap::try_load_from_file("/res/icons/32x32/msgbox-error.png").release_value_but_fixme_should_propagate_errors();
     case Type::Question:
     case Type::Question:
-        return Gfx::Bitmap::try_load_from_file("/res/icons/32x32/msgbox-question.png");
+        return Gfx::Bitmap::try_load_from_file("/res/icons/32x32/msgbox-question.png").release_value_but_fixme_should_propagate_errors();
     default:
     default:
         return nullptr;
         return nullptr;
     }
     }

+ 3 - 3
Userland/Libraries/LibGUI/MultiView.cpp

@@ -104,19 +104,19 @@ void MultiView::set_column_visible(int column_index, bool visible)
 void MultiView::build_actions()
 void MultiView::build_actions()
 {
 {
     m_view_as_icons_action = Action::create_checkable(
     m_view_as_icons_action = Action::create_checkable(
-        "Icon view", { Mod_Ctrl, KeyCode::Key_1 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/icon-view.png"), [this](auto&) {
+        "Icon view", { Mod_Ctrl, KeyCode::Key_1 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/icon-view.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
             set_view_mode(ViewMode::Icon);
             set_view_mode(ViewMode::Icon);
         },
         },
         this);
         this);
 
 
     m_view_as_table_action = Action::create_checkable(
     m_view_as_table_action = Action::create_checkable(
-        "Table view", { Mod_Ctrl, KeyCode::Key_2 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/table-view.png"), [this](auto&) {
+        "Table view", { Mod_Ctrl, KeyCode::Key_2 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/table-view.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
             set_view_mode(ViewMode::Table);
             set_view_mode(ViewMode::Table);
         },
         },
         this);
         this);
 
 
     m_view_as_columns_action = Action::create_checkable(
     m_view_as_columns_action = Action::create_checkable(
-        "Columns view", { Mod_Ctrl, KeyCode::Key_3 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/columns-view.png"), [this](auto&) {
+        "Columns view", { Mod_Ctrl, KeyCode::Key_3 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/columns-view.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
             set_view_mode(ViewMode::Columns);
             set_view_mode(ViewMode::Columns);
         },
         },
         this);
         this);

+ 1 - 1
Userland/Libraries/LibGUI/PasswordInputDialog.cpp

@@ -27,7 +27,7 @@ PasswordInputDialog::PasswordInputDialog(Window* parent_window, String title, St
 
 
     auto& key_icon_label = *widget.find_descendant_of_type_named<GUI::Label>("key_icon_label");
     auto& key_icon_label = *widget.find_descendant_of_type_named<GUI::Label>("key_icon_label");
 
 
-    key_icon_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/key.png"));
+    key_icon_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/key.png").release_value_but_fixme_should_propagate_errors());
 
 
     auto& server_label = *widget.find_descendant_of_type_named<GUI::Label>("server_label");
     auto& server_label = *widget.find_descendant_of_type_named<GUI::Label>("server_label");
     server_label.set_text(move(server));
     server_label.set_text(move(server));

+ 2 - 2
Userland/Libraries/LibGUI/SpinBox.cpp

@@ -34,13 +34,13 @@ SpinBox::SpinBox()
 
 
     m_increment_button = add<Button>();
     m_increment_button = add<Button>();
     m_increment_button->set_button_style(Gfx::ButtonStyle::ThickCap);
     m_increment_button->set_button_style(Gfx::ButtonStyle::ThickCap);
-    m_increment_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/upward-triangle.png"));
+    m_increment_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/upward-triangle.png").release_value_but_fixme_should_propagate_errors());
     m_increment_button->set_focus_policy(GUI::FocusPolicy::NoFocus);
     m_increment_button->set_focus_policy(GUI::FocusPolicy::NoFocus);
     m_increment_button->on_click = [this](auto) { set_value(m_value + 1); };
     m_increment_button->on_click = [this](auto) { set_value(m_value + 1); };
     m_increment_button->set_auto_repeat_interval(150);
     m_increment_button->set_auto_repeat_interval(150);
     m_decrement_button = add<Button>();
     m_decrement_button = add<Button>();
     m_decrement_button->set_button_style(Gfx::ButtonStyle::ThickCap);
     m_decrement_button->set_button_style(Gfx::ButtonStyle::ThickCap);
-    m_decrement_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/downward-triangle.png"));
+    m_decrement_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/downward-triangle.png").release_value_but_fixme_should_propagate_errors());
     m_decrement_button->set_focus_policy(GUI::FocusPolicy::NoFocus);
     m_decrement_button->set_focus_policy(GUI::FocusPolicy::NoFocus);
     m_decrement_button->on_click = [this](auto) { set_value(m_value - 1); };
     m_decrement_button->on_click = [this](auto) { set_value(m_value - 1); };
     m_decrement_button->set_auto_repeat_interval(150);
     m_decrement_button->set_auto_repeat_interval(150);

+ 1 - 1
Userland/Libraries/LibGUI/TextEditor.cpp

@@ -87,7 +87,7 @@ void TextEditor::create_actions()
     m_delete_action = CommonActions::make_delete_action([&](auto&) { do_delete(); }, this);
     m_delete_action = CommonActions::make_delete_action([&](auto&) { do_delete(); }, this);
     if (is_multi_line()) {
     if (is_multi_line()) {
         m_go_to_line_action = Action::create(
         m_go_to_line_action = Action::create(
-            "Go to line...", { Mod_Ctrl, Key_L }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png"), [this](auto&) {
+            "Go to line...", { Mod_Ctrl, Key_L }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
                 String value;
                 String value;
                 if (InputBox::show(window(), value, "Line:", "Go to line") == InputBox::ExecOK) {
                 if (InputBox::show(window(), value, "Line:", "Go to line") == InputBox::ExecOK) {
                     auto line_target = value.to_uint();
                     auto line_target = value.to_uint();

+ 2 - 2
Userland/Libraries/LibGUI/TreeView.cpp

@@ -39,8 +39,8 @@ TreeView::TreeView()
     set_background_role(ColorRole::Base);
     set_background_role(ColorRole::Base);
     set_foreground_role(ColorRole::BaseText);
     set_foreground_role(ColorRole::BaseText);
     set_column_headers_visible(false);
     set_column_headers_visible(false);
-    m_expand_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/serenity/treeview-expand.png");
-    m_collapse_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/serenity/treeview-collapse.png");
+    m_expand_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/serenity/treeview-expand.png").release_value_but_fixme_should_propagate_errors();
+    m_collapse_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/serenity/treeview-collapse.png").release_value_but_fixme_should_propagate_errors();
 }
 }
 
 
 TreeView::~TreeView()
 TreeView::~TreeView()

+ 12 - 10
Userland/Libraries/LibGfx/Bitmap.cpp

@@ -110,15 +110,15 @@ ErrorOr<NonnullRefPtr<Bitmap>> Bitmap::try_create_wrapper(BitmapFormat format, I
     return adopt_ref(*new Bitmap(format, size, scale_factor, pitch, data));
     return adopt_ref(*new Bitmap(format, size, scale_factor, pitch, data));
 }
 }
 
 
-RefPtr<Bitmap> Bitmap::try_load_from_file(String const& path, int scale_factor)
+ErrorOr<NonnullRefPtr<Bitmap>> Bitmap::try_load_from_file(String const& path, int scale_factor)
 {
 {
     int fd = open(path.characters(), O_RDONLY);
     int fd = open(path.characters(), O_RDONLY);
     if (fd < 0)
     if (fd < 0)
-        return nullptr;
+        return Error::from_errno(errno);
     return try_load_from_fd_and_close(fd, path, scale_factor);
     return try_load_from_fd_and_close(fd, path, scale_factor);
 }
 }
 
 
-RefPtr<Bitmap> Bitmap::try_load_from_fd_and_close(int fd, String const& path, int scale_factor)
+ErrorOr<NonnullRefPtr<Bitmap>> Bitmap::try_load_from_fd_and_close(int fd, String const& path, int scale_factor)
 {
 {
     if (scale_factor > 1 && path.starts_with("/res/")) {
     if (scale_factor > 1 && path.starts_with("/res/")) {
         LexicalPath lexical_path { path };
         LexicalPath lexical_path { path };
@@ -144,20 +144,22 @@ RefPtr<Bitmap> Bitmap::try_load_from_fd_and_close(int fd, String const& path, in
             bmp->m_size.set_width(bmp->width() / scale_factor);
             bmp->m_size.set_width(bmp->width() / scale_factor);
             bmp->m_size.set_height(bmp->height() / scale_factor);
             bmp->m_size.set_height(bmp->height() / scale_factor);
             bmp->m_scale = scale_factor;
             bmp->m_scale = scale_factor;
-            return bmp;
+            return bmp.release_nonnull();
         }
         }
     }
     }
 
 
-#define __ENUMERATE_IMAGE_FORMAT(Name, Ext)                                                                \
-    if (path.ends_with(Ext, CaseSensitivity::CaseInsensitive)) {                                           \
-        auto file = MappedFile::map_from_fd_and_close(fd, path);                                           \
-        if (!file.is_error())                                                                              \
-            return load_##Name##_from_memory((u8 const*)file.value()->data(), file.value()->size(), path); \
+#define __ENUMERATE_IMAGE_FORMAT(Name, Ext)                                                                           \
+    if (path.ends_with(Ext, CaseSensitivity::CaseInsensitive)) {                                                      \
+        auto file = MappedFile::map_from_fd_and_close(fd, path);                                                      \
+        if (!file.is_error()) {                                                                                       \
+            if (auto bitmap = load_##Name##_from_memory((u8 const*)file.value()->data(), file.value()->size(), path)) \
+                return bitmap.release_nonnull();                                                                      \
+        }                                                                                                             \
     }
     }
     ENUMERATE_IMAGE_FORMATS
     ENUMERATE_IMAGE_FORMATS
 #undef __ENUMERATE_IMAGE_FORMAT
 #undef __ENUMERATE_IMAGE_FORMAT
 
 
-    return nullptr;
+    return Error::from_string_literal("Gfx::Bitmap unable to load from fd"sv);
 }
 }
 
 
 Bitmap::Bitmap(BitmapFormat format, IntSize const& size, int scale_factor, size_t pitch, void* data)
 Bitmap::Bitmap(BitmapFormat format, IntSize const& size, int scale_factor, size_t pitch, void* data)

+ 2 - 2
Userland/Libraries/LibGfx/Bitmap.h

@@ -93,8 +93,8 @@ public:
     [[nodiscard]] static RefPtr<Bitmap> try_create(BitmapFormat, IntSize const&, int intrinsic_scale = 1);
     [[nodiscard]] static RefPtr<Bitmap> try_create(BitmapFormat, IntSize const&, int intrinsic_scale = 1);
     [[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_create_shareable(BitmapFormat, IntSize const&, int intrinsic_scale = 1);
     [[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_create_shareable(BitmapFormat, IntSize const&, int intrinsic_scale = 1);
     [[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_create_wrapper(BitmapFormat, IntSize const&, int intrinsic_scale, size_t pitch, void*);
     [[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_create_wrapper(BitmapFormat, IntSize const&, int intrinsic_scale, size_t pitch, void*);
-    [[nodiscard]] static RefPtr<Bitmap> try_load_from_file(String const& path, int scale_factor = 1);
-    [[nodiscard]] static RefPtr<Bitmap> try_load_from_fd_and_close(int fd, String const& path, int scale_factor = 1);
+    [[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_load_from_file(String const& path, int scale_factor = 1);
+    [[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_load_from_fd_and_close(int fd, String const& path, int scale_factor = 1);
     [[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_create_with_anonymous_buffer(BitmapFormat, Core::AnonymousBuffer, IntSize const&, int intrinsic_scale, Vector<RGBA32> const& palette);
     [[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_create_with_anonymous_buffer(BitmapFormat, Core::AnonymousBuffer, IntSize const&, int intrinsic_scale, Vector<RGBA32> const& palette);
     [[nodiscard]] static RefPtr<Bitmap> try_create_from_serialized_byte_buffer(ByteBuffer&& buffer);
     [[nodiscard]] static RefPtr<Bitmap> try_create_from_serialized_byte_buffer(ByteBuffer&& buffer);
 
 

+ 4 - 4
Userland/Libraries/LibGfx/ClassicStylePainter.cpp

@@ -357,10 +357,10 @@ static Gfx::Bitmap const& circle_bitmap(bool checked, bool changing)
 void ClassicStylePainter::paint_radio_button(Painter& painter, IntRect const& rect, Palette const&, bool is_checked, bool is_being_pressed)
 void ClassicStylePainter::paint_radio_button(Painter& painter, IntRect const& rect, Palette const&, bool is_checked, bool is_being_pressed)
 {
 {
     if (!s_unfilled_circle_bitmap) {
     if (!s_unfilled_circle_bitmap) {
-        s_unfilled_circle_bitmap = Bitmap::try_load_from_file("/res/icons/serenity/unfilled-radio-circle.png");
-        s_filled_circle_bitmap = Bitmap::try_load_from_file("/res/icons/serenity/filled-radio-circle.png");
-        s_changing_filled_circle_bitmap = Bitmap::try_load_from_file("/res/icons/serenity/changing-filled-radio-circle.png");
-        s_changing_unfilled_circle_bitmap = Bitmap::try_load_from_file("/res/icons/serenity/changing-unfilled-radio-circle.png");
+        s_unfilled_circle_bitmap = Bitmap::try_load_from_file("/res/icons/serenity/unfilled-radio-circle.png").release_value_but_fixme_should_propagate_errors();
+        s_filled_circle_bitmap = Bitmap::try_load_from_file("/res/icons/serenity/filled-radio-circle.png").release_value_but_fixme_should_propagate_errors();
+        s_changing_filled_circle_bitmap = Bitmap::try_load_from_file("/res/icons/serenity/changing-filled-radio-circle.png").release_value_but_fixme_should_propagate_errors();
+        s_changing_unfilled_circle_bitmap = Bitmap::try_load_from_file("/res/icons/serenity/changing-unfilled-radio-circle.png").release_value_but_fixme_should_propagate_errors();
     }
     }
 
 
     auto& bitmap = circle_bitmap(is_checked, is_being_pressed);
     auto& bitmap = circle_bitmap(is_checked, is_being_pressed);

+ 3 - 3
Userland/Libraries/LibGfx/Emoji.cpp

@@ -19,12 +19,12 @@ const Bitmap* Emoji::emoji_for_code_point(u32 code_point)
     if (it != s_emojis.end())
     if (it != s_emojis.end())
         return (*it).value.ptr();
         return (*it).value.ptr();
 
 
-    auto bitmap = Bitmap::try_load_from_file(String::formatted("/res/emoji/U+{:X}.png", code_point));
-    if (!bitmap) {
+    auto bitmap_or_error = Bitmap::try_load_from_file(String::formatted("/res/emoji/U+{:X}.png", code_point));
+    if (bitmap_or_error.is_error()) {
         s_emojis.set(code_point, nullptr);
         s_emojis.set(code_point, nullptr);
         return nullptr;
         return nullptr;
     }
     }
-
+    auto bitmap = bitmap_or_error.release_value();
     s_emojis.set(code_point, bitmap);
     s_emojis.set(code_point, bitmap);
     return bitmap.ptr();
     return bitmap.ptr();
 }
 }

+ 2 - 2
Userland/Libraries/LibVT/TerminalWidget.cpp

@@ -122,12 +122,12 @@ TerminalWidget::TerminalWidget(int ptm_fd, bool automatic_size_policy)
 
 
     m_terminal.set_size(Config::read_i32("Terminal", "Window", "Width", 80), Config::read_i32("Terminal", "Window", "Height", 25));
     m_terminal.set_size(Config::read_i32("Terminal", "Window", "Width", 80), Config::read_i32("Terminal", "Window", "Height", 25));
 
 
-    m_copy_action = GUI::Action::create("&Copy", { Mod_Ctrl | Mod_Shift, Key_C }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png"), [this](auto&) {
+    m_copy_action = GUI::Action::create("&Copy", { Mod_Ctrl | Mod_Shift, Key_C }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
         copy();
         copy();
     });
     });
     m_copy_action->set_swallow_key_event_when_disabled(true);
     m_copy_action->set_swallow_key_event_when_disabled(true);
 
 
-    m_paste_action = GUI::Action::create("&Paste", { Mod_Ctrl | Mod_Shift, Key_V }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/paste.png"), [this](auto&) {
+    m_paste_action = GUI::Action::create("&Paste", { Mod_Ctrl | Mod_Shift, Key_V }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/paste.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
         paste();
         paste();
     });
     });
     m_paste_action->set_swallow_key_event_when_disabled(true);
     m_paste_action->set_swallow_key_event_when_disabled(true);

+ 3 - 3
Userland/Libraries/LibWeb/DOMTreeModel.cpp

@@ -18,9 +18,9 @@ DOMTreeModel::DOMTreeModel(JsonObject dom_tree, GUI::TreeView& tree_view)
     : m_tree_view(tree_view)
     : m_tree_view(tree_view)
     , m_dom_tree(move(dom_tree))
     , m_dom_tree(move(dom_tree))
 {
 {
-    m_document_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-html.png"));
-    m_element_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png"));
-    m_text_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-unknown.png"));
+    m_document_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-html.png").release_value_but_fixme_should_propagate_errors());
+    m_element_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png").release_value_but_fixme_should_propagate_errors());
+    m_text_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-unknown.png").release_value_but_fixme_should_propagate_errors());
 
 
     map_dom_nodes_to_parent(nullptr, &m_dom_tree);
     map_dom_nodes_to_parent(nullptr, &m_dom_tree);
 }
 }

+ 1 - 1
Userland/Libraries/LibWeb/Loader/FrameLoader.cpp

@@ -28,7 +28,7 @@ FrameLoader::FrameLoader(BrowsingContext& browsing_context)
     : m_browsing_context(browsing_context)
     : m_browsing_context(browsing_context)
 {
 {
     if (!s_default_favicon_bitmap) {
     if (!s_default_favicon_bitmap) {
-        s_default_favicon_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-html.png");
+        s_default_favicon_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-html.png").release_value_but_fixme_should_propagate_errors();
         VERIFY(s_default_favicon_bitmap);
         VERIFY(s_default_favicon_bitmap);
     }
     }
 }
 }

+ 4 - 4
Userland/Services/Taskbar/ClockWidget.cpp

@@ -61,7 +61,7 @@ ClockWidget::ClockWidget()
     m_prev_date = navigation_container.add<GUI::Button>();
     m_prev_date = navigation_container.add<GUI::Button>();
     m_prev_date->set_button_style(Gfx::ButtonStyle::Coolbar);
     m_prev_date->set_button_style(Gfx::ButtonStyle::Coolbar);
     m_prev_date->set_fixed_size(24, 24);
     m_prev_date->set_fixed_size(24, 24);
-    m_prev_date->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png"));
+    m_prev_date->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-back.png").release_value_but_fixme_should_propagate_errors());
     m_prev_date->on_click = [&](auto) {
     m_prev_date->on_click = [&](auto) {
         unsigned view_month = m_calendar->view_month();
         unsigned view_month = m_calendar->view_month();
         unsigned view_year = m_calendar->view_year();
         unsigned view_year = m_calendar->view_year();
@@ -95,7 +95,7 @@ ClockWidget::ClockWidget()
     m_next_date = navigation_container.add<GUI::Button>();
     m_next_date = navigation_container.add<GUI::Button>();
     m_next_date->set_button_style(Gfx::ButtonStyle::Coolbar);
     m_next_date->set_button_style(Gfx::ButtonStyle::Coolbar);
     m_next_date->set_fixed_size(24, 24);
     m_next_date->set_fixed_size(24, 24);
-    m_next_date->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png"));
+    m_next_date->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png").release_value_but_fixme_should_propagate_errors());
     m_next_date->on_click = [&](auto) {
     m_next_date->on_click = [&](auto) {
         unsigned view_month = m_calendar->view_month();
         unsigned view_month = m_calendar->view_month();
         unsigned view_year = m_calendar->view_year();
         unsigned view_year = m_calendar->view_year();
@@ -145,7 +145,7 @@ ClockWidget::ClockWidget()
     m_jump_to_button = settings_container.add<GUI::Button>();
     m_jump_to_button = settings_container.add<GUI::Button>();
     m_jump_to_button->set_button_style(Gfx::ButtonStyle::Coolbar);
     m_jump_to_button->set_button_style(Gfx::ButtonStyle::Coolbar);
     m_jump_to_button->set_fixed_size(24, 24);
     m_jump_to_button->set_fixed_size(24, 24);
-    m_jump_to_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/calendar-date.png"));
+    m_jump_to_button->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/calendar-date.png").release_value_but_fixme_should_propagate_errors());
     m_jump_to_button->set_tooltip("Jump to today");
     m_jump_to_button->set_tooltip("Jump to today");
     m_jump_to_button->on_click = [this](auto) {
     m_jump_to_button->on_click = [this](auto) {
         jump_to_current_date();
         jump_to_current_date();
@@ -154,7 +154,7 @@ ClockWidget::ClockWidget()
     m_calendar_launcher = settings_container.add<GUI::Button>();
     m_calendar_launcher = settings_container.add<GUI::Button>();
     m_calendar_launcher->set_button_style(Gfx::ButtonStyle::Coolbar);
     m_calendar_launcher->set_button_style(Gfx::ButtonStyle::Coolbar);
     m_calendar_launcher->set_fixed_size(24, 24);
     m_calendar_launcher->set_fixed_size(24, 24);
-    m_calendar_launcher->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-calendar.png"));
+    m_calendar_launcher->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-calendar.png").release_value_but_fixme_should_propagate_errors());
     m_calendar_launcher->set_tooltip("Calendar");
     m_calendar_launcher->set_tooltip("Calendar");
     m_calendar_launcher->on_click = [](auto) {
     m_calendar_launcher->on_click = [](auto) {
         Core::Process::spawn("/bin/Calendar"sv);
         Core::Process::spawn("/bin/Calendar"sv);

+ 2 - 2
Userland/Services/Taskbar/ShutdownDialog.cpp

@@ -63,7 +63,7 @@ ShutdownDialog::ShutdownDialog()
     icon_wrapper.set_layout<GUI::VerticalBoxLayout>();
     icon_wrapper.set_layout<GUI::VerticalBoxLayout>();
 
 
     auto& icon_image = icon_wrapper.add<GUI::ImageWidget>();
     auto& icon_image = icon_wrapper.add<GUI::ImageWidget>();
-    icon_image.set_bitmap(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/shutdown.png"));
+    icon_image.set_bitmap(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/shutdown.png").release_value_but_fixme_should_propagate_errors());
 
 
     auto& right_container = content_container.add<GUI::Widget>();
     auto& right_container = content_container.add<GUI::Widget>();
     right_container.set_layout<GUI::VerticalBoxLayout>();
     right_container.set_layout<GUI::VerticalBoxLayout>();
@@ -112,7 +112,7 @@ ShutdownDialog::ShutdownDialog()
     center_on_screen();
     center_on_screen();
     set_resizable(false);
     set_resizable(false);
     set_title("Exit SerenityOS");
     set_title("Exit SerenityOS");
-    set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/power.png"));
+    set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/power.png").release_value_but_fixme_should_propagate_errors());
 
 
     // Request WindowServer to re-update us on the current theme as we might've not been alive for the last notification.
     // Request WindowServer to re-update us on the current theme as we might've not been alive for the last notification.
     refresh_system_theme();
     refresh_system_theme();

+ 1 - 1
Userland/Services/Taskbar/TaskbarWindow.cpp

@@ -78,7 +78,7 @@ TaskbarWindow::TaskbarWindow(NonnullRefPtr<GUI::Menu> start_menu)
     m_task_button_container->set_layout<GUI::HorizontalBoxLayout>();
     m_task_button_container->set_layout<GUI::HorizontalBoxLayout>();
     m_task_button_container->layout()->set_spacing(3);
     m_task_button_container->layout()->set_spacing(3);
 
 
-    m_default_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/window.png");
+    m_default_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/window.png").release_value_but_fixme_should_propagate_errors();
 
 
     m_applet_area_container = main_widget.add<GUI::Frame>();
     m_applet_area_container = main_widget.add<GUI::Frame>();
     m_applet_area_container->set_frame_thickness(1);
     m_applet_area_container->set_frame_thickness(1);

+ 9 - 8
Userland/Services/Taskbar/main.cpp

@@ -113,7 +113,7 @@ NonnullRefPtr<GUI::Menu> build_system_menu()
     const Vector<String> sorted_app_categories = discover_apps_and_categories();
     const Vector<String> sorted_app_categories = discover_apps_and_categories();
     auto system_menu = GUI::Menu::construct("\xE2\x9A\xA1"); // HIGH VOLTAGE SIGN
     auto system_menu = GUI::Menu::construct("\xE2\x9A\xA1"); // HIGH VOLTAGE SIGN
 
 
-    system_menu->add_action(GUI::Action::create("&About SerenityOS", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/ladyball.png"), [](auto&) {
+    system_menu->add_action(GUI::Action::create("&About SerenityOS", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/ladyball.png").release_value_but_fixme_should_propagate_errors(), [](auto&) {
         Core::Process::spawn("/bin/About"sv);
         Core::Process::spawn("/bin/About"sv);
     }));
     }));
 
 
@@ -148,8 +148,9 @@ NonnullRefPtr<GUI::Menu> build_system_menu()
         auto& category_menu = parent_menu->add_submenu(child_category);
         auto& category_menu = parent_menu->add_submenu(child_category);
         auto category_icon_path = category_icons->read_entry("16x16", category);
         auto category_icon_path = category_icons->read_entry("16x16", category);
         if (!category_icon_path.is_empty()) {
         if (!category_icon_path.is_empty()) {
-            auto icon = Gfx::Bitmap::try_load_from_file(category_icon_path);
-            category_menu.set_icon(icon);
+            auto icon_or_error = Gfx::Bitmap::try_load_from_file(category_icon_path);
+            if (!icon_or_error.is_error())
+                category_menu.set_icon(icon_or_error.release_value());
         }
         }
         app_category_menus.set(category, category_menu);
         app_category_menus.set(category, category_menu);
     };
     };
@@ -210,7 +211,7 @@ NonnullRefPtr<GUI::Menu> build_system_menu()
     g_themes_group.set_unchecking_allowed(false);
     g_themes_group.set_unchecking_allowed(false);
 
 
     g_themes_menu = &system_menu->add_submenu("&Themes");
     g_themes_menu = &system_menu->add_submenu("&Themes");
-    g_themes_menu->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/themes.png"));
+    g_themes_menu->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/themes.png").release_value_but_fixme_should_propagate_errors());
 
 
     {
     {
         Core::DirIterator dt("/res/themes", Core::DirIterator::SkipDots);
         Core::DirIterator dt("/res/themes", Core::DirIterator::SkipDots);
@@ -241,15 +242,15 @@ NonnullRefPtr<GUI::Menu> build_system_menu()
         }
         }
     }
     }
 
 
-    system_menu->add_action(GUI::Action::create("&Settings", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-settings.png"), [](auto&) {
+    system_menu->add_action(GUI::Action::create("&Settings", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-settings.png").release_value_but_fixme_should_propagate_errors(), [](auto&) {
         Core::Process::spawn("/bin/Settings"sv);
         Core::Process::spawn("/bin/Settings"sv);
     }));
     }));
 
 
     system_menu->add_separator();
     system_menu->add_separator();
-    system_menu->add_action(GUI::Action::create("&Help", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-help.png"), [](auto&) {
+    system_menu->add_action(GUI::Action::create("&Help", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-help.png").release_value_but_fixme_should_propagate_errors(), [](auto&) {
         Core::Process::spawn("/bin/Help"sv);
         Core::Process::spawn("/bin/Help"sv);
     }));
     }));
-    system_menu->add_action(GUI::Action::create("&Run...", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-run.png"), [](auto&) {
+    system_menu->add_action(GUI::Action::create("&Run...", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-run.png").release_value_but_fixme_should_propagate_errors(), [](auto&) {
         posix_spawn_file_actions_t spawn_actions;
         posix_spawn_file_actions_t spawn_actions;
         posix_spawn_file_actions_init(&spawn_actions);
         posix_spawn_file_actions_init(&spawn_actions);
         auto home_directory = Core::StandardPaths::home_directory();
         auto home_directory = Core::StandardPaths::home_directory();
@@ -267,7 +268,7 @@ NonnullRefPtr<GUI::Menu> build_system_menu()
         posix_spawn_file_actions_destroy(&spawn_actions);
         posix_spawn_file_actions_destroy(&spawn_actions);
     }));
     }));
     system_menu->add_separator();
     system_menu->add_separator();
-    system_menu->add_action(GUI::Action::create("E&xit...", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/power.png"), [](auto&) {
+    system_menu->add_action(GUI::Action::create("E&xit...", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/power.png").release_value_but_fixme_should_propagate_errors(), [](auto&) {
         auto command = ShutdownDialog::show();
         auto command = ShutdownDialog::show();
 
 
         if (command.size() == 0)
         if (command.size() == 0)

+ 7 - 3
Userland/Services/WindowServer/Compositor.cpp

@@ -807,14 +807,18 @@ bool Compositor::set_wallpaper_mode(const String& mode)
 
 
 bool Compositor::set_wallpaper(const String& path, Function<void(bool)>&& callback)
 bool Compositor::set_wallpaper(const String& path, Function<void(bool)>&& callback)
 {
 {
-    Threading::BackgroundAction<RefPtr<Gfx::Bitmap>>::construct(
+    Threading::BackgroundAction<ErrorOr<NonnullRefPtr<Gfx::Bitmap>>>::construct(
         [path](auto&) {
         [path](auto&) {
             return Gfx::Bitmap::try_load_from_file(path);
             return Gfx::Bitmap::try_load_from_file(path);
         },
         },
 
 
-        [this, path, callback = move(callback)](RefPtr<Gfx::Bitmap> bitmap) {
+        [this, path, callback = move(callback)](ErrorOr<NonnullRefPtr<Gfx::Bitmap>> bitmap) {
+            if (bitmap.is_error()) {
+                callback(false);
+                return;
+            }
             m_wallpaper_path = path;
             m_wallpaper_path = path;
-            m_wallpaper = move(bitmap);
+            m_wallpaper = bitmap.release_value();
             invalidate_screen();
             invalidate_screen();
             callback(true);
             callback(true);
         });
         });

Some files were not shown because too many files changed in this diff