KWin contextmenus usability and window/app specific palettes
Martin Gräßlin
mgraesslin at kde.org
Sun Mar 19 15:31:46 UTC 2017
Am 2017-03-19 11:08, schrieb René J.V. Bertin:
> Hi,
>
> I've mentioned an issue where the window context menus drawn by
> QtCurve do not adopt a new colour palette correctly when I change a
> window's or application's palette from the session default.
>
> This happens both when I use a window or app KWin rule and when I
> change the application palette in an application (e.g. KDevelop). In
> the latter case the window titlebar colour changes to follow the
> selected palette, so I deduce that KWin detects the change and applies
> a dynamic form of an app-specific palette rule.
>
> What happens is that the contextmenu background is not changed, only
> the item (QAction) text is, but only in the contextmenus shown by
> KWin. When I change the entire application palette the application's
> contextmenus render correctly.
>
> This appears to be due to some interplay between KWin and QtCurve
> which I'd like to address.
>
> 3 questions that seem relevant:
> - does KWin indeed handle an in-app palette change as a dynamic
> app-specific palette rule?
> - where in KWin's source is this rule implemented (the actual palette
> change)?
> - is there anything that makes KWin's window contextmenus different
> from other context menus in other applications?
I need to explain the whole interaction:
1. Applications can use KColorSchemeManager to set a color scheme.
2. This gets installed as a dynamic property in the QGuiApplication
3. plasma-integration reads this dynamic property and installs an X
property on each created window
4. KWin reads the property and creates a QPalette from it
5. The palette gets stored for each window and is passed to the
decoration and to the useractions context menu
The steps 1-3 can be replaced by a window specific rule.
The code in question is in useractions.cpp in multiple places, just
search for setPalette.
Cheers
Martin
More information about the Plasma-devel
mailing list