Rather than relying on `Plasmoid` from deep down in `NotificationItem` code,
which is not possible when run inside the popup.
In `Globals` we have access to our own `plasmoid` property directly.
There is no conceivable use case for turning this off, and the UI is
being removed in https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/447.
So let's remove the backend code too, or else anyone who for some reason
had turned it off would be left without a GUI method of turning it back
on again.
This allows a client to mark a notification as "resident" which means it will
not be closed by the sever when expired or an action is invoked, thus transferring
full control over notification life time to the client.
A notification popup still times out as normal (unless persistent, of course)
but the notification remains alive until the client revokes it or a user
explicitly closes it.
It is opt-in so that a client can expect the notification lifetime to be
indefinite and explicitly close it when an action is invoked on its end.
I've seen popup being null when spamming notification removal.
Perhaps when the model already yanked the item under us before the Instantiator
had a chance to update its count... Not sure about the implications, but it
silences a warning I observed.
Qt 5.14 introduced new restoreMode mandatory property. Fix warnings like this one:
QML Binding: Not restoring previous value because restoreMode has not been set.
This begins the process of porting plasma-workspace to PlasmaComponents3. At
this point, only the relatively easy work is done. Every file not ported
now has been given the reason for still using PC2 in a comment on the import
line so you can see at a glance what the blocker is by running
`grep -r "org.kde.plasma.components 2.0"` in the repo.
Everything is tested and there are no breakages or functional regressions. In
the process, a few unused imports are removed.
Here are the remaining PC3 omissions blocking what's left from getting easily
ported:
- No Highlight
- No ListItem
- No PageStack
- No ContextMenu
- No QueryDialog
- No ModelContextMenu
- TabBar has no left and right tab states
- ToolButton has no built-in method to show a menu when clicked
When calculating the popup location for center alignment, we added the
popupEdgeDistance to it, which resulted in the notifications offset by
units.largeSpacing*2 to right.
It does not make sense to add popupEdgeDistance when notification is
aligned in horizontal center.
The available screen rect for notification popups is horizontally restricted by the panel they're in.
This way when you have a centered panel, the notification popup are "emitted from the panel" rather
than floating in mid air. The horizontal edge (left or right) is determined by which half of the
panel the notification plasmoid is in. When in System Tray, the location of System Tray is relevant.
For a vertical panel, it changes the position from bottom to top based on which half of the screen
the notification popup is on.
This affects only the default "near notification icon" placement setting. Manually setting a screen
corner still moves the notification popup all the way to the screen corner.
Summary:
Somehow the notification pop-up's positioning has never felt quite right to me. When it's
in a bottom corner, it blocks the view of the latest messages in chat apps, or the text
I'm searching for in Kate. When it's in a top corner, it blocks part of the open app's
toolbar or tab bar that I often use. The best place I've found for is in the top-middle,
which doesn't block very many of the thing I'm active using, and its centered position
feels aesthetically pleasing. I've been using this for a bit and quite like it.
However there is ony deficiency: the pop-up is not very wide, so it becomes quite tall
when displaying multi-line messages from chat apps in particular, which makes the
notification stack intrude into the middle of the screen where it definitely blocks things
you want to be looking at. This is annoying.
This patch resolves that issue by making the pop-up's size wider and the spacing between
pop-ups smaller when the pop-ups are positioned in the top or bottom middle.
Test Plan:
Centered pop-ups now look like this:
Single pop-up: {F8247020}
Stack of pop-ups: {F8247025}
There is no visual change for pop-ups in the corner, where they are by default.
Reviewers: #vdg, #plasma, broulik, ndavis, cblack, bshah
Reviewed By: #vdg, #plasma, broulik, ndavis, cblack, bshah
Subscribers: bshah, IlyaBizyaev, ndavis, cblack, plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D28989
This ensures that newer notification popups don't push old ones out.
Some applications are notorious for spamming the user which right now results in a firework
of notification popups. With this patch only the number that fits on screen is displayed and
everything beyond that is off screen until there's enough room for new popups which are
then gradually lowered.
It also reduces the likelihood of the notification the user is interacting with being shifted
away by an incoming notification. Furthermore, since notifications that are off screen will
have their timeout reset, it can happen that you have a bunch of recent notifications at the
bottom but then get some old ones that were off screen sliding back in because some middle ones
have expired already, leading to awkward results.
Notification scoring (e.g. critical before normal) is untouched, so a "battery is critical" notification
will show up even if it's still chugging through the backlog of browser notifications.
Differential Revision: https://phabricator.kde.org/D28646
Summary:
any other position doesn't really make sense on mobile, so ignore popup location
settings
Reviewers: broulik
Reviewed By: broulik
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D27968
This wasn't an issue before as notification popups could never have focus.
However, now with quick reply they can, leading to funky results and gaps when a notification appears while answering another one.
Differential Revision: https://phabricator.kde.org/D27134
This adds a quick reply feature with a text field inline in the notification popup.
An action named "inline-reply" will spawn the text field and a NotificationReplied signal is emitted then.
There's additional kde hints for changing the placeholder text (defaults to "Type a reply..."),
submit button text (defaults to "Send") and submit button icon name (defaults to "document-send",
that paper aeroplane icon).
When Plasma notification service isn't available or provided by someone else, disable the plasmoid.
Do not disturb controls are disabled and the applet stays in the popup crossed out.
Effectively D25097 of plasma-desktop for the applet itself.
Differential Revision: https://phabricator.kde.org/D25917
When e.g. connecting to a network with captive portal, it leaves you sitting there wondering what's going on.
The notification won't time out until it becomes visible again but still there's been complaints that the notifications go missing.
This patch makes them move out of the way vertically.
It is pretty crude but covers the majority ("System Tray covers notifications") case.
Differential Revision: https://phabricator.kde.org/D25566
The inhibition handling (e.g. combining time-based, screen mirrored, etc) is done inside the applet.
The Server knows nothing about it and only reports Inhibited as true when an external application
requested one, not when the user enabled it in the applet.
This patch exposes the NotificationManager.Server as singleton QML type and adds a way for the
applet to tell it the effective inhibition state.
Exposing the server to QML could also be used in the future to provide better error reporting
to the user when the service isn't running and/or owned by someone else (e.g. Dunst)
Differential Revision: https://phabricator.kde.org/D24486
The notification popup typically gets in the way of the system tray popup.
In case it would cover a Plasma dialog, hide the notification popup.
It doesn't specifically check for System Tray but then it will also get out of the way of your
calendar and other widgets you might have placed in the respective corner.
Differential Revision: https://phabricator.kde.org/D24208
Currently, a notification is considered "unread" when it was created or updated after the last time the user opened the history.
To alleviate this, when the notification popup is hovered, e.g. because the user wanted to drag an image out, select some text,
or open the "More" menu, it is considered read. It will still end up in the history but will not needlessly show the "unread notification" bell icon.
Moreover, job finished notifications are always considered read, as they are either from long-standing jobs which the user is likely aware of,
or confirmation of short tasks the user doesn't need explicit confirmation about. For example, extracting an archive in Dolphin,
I get an "Extracting (Finished)" but I don't want to explicitly acknowledge that notification because I can just enter the folder that was just created in Dolphin.
This surely doesn't fix the underlying problem of notification expiration and history, and the user might just interact wiht some
tray icons or the clock and not actually deal with the notification popup but this is imho an acceptable stopgap until a proper
solution is found, which won't happen in time for Plasma 5.17 anyway.
Differential Revision: https://phabricator.kde.org/D23977
Summary:
One thing that has been bugging me a bit with notifications is how close the pop-up is
to the screen corners/edges. It's so close that it obscures various things that live very
close to screen edges, such as windows' titlebars and the text input field in chat apps.
The latter case is really annoying in particular because if you have multiple chat apps
running, notifications from the app that's in the background will obscure what you're
typing in the text input field of the foreground chat app.
This patch fixes these types of issues by doing the following:
- Adjusting the popup positioning algorithm make popups that are in a corner equidistant from both adjacent screen edges, rather than only one
- Doubling the defualt distance from the nearest corner/edge
The combination of these changes allows pop-ups to no longer obscure window titlebars
and chat windows' input fields.
BUG: 401500
FIXED-IN: 5.16.5
Test Plan:
Top corner popup position no longer obscures window titlebar text and buttons: {F7259424}
Bottom corner popup position no longer obscures chat app's text input field: {F7259425}
Reviewers: broulik, #plasma, #vdg
Reviewed By: broulik, #plasma
Subscribers: cblack, plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D23253
When two screens overlap during e.g. a presentation, automatically enable do not disturb mode.
As per usual with automatic do not disturb, it can be overruled by unchecking the checkbox in the notification plasmoid
where it will be disabled until the screen configuration changes again and it still find a mirrored screen setup.
Differential Revision: https://phabricator.kde.org/D22856
The popup width is fixed, so don't rely on the actual dialog window width which might be bollocks.
More importantly, place the popups immediately and before they are shown so they show up
correctly and don't fly all over the place.
It can happen that the popup contents aren't readily laid out when we enter positionPopups() after
object creation, so don't reserve any space for the popup until it
Differential Revision: https://phabricator.kde.org/D22045
AppletInterface does not emit change signals for screen properties, only ContainmentInterface does it.
Since a fix will only be in a future Frameworks version 5.16 won't depend on, mitigate the effect by not caching the property.
The property was only a lazy Connections replacement anyway.
Also, compress screen change updates to avoid flickery animation of the popup as you resize the panel.
CCBUG: 407504
BUG: 399257
Differential Revision: https://phabricator.kde.org/D21365
Summary:
The availableScreenRect is relative to the current screen, so if the notification
applet is not on the top-left screen, the notification popup will not appear next
to where the applet is but on the top-left screen instead. Adding the absolute
screen geometry to the availableScreenRect ensures that the popup is positioned
on the right screen.
Test Plan:
Position two screens above each other, place the panel on the bottom screen, the
notification now correctly appears on the bottom screen next to the applet.
Reviewers: broulik, davidedmundson, lbeltrame
Reviewed By: broulik, davidedmundson, lbeltrame
Subscribers: lbeltrame, plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D21184
This makes it a bit more generic. Advertise that this may also be used to indicate what email account a notification came from.
Differential Revision: https://phabricator.kde.org/D21137
- Fix leak and crash when job goes away before being shown
- Some emit and signal fixes
- Always create services watchers
- Update unity job percentage in destructor, fixes the progress lingering around when disabling in settings
Also tell the world that we're merely proxying a job progress
- Don't hardcode KIO error codes
- Honor "show critical on top of full screen" setting
- Don't show generic "dialog-information" icon, it's pointlessly generic
* Use index(n, m, parent) instead of parent.child(n, m)
* Update unity count when job is closed without stopping it first
* Iterate whole dataChanged range [topLeft, bottomRight] when group is resolved
* Generate roleNames from meta object
* Use checkIndex()
* Increase default timeout for notifications with thumbnail
* Improved keyboard nav, support Home/End, let Return open thumbnail
* Make dataengines work fully standalone
* Fix panel icon sizing
There's still an issue with the popup size when resizing the vertical panel smaller so it collapses
* Implement keyboard navigation for the list with focus hacks...
Delete key closes notifications or groups, Arrow left/right expand/collapse groups, Enter invokes default action, if any
* Fix DND times that are supposed to be hidden showing
ModelContextMenu doesn't respect "visible" property
* Move "Notifications" header to ListView header so it scrolls away and leaves more room for the notifications in systray popup
* Fix finished jobs in history showing as failed when app is closed
* Don't remember apps that spawned jobs, only for notifications
* Use CriticalNotification window type (patches pending)
It is supposed to broadcast application job progress to multiple interested parties.
However, effectively it was just plasmashell. Cut the middleman, including its never finished and unused UI,
and talk to plasmashell directly.
The applicationjobs dataengine is adjusted to use the new infrastructure instead.
Since it works only in the same process now, Unity launcher API is used to at least broadcast basic
application progress information for use in e.g. Latte Dock.
Also, introduce JobViewServerV2 and JobViewV3 APIs which are using desktop entries for identification rather
than application names, and more importantly are extensible using a QVariantMap hints, so adding new
fields in the future should be significantly less painful with Frameworks, Applications, and Plasma all having
their own release schedule. :)