Otherwise the positioner will get completely confused.
When a notification is closed, the popup will already be closed in response to sourceRemoved.
Also, when triggering an action, call closePopup instead of hiding the popup.
(cherry picked from commit b97fdfa293)
Differential Revision: https://phabricator.kde.org/D4632
Summary:
What happens:
* Activity switch calls invalidateFilter on TaskFilterProxyModel,
which may remove rows in response.
* Up the proxy chain, TasksModel may ask LauncherTasksModel to
emit dataChanged for its contents in response to the row removal,
to cause its own filtering to re-evaluate the launchers for the
life cycle logic.
* This can cause TFPM to do more filtering before invalidateFilter
has actually returned, causing trip-ups such as duplicated rows
in the proxy.
* Eventually the corrupted maps cause a memory corruption crash.
This patch changes step 2 to "find the launchers in the TFPM (the
direct source model) and ask for a dataChanged for each". This
costs us a loop and accesses to IsLauncher, but on the other hand
fixes the crash and avoids a lot of filtering and mapping work
between LTM and up to and including TFPM. It's also just better
code to ask for the dataChanged only from the model we need it
from.
BUG:376055
Reviewers: #plasma, davidedmundson
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D4631
Summary:
Alphabetical sorting currently compares a concatenation of
"AppName" (determined by heuristic) and Qt::DisplayRole (usually
the window title) using QString::localeAwareSort. This reflects
that the motivation behind alphabetical sorting is generally to
keep windows belonging to the same app grouped together and then
order those groups alphabetically.
The current code achieves this, but the particulars turn out to
negatively impact users of multi-windowed apps that frequently
change window titles in ways that impact sorting, particularly
tabbed web browsers. Switching between tabs may change the order
of browser windows on the Task Manager. Multiple instances of
feedback suggest this is jarring and unexpected, despite
technically being alphabetical.
This patch changes behavior as follows:
1. Instead of comparing "<App Name><DisplayRole>" it will try to only
compare "<App Name>", falling back to "<DisplayRole>" if the app
name can't be determined.
2. If two tasks compare to equal in the above, it will fall back to
source model row order, i.e. creation/append sorting.
This still achieves the primary goal laid out above while
keeping the sort order within an app "group" stable when using
alphabetical sorting.
BUG:373698
An alternative means to achive this behavior would be via existing
Task Manager settings. To wit:
1. Enable grouping
2. Disable group popups, so groups are instead maintained inline
on the widget
I'm actually considering suggesting the above (plus changing
sorting to Manual) as new default settings for 5.10 - but in
the meantime it still makes sense to tune the alphabetical
sorting mode in this way, and put the improved behavior into
5.8 and 5.9 to address user feedback earlier.
Reviewers: #plasma, davidedmundson
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D4469
requestActivate() doesn't raise the window. The same had been done in PanelView but not
for DesktopView. This way a minimized config dialog (e.g. you want look at the wallpaper
in its full glory) will be raised if you open it again through the applet/desktop context menu.
CHANGELOG: A minimized config dialog on the desktop (e.g. wallpaper settings) will now be un-minimized when trying to open it multiple times
Reviewed-By: David Edmundson
This belongs in a header only (where it already is) and my IDE complains about it.
Since the macro expands to nothing anyway this doesn't change anything.
Differential Revision: https://phabricator.kde.org/D4456
This is the same Plasma ContainmentInterface does. Otherwise QtQuick gets confused about mouse state.
Differential Revision: https://phabricator.kde.org/D4455
Summary:
Versions of VirtualBox packaged on Neon and Fedora now have
a proper WM_CLASS:
Fedora: WM_CLASS(STRING) = "VirtualBox", "VirtualBox"
Neon: WM_CLASS(STRING) = "Qt-subapplication", "VirtualBox"
And install a matching virtualbox.desktop.
We can therefore drop this rule.
BUG:350468
Side note: The rule should actually still have worked, but
for some reason KServiceTypeTrader refuses to match a .desktop
with 'Exec=VirtualBox %U' when we query for 'VirtualBox', as
extracted from cmdline. I'm talking to dfaure about it.
Reviewers: #plasma, broulik
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D4346
Summary:
isOutputRedundant badly failed when two screens had
the exact same geometry (that should be, the base
case for "cloning" screens.
now the logic is:
a screen is redundant if:
* its geometry is contained in another one
* if their resolutions are different, the "biggest" one wins
* if they have the same geometry, the one with the lowest id wins (arbitrary, but gives reproducible behavior and makes the primary
BUG:375507
Test Plan:
tested with two screens:
* overlapping, same resolution: the lowest id (0, the primary) wins, the other one doesn't get a view
* overlapping, different resolutions: the biggest one wins
* not overlapping: both get a view
Reviewers: sebas, #plasma, davidedmundson
Reviewed By: #plasma, davidedmundson
Subscribers: davidedmundson, plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D4309
Also don't try to call SetPosition when position didn't change.
Fixes sometimes reseting position to 0 after expanding applet.
Differential Revision: https://phabricator.kde.org/D3904
Summary:
due to old multiscreen bugs, sometimes the appletsrc file
gets polluted with a lot of containments with same activity id
and lastScreen, in some cases even hundreds
(see https://bugs.kde.org/show_bug.cgi?id=371858)
in that case we can't be 100% sure what containment will be loaded
at startup, leading to an herratical behavior.
it was trying to clean up duplicates but wasn't really effective
now base upon lastScreen (so we catch other activities as well)
and manually remove the destroyed containment from
m_desktopContainments (which may sole some multiscreen
related bug, such as 371991)
BUG:371858
CCBUG:371991
Test Plan:
started a session with the corrupted appletsrc from the bugreport,
file gets cleaned out of duplicates
Reviewers: davidedmundson, #plasma
Reviewed By: davidedmundson, #plasma
Subscribers: davidedmundson, plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3981
Summary:
It turns out that Chrome under certain conditions will change its
window metadata as it quits, causing a race we sometimes lose, failing
to reveal the associated launcher because we can no longer match it
to the window at window closing time. Instead we are now forced to
re-check all launchers after the window is gone. As a speed optimi-
zation we only consider top-level windows (and startups) as being in
a group implies matching siblings.
In addition this refactoring eliminates a use of Qt::QueuedConnection
that allowed for an unpredictable event loop spin inbetween things.
BUG:365617
Reviewers: davidedmundson
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3950
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
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
Summary:
this replaces the approach with the expose event in
20b439a4f4 by directly monitoring the xcb screen change
notify native event
Test Plan:
attaching and detaching the external screen on a laptop
configured to deactivate the internal screen upon connection
same behavior as D3777
Reviewers: sebas, davidedmundson, #plasma
Reviewed By: davidedmundson, #plasma
Subscribers: pmuralidharan, plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3822
Summary:
in a corner case that is used a lot, the internal laptop screen
gets automatically disabled when an external screen is connected.
the only QScreen* available from the QGuiApp gets recycled for the
new screen and there is no signal this switch occurred.
To work around this, as all the view get an expose event when this happen,
monitor the rename of the desktopview's qscreen and manage this separatedly
in the shell.
BUG:373880
Test Plan:
connection and disconnecting an external screen to the laptop
both in the case of internal screen enabled or disabled
Reviewers: davidedmundson, #plasma
Reviewed By: davidedmundson, #plasma
Subscribers: davidedmundson, plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3777
when an applet is deleted, remove its fullrep from stackview before
the applet actaully goes away, as QQC1 StackView remains in an inconsistent
styate if one of its pages is deleted without having been fully removed
reviewed-by: kbroulik
BUG:373812
Summary: We need old id of new primary screen. After we update primary screen in screenpool, it will always return id = 0. It causes invalid m_desktopViewforId mapping and panel doesn't move next time when we change primary screen.
Test Plan:
Preconditions:
Computer with 1 display, running plasmashell
Test steps:
1. Connect one external screen (first screen is primary)
2. Change primary screen to second screen
3. Change primary screen back to first screen
4. Unplug second screen
Expected:
In step 3 panel moves to first screen
In step 4 plasmashell keeps running
Actual (before change):
In step 3 panel remains on second display
In step 4 plasmashell crashes
BUG: 372963
Reviewers: #plasma, davidedmundson
Reviewed By: #plasma, davidedmundson
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3519
When opening the calendar popup of the digital clock plasmoid, the
selection is on the day the popup was last opened -- possibly days or
weeks ago. This patch fixes that.
REVIEW: 129308
There was code added (approved by me) to make sure we always cast
battery icon percent to an integer if it's undefined. It had the
unintended side effect that a battery life of 0 would also be 'cast' to
100.
When this is undefined we don't show the icon anyway, so
it doesn't really matter what value we fall back to.
The sddm breeze theme battery icon is trying to access the battery
percent. In a batteryless system it produces the syslog message:
Nov 14 22:28:23 samd sddm-greeter[3210]: file:///usr/share/sddm/themes/breeze/components/Battery.qml:39:18: Unable to assign [undefined] to int
Based on https://gist.github.com/Zren/4e5709d842965227088f6e1d3fd42016
Debian-Bug: https://bugs.debian.org/844194
Summary:
As this happens the screen filtering higher up in the proxy chain
culimating in TasksModel needs to be re-executed, as it compares
ScreenGeometry against a property value set on the model. Without
this update, tasks may disappear from views using TasksModel.
Mapping the trigger conditions to affected rows is deliberately
maximally coarse; see implementation comment in code.
BUG:373075
Reviewers: #plasma, davidedmundson
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3628
Scrolling over empty space or applet that doesn't handle
wheel events no longer activates desktop containment actions.
Differential Revision: https://phabricator.kde.org/D3572
I've quite often seen people wondering how to change the keyboard layout on the lock screen.
By adding a keyboard icon it makes the button somewhat more visible but it's
still quite hidden in the corner of the screen.
Differential Revision: https://phabricator.kde.org/D3549
Summary:
select the correct index upon loading when the count changes.
this removes the flicker at startup and the view is at the correct
wallpaper since the first frame. Also, now when a wallpaper is
downloaded with knewstuff, the old wallpaper stays selected,
it doesn't get resetted to the first wallpaper anymore
Test Plan:
open wallpaer dialog, no more flicker
install a new wallpaper, the currently selected one stays selected
Reviewers: #plasma, davidedmundson
Reviewed By: #plasma, davidedmundson
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3532
Summary:
This adds a new data role "ChildCount" to AbstractTasksModel and
implements it in TaskGroupingProxyModel.
The purpose of this data role is as a means of signalling to a Qt
Quick delegate for a top-level row that a property of the item -
namely the number of children it has - has changed. Qt Quick's poor
support for tree models makes the existing way of signaling this
(rowsInserted) prohibitive to use.
The Task Manager applet needs this info because it's in charge of
telling the window manager about the screen coordinates of window
delegates (through support code in this library). When a window is
directly added to an existing group, there is no new delegate
created, nor does the existing delegate change position. An
increase of ChildCount will be used in this case to decide to
publish delegate geo for the new window.
CCBUG:372699
Reviewers: #plasma, davidedmundson
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3482
When we default to the user input we would not remember the user name.
CHANGELOG: Login screen now remembers the last user name for domain logins where the user list is unavailable
Differential Revision: https://phabricator.kde.org/D3462
Depending on the distribution, Chromium identifies itself as "chromium" or "chromium-browser". Account for this.
CHANGELOG: Chromium WebApp windows are no longer treated as Chromium browser windows in task manager
Differential Revision: https://phabricator.kde.org/D3450
Summary:
anchor the layouts of config dialogs to left
this way they will look the same normally (they
are positioned at x 0 normally) but will be
anchored to right instead if layout mirroring is enabled
CCBUG:372721
Test Plan: opened all config dialogs both in ltr and ltr layouts
Reviewers: #plasma, davidedmundson
Reviewed By: #plasma, davidedmundson
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3456
Summary:
BUG: 372153
CHANGELOG: Repaired autostart of desktop files with place holders
FIXED-IN: 5.8.4
Test Plan:
- add firefox.desktop to autostart
- make sure it autostarts without errors on next login
I really wish we had a framework to test this in isolation :/
Reviewers: davidedmundson
Reviewed By: davidedmundson
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3454
Summary:
They use Plasma's scaling, so in theory it should have absolutely no
effect.
In practice it has an effect of hitting a Qt bug with font rendering.
CCBUG: 366451
Test Plan: None done
Reviewers: #plasma, mart
Reviewed By: mart
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D3158
Summary:
Instead of making PanelViewConfig manipulate the visibiltyMode of
PanelView, make PanelView force the view to be visible whilst the
config
is open.
This is cleaner as it doesn't alter the original config, and
resolves a
bug that opening configure with an autohide panel would shift
contents
about.
Test Plan:
With panel as autohide opened config
Moused away from panel, panel stayed visible
With panel as autohide, plugged in a USB pen - panel appeared - and
closed when I hid the dialog
Changed mode in panel config, panel didn't immediately change - but did
on close.
Tested with all modes.
Reviewers: #plasma, mart
Reviewed By: mart
Subscribers: mart, plasma-devel
Tags: #plasma
BUG: 372248
Differential Revision: https://phabricator.kde.org/D3408