notifications for non-plasmashell components

David Edmundson david at davidedmundson.co.uk
Wed Apr 1 10:32:40 BST 2020


On Wed, Apr 1, 2020 at 10:13 AM Bhushan Shah <bshah at mykolab.com> wrote:
>
> Morning,
>
> I was looking into notifications for plasma mobile lockscreen from last
> few days, current set of patches are in kscreenlocker, plasma-workspace,
> and plasma-phone-components.
>
> - https://phabricator.kde.org/D28455
> - https://phabricator.kde.org/D28454
> - https://invent.kde.org/kde/plasma-phone-components/-/merge_requests/68
>
> Current solution is rather very simple,
>
> - On getting a new notification, notification server checks for hint
>   which says if it should be on lockscreen?
> - If it is supposed to be on lockscreen, it talks to greeter dbus
>   interface and notifies about new notification or closed notification
> - greeterapp notifies the lockscreen theme using root.notifications
>   property.
>
> While this is implemented like this, I and Kai discussed several ideas
> on how to implement this best so that same solution can be useful for,
>
> - KDE Connect
> - Lockscreen
> - Latte dock
> - Sidebar/dashboard effects in store etc
>
> One suggestion which came up was API for notification handler plugins,
> idea being,
>
> - Notification server loads all the notificationhandler plugins
> - In KCM users would have option of selecting if appX notifications
>   should be handled by handlerY.
>
> Roughly something like,
>
> - Dialer
>     - [x] Show in lockscreen
>     - [x] Show in KDE Connnect
>     - [x] Show in Latte Dock
>     - [x] Show in applet
> - KMail
>     - [ ] Show in lockscreen
>     - [ ] Show in KDE connect
>     - [x] Show in Latte Dock
>     - [x] Show in applet
> .. etc .. (note that this config is something which might need some
> thinking from VDG/Usability teams)

I don't understand the case of latte dock being different to the applet.

But generally seems sensible. Though obviously this only works if the
notification comes from a KDE source.
>
> - Depending on this configuration, notification server would call
>   dispatch operation in plugin to send notification to the handler.
> - Handler can then talk to the application in either way they prefer
>   (dbus/wayland protocol/fd/whatever).

I don't think you need plugins if you have a DBus API.
Bhushan's just made a generic DBus interface for "watching"
notifications. I would make all handlers implement that.
Then the notification server just needs a list of servers+paths which
implement that notification watcher interface.

> There's another problem we discussed today regarding the current
> implementation of notification-on-lockscreen. Currently once greeter
> gets a notification from notification server, it would need some more
> boilerplate code to wrap the notifications in model and expose the
> notification features to the user interface. While it would be simple
> enough to add QALM/QAIM in greeter code base, this ultimately would end
> up being very bad copy of the libnotificationmanager and that too with
> incomplte features.
>
> Kai came up with solution to this problem which involves allowing
> NotificationsModel to depend on different implementation of source
> model then the current one. This source model would be listening for new
> notifications on greeter interface instead of directly talking with
> notification server.
>
> However we can't directly use the libnotificationmanager in greeter
> due to dependency loop, I can add very simple QAIM/QALM in the greeter
> source code, but that would essentially mean adding API for theme
> developers, and I am hesistent to commit to API since it is a) not
> future complete and b) there's better solution possible.
>
You can't at build time, you can use it at runtime. We use p-w parts
in the greeter already.

As long as the plugin is QML instantiatible, problem solved.  It might
need a bit more fleshing out of the lib to accommodate that.

David


More information about the Plasma-devel mailing list