Skip to content

Fix Units::roundToIconSize() returning incorrect sizes with non-Qt scaling

When not using Qt Scaling (testable by using the Wayland session or setting PLASMA_USE_QT_SCALING=1 on X11), all pixel sizes are unscaled. E.g. a 22x22 SmallMedium icon must be expressed as 44x44 to Plasma, because it is not aware of Qt's scaling.

The Units::roundToIconSize() function was failing to do this, thus returning incorrectly small icon sizes. For example at 200% scale, you would ask it for the correct icon for a 44px physical area, expecting a SmallMedium icon--but internally the function would would find that 44 is lower than 48 (unscaled Large size), and give you the next smallest size, which is Medium. Unscaled Medium is 32px, which is visually equivalent to a 16px scaled icon. So you would get a Small icon when you expected a SmallMedium one.

Due to quirks of how the icon sizes increase at the larger end, correct results were accidentally returned for larger icon sizes. However small and smallMedium icons were always incorrectly getting the next smallest size instead, most commonly manifesting as ToolButtons and System Tray icons being too small.

This commit fixes the problem by scaling all of the icon sizes internally both for the purposes of comparison and returning a final value--but only when not using Qt scaling.

The net result: on X11 with 200% scaling, ToolButtons and System Tray icons are all finally sized properly:

Screenshot_20210726_145412

There is no effect in the Plasma Wayland session or the X11 session when PLASMA_USE_QT_SCALING=1 is set.

BUG: 390147 BUG: 381794 FIXED-IN: 5.85

Merge request reports