diff --git a/Userland/Applications/ImageViewer/ViewWidget.cpp b/Userland/Applications/ImageViewer/ViewWidget.cpp index 5aff8e3b74..9ffbc3fe8c 100644 --- a/Userland/Applications/ImageViewer/ViewWidget.cpp +++ b/Userland/Applications/ImageViewer/ViewWidget.cpp @@ -32,6 +32,8 @@ ViewWidget::~ViewWidget() void ViewWidget::clear() { m_bitmap = nullptr; + if (on_image_change) + on_image_change(m_bitmap); m_path = {}; reset_view(); @@ -255,6 +257,8 @@ void ViewWidget::load_from_file(const String& path) m_decoded_image = decoded_image_or_error.release_value(); m_bitmap = m_decoded_image->frames[0].bitmap; + if (on_image_change) + on_image_change(m_bitmap); if (m_decoded_image->is_animated && m_decoded_image->frames.size() > 1) { const auto& first_frame = m_decoded_image->frames[0]; diff --git a/Userland/Applications/ImageViewer/ViewWidget.h b/Userland/Applications/ImageViewer/ViewWidget.h index 9c5ed9919a..9bc093a89f 100644 --- a/Userland/Applications/ImageViewer/ViewWidget.h +++ b/Userland/Applications/ImageViewer/ViewWidget.h @@ -42,6 +42,7 @@ public: Function on_scale_change; Function on_doubleclick; Function on_drop; + Function on_image_change; private: ViewWidget(); diff --git a/Userland/Applications/ImageViewer/main.cpp b/Userland/Applications/ImageViewer/main.cpp index 6475590927..31e2a59a73 100644 --- a/Userland/Applications/ImageViewer/main.cpp +++ b/Userland/Applications/ImageViewer/main.cpp @@ -205,7 +205,7 @@ int main(int argc, char** argv) widget.navigate(ViewWidget::Directions::Last); }); - auto full_sceen_action = GUI::CommonActions::make_fullscreen_action( + auto full_screen_action = GUI::CommonActions::make_fullscreen_action( [&](auto&) { widget.on_doubleclick(); }); @@ -238,6 +238,26 @@ int main(int argc, char** argv) GUI::Clipboard::the().set_bitmap(*widget.bitmap()); }); + widget.on_image_change = [&](const Gfx::Bitmap* bitmap) { + bool should_enable_image_actions = (bitmap != nullptr); + delete_action->set_enabled(should_enable_image_actions); + rotate_left_action->set_enabled(should_enable_image_actions); + rotate_right_action->set_enabled(should_enable_image_actions); + vertical_flip_action->set_enabled(should_enable_image_actions); + horizontal_flip_action->set_enabled(should_enable_image_actions); + desktop_wallpaper_action->set_enabled(should_enable_image_actions); + go_first_action->set_enabled(should_enable_image_actions); + go_back_action->set_enabled(should_enable_image_actions); + go_forward_action->set_enabled(should_enable_image_actions); + go_last_action->set_enabled(should_enable_image_actions); + zoom_in_action->set_enabled(should_enable_image_actions); + reset_zoom_action->set_enabled(should_enable_image_actions); + zoom_out_action->set_enabled(should_enable_image_actions); + if (!should_enable_image_actions) { + window->set_title("Image Viewer"); + } + }; + main_toolbar.add_action(open_action); main_toolbar.add_action(delete_action); main_toolbar.add_separator(); @@ -273,7 +293,7 @@ int main(int argc, char** argv) navigate_menu.add_action(go_last_action); auto& view_menu = menubar->add_menu("&View"); - view_menu.add_action(full_sceen_action); + view_menu.add_action(full_screen_action); view_menu.add_separator(); view_menu.add_action(zoom_in_action); view_menu.add_action(reset_zoom_action); @@ -291,6 +311,8 @@ int main(int argc, char** argv) if (path != nullptr) { widget.load_from_file(path); + } else { + widget.clear(); } window->show();