Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@romangg
Copy link
Member

@romangg romangg commented Feb 24, 2024

According to listings in #6.

Closes #6

Rafał Szalecki and others added 30 commits February 22, 2024 17:59
With color management, everything would get clamped to 1 nit otherwise.

BUG: 477841
ButtonPressEvent::state includes keys and buttons prior to the button
press has been generated.

On the other hand, it appears that QMouseEvent::buttons() should include
currently pressed buttons, i.e. the button that has been just pressed
should be in that bitfield.

This is important for QQuickDeliveryAgent, which checks
QMouseEvent::button() and QMouseEvent::buttons() to decide whether to
send the button event only to tap handlers or both tap handlers and
mouse areas.

BUG: 476653
There is a window title beneat the stock WindowHeapDelegate. The label
was bound to the size of the window, but because this animates our label
resizes every frame too.

Given the label is only at full opacity when the window is filling the
ExpoCell, we can set the width of our label to that directly.

This looks less glitchy as we don't change wrapping during animation,
but also should have a noticable performance impact as we avoid
re-laying out multiple times.
It's visible by default but has 0 opacity, which results in unnecessary
relayouting. The opacity is vice versa as well.
Overview was trying always to animate the opening with 2 animations at the same
moment:

* the transition from initial to active in WindowHeapDelegate
* the animation on the partialactivationfactor was always ran, partial or not

this resulted in jankier animations than they could be.

now base only on partialanimationfactor, so we a re sure there is one single
way to trigger the effect
…mbnailItem

We just need to ensure that qtquick rendering commands don't use the
window thumbnail until it's ready. The CPU can continue executing its
commands.
Currently FrameSvgItem is used to highlight selected or hovered windows.
But the problem with it is that it's a bit heavyweight. As a way around
it, we could put it in a Loader, but that's going to be bring a set of
other challenges.

As an alternative solution, this change replaces FrameSvgItem with a
simple outline. It still produces decent visuals and it's simpler.
This avoids keeping old and creating new window thumbnails after the task
switcher is hidden.
The task switcher doesn't initialize thumbnailGridView.currentIndex
properly after the Plasma.Dialog has been just created.
Most windows are typically not hovered, so we don't need to create
a Button for every one of them.
Effects like overview can create more than one thumbnail for the same
window. For example, if you have 4 virtual desktops, the overview is
going to create 9 window thumbnails for the desktop background, which in
its turn means that each thumbnail is going to have its own texture.
That's not great.

WindowThumbnailItem.sourceSize has been dropped because it's unused and
will complicate texture caching.

CCBUG: 455780
The compilation step still takes a significant amount of time on the
first launch. On my machine, it's around 1s. Even if it happens just
once, freezing the session for 1 second is not great.

This change makes the overview effect load main.qml asynchronously
when plasma session starts. By the time the session is loaded, it should
be ready.

CCBUG: 455780
It causes hangs, and thus doesn't actually help with accessibility but makes
it worse. Until that's fixed, it needs to stay disabled

BUG: 450940
WindowThumbnails are image providers meaning it can provide textures
directly to ShaderEffects

layer.enabled is effectively a ShaderEffectSource meaning we render our
single desktop background item into an offscreen texture to ultimately
contain our desktop background.

We can cut out the middle-man and use the DesktopBackground as a source
directly saving a massive texture being generated.
Captions are set to elide with ElideRight, which does allow for multi-line captions.
However, this means that the height of the captions depends on their width (since a
shorter width results in more lines), and the width of the captions depends on the size
of the window thumbnail, which depends on the height of the caption to be positioned. If
the caption is really long, this can cause visual glitches. Having a maximum line value
avoids that.

BUG: 477103
Milou.ResultsView loads runners regardless whether the query string is
empty. It's not clear what milou should do. There are valid arguments
both in favor and against preloading runners.

This change puts Milou.ResultsView behind a Loader so milou is loaded
when it's actually needed and not when starting overview.

CCBUG: 455780
The OpacityMask is used purely for rounding the corners. We can get rid
of it by using ShadowedTexture which does the same thing while also
drawing the shadow, meaning we can also eliminate the ShadowedRectangle.
When users simultaneously press Shift and Tab, the keys are sometimes
registered as Shift+Tab, and sometimes as Shift+Backtab.
So we need to match received Shift+Tab against shortcuts containing
Shift+Backtab, and vice versa. Previously the code only checks for
the first case. This commit adds checks for the second case.

BUG: 438991
FIXED-IN: 6.0
Reduces the compile time.
In default shortcuts, change +Shift+Backtab to +Shift+Tab.

Functionally the behavior doesn't change.
But Shift+Tab is better since it is
- easier to understand (not everyone knows what Backtab is)
- more consistent with other shortcuts containing Shift:
  we use Alt+Shift+1, instead of Alt+Shift+!
- more consistent with how user defined shortcuts with Shift and Tab are
  displayed and stored

BUG: 422713
FIXED-IN: 6.0
The overview effect uses the type of the dragged object to determine
if a single window is dragged or the entires desktop.
Commit 0ff4f84a changed the type of mainBackground, but did not
update the code for matching the type.

BUG: 478746
FIXED-IN: 6.0
Item type is incredibly fragile as a way to determine what was dropped,
as proven by recent breakage. Instead, we can use `Drag.keys` to provide
metadata about what is being dragged/dropped.
… heap

Without this, windows like xwaylandvideobridge would show up.

BUG: 463542
FIXED-IN: 6.0
GL_RGB8 isn't supported by OpenGL ES

BUG: 479055
zzag and others added 27 commits February 23, 2024 22:36
Some our tests assume that with "none" border size, the decoration has
no borders. When breeze paints an outline, that's not the case.
…ffscreenQuickView

QEvent::isAccepted() is initialized to true by default.

BUG: 480538
This is because the Overview will activate itself at the end of a 1:1 gesture,
and a toggle action might actually deactivate it rather than activate it.
Some cursor themes don't have a "default" cursor. Add a fallback to "left_ptr"
for such themes.
When a QPromise reports results, it's not necessary that the
QFutureWatcher is going to report it immediately. That can happen at
some point in the future, which is okay according to the QFuture api
contract.

Due to that, we cannot assume that the stored Output and EffectWindow
objects pointers are valid when the QFutureWatcher::finished is emitted.
Imagine the following case:

- the window is hidden, slideOut() is called but no deleted reference is
  created because the window is not deleted
- the window is closed, slideOut() won't be called because the window is
  hidden and SlidingPopupsEffect::slotWindowClosed() ignores closed windows
  that are already hidden
- the window is deleted in meanwhile
- the sliding popups effects attempt to delete m_animations[w] entry,
  but since "w" is a dangling pointer at this point, visibleRef is going
  to access released memory

To fix that, make slideOut() always ref the window.
In the late Plasma 5 times we agreed that it would be better to drop
"active mouse screen" option and stick with last interacted screen
approach instead. However, it was forgotten and nobody has pursued this
goal, so let's hide the option in the system settings ui at least.

The option is not completely removed because some parts of kwin would
need adjustments.

Note that this only changes the config values.
when in overview mode, don't scale down WindowHeap, as this
will cause ugly glitches, but resize it down instead.
Still use transforms when it goes in desktop grid mode, at least for now

probably future further refactor can still help things

Before:

![image](/uploads/7ca83e7e9292bd8489faaf76d4c12693/image.png)

After:

![image](/uploads/27b970d056c89486661d6695d09813ff/image.png)

CCBUG:475682
There are a few issues:

- it's incompatible with Version 6 format
- activity shortcuts cannot be changed in kwin
- overview shortcuts don't need to be touched

BUG: 480758
These shortcuts make more sense to be used with Meta+Tab and Meta+Shift+Tab.
Let's keep them reserved for the task switcher. Cycling between overview
modes is not something that requires Meta+Tab to be assigned to it by default.
Plasma expects new names and methods for the interface.
Views are owned by the C++ backend, but also retrievable by invokables
to get neighbouring screens from JS space. By default Qt then transfers
ownership of the view to the QML collector. This results in double
ownership.

BUG: 480788
The mouse area is no longer a sibling of the window heap, which produces
a warning.

BUG: 481106
While tabbox switching is usually a keyboard operation, we offer also
a mouse-friendly way to launch it via screen edges, and should allow
to switch directly on mouse click.

BUG: 481267
FIXED-IN: 6.0
Instantiators create objects when they're added to a model, and
deference when when they're removed from the model.

When we explicitly set a parent in onObjectAdded we're creating a second
reference. This does get cleaned up later, but not in the same frame.

This brings us in line to what QQmlRepeater (which works with items)
does internally for items being added and removed.

BUG: 478777
They are currently unused, but might be useful in the future.
Caps lock only locks capitalization of letters, making it artificially also
trigger shift in the context of KWin only causes problems
otherScreenThumbnail is used to fake a window thumbnail being dragged
half in the old screen, half in the "new" one (or even more than two)

right now the condition to use it is purely the "real" thumbnail x
or y change, but sometimes especially when the item has just been created
and is being laid out it might trigger an itemDraggedOutOfScreen
when no-one was dragging.

We should never make otherScreenThumbnail visible when we aren't dragging
a thumbnail, so check for Drag being active in the source item.

the item will be kept visible even if drag becomes inactive as before,
as it still needs to be visible for the reset animation

BUG:480564
…nterface

QWindowSystemInterface goes via QGuiApplication which updates some
internal properties. Most notably QGuiApplication::lastCursorPosition
which is used by advanced menu closing behaviour.

BUG: 478061
Overview and Grid modes have shortcuts assigned to them. While they
provide a way to toggle the overview effect between on and off state, in
other words overview <-> off or grid <-> off, it's not possible to move
between the modes by pressing those shortcuts, e.g. off -> overview ->
grid -> overview -> grid -> ... -> off.

The culprit seems to be that EffectTogglableState has two "inactive"
states - Inactive and Stopped. It's counter-intuitive and needs a further
cleanup.

To make switching between overview modes work, this change makes
EffectTogglableState::toggle() toggle the state based on the Active state.
There's only one active state.

CCBUG: 481335
kwin does not support true multiscreen drag and drops. Events are sent
to an offscreen location of the screen initiating the drag. Therefore it
is important that off-screen items do not process drop events

BUG: 481331
Otherwise the binary name is used as display name, causing all kwin
shortcuts to be registered under kwin-6.0-delete-desktop-switching-shortcuts
Zoom push tracking now considers the layout of the user's monitors, accounting
for situations where the monitor layout doesn't form a perfect rectangle. These
changes help prevent the zoom area from being unable to reach certain areas of
the workspace depending on which edge of which screen the user pushes against.

One known issue is that, if the mouse moves too quickly, the zoom area can
sometimes imperfectly track the movement. It will look the same as the original
bug (areas of the screen will appear to be cut off/unreachable), but moving the
mouse in the opposite direction a tiny bit snaps the zoom area back to where it
should be.

BUG: 467182

@teams/qa Heads-up that I'm very blind, and this is the first time I've ever
contributed to a KDE project. I've tested the changes on my system and they fix
the bug, but I want to make sure I didn't break anything in the process.
In almost all cases it's duplicated in the name, and if the user manually
changes the name, the custom name should be shown without additional numbers

CCBUG: 481576

Co-authored-by: Vlad Zahorodnii <[email protected]>
The user may have no usecase for the grid view mode, i.e. they may want
to activate overview, do their thing, and then return back to normal
desktop. However, with the current behavior, there's one extra step
(switch to grid mode) in order to go back to desktop.

In hindsight, we should have added different screen edge actions for
overview and grid modes. This can be done in 6.1.

BUG: 481335
We require KF6 and Plasma 6.0 versioned packages.
@romangg romangg merged commit c56d0c4 into winft:master Feb 24, 2024
@romangg romangg deleted the pick-kwin branch February 24, 2024 09:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Integrate KWin patches (2023-12-02 - 2024-02-21)