Subject: bug#37667: 27.0.50; Tab Bar display problems with more than 5 tabs

From: Eli Zaretskii <[email-masked]>
Date: Sat, 02 Nov 2019 21:28:44 +0200

> From: Juri Linkov <[email-masked]>
> Cc: [email-masked]
> Date: Sat, 02 Nov 2019 21:06:05 +0200
> 
> >  . Always display both of them, but make one or both of them do
> >    nothing when scrolling in that direction makes no sense.
> 
> Or maybe to disable (visually using a grey shadow) the button
> that can't do scrolling?

Yes, possible.

> >  . Display one arrow on the left and another on the right, and decide
> >    whether or not to display the right one in display_mode_line,
> >    depending on whether you hit (last_visible_x - arrow_width) while
> >    producing glyphs.
> 
> Do you mean displaying the arrow on the right using fringe?

No, I meant displaying them like you do now, just move the right arrow
to the right of the last visible tab.

> > The first one sounds the easiest to me.
> 
> The first one is easy to implement, but it can't do auto-scrolling,
> i.e. when the current tab becomes invisible, automattically reduce
> the number of tabs in front of it to make it visible.

Is that such a serious problem?  Browsers don't auto-scroll.

> > If you want to implement the last one, then you need a function
> > that calls display_mode_line and returns a truncation indication
> > depending on the state of it.glyph_row->truncated_on_right_p.  The
> > simplest way to achieve that is to add a new argument to
> > display_mode_line, which, when non-NULL, will be a pointer to the flag
> > where to return to the caller the truncation indication; then make
> > display_mode_line set that flag according to the truncated_on_right_p
> > flag.
> 
> Modifying display_mode_line is one way.  I thought maybe simpler
> would be to copy some relevant code from display_mode_line
> to a new function.

I think you end up copying almost all of it.  But if I'm wrong, sure,
that's possible.