diff --git a/Ladybird/AppKit/UI/TabController.mm b/Ladybird/AppKit/UI/TabController.mm index 5d03feba1e..b79aa6e774 100644 --- a/Ladybird/AppKit/UI/TabController.mm +++ b/Ladybird/AppKit/UI/TabController.mm @@ -139,6 +139,10 @@ enum class IsHistoryNavigation { - (void)reload:(id)sender { + if (m_history.is_empty()) { + return; + } + m_is_history_navigation = IsHistoryNavigation::Yes; auto url = m_history.current().url; @@ -179,6 +183,9 @@ enum class IsHistoryNavigation { auto* navigate_forward_button = (NSButton*)[[self navigate_forward_toolbar_item] view]; [navigate_forward_button setEnabled:m_history.can_go_forward()]; + + auto* reload_button = (NSButton*)[[self reload_toolbar_item] view]; + [reload_button setEnabled:!m_history.is_empty()]; } - (void)showTabOverview:(id)sender @@ -232,6 +239,7 @@ enum class IsHistoryNavigation { if (!_reload_toolbar_item) { auto* button = [self create_button:NSImageNameRefreshTemplate with_action:@selector(reload:)]; + [button setEnabled:NO]; _reload_toolbar_item = [[NSToolbarItem alloc] initWithItemIdentifier:TOOLBAR_RELOAD_IDENTIFIER]; [_reload_toolbar_item setView:button]; diff --git a/Ladybird/Qt/BrowserWindow.cpp b/Ladybird/Qt/BrowserWindow.cpp index e34c3fde61..5a8b437e73 100644 --- a/Ladybird/Qt/BrowserWindow.cpp +++ b/Ladybird/Qt/BrowserWindow.cpp @@ -401,6 +401,7 @@ BrowserWindow::BrowserWindow(Optional const& initial_url, Browser::CookieJa m_reload_action->setShortcuts(QKeySequence::keyBindings(QKeySequence::StandardKey::Refresh)); m_go_back_action->setEnabled(false); m_go_forward_action->setEnabled(false); + m_reload_action->setEnabled(false); if (initial_url.has_value()) { auto initial_url_string = qstring_from_ak_deprecated_string(initial_url->serialize()); diff --git a/Ladybird/Qt/Tab.cpp b/Ladybird/Qt/Tab.cpp index d430126ed5..babb00aad1 100644 --- a/Ladybird/Qt/Tab.cpp +++ b/Ladybird/Qt/Tab.cpp @@ -132,6 +132,7 @@ Tab::Tab(BrowserWindow* window, StringView webdriver_content_ipc_path, WebView:: m_window->go_back_action().setEnabled(m_history.can_go_back()); m_window->go_forward_action().setEnabled(m_history.can_go_forward()); + m_window->reload_action().setEnabled(!m_history.is_empty()); if (m_inspector_widget) m_inspector_widget->clear_dom_json(); @@ -587,6 +588,9 @@ void Tab::forward() void Tab::reload() { + if (m_history.is_empty()) + return; + m_is_history_navigation = true; view().load(m_history.current().url.to_deprecated_string()); } diff --git a/Userland/Applications/Browser/History.h b/Userland/Applications/Browser/History.h index 16fbfd0740..91d3ea26a8 100644 --- a/Userland/Applications/Browser/History.h +++ b/Userland/Applications/Browser/History.h @@ -35,6 +35,8 @@ public: bool can_go_forward(int steps = 1) { return (m_current + steps) < static_cast(m_items.size()); } void clear(); + bool is_empty() const { return m_items.is_empty(); } + private: Vector m_items; int m_current { -1 }; diff --git a/Userland/Applications/Browser/Tab.cpp b/Userland/Applications/Browser/Tab.cpp index a8127152a6..f08231be66 100644 --- a/Userland/Applications/Browser/Tab.cpp +++ b/Userland/Applications/Browser/Tab.cpp @@ -732,6 +732,9 @@ URL Tab::url() const void Tab::reload() { + if (m_history.is_empty()) + return; + load(url()); } @@ -762,6 +765,7 @@ void Tab::update_actions() return; window.go_back_action().set_enabled(m_history.can_go_back()); window.go_forward_action().set_enabled(m_history.can_go_forward()); + window.reload_action().set_enabled(!m_history.is_empty()); } ErrorOr Tab::bookmark_current_url()