## Adds a copy of the bookmark bar into the toolbar to the right of the locationbar # # 'Other Bookmarks' and the Reading List are not shown. # You'll probably want to hide the existing bookmark bar through the right-click menu # as well as launch with --bookmark-bar-ntp=never # The location can be changed by moving the position in chrome/browser/ui/views/toolbar/toolbar_view.cc --- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc @@ -604,10 +604,11 @@ END_METADATA // BookmarkBarView ------------------------------------------------------------ -BookmarkBarView::BookmarkBarView(Browser* browser, BrowserView* browser_view) +BookmarkBarView::BookmarkBarView(Browser* browser, BrowserView* browser_view, bool isbbar) : AnimationDelegateViews(this), browser_(browser), - browser_view_(browser_view) { + browser_view_(browser_view), + isbbar_(isbbar) { SetID(VIEW_ID_BOOKMARK_BAR); Init(); @@ -873,7 +874,7 @@ void BookmarkBarView::Layout() { if (!model_) return; - int x = kBookmarkBarHorizontalMargin; + int x = isbbar_ ? 0 : kBookmarkBarHorizontalMargin; int width = View::width() - 2 * kBookmarkBarHorizontalMargin; const int button_height = GetLayoutConstant(BOOKMARK_BAR_BUTTON_HEIGHT); @@ -949,7 +950,7 @@ void BookmarkBarView::Layout() { } if (model_->loaded() && !model_->bookmark_bar_node()->children().empty()) { - bool last_visible = x < max_x; + bool last_visible = x < max_x || isbbar_; size_t button_count = bookmark_buttons_.size(); for (size_t i = 0; i <= button_count; ++i) { if (i == button_count) { @@ -971,6 +972,10 @@ void BookmarkBarView::Layout() { gfx::Size pref = child->GetPreferredSize(); int next_x = x + pref.width() + bookmark_bar_button_padding; last_visible = next_x < max_x; + if (isbbar_) { + next_x -= bookmark_bar_button_padding; + last_visible = true; + } child->SetVisible(last_visible); // Only need to set bounds if the view is actually visible. if (last_visible) @@ -979,6 +984,18 @@ void BookmarkBarView::Layout() { } } + if (isbbar_ && !bookmark_buttons_.empty()) { + bookmarks_separator_view_->SetBounds(x, (View::height() - bookmarks_separator_pref.height()) / 2, + bookmarks_separator_pref.width(), bookmarks_separator_pref.height()); + bookmarks_separator_view_->SetVisible(true); + gfx::Size prefsize(x + bookmarks_separator_pref.width(), GetLayoutConstant(BOOKMARK_BAR_HEIGHT)); + if (prefsize != GetPreferredSize()) { + SetPreferredSize(prefsize); + PreferredSizeChanged(); + } + return; + } + // Layout the right side buttons. x = max_x + bookmark_bar_button_padding; --- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h +++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h @@ -76,7 +76,7 @@ class BookmarkBarView : public views::Ac METADATA_HEADER(BookmarkBarView); // |browser_view| can be NULL during tests. - BookmarkBarView(Browser* browser, BrowserView* browser_view); + BookmarkBarView(Browser* browser, BrowserView* browser_view, bool isbbar = false); BookmarkBarView(const BookmarkBarView&) = delete; BookmarkBarView& operator=(const BookmarkBarView&) = delete; ~BookmarkBarView() override; @@ -477,6 +477,8 @@ class BookmarkBarView : public views::Ac // Returns WeakPtrs used in GetDropCallback(). Used to ensure // safety if `model_` is mutated after getting the callback. base::WeakPtrFactory drop_weak_ptr_factory_{this}; + + bool isbbar_ = false; }; #endif // CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_BAR_VIEW_H_ --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc @@ -3388,6 +3388,7 @@ bool BrowserView::MaybeShowBookmarkBar(W // Don't change the visibility of the BookmarkBarView. BrowserViewLayout // handles it. bookmark_bar_view_->SetPageNavigator(GetActiveWebContents()); + toolbar_->SetBookmarkPageNavigator(); // Update parenting for the bookmark bar. This may detach it from all views. bool needs_layout = false; --- a/chrome/browser/ui/views/toolbar/toolbar_view.cc +++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc @@ -38,6 +38,7 @@ #include "chrome/browser/ui/toolbar/chrome_labs_prefs.h" #include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/view_ids.h" +#include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" #include "chrome/browser/ui/views/bookmarks/bookmark_bubble_view.h" #include "chrome/browser/ui/views/extensions/extension_popup.h" #include "chrome/browser/ui/views/extensions/extensions_side_panel_controller.h" @@ -332,6 +333,8 @@ void ToolbarView::Init() { location_bar_ = AddChildView(std::move(location_bar)); + bbar_ = AddChildView(std::make_unique(browser_, browser_view_, true)); + if (extensions_container) extensions_container_ = AddChildView(std::move(extensions_container)); @@ -502,6 +505,10 @@ bool ToolbarView::GetAppMenuFocused() co return app_menu_button_ && app_menu_button_->HasFocus(); } +void ToolbarView::SetBookmarkPageNavigator() { + bbar_->SetPageNavigator(GetWebContents()); +} + void ToolbarView::ShowIntentPickerBubble( std::vector app_info, bool show_stay_in_chrome, --- a/chrome/browser/ui/views/toolbar/toolbar_view.h +++ b/chrome/browser/ui/views/toolbar/toolbar_view.h @@ -124,6 +124,8 @@ class ToolbarView : public views::Access // Returns true if the app menu is focused. bool GetAppMenuFocused() const; + void SetBookmarkPageNavigator(); + void ShowIntentPickerBubble( std::vector app_info, bool show_stay_in_chrome, @@ -275,6 +277,7 @@ class ToolbarView : public views::Access HomeButton* home_ = nullptr; CustomTabBarView* custom_tab_bar_ = nullptr; LocationBarView* location_bar_ = nullptr; + BookmarkBarView* bbar_ = nullptr; ExtensionsToolbarContainer* extensions_container_ = nullptr; ChromeLabsButton* chrome_labs_button_ = nullptr; media_router::CastToolbarButton* cast_ = nullptr;