Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
f08bdc8
init: basic layout for tab strip
thenhnn Sep 14, 2025
d45c0ac
feat: basic tabs layout
thenhnn Sep 14, 2025
ff62d86
feat: actually working tab strip, but without dnd
thenhnn Sep 15, 2025
04322ec
fix: show tab bubble to left when vertical tabs are enabled
thenhnn Sep 15, 2025
d1b794c
fix: working DND!
thenhnn Sep 17, 2025
d5136b4
fix: split patches
thenhnn Sep 21, 2025
2fb82b1
fix: tab groups
thenhnn Sep 21, 2025
f404919
fix: tab groups
thenhnn Sep 22, 2025
3ab7123
fix: offset contents container so dialogs are positioned properly
thenhnn Sep 24, 2025
ddb2b19
fix: change corner radius of split view tabs
thenhnn Sep 25, 2025
3a62375
fix: make macOS traffic lights position properly
thenhnn Sep 26, 2025
7858bf0
fix: make fullscreen work properly
thenhnn Sep 27, 2025
f68e1de
fix: remove debug log
thenhnn Sep 27, 2025
f04be15
patches: refresh
thenhnn Oct 2, 2025
dbb643e
fix compilation
thenhnn Oct 3, 2025
097f5a8
fix: make split tabs look better, add top padding for tabs
thenhnn Oct 5, 2025
8143626
fix: open tabs to the right when vertical tabs are enabled
thenhnn Oct 5, 2025
e3686fa
refresh
thenhnn Oct 7, 2025
7fb91ca
helium/ui/vertical-tabs: add a proper feature flag
wukko Oct 9, 2025
2412c44
merge: helium 0.5.5 from upstream
wukko Oct 9, 2025
348235e
helium/ui/layout-constants: refactor to eliminate duplication
wukko Oct 9, 2025
8d93ee5
helium/ui/vertical-tabs: fix tab "ripping out", reposition toolbar
wukko Oct 9, 2025
d79cb74
helium/ui/vertical-tabs: fix vertical tabs' top offset
wukko Oct 9, 2025
21e689c
helium/ui/vertical-tabs: fix screwed up formatting
wukko Oct 9, 2025
24397dd
helium/ui/vertical-tabs: fix visuals, add new tab button
wukko Oct 9, 2025
3ab6709
fix conflict
thenhnn Oct 18, 2025
5f37e8d
patches: refresh vertical-tabs/feature-flag.patch
thenhnn Oct 18, 2025
3254689
feat: add unpin button (doesn't allow to unpin buttons yet)
thenhnn Oct 19, 2025
1dd1654
fix: offset title so it doesnt overlap with unpin button
thenhnn Oct 19, 2025
e4578b8
fix: background on linux
thenhnn Oct 19, 2025
d21ff1e
helium/ui/vertical-tabs: split ui.patch into smaller patches
wukko Oct 21, 2025
8858ac7
helium/ui/vertical-tabs: unpin button func, fix stuck "unpinning" state
wukko Oct 21, 2025
a25ddb5
helium/ui/vertical-tabs: add tab search button
wukko Oct 21, 2025
49bc80e
helium/ui/vertical-tabs: add new tabs to the start of the tab strip
wukko Oct 21, 2025
8c7c0d9
helium/ui/vertical-tabs/tab-strip: add missing tab_strip_region_view.h
wukko Oct 21, 2025
1d2f9ef
helium/ui/vertical-tabs: smoother open/close animations
wukko Oct 21, 2025
19e1815
helium/ui/vertical-tabs: initial fix for toolbar click events
wukko Oct 23, 2025
ceea26c
helium/ui/vertical-tabs/tab-search: refresh
wukko Oct 23, 2025
2cb22bc
helium/ui/vertical-tabs: new tab groups ui
wukko Oct 25, 2025
68122d5
helium/ui/vertical-tabs/tab-groups: fix color indicator alignment
wukko Oct 25, 2025
226d3c2
helium/ui/vertical-tabs/ui: fix multiple tab dragging
wukko Oct 25, 2025
95069dc
helium/ui/vertical-tabs/tab-strip: disable horizontal scrollbar
wukko Oct 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions patches/helium/ui/vertical-tabs/tab-container.patch
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@
// During animations, our preferred width tightly hugs the current bounds of
// our children.
std::optional<int> preferred_width = GetMidAnimationTrailingX();
@@ -1216,6 +1278,22 @@ void TabContainerImpl::AnimateScrollToSh
@@ -1216,6 +1278,21 @@ void TabContainerImpl::AnimateScrollToSh
tab_scrolling_animation_->Start();
}

Expand All @@ -157,7 +157,6 @@
+ tab_scrolling_animation_->Stop();
+ }
+
+
+ gfx::Rect start_rect(0, start_edge, 0, 0);
+ gfx::Rect target_rect(0, target_edge, 0, 0);
+
Expand All @@ -170,7 +169,7 @@
void TabContainerImpl::AnimateTabSlotViewTo(TabSlotView* tab_slot_view,
const gfx::Rect& target_bounds) {
// If we don't own the tab, let our controller handle it.
@@ -1285,23 +1363,42 @@ void TabContainerImpl::StartInsertTabAni
@@ -1285,23 +1362,42 @@ void TabContainerImpl::StartInsertTabAni
gfx::Rect bounds = GetTabAtModelIndex(model_index)->bounds();
bounds.set_height(GetLayoutConstant(TAB_STRIP_HEIGHT));

Expand Down Expand Up @@ -219,7 +218,7 @@
GetTabAtModelIndex(model_index)->SetBoundsRect(bounds);

// Animate in to the full width.
@@ -1315,7 +1412,9 @@ void TabContainerImpl::StartRemoveTabAni
@@ -1315,7 +1411,9 @@ void TabContainerImpl::StartRemoveTabAni
UpdateIdealBounds();
if (in_tab_close_ && GetTabCount() > 0 &&
override_available_width_for_tabs_ >
Expand All @@ -230,7 +229,7 @@
// Tab closing mode is no longer constraining tab widths - they're at full
// size. Exit tab closing mode so that it doesn't artificially inflate our
// bounds.
@@ -1365,17 +1464,21 @@ gfx::Rect TabContainerImpl::GetTargetBou
@@ -1365,17 +1463,21 @@ gfx::Rect TabContainerImpl::GetTargetBou

// Compute the target bounds for animating this tab closed. The tab's left
// edge should stay joined to the right edge of the previous tab, if any.
Expand Down Expand Up @@ -262,7 +261,7 @@

return target_bounds;
}
@@ -1650,7 +1753,8 @@ bool TabContainerImpl::ShouldTabBeVisibl
@@ -1650,7 +1752,8 @@ bool TabContainerImpl::ShouldTabBeVisibl
// N.B. This is separate from the tab being potentially scrolled offscreen -
// this solely determines whether the tab should be clipped for the
// pre-scrolling overflow behavior.
Expand All @@ -272,7 +271,7 @@
return true;
}

@@ -1819,4 +1923,5 @@ bool TabContainerImpl::IsValidModelIndex
@@ -1819,4 +1922,5 @@ bool TabContainerImpl::IsValidModelIndex

BEGIN_METADATA(TabContainerImpl)
ADD_READONLY_PROPERTY_METADATA(int, AvailableWidthForTabContainer)
Expand Down
11 changes: 7 additions & 4 deletions patches/helium/ui/vertical-tabs/tab-strip.patch
Original file line number Diff line number Diff line change
Expand Up @@ -707,7 +707,7 @@
#include "chrome/browser/ui/views/tabs/tab_strip.h"
#include "chrome/browser/ui/views/tabs/tab_strip_controller.h"
#include "chrome/browser/ui/views/tabs/tab_strip_scrolling_overflow_indicator_strategy.h"
@@ -105,15 +106,25 @@ TabStripScrollContainer::TabStripScrollC
@@ -105,15 +106,27 @@ TabStripScrollContainer::TabStripScrollC
tab_strip->SetAvailableWidthCallback(
base::BindRepeating(&TabStripScrollContainer::GetTabStripAvailableWidth,
base::Unretained(this)));
Expand All @@ -727,6 +727,8 @@
+ if (tabs::AreHeliumVerticalTabsEnabled()) {
+ scroll_view->SetVerticalScrollBarMode(
+ views::ScrollView::ScrollBarMode::kEnabled);
+ scroll_view->SetHorizontalScrollBarMode(
+ views::ScrollView::ScrollBarMode::kDisabled);
Copy link
Contributor

@joshuafhiggins joshuafhiggins Oct 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On macOS, with "Show scroll bars" set to "Always", the bar is still hidden but is now active as opposed to being completely disabled with "Automatically based on mouse or trackpad". This behavior also existed before this change but with the horizontal scrollbar showing.

+ } else {
+ scroll_view->SetHorizontalScrollBarMode(
+ views::ScrollView::ScrollBarMode::kHiddenButEnabled);
Expand All @@ -736,16 +738,17 @@
scroll_view->SetContents(std::move(tab_strip));

overflow_indicator_strategy_ =
@@ -134,7 +145,7 @@ TabStripScrollContainer::TabStripScrollC
@@ -134,7 +147,8 @@ TabStripScrollContainer::TabStripScrollC
base::BindRepeating(&TabStripScrollContainer::OnContentsScrolledCallback,
base::Unretained(this)));

- if (!base::FeatureList::IsEnabled(features::kTabScrollingButtonPosition)) {
+ if (!base::FeatureList::IsEnabled(features::kTabScrollingButtonPosition) || tabs::AreHeliumVerticalTabsEnabled()) {
+ if (!base::FeatureList::IsEnabled(features::kTabScrollingButtonPosition) ||
+ tabs::AreHeliumVerticalTabsEnabled()) {
leading_scroll_button_ = nullptr;
trailing_scroll_button_ = nullptr;
overflow_view_ = AddChildView(
@@ -235,6 +246,10 @@ int TabStripScrollContainer::GetTabStrip
@@ -235,6 +249,10 @@ int TabStripScrollContainer::GetTabStrip
return overflow_view_->GetAvailableSize(scroll_view_).width().value();
}

Expand Down