Skip to content

Proposal: Defer tab resizing in order to maintain the close button under the pointer #2417

@piersdeseilligny

Description

@piersdeseilligny

Proposal: Tab resizing should be differed in order to maintain the close button under the pointer

Summary

When a tab is closed, the current behaviour is to instantly resize all the remaining tabs, as such:
Image from Gyazo
However, this makes it unnecessarily difficult to quickly close several tabs in a row, because the close button changes place as the tabs resize.

A more desirable behaviour can be found in Microsoft Edge, Chrome, Firefox, or in many other implementations of the "tab" concept:
Image from Gyazo
As you can see, the tabs only resize once the pointer has moved away. This makes it significantly easier to close multiple tabs in a row. The only time where this shouldn't be the case is when closing the last tab, in order to maintain the close button under the pointer:
Image from Gyazo

Additionally, on a somewhat related note, the resize animation causes the close button, label, and tab separators to overlap, which looks extremely unpolished:
image

Rationale

  • This is a fairly subtle behaviour, but one that users are extremely accustomed to (as it is implemented in all major browsers). Not having it is therefore extremely jarring.
  • Because it is implemented almost everywhere else, it makes WinUI seem unpolished.
  • It is most likely quite easy to implement.

Scope

Capability Priority
Only resize tabs after the pointer leaves the TabView, except if the closed tab is the last one Must
Take into account input method, in order to defer based on pointer movement when using a mouse, but use a time delay otherwise Could
Property to disable this behaviour (although it should be enabled by default) Could

Important Notes

  • Should the tabs be resized after the pointer moves outside the bounds of the TabView, or outside the bounds of the tab close button?
  • Should closing the last tab cause the other tabs to expand, so that the close button remains under the pointer regardless? This UX was followed in Internet Explorer:
    Image from Gyazo
    but does not exist in modern browsers.

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions