The system actions model recently changed behavior to always present all
possible actions, with `AbstractEntry::isValid` driving the model role
`Kicker::DisabledRole` so that views can e.g. grey out unavailable
actions.
This was perceived as a regression by users who are annoyed at e.g.
`Hibernate` being visible when their system setup precludes it more or
less permanently.
This patch reverts this behavior.
Note that the dynamic approach we had permanently wasn't very great
anyway, as the associated favorites models would remove entries when
they became invalid, and they wouldn't come back automatically when the
entry were to become valid again. In effect that means when you added one
of these actions to e.g. the Kicker sidebar and it became unavailable
it would disappear until re-added anyways.
I can imagine use cases where dynamic behavior would be useful to have -
let's say disabling Shutdown/Reboot while a critical system update is
being performed. But in that case we'd need to fix the favorites
behavior and add some way to inform the user why the action is disabled
for a good user experienced anyhow.
BUG:426645
This patch adds a new enabled role to kicker items instead of creating
and deleting them if they're not available due to configuration.
It ports to the new session code in libkworkspace dropping our need for
KDE4Support.
From: D20237
* Not just apps, also documents and contacts can now be added
to the favorites. All types of content have their full context
menu action list available also in the favorites sidebar.
* Contact favorites use the contact photo as icon, with a circular
alpha mask and the presence status icon as overlay badge.
* Adding/removing favorites from context menus now works every-
where, e.g. also in KRunner-based search results.
* Far fewer actions now cause a full rebuild of the model tree
and instead only delta updates, as a side-effect of adding a
mechanism for this to e.g. handle status changes for contact
items.
* Various bugs around hiding/unhiding apps got fixed.
* Lots of code cleanup + less coupling all around.
This version is a mostly-from-scratch reimplementation of
the Plasma 1 version.
Some minor-in-scope loose ends are left, both external and
internal to the code; check TODO for whether your issue is
already known.