Commit graph

5212 commits

Author SHA1 Message Date
Vlad Zahorodnii
4b2568bdcf backends/virtual: Port to ShmGraphicsBufferAllocator 2023-05-09 16:18:56 +00:00
Vlad Zahorodnii
b0bdffe08f backends/x11: Avoid rendering to buffers held by Xorg
Otherwise it's possible to see visual artifacts.
2023-05-09 16:07:20 +00:00
Vlad Zahorodnii
13d1b8b16f backends/x11: Port to ShmGraphicsBufferAllocator 2023-05-09 16:07:20 +00:00
Xaver Hugl
f60bcfb646 handle laptop lid closing in KWin
Instead of KScreen turning the display off, do that in KWin directly
2023-05-09 15:18:33 +00:00
Xaver Hugl
6e9d5c2cc3 autotests: directly call setVirtualOutputs 2023-05-09 15:18:33 +00:00
Vlad Zahorodnii
e34ded34f0 backends/wayland: Avoid rendering to buffers held by the compositor
Currently, the wayland backend does not monitor when its buffers are
released by the host compositor, which can potentially result in
glitches.

This change refactors the wayland backend so the swapchain buffers are
released upon receiving wl_buffer.release event.

wl_buffer.release event handling lives in the WaylandBackend. This
allows us to share some code, it might also be useful for implementing
direct scanout as any GraphicsBuffer providing dmabuf or shm attributes
can be wrapped in a wl_buffer.
2023-05-09 14:58:55 +00:00
Vlad Zahorodnii
88c35ab5fe Drop PointerInterface::cursor() getter 2023-05-09 13:19:42 +00:00
Xaver Hugl
4f9f73e28d utils/edid: use libdisplay-info 2023-05-09 10:52:04 +00:00
Xaver Hugl
fdf89fd11a activities: check nullptr after the cast 2023-05-09 09:18:49 +02:00
l10n daemon script
d5a52be6d7 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2023-05-09 02:28:24 +00:00
Nate Graham
059fade8e2 tabbox: Implement some more VDG feedback for Thumbnail Grid
Use a ToolButton rather than a Button for the close icon to reduce
unnecessary visual weight, and move it outwards so that its frame
touches the inner edge of the selection rectangle. Looks a bit nicer and
less attention-getting.
2023-05-08 16:46:59 +02:00
Nate Graham
07279bf541 tabbox: make Thumbnail Grid active item's text bold
This makes it follow a common KDE convention of using bold text to
indicate which item in a set is active or current. Doing it here too
helps direct visual attention to the selected item, improving speed of
interaction.
2023-05-08 16:00:08 +02:00
Nate Graham
3ca1fc800d Make "Thumbnail Grid" the default Task Switcher and make it live here
Per https://invent.kde.org/plasma/plasma-desktop/-/issues/53, we're
making an overhauled version of the Thumbnail Grid Task Switcher the
default one in Plasma 6.

Currently the default Task Switcher is specified as the "Breeze" Task
Switcher which isn't ideal since it doesn't live in this repo, and it's
possible to use KWin without Plasma, where it does live.

So as a part of making Thumbnail Grid the new default Task Switcher,
let's also move it here so that KWin's default Task Switcher is always
available.

This commit grabs the Thumbnail Grid Task Switcher verbatim from where
it currently lives in the kdeplasma-addons-repo as of commit
54d16f44a56530854444b844536933a3107ef8a6.

BUG: 433034
FIXED-IN: 6.0
2023-05-08 12:12:15 +00:00
Vlad Zahorodnii
805c899589 wayland: Validate serial of wl_pointer.set_cursor 2023-05-08 10:12:04 +00:00
Vlad Zahorodnii
8f928e6ac9 wayland: Port tablet cursor to {Shape,Surface}CursorSource
Currently the tablet cursor doesn't use SurfaceCursorSource because it
doesn't handle changing the surface size after the set_cursor request.

This change adds missing surface commit handling in the
SurfaceCursorSource so the tablet cursor can use it. As a side effect,
the pointer interface doesn't need to track surface commits anymore.
2023-05-08 10:12:04 +00:00
Ismael Asensio
e0ba7b4086 TabBox: Fix automatically hiding initialization
It was initialized to different values in the header and
in the constructor. Let's remove one of them to avoid
the confusion

AMENDS: 9d8d7e28a1
BUG: 469412
FIXED-IN: 6
2023-05-06 16:29:01 +02:00
Vlad Zahorodnii
39d269008f Avoid rounding coordinates of motion events more 2023-05-06 06:43:08 +00:00
Vlad Zahorodnii
16e46e19e0 wayland: Avoid losing precision in tablet events
globalPos() is rounded version of globalPosF().
2023-05-05 20:54:37 +03:00
Ismael Asensio
9d8d7e28a1 TabBox: Allow switchers to handle the tabbox hiding
Previously, the switcher item got hidden immediately after
selecting a window, so it wasn't possible to show an exit
transition.

Emit instead an `aboutToHide` signal and let the switchers
that opt-in to handle when to hide the tabbox by just setting
its `visible` property to `false`. In the default case we handle
that signal by immediately hiding the tabbox as usual.

For symmetry, add also a new `aboutToShow` signal which
simplifies setting an enter transition.
2023-05-05 18:40:35 +02:00
Nate Graham
98198dc77a tabbox: fall back to "compact", not "informative"
Informative is being deleted in Plasma 6 because it's worse than
Compact; see
https://invent.kde.org/plasma/plasma-desktop/-/issues/63#note_592077
2023-05-05 15:57:09 +02:00
Vlad Zahorodnii
d2b0ed0c5a wayland: Implement wl_surface.preferred_buffer_scale and wl_surface.preferred_buffer_transform
The new events provide a way to tell the client what buffer scale and
buffer transform to use as they may lack the context to make a proper
decision.
2023-05-05 12:52:32 +00:00
Vlad Zahorodnii
cad72753f0 wayland: Rename SurfaceInterface::preferredScale to preferredBufferScale
This is to match the wording in the core spec.
2023-05-05 12:52:32 +00:00
Nicolas Fella
53d19fbb9a Implement sticky keys on Wayland
Sticky keys allow to trigger key combinations one key at a time.

This is an accessibility feature used by people that cannot press
multiple keys simultaneously.

On X11 this is handled by the X server, configured via kaccess.

On Wayland we get to handle this ourselves.

wl_keyboard events already carry the modifier's latched/locked state, so
all we need to do is to
make sure the right state is set

Xkb gains a new method to set the state. The business logic is
implemented in a new plugin
that filters for keys and sets the Xkb state accordingly.

BUG: 444335
2023-05-05 12:05:17 +00:00
Vlad Zahorodnii
e6b5cf283e core: Batch pointer input device events
This change introduces InputDevice::pointerFrame(). The main motivation
behind it is to allow batching multiple pointer events within a single
event frame.

BUG: 454428
2023-05-05 10:27:08 +00:00
Vlad Zahorodnii
60205c1348 backends/wayland: Fix wl_seat version
It should be 5.
2023-05-05 10:27:08 +00:00
Ismael Asensio
a9a58b1ed5 Port usage of kcmshell5 to kcmshell6
Just two instances:
- in useractions for the menu action "Configure Window Manager"
- in the docbook about the key shortcuts
2023-05-05 09:22:55 +00:00
Vlad Zahorodnii
7c91c4bad9 wayland: Avoid pointer warp if constraint region is invalid
It may happen that the constraint region doesn't include the specified
cursor hint anymore. If that's the case, avoid warping the pointer.

BUG: 457021
2023-05-05 09:01:06 +00:00
l10n daemon script
6499d2bc15 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2023-05-05 02:37:27 +00:00
Vlad Zahorodnii
1e848ac302 Remove PipeWire_FOUND in config-kwin.h
It's unused.
2023-05-03 14:51:57 +03:00
Vlad Zahorodnii
0a82f33db5 Drop XCB_ICCCM_FOUND checks
Qt requires xcb-icccm 0.3.9. On the other hand, 0.3.9 contains all the
types and functions used by kwin, so remove the corresponding
XCB_ICCM_FOUND checks to simplify the code.
2023-05-03 11:40:01 +00:00
Vlad Zahorodnii
785fa5c172 plugins/overview: Allow switching between desktops inside effect
At the moment, clicking desktop thumbnails in the desktop bar results in
switching to that virtual desktop, which is not ideal because the
overview effect allows sending windows to another virtual desktop by drag
and dropping them to its thumbnail but you can't jump to that
desktop unless you leave the overview effect.

BUG: 448668
2023-05-03 10:00:36 +03:00
Vlad Zahorodnii
892edf94d5 Remove unused "output_interface.h" include
output_interface.h used to be included because of its output transform
enums. It's not needed after switching to Output::Transform.
2023-05-03 06:36:53 +00:00
Kai Uwe Broulik
48fe3f633e kwineffects: Initialize m_reason
It is not initialized in the default constructor.
2023-05-02 19:53:25 +02:00
Vlad Zahorodnii
1e0141851e backends/wayland: Remove KWayland::Client::Buffer leftovers 2023-05-02 13:14:30 +00:00
Vlad Zahorodnii
ce2b4c0bee {core,backends/wayland}: Refactor shm buffer allocator 2023-05-02 13:14:30 +00:00
Vlad Zahorodnii
0d2e361eca wayland: Drop ClientBuffer
The ClientBuffer type is empty now, most of the things have been
upstreamed to the GraphicsBuffer type. So let's drop it to simplify the
type hierarchy.
2023-04-30 15:39:31 +03:00
Vlad Zahorodnii
82c6538ee4 wayland: Refactor ClientBuffer
ClientBufferIntegration was introduced to work around the fact that some
client buffers are not created by us.

In addition to that, DisplayPrivate::registerClientBuffer() was
introduced to register client buffers created by us.

This change get rids of the ClientBufferIntegration type and further
simplifies the ClientBuffer type to make wayland-specific client buffer
code less messier.
2023-04-30 15:39:10 +03:00
Vlad Zahorodnii
f410819fff Remove "Default implementation ..." comments
These methods are not virtual anymore.
2023-04-28 14:51:01 +00:00
Vlad Zahorodnii
7b6eca612e Stop quick tile combine timer when activating a window
The quick tile test waits 1s to ensure that the quick tile combine timer
is not active. On the other hand, if the active window changes, it makes
sense to reset quick tile combine status. That also lets us get rid of
the QTest::qWait() in QuickTilingTest::testShortcut().
2023-04-28 14:30:49 +00:00
Aleix Pol
660ad887ee screencast: Disable screencasting when a window closes
There were still some cases where we might have queried the window,
leading to a crash.

BUG: 469055
2023-04-28 14:03:15 +00:00
Aleix Pol
cf8b2195bb screencast: Do not push frames when not in a streaming state
It seems to cause issues and there's no good reason to do that
2023-04-28 14:03:15 +00:00
Alexander Volkov
64ce247104 Use non-rotated physical size of an output when required
1. In wl_output and kde_output_device_v2 protocols.
This should fix dpi calculation in
KScreen::Generator::bestScaleForOutput() when panel_orientation
is set to rotate a screen by 90 or 270 degrees.

2. When comparing with physical size of libinput device.

3. In calculations with mode sizes which are not rotated.

This change makes Output::physicalSize() return the raw
physical size, which is used in most of cases. It should
be rotated manually if needed.
2023-04-28 13:41:00 +00:00
Vlad Zahorodnii
8bfb0b1ff7 ENABLE_GLX -> HAVE_GLX 2023-04-28 15:14:14 +03:00
Vlad Zahorodnii
a293c39105 Merge contents of effects/, scripts/ and plugins/
It's confusing to have three directories that refer to extensions. To
clear things up, let's move them in the same directory.
2023-04-28 10:46:22 +00:00
Vlad Zahorodnii
bbc7caaae7 scripts: Encapsulate cmake code 2023-04-28 10:46:22 +00:00
Vlad Zahorodnii
f4af66d167 scene: Don't touch texture sampling params in ItemRendererOpenGL
Items must be responsible for choosing texture sampling parameters.
Doing so in the ItemRendererOpenGL breaks the encapsulation.
2023-04-28 10:28:46 +00:00
Liu Jie
9241252c67 update keyboard focus when grabbing popup closed
For example, a wayland qt widget has an qlineedit with qcompleter.
    1. Input some words make qcompleter's popup window show. PopupInputFilter::keyEvent will set keyboard focus on the qcompleter's popup window.
    2. Continue to press a key which can make the qcompleter's popup window hidden and do not release it.
    3. Press the backspace key to make the qcompleter's popup window show again.
Result:
    Qcompleter's popup window will be created as an independent xdg_toplevel.This is because QT sets the surface of the focused window as the transient parent window of the popup window. If not found, QT will create a independent toplevel window.
After step 2, the focused window is the qcompleter's popup window which has be hidden. QT can not find the transient parent of the qcompleter's popup window, finally creat the popup window as a independent xdg_toplevel.

Signed-off-by: Liu Jie <liujie01@kylinos.cn>
2023-04-28 06:20:20 +00:00
Xaver Hugl
4575234859 backends/drm: remove timer for updating outputs
It's not necessary anymore, as outputs will be updated once the GPU is active again
2023-04-27 19:49:02 +00:00
Xaver Hugl
46c8ca34b9 backends/drm: don't update outputs while the session isn't active
BUG: 468715
2023-04-27 19:49:02 +00:00
Xaver Hugl
8c412c229b backends/drm: track device active status per GPU 2023-04-27 19:49:02 +00:00