Summary:
We get the data as a QByteArray we can just ref the original data,
rather than doing a deep copy of the data.
Might save a few cycles when we have an SNI animating.
Test Plan:
Ran an app that I know uses xembedsniproxy which always sends data as an
image
Still had an icon in the system tray as before
Reviewers: #plasma, markg
Reviewed By: markg
Subscribers: markg, plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D5670
This reverts commit 86b7aaf408.
this causes a crash at the action triggering and removing the action
from history upon action triggering is debatable from an ui pov
reviewed-by: kbroulik
BUG:376444
Summary: This is needed so Plasma::DataEngine can construct the metadata
Test Plan: Debug. Lots of debug.
Reviewers: #plasma, broulik
Reviewed By: #plasma, broulik
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D4554
This patch primarily is aimed at applications using libappindicator.
For example:
* Steam
* Discord
* Deluge
libappindicator doesn't provide functionality for raising an application,
but only a context menu. Since it also doesn't even provide the corresponding
DBus method, we use the resulting error to try to display the context menu
instead, which matches the behaviour on Unity and Gnome.
BUG: 375351
Reviewers: #plasma, davidedmundson
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D4301
Summary:
If an image is created with no size, QImage::data() points to nullptr.
We then pass this as an argument to memcpy. It doesn't really matter
because we're copying 0 bytes into it, but it's still thrown as an
error.
plasma-
workspace/dataengines/statusnotifieritem/statusnotifieritemsource.cpp:401:12:
runtime error: null pointer passed as argument 1, which is declared to
never be null
Test Plan: Ran it again. No error
Reviewers: #plasma, apol
Reviewed By: apol
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D4196
Summary:
Then update appet, SNI, and appmenu appropriately which are only care
about the root menu.
This fixes some premature showing and re-evaluation.
Test Plan:
Ran statusnotifiertest and checked submenu worked
Ran applet and checked everything was still fine
Restarted kded and checked window decoration menu
Reviewers: #plasma
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D4161
Summary:
libdbusmenu-qt had a quirkin it that meant it would spawn a nested
event loop when updating a menu.
In order to fix StatusNotifierItem I ended up making a fork of the 3
small classes that we needed and applying a fix, whilst we waited for
upstream.
We also were including a complicated library+plugin that handled import
and exporting, just to do importing which is rather pointless.
When appmenu support was restored, we ended up re-linking the original
dbusmenu-qt library. The original still had the same bug, manifesting in
a whole new way of Kate's bookmarks menu automatically closing when you
click on it.
This patch shares the same libdbusmenu-qt lib we have for the SNI
dataengine with the one for appmenu.
Test Plan:
Everything compiles after removing the find package for old libdbusmenu-
qt
Menu in the Plasma applet works a lot better, and doesn't have the bug
of menus randomly closing.
Reviewers: #plasma, broulik
Reviewed By: #plasma, broulik
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3926
QDBusArgument MapType fits all kinds of maps but when we try to stream a map of type
other than a{sv} (which the MRPIS spec requires) into a QVariantMap we would crash.
Explicitly check signature to avoid this.
BUG: 374531
FIXED-IN: 5.8.6
This will eventually allow the notification applet to show a better finished notification.
Currently, it just uses whatever was set as second info label last.
While this works for when copying a single file, it's utterly wrong when copying folders
as this will be a random file that was copied last.
Differential Revision: https://phabricator.kde.org/D3819
Summary:
Changes triggered by investigation into a long-running high CPU usage bug with system tray animations. The systray itself had icon name to icon resolution code, which was being triggered (twice) for every icon, every time any icon in the systray was updated. This code was spinning up a KIconLoader on each of these instances, and throwing it directly away. Each one triggered a large quantity of memory allocations and disk scans.
This patch moves the extra bit of "appName" logic from the native part of the system tray to the statusnotifieritem datasource, which already had a stored 'customIconLoader' to handle icon theme paths, and removes the special lookup from the sytemtray applet completely. It also prefers icons provided by the dataengine to doing another lookup (contentious?). This removes all the extra CPU usage outside of the QML scene graph and graphics drivers locally.
This is very much a looking for feedback item - there are things about the icon loading paths I almost certainly haven't appreciated yet, and perhaps preferring loading by icon name in the applet has a another purpose.
BUG: 356479
Test Plan: Have tested locally with kgpg and steam, the two apps I have that trigger the old code path. In neither case, however, did the appName logic produce a different result to the code with just the icon search path in statusnotifieritem.
Reviewers: #plasma, davidedmundson, mart
Reviewed By: #plasma, davidedmundson, mart
Subscribers: davidedmundson, plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D2986
The MPRIS specification recommends to media players to distinguish instances of
them by appending its process id. For example this is supported by the Dragon
Player. The patch makes it possible for connected clients of MPRIS Dataengine
to query this directly and by that distinguish multiple instances of a player.
While clients were able to do this earlier already by checking the source name
and doing the same string operations as here, it's more convenient with this
patch, since they then don't have to do it on their own anymore but just need
to query the data.
Reviewers: #Plasma, davidedmundson
Tags: #Plasma
Differential Revision: https://phabricator.kde.org/D3667
This will listen for a signal on the system DBus to show a notification to all
users on the current machine. This allows prettier and more versatile
notifications than using wall/write.
This is disabled by default but can be enabled in e.g. ~/.config/plasmashellrc
per user or /etc/xdg/plasmashellrc globally:
[Notifications]
ListenForBroadcasts=true
Differential Revision: https://phabricator.kde.org/D3606
Summary:
Sometimes we get notifications for events that are also displayed by
Plasma, giving us some rather annoying popups.
This patch provides a service on the notification dataengine so that
other plasmoids can block the notification applet from processing those
notifications.
Intended use case is for the network manager plasomid to not show a
notification whilst the dialog is open, as notifications come from kded.
However it's kept generic enough that other plasmoids can filter on
other hints, such as category or desktop file.
Test Plan:
Wrote relevant patch for plasma-nm
Didn't get notification toggling a network whilst the popup was open
Did after I closed the popup
Reviewers: #plasma, mart
Reviewed By: mart
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3589
Summary: BUG: 372112
Test Plan:
notify-send "This long title that goes on and on" - wrapped with no
title
notify-send "subject1" "msg1"
notify-send "subject1" "msg2" - appeared as one message with two lines
notify-send "subject2" "msg1"
notify-send "subject3" "msg2" - appeared as two notifications
Reviewers: #plasma
Subscribers: mart, broulik, apol, plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3425
When a notification contains URLs, they will be shown as a large preview (in case of one
thumbnail) or multiple in a strip (similar to what Klipper does).
The previews can be clicked to open the file and can be dragged anywhere (e.g. to a
webbrowser or chat window).
Differential Revision: https://phabricator.kde.org/D3539
Summary:
Profiling indicates the highest CPU usage process during idle is the
system monitor engine. This attempts to get rid of the most obvious
usage, which was QStringList::indexOf, and QString temporaries.
Test Plan: Profiling only, as well as no local functional regression.
Reviewers: apol, #plasma, davidedmundson
Reviewed By: #plasma, davidedmundson
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3141
Summary:
Changes triggered by investigation into a long-running high CPU usage bug with system tray animations. The systray itself had icon name to icon resolution code, which was being triggered (twice) for every icon, every time any icon in the systray was updated. This code was spinning up a KIconLoader on each of these instances, and throwing it directly away. Each one triggered a large quantity of memory allocations and disk scans.
This patch moves the extra bit of "appName" logic from the native part of the system tray to the statusnotifieritem datasource, which already had a stored 'customIconLoader' to handle icon theme paths, and removes the special lookup from the sytemtray applet completely. It also prefers icons provided by the dataengine to doing another lookup (contentious?). This removes all the extra CPU usage outside of the QML scene graph and graphics drivers locally.
This is very much a looking for feedback item - there are things about the icon loading paths I almost certainly haven't appreciated yet, and perhaps preferring loading by icon name in the applet has a another purpose.
BUG: 356479
Test Plan: Have tested locally with kgpg and steam, the two apps I have that trigger the old code path. In neither case, however, did the appName logic produce a different result to the code with just the icon search path in statusnotifieritem.
Reviewers: #plasma, davidedmundson, mart
Reviewed By: #plasma, davidedmundson, mart
Subscribers: davidedmundson, plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D2986
If an application explicitly requests a notification to replace another one (replaces_id set),
don't group it with another notification.
When creating a KNotification object and then updating it by calling e.g. setText it would
just append it to the already shown notification.
Differential Revision: https://phabricator.kde.org/D2954