Kickoff's header, for some entries, leverages the tab chain for picking
the correct target for arrow key navigation. This works well in the
normal case, but breaks when there is a search active - this causes the
Clear button to appear in the search field, and become part of the tab
chain, so right arrow (in LtR) now gives focus to that button, rather
than the usual Configure button. This breaks consistency with search
fields elsewhere, which do not focus the Clear buttons on arrow keys,
and as PlasmaExtras.SearchField does not expect to be used this way,
there's no handling for this - it will focus on arrow keys, but focus
is now stuck there, and neither left nor right arrows will move it
anywhere else.
Instead, we explicitly specify which item should receive focus when
arrow keys are pressed. The Clear button can still be focused with the
Tab key, as elsewhere.
Key events are forwarded from the main content and footer buttons when
they are not locally handled; in particular, the user can begin typing
from anywhere to begin or continue a query – except the header buttons
(avatar, configure and pin), which swallow all key events. This is due
to the footer being a child of the main content view, and so is covered
by the event forwarding implemented there, but the header is separate.
Instead, set up key forwarding for the header (except the search field,
which is where we're forwarding to so it should never go back there).
BUG: 515004
KickoffGridView guards its keyboard navigation through a check that
there is more than one entry. This is reasonable for actual navigation,
as you can't move the index if there's only one entry, but not for
activation - you can still launch an app even if there are no others.
Instead, we separate out the activation and have the guard only for
navigation keys.
BUG: 515058
FIXED-IN: 6.6.0
Instead of requiring a model that is stored as a component and
dynamically instantiated, make the model a part of the popup and make the
entire popup dynamically instantiated.
This achieves the same goal of not loading LnF from disk when not used,
not used, but makes this API more optional, allowing the "automatic" entry
to avoid needing to supply odd model and package data.
By exposing a few more properties, we can use the same code for all
three elements and avoid duplicating a bunch of code just for the
automatic option.
PopupType.Native doesn't work properly for us since there is no "native"
popup. Instead just use PopupType.Item along with a proper popup
background so that we can have shadows for the popup, just like we do
with combo boxes.
RadioButton has fairly specific styling. Since this code overrides the
styling anyway, there's no need to use RadioButton, especially since the
checking behaviour comes from AbstractButton. So instead, just use
AbstractButton.
While at it, cleanup the code so we rely more on standard Controls
behaviour for backgrounds etc.
Kickerdash's hover effects kick in immediately, which makes keyboard
usage inconsistent as the state after opening depends on the position
of the pointer.
Instead, we use a hoverblocking MouseArea that turns itself off after
the pointer is moved by the user, similar to how this is handled in
regular kicker.
BUG: 510777
FIXED-IN: 6.6.0
When we reset the model, such as renaming a file, the view will be
relisted. Our current click action can be working on FileItemDelegates
that do not exist anymore, rendering them null, which causes confusion
in the click logic. This can happen when renaming a file, but clicking
on another file during the renaming process.
Also remove the redundant onEnabledChanged check for
clearingPressedState.
BUG: 514954
It rewrites `desktop:/` to `/home/user/Desktop/.`. It cleans that up
for the screen mapper but still passes this URL to the drop job.
This results in the overwrite prompt and job tracker to show paths like
`/home/user/Desktop/./foo` which looks broken.
Before marking an applet as deleted, save its container position to
the applet item position itself. when adding it back, if the passed
position to appletAdded is <= 0 , use the applet positions which
if is an "undo delete" was set at marking the deletion, it will have
the old position to restore.
Save the position of the container on an applet attached property before
container removal
BUG:515107
Keyboard navigation in kickerdash works rather awkwardly; the most
noticeable issue is that it's impossible to get to the search field
using keyboard shortcuts, or that the search field is not focused by
default (while some things forward to it, it's not possible to type
some things, such as using the compose key). And there are a bunch of
other inconsistencies (in particular for tab navigation, with the search
field not being in the tab chain) and older patterns (like forwarding
arrow keys to the grid views while maintaining focus elsewhere, which
is confusing and tends to break screen reader accessibility).
This change makes arrow key navigation work more inutitively, fixes the
tab focus behavior, and places default focus on the search field.
BUG: 511146
BUG: 510871
FIXED-IN: 6.6.0
This commit removes emojis with mixed skin tone modifiers from the main
view. Instead, they are grouped in a dialog and filtered by the current
preferred skin tone.
Previously, it was grouped with display style, so it was somewhat
ambiguous what "description". Moving it to icon makes it clearer
that this will add a textual label to the button.
The sidebar scrollbar visibility currently depends on the contentHeight
being higher than the absolute height. This is a little wasteful, as the
absolute height may be rather small during initial load as all the sizes
are being figured out, and showing/reserving space for the scrollbar is
unnecessary - the height will grow as needed, up to the maximum size
(which depends on the screen size). Moreover, the Layout.minimumWidth
may not update correctly in that case, and still leave room for the
unused scrollbar, leading to a slightly too wide popup with unused
whitespace.
Instead, we immediately make it depend on the final value determining
whether to show the scrollbar, the screen height.
ConfigurationContainmentActions allows creating custom button bindings.
It uses MouseEventInputButton, and listens to its eventString property
changing. But this doesn't work if the user adds a particular binding,
deletes it, then tries to add the same binding again: re-doing the same
input does not change the input as stored in eventString, so the Changed
signal is never emitted. (If the user adds a different binding in
between, everything works again, as now the property contains that
binding, and can be overwritten by adding the same binding again).
Instead, we send the Changed() signal explicitly when an input was made
but the current one is unchanged from the previously set one. There's a
separate check to make sure that the same binding is not added twice.
BUG: 449389
FIXED-IN: 6.6.0
re-enable
After clicking “Defaults” to disable the color blindness effect and then
re-enabling it, the effect was applied using the previously active mode
instead of the currently selected one.
BUG: 513489
Task implicitheight used to be incorrect in vertical panels, as
it was defined as tasksRoot.height / Plasmoid.configuration.maxStripes
which means the height of the total taskbar.
This caused the task to be briefly too tall before its height was then limited by the gridlayout.
sometimes this in turn caused the taskbar tooltip appear on the wrong place
if the tooltip was shown right in the moment the task has wrong height.
BUG:514911
When creating a qmenu by hand, it needs to make sure it has the
Qt::WA_TranslucentBackground attribute, as PlasmaExtraComponent Menu
has, or it won't render correctly
BUG:513307
Kickoff's compact display style increases the top/bottom padding of list
entries. This is fine for the actual compact mode, but unnecessary for
the sidebar categories; these do not visually change between styles and
do not need tohave randomly larger padding just because the main view is
in compact display style.
Instead, only increase the margins when not a category list item. Also
fix some indentation that got lost.
BUG: 514772
FIXED-IN: 6.5.91