Skip to content

Conversation

@thenhnn
Copy link
Contributor

@thenhnn thenhnn commented Sep 14, 2025

DISCUSSION BELONGS TO #239

Feature requests will be marked as off topic. People subscribe to this PR to follow development, not to get a lot of spam in their inbox.

TODO

  • Fix macOS traffic lights positioning
  • Make split view tabs layout properly (there's padding between them)
  • Make new tab shortcut open new tab to the right/bottom by default
  • Add vertical tabs flag into helium://flags
  • Fix flaky Drag and Drop in tab strip
  • fix perceived horizontal padding in vertical mode
  • return the new tab button and make it look like a tab (with label and everything)
  • distinguish pinned tabs from regular tabs somehow, cuz rn it's impossible to tell that a tab is pinned
  • fix transparent bg on linux
  • test that the toolbar is not stretched on linux/windows and that the tab strip doesn't slip under it
  • reconsider new tab button's position
  • polish the new tab button
  • maybe add tab search button next to the new tab button, in the same row?
  • open new tabs at the start of the tab strip
  • fix weird tab opening animation
  • figure out why chromium's toolbar clashes with the system one and becomes unclickable
  • fix tab group label visual size (or its sizing box), it's currently smaller than a tab, so margin between a tab and a tab group feels uneven
  • make the tab group label take up the full width or make the parent holder have a background that shows up on hover, so that the press area is easy to distinguish
  • fix tabs overlap when dragging
  • fix tab group dragging state
  • write hit test logic for toolbar to allow window dragging by empty spots around buttons
  • fix width of infobar & bookmarks bar in vertical tabs mode
  • figure out why scroll feels weird
  • fix omnibox slipping down in filled screen & fullscreen modes on macos
  • add a pref for enabling vertical tabs from user ui, not flags
  • prevent tab search toolbar action button from popping up along with the main bubble when in vertical mode
  • fix toast's location (it's currently outside the window, bottom right). toast is a notification that shows up when you copy a link via cmd/ctrl+shift+c and try to close pinned tab with a keybind
  • maybe update opening/closing animation to not animate width?
  • fix tab group expand animation
  • fix link dropping orientation (rn it acts as if it's in horizontal mode)

@thenhnn
Copy link
Contributor Author

thenhnn commented Sep 17, 2025

@wukko PR should be mostly working, except for tab groups (their underline layout will be off) :3

image

@thenhnn
Copy link
Contributor Author

thenhnn commented Sep 17, 2025

Also DnD doesn't work for last tab in a strip, probably something to do with padding logic.

@Rebix
Copy link

Rebix commented Sep 18, 2025

this would be great
if i may suggest something the url bar in sidebar would be great🔥

@DragonSenseiGuy
Copy link

Attempt to implement vertical tabs in Helium. I reuse existing TabStrip and add a bunch of logical branches for horizontal/vertical mode for now, hopefully Chromium team will implement vertical tabs in proper way.

If this works and some other features like spaces, tab groups, pinned tabs and other features from Zen come here, I might just make the switch.

@DragonSenseiGuy
Copy link

but, maybe you actually need to modify source then, instead of just using patch files.

@wukko
Copy link
Member

wukko commented Sep 18, 2025

but, maybe you actually need to modify source then, instead of just using patch files.

… what do you think patch files are?

@DragonSenseiGuy
Copy link

but, maybe you actually need to modify source then, instead of just using patch files.

… what do you think patch files are?

Oh, so patch files are modification of source, but in a way that makes your codebase less messy?

I really don't know much about browsers in general.

@DragonSenseiGuy
Copy link

and btw is vertical tabs a consideration at this point in time?

@thenhnn
Copy link
Contributor Author

thenhnn commented Sep 19, 2025

Attempt to implement vertical tabs in Helium. I reuse existing TabStrip and add a bunch of logical branches for horizontal/vertical mode for now, hopefully Chromium team will implement vertical tabs in proper way.

If this works and some other features like spaces, tab groups, pinned tabs and other features from Zen come here, I might just make the switch.

Vanilla Chromium already has tab groups, pinned tabs and profiles (instead of spaces).

@thenhnn
Copy link
Contributor Author

thenhnn commented Sep 19, 2025

@Rebix: this would be great if i may suggest something the url bar in sidebar would be great🔥

I agree, but that would require even more changes to core Chromium layout and those changes will break on every new Chromium release.

@thenhnn
Copy link
Contributor Author

thenhnn commented Sep 19, 2025

@wukko I have a few questions:

  • Should I split vertical-tabs.patch into separate patches? (vertical-tabs-flag.patch, disable-compound-tab-container-experiment.patch, vertical-tabs-ui.patch)
  • Should I use toolbar background color for tab strip background or should it be visually different (like in this screenshot)?

@hassidan
Copy link

@thenhnn
Well done on the work!
I would like to mention that edge browser implemented the option to switch between horizontal to vertical.
I think they nailed it in the ui design aspect.
Maybe you can take insperation from there.
Hope it will get merged soon!

@thenhnn
Copy link
Contributor Author

thenhnn commented Sep 19, 2025

@hassidan, do you mean microsoft edge or something else?

@hassidan
Copy link

hassidan commented Sep 19, 2025

Yeah
https://www.microsoft.com/en-us/edge/features/vertical-tabs?ch=1&form=MA13FJ

@hassidan
Copy link

BTW, just saw that:
https://chromeunboxed.com/google-chrome-is-finally-getting-native-vertical-tabs/
Maybe will just need to wait 😅

@dumbmoron
Copy link
Member

dumbmoron commented Sep 19, 2025

BTW, just saw that: https://chromeunboxed.com/google-chrome-is-finally-getting-native-vertical-tabs/ Maybe will just need to wait 😅

fwiw this is completely broken rn and months out before release

@dumbmoron
Copy link
Member

  • Should I split vertical-tabs.patch into separate patches? (vertical-tabs-flag.patch, disable-compound-tab-container-experiment.patch, vertical-tabs-ui.patch)

@thenhnn yes please

@DragonSenseiGuy
Copy link

BTW, just saw that: https://chromeunboxed.com/google-chrome-is-finally-getting-native-vertical-tabs/ Maybe will just need to wait 😅

fwiw this is completely broken rn and months out before release

We should make our own implementation and then switching to vanilla vertical tabs will be an easy switch(assuming that we don't add a lot of features to the vertical tabs that vanilla wont have).

@samuellembke
Copy link

samuellembke commented Sep 21, 2025

I need this! if you get this working in a stable state I will paypal you 100€ hahaha

(And uninstall arc lol)

@samuellembke
Copy link

image

Thy work, though yet raw and unpolished, is fire.

Press on; it shall, like Gutenberg’s press, free the common man from Atlassian’s shackles and liberate their screen‑real estate.

@DragonSenseiGuy
Copy link

image

Thy work, though yet raw and unpolished, is fire.

Press on; it shall, like Gutenberg’s press, free the common man from Atlassian’s shackles and liberate their screen‑real estate.

lol, i agree, though I would not switch to it yet and quit arc. Zen is a solid option until this gets vertical tabs

@thenhnn
Copy link
Contributor Author

thenhnn commented Sep 22, 2025

lol, i agree, though I would not switch to it yet and quit arc. Zen is a solid option until this gets vertical tabs

Chromium provides much more stable and mature platform than Firefox imo. This PR is still draft and I'm still not sure how to fix some things. It's NOT final product.

@DragonSenseiGuy
Copy link

DragonSenseiGuy commented Sep 22, 2025

Chromium provides much more stable and mature platform than Firefox imo.

exactly why I want to switch to Helium after the features I want are here.

@wukko
Copy link
Member

wukko commented Sep 22, 2025

lol, i agree, though I would not switch to it yet and quit arc. Zen is a solid option until this gets vertical tabs

Chromium provides much more stable and mature platform than Firefox imo. This PR is still a draft and I'm still not sure how to fix some things. It's NOT final product.

you're doing an amazing job, please don't let these people get to you. both me and @dumbmoron are incredibly grateful that you're doing this for everyone in the first place, it takes a lot of talent and dedication. i'm very used to people just "consuming" instead of contributing literally anything at all, so this PR was honestly a shock to me. i'll help you fix things asap, right after the initial public release.

for everyone else: keep in mind that this is clearly WIP and also free labor done out of someone's kindness, don't be a dick and don't compare this to work of multi-trillion-dollar companies.

@DragonSenseiGuy
Copy link

lol, i agree, though I would not switch to it yet and quit arc. Zen is a solid option until this gets vertical tabs

Chromium provides much more stable and mature platform than Firefox imo. This PR is still a draft and I'm still not sure how to fix some things. It's NOT final product.

you're doing an amazing job, please don't let these people get to you. both me and @dumbmoron are incredibly grateful that you're doing this for everyone in the first place, it takes a lot of talent and dedication. i'm very used to people just "consuming" instead of contributing literally anything at all, so this PR was honestly a shock to me. i'll help you fix things asap, right after the initial public release.

It was not supposed to sound mean or anything, all I said was Zen is good until this properly gets vertical tabs. @thenhnn Is doing a great job with this PR.

@DragonSenseiGuy
Copy link

I appreciate this PR as I want to switch to Helium too. But, I cant without vertical tabs.

@wukko
Copy link
Member

wukko commented Sep 22, 2025

I want to switch to Helium too. But, I cant without vertical tabs.

skill issue honestly

@DragonSenseiGuy
Copy link

I want to switch to Helium too. But, I cant without vertical tabs.

skill issue honestly

I use helium for stuff that is much better on Chromium or things I want away from my Work stuff. Vertical tabs are too good to switch to horizontal for.

@wukko
Copy link
Member

wukko commented Sep 22, 2025

I use helium for stuff that is much better on Chromium

...everything?

zen is great, it's just that mozilla has lost the plot a while ago

@DragonSenseiGuy
Copy link

zen is great, it's just that mozilla has lost the plot a while ago

I know I wish they started off with chromium, but that's why I Like this project. Its Chromium

@wukko
Copy link
Member

wukko commented Oct 21, 2025

@thenhnn building should work now

@wukko
Copy link
Member

wukko commented Oct 21, 2025

added tab search & polished tab strip buttons btw

image

i should probably add a faint background to top action buttons here or come up with a different layout that feels better

@wukko
Copy link
Member

wukko commented Oct 21, 2025

@thenhnn can you test if scrolling works fine on linux? i'm not sure if it's a real issue or if it's just one of countless screen sharing artifacts, for me it constantly gets stuck and doesn't scroll properly. i feel like it has something to do with dragging detection, but i'll look into it more in the morning.

@thenhnn
Copy link
Contributor Author

thenhnn commented Oct 21, 2025

@thenhnn can you test if scrolling works fine on linux?

yep, both tab scrolling and content scrolling work.

what do you mean by "screen sharing artifacts"?

@wukko
Copy link
Member

wukko commented Oct 21, 2025

@thenhnn can you test if scrolling works fine on linux?

yep, both tab scrolling and content scrolling work.

what do you mean by "screen sharing artifacts"?

i use a remote mac to compile dev builds, therefore i also run them remotely and interact with helium via "screen sharing":

image
(it glitches out all the time, probably worst macos app ever made, but sometimes makes cool glitch art i guess)

however, i still think that choppy scrolling is a real issue, at least on macos, cuz this is how it behaves:

scroll.mp4

it doesn't scroll unless the mouse cursor is moving, so it's not really functional as-is

i'm also pretty sure that a bunch of log messages like this are related to scroll:

[4549:2843087:1021/183055.770986:ERROR:components/viz/service/surfaces/surface_manager.cc:472] Old/orphaned temporary reference to SurfaceId(FrameSinkId[](0, 171), LocalSurfaceId(1, 1, 40A7...))

@thenhnn
Copy link
Contributor Author

thenhnn commented Oct 21, 2025

it doesn't scroll unless the mouse cursor is moving, so it's not really functional as-is

hmm, it's smooth on linux for me.

@DragonSenseiGuy

This comment was marked as off-topic.

@joshuafhiggins
Copy link
Contributor

joshuafhiggins commented Oct 21, 2025

I'm not getting that error message on my end but the scrolling seems to break when the cursor leaves the bounds of the tab. I may be wrong on this but I think its using the same feature of being able to scroll the tab strip when there are too many tabs horizontally but in that case the layout there enforces that the cursor is always on a tab and so you can keep scrolling the tab strip. Because there are breaks in the hit bounds for tabs when vertical the hit check for whether the scroll should apply fails and stops abruptly.

Here's a video of trying to scroll at various cursor positions that illustrates this:

CleanShot.2025-10-21.at.19.07.48.mp4

@juanpablob

This comment was marked as off-topic.

@ctorney
Copy link

ctorney commented Oct 22, 2025

I couldn't reproduce the bug on 15.6.1 but I did reproduce it on 15.7.1 when the window does not occupy the full available space of the desktop (full screen but not the green-button fullscreen mode). Once the window is in this full screen state, the toolbar buttons work like normal and no longer act as a draggable surface for the window. But the code sent doesn't fix the issue when in the non-fullscreen state.

@joshuafhiggins I rebuilt from scratch to check this was the only change required and it does fix the toolbar for me. This is the full updated function in browser_non_client_view_frame_mac.mm

int BrowserNonClientFrameViewMac::NonClientHitTest(const gfx::Point& point) {
  int super_component = BrowserNonClientFrameView::NonClientHitTest(point);
  if (super_component != HTNOWHERE) {
    return super_component;
  }

  // If the point is within the toolbar, return HTCLIENT so toolbar buttons receive events.
  if (browser_view()->toolbar()) {
    gfx::Point point_in_toolbar = point;
    views::View::ConvertPointToTarget(this, browser_view()->toolbar(), &point_in_toolbar);
    if (browser_view()->toolbar()->HitTestPoint(point_in_toolbar)) {
      return HTCLIENT;
    }
  }

  // BrowserView::NonClientHitTest will return HTNOWHERE for points that hit
  // the native title bar. On Mac, we need to explicitly return HTCAPTION for
  // those points.
  const int component = frame()->client_view()->NonClientHitTest(point);
  return (component == HTNOWHERE && bounds().Contains(point)) ? HTCAPTION
                                                              : component;
}

@joshuafhiggins
Copy link
Contributor

int super_component = BrowserNonClientFrameView::NonClientHitTest(point);
if (super_component != HTNOWHERE) {
return super_component;
}

// If the point is within the toolbar, return HTCLIENT so toolbar buttons receive events.
if (browser_view()->toolbar()) {
gfx::Point point_in_toolbar = point;
views::View::ConvertPointToTarget(this, browser_view()->toolbar(), &point_in_toolbar);
if (browser_view()->toolbar()->HitTestPoint(point_in_toolbar)) {
return HTCLIENT;
}
}

// BrowserView::NonClientHitTest will return HTNOWHERE for points that hit
// the native title bar. On Mac, we need to explicitly return HTCAPTION for
// those points.
const int component = frame()->client_view()->NonClientHitTest(point);
return (component == HTNOWHERE && bounds().Contains(point)) ? HTCAPTION
: component;

This works now! Are you able to submit this as a PR against thehnn/verticaltabs? I can send instructions for using quilt if you'd like.

@wukko
Copy link
Member

wukko commented Oct 23, 2025

@joshuafhiggins @ctorney i can push this fix directly to this pr after testing it, should both of you be commit's authors? or should it only be @ctorney?

@thenhnn
Copy link
Contributor Author

thenhnn commented Oct 23, 2025

Are we sure that problem isn't somewhere deeper? It's still broken on Linux in the same way.

@wukko
Copy link
Member

wukko commented Oct 23, 2025

Are we sure that problem isn't somewhere deeper? It's still broken on Linux in the same way.

i'm fairly certain that the issue is indeed deeper, since Linux is affected too

@ctorney
Copy link

ctorney commented Oct 23, 2025

@joshuafhiggins @ctorney i can push this fix directly to this pr after testing it , should both of you be commit's authors? or should it only be @ctorney?

either way is totally fine with me but agree that this is a deeper issue and a better fix may resolve for macos 15.7 without needing this change.

will improve this in future commits cuz now you can't drag the window by empty spots in the toolbar (outside of buttons)
@wukko
Copy link
Member

wukko commented Oct 23, 2025

figured it out and pushed a proper cross-platform fix. gonna have to write hit test logic like in views/frame/tab_strip_region_view.cc to make it work the way i personally expect it to (allow window frame dragging by grabbing empty spots in the toolbar), but at least it's usable now!

@abue-ammar

This comment was marked as spam.

wukko added 3 commits October 26, 2025 00:10
now vertical tab groups match tabs and look beautiful
tabs no longer overlap each other, and tab group dragging now looks clean and nice :3

also refactored some related code
rafnov

This comment was marked as spam.

@wukko
Copy link
Member

wukko commented Oct 25, 2025

revamped tab group ui today:

image

also fixed dragging, multiple tabs no longer overlap each other and tab group dragging looks fine:

drag.mp4

+ 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.

@plyght

This comment was marked as off-topic.

@DragonSenseiGuy

This comment was marked as spam.

@wukko
Copy link
Member

wukko commented Oct 28, 2025

for the love of god, don’t comment anything here if it’s not related to development of this feature. this isn’t a chat, this is a pull request with a shitton of people following its development. you are spamming a bunch of people for no reason. have some common decency.

@imputnet imputnet deleted a comment from deebyy Oct 28, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FR]: Vertical Tabs