The problem
We are inconsistent about how, when, and where we use inline hover-only buttons on list and grid items:
- In some places, inline buttons are shown on hover (the clipboard widget; grid delegates in KCMs, the wallpaper chooser, and the GHNS window)
- In other places, inline buttons are always visible (Kirigami Card; Kirigami SwipeListItem; PlasmaExtras.ExpandableListItem; custom list items in the Baloo and Background Services KCMs, and Elisa's settings window; old QWidgets list views present in the KRunner and KWin Scripts KCMs; the notifications applet)
- In some places, the buttons' actions are of secondary importance ("show preview" in various appearance KCMs; "show in folder" in wallpaper chooser; "show barcode" in clipboard applet)
- In other places, the buttons' actions provide primary functionality ("connect/disconnect" in network applet; "lock/unlock" in Vaults applet; "delete" in clipboard applet)
Discussion
Each approach presents its own drawbacks:
Problems with inline hover-only buttons:
- Hover-only buttons present significant discoverability problems:
- Important primary actions that are hover-only are de-emphasized and easy to miss.
- In views with only one or two items, the user may not think to hover over those items and therefore will not discover the hidden buttons at all.
- Grid items with rich, complicated backgrounds can cause the buttons to visually disappear. This is especially true when the grid item's background itself depicts UI elements, as in several System Settings KCMs (Plasma Theme, Widget Theme, Window Decorations, Colors).
- Hover does not work at all on touch, so a separate UI is required. Simply making the buttons always visible on mobile does not work because this can cause content areas to be permanently covered with buttons. Being visible only when selected also does not generically work as some list and grid items do not have a distinct selection state or perform an action immediately upon being clicked/touched/selected. Also it is also not possible to perfectly separate device classes. A laptop with a touchscreen needs to have a usable touch UI, for example, even though it is not a mobile device or even a tablet.
- Appearing on hover really only works for buttons and is not suitable for complex controls; in the Baloo KCM for example, having the list items' comboboxes only appear on hover feels like it would be really weird, which means the button next to each combobox also has to be always visible, or else the combobox would change location on hover!
Problems with inline always-visible buttons:
- Always-visible buttons in lists with many items presents a vertical column of identical icons going down the right side, which looks visually heavy and rather ugly.
- Grid items need to be made larger in order to accommodate an area where always-visible buttons can live without permanently covering up content. This may cause them to present an information-sparse view that requires a lot of scrolling.
- Because the buttons are always visible, unless the list or grid item is huge, they must generally be icons-only, because text takes up entirely too much space, especially in grid items. This imposes significant limitations on the icons that can be used, because icons-only buttons need to have perfect iconography or else users generally do not manage to figure out what they do.
- If any always-visible inline buttons in list items must have text for some reason, they are highly likely to cause the list item's own text to be elided.
- less-important secondary actions are unnecessarily emphasized, contributing to the "heavy UI" effect.
Preliminary conclusions
We actually don't use inline hover buttons in as many places as I thought we did. It's mostly just the clipboard applet plus grid delegates in System Settings, GHNS, and the wallpaper chooser view.
Hover-only buttons are unusable on Plasma Mobile and with any touchscreen devices, and not compatible with complex controls in list items, so we need to come up with a non-hover solution for those anyway.
It may make sense to use hover-only buttons for actions that are only of secondary importance and are not needed at all on touchscreen interfaces--however this will be hard to integrate with other icons which are primary, and will not solve the problem of having ugly columns of icons in list views.
If our goal is consistency, we can't use hover anywhere because it can't accommodate all possible use cases, while always-visible inline buttons can.
Moving everything that currently has a hover-based UI to an always-visible-inline-button UI will not be a huge amount of technical work. The issues will be coming up with adequate designs that do not consume too much space or look super ugly, and figuring out how to avoid excessively upsetting people who really like hover buttons. :)