From 9f58624802bcef7483e2de001fffb7d760a9d244 Mon Sep 17 00:00:00 2001 From: devashish Date: Sat, 27 Jun 2020 14:34:43 +0530 Subject: [PATCH] DisplaySettings: Allow setting wallpapers from outside /res/wallpapers Ideally, we would copy the file to `/res/wallpapers`, add an entry to `ComboBox` model and set the index to this entry. I didn't want to touch anything outside of `DisplaySettings`, so this is more of a workaround :^) --- Applications/DisplaySettings/DisplaySettings.cpp | 9 +++++++-- Applications/DisplaySettings/MonitorWidget.cpp | 8 ++++++-- Applications/DisplaySettings/MonitorWidget.h | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Applications/DisplaySettings/DisplaySettings.cpp b/Applications/DisplaySettings/DisplaySettings.cpp index 96610be6f3..459e7fa9cf 100644 --- a/Applications/DisplaySettings/DisplaySettings.cpp +++ b/Applications/DisplaySettings/DisplaySettings.cpp @@ -125,6 +125,11 @@ void DisplaySettingsWidget::create_frame() m_wallpaper_combo->set_model(*ItemListModel::create(m_wallpapers)); m_wallpaper_combo->on_change = [this](auto& text, const GUI::ModelIndex& index) { String path = text; + if (m_monitor_widget->set_wallpaper(path)) { + m_monitor_widget->update(); + return; + } + if (index.row() == 0) { path = ""; } else { @@ -136,8 +141,8 @@ void DisplaySettingsWidget::create_frame() } } - this->m_monitor_widget->set_wallpaper(path); - this->m_monitor_widget->update(); + m_monitor_widget->set_wallpaper(path); + m_monitor_widget->update(); }; auto& button = wallpaper_selection_container.add(); diff --git a/Applications/DisplaySettings/MonitorWidget.cpp b/Applications/DisplaySettings/MonitorWidget.cpp index 71d6651593..d4e8b1e6cc 100644 --- a/Applications/DisplaySettings/MonitorWidget.cpp +++ b/Applications/DisplaySettings/MonitorWidget.cpp @@ -33,10 +33,14 @@ MonitorWidget::MonitorWidget() m_monitor_rect = { 8, 9, 320, 180 }; } -void MonitorWidget::set_wallpaper(String path) +bool MonitorWidget::set_wallpaper(String path) { m_desktop_wallpaper_path = path; - m_desktop_wallpaper_bitmap = Gfx::Bitmap::load_from_file(path); + auto bitmap_ptr = Gfx::Bitmap::load_from_file(path); + if (!bitmap_ptr) + return false; + m_desktop_wallpaper_bitmap = bitmap_ptr; + return true; } String MonitorWidget::wallpaper() diff --git a/Applications/DisplaySettings/MonitorWidget.h b/Applications/DisplaySettings/MonitorWidget.h index fa0a5dbbf8..d9695d11fa 100644 --- a/Applications/DisplaySettings/MonitorWidget.h +++ b/Applications/DisplaySettings/MonitorWidget.h @@ -35,7 +35,7 @@ class MonitorWidget final : public GUI::Widget { public: MonitorWidget(); - void set_wallpaper(String path); + bool set_wallpaper(String path); String wallpaper(); void set_wallpaper_mode(String mode);