From 682f0ac93b91172e87d50bb65f3a7e4b7338de32 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 24 Apr 2020 22:28:05 +0200 Subject: [PATCH] Browser: React to favicon notifications and put favicons in the tabs! --- Applications/Browser/Tab.cpp | 5 +++++ Applications/Browser/Tab.h | 1 + Applications/Browser/main.cpp | 10 ++++++++++ 3 files changed, 16 insertions(+) diff --git a/Applications/Browser/Tab.cpp b/Applications/Browser/Tab.cpp index f4ff7ded85..02bd5b208b 100644 --- a/Applications/Browser/Tab.cpp +++ b/Applications/Browser/Tab.cpp @@ -154,6 +154,11 @@ Tab::Tab() on_title_change(m_title); }; + m_html_widget->on_favicon_change = [this](auto& bitmap) { + if (on_favicon_change) + on_favicon_change(bitmap); + }; + auto focus_location_box_action = GUI::Action::create("Focus location box", { Mod_Ctrl, Key_L }, [this](auto&) { m_location_box->select_all(); m_location_box->set_focus(true); diff --git a/Applications/Browser/Tab.h b/Applications/Browser/Tab.h index 3d910827e4..5eaccd3d5e 100644 --- a/Applications/Browser/Tab.h +++ b/Applications/Browser/Tab.h @@ -46,6 +46,7 @@ public: Function on_title_change; Function on_tab_open_request; Function on_tab_close_request; + Function on_favicon_change; const String& title() const { return m_title; } diff --git a/Applications/Browser/main.cpp b/Applications/Browser/main.cpp index b931b82946..8a0c99b840 100644 --- a/Applications/Browser/main.cpp +++ b/Applications/Browser/main.cpp @@ -85,6 +85,7 @@ int main(int argc, char** argv) widget.layout()->set_spacing(2); auto& tab_widget = widget.add(); + tab_widget.set_text_alignment(Gfx::TextAlignment::CenterLeft); tab_widget.set_container_padding(0); tab_widget.on_change = [&](auto& active_widget) { @@ -95,16 +96,25 @@ int main(int argc, char** argv) Browser::WindowActions window_actions(*window); + auto default_favicon = Gfx::Bitmap::load_from_file("/res/icons/16x16/filetype-html.png"); + ASSERT(default_favicon); + Function create_new_tab; create_new_tab = [&](auto url, auto activate) { auto& new_tab = tab_widget.add_tab("New tab"); + tab_widget.set_tab_icon(new_tab, default_favicon); + new_tab.on_title_change = [&](auto title) { tab_widget.set_tab_title(new_tab, title); if (tab_widget.active_widget() == &new_tab) window->set_title(String::format("%s - Browser", title.characters())); }; + new_tab.on_favicon_change = [&](auto& bitmap) { + tab_widget.set_tab_icon(new_tab, &bitmap); + }; + new_tab.on_tab_open_request = [&](auto& url) { create_new_tab(url, true); };