Commit graph

4579 commits

Author SHA1 Message Date
Vlad Zahorodnii
dbd574ec05 backends/wayland: Introduce cursor layers
It's a necessary step to let kwin repaint the cursor from Compositor.

Unfortunately, it also means that we need to add more (temporary) code
to paint the cursor in backends.
2022-12-08 17:37:36 +00:00
Vlad Zahorodnii
35a99ec9ad Add explicit output cursor manipulation api
Currently, output backends track the cursor behind the scenes. This
results in some amount of code duplication, for example the handling of
hidden cursors, every backend handles in its own unique way, some don't
do it correctly. Another issue is that output backend interact with
other components behind the back. This can be a problem for tasks such
as backing the cursor with an output layer.

This change introduces explicit output cursor manipulation APIs in the
Output class. There's a good chance that it's going to be revised more
in the future as part of streamlining output layer manipulation apis.

With the proposed changes, the workspace would need to call
Output::setCursor() or Output::moveCursor() to set/unset or move the
cursor, respectively.
2022-12-07 12:05:26 +02:00
Nicolas Fella
6e0012a3c9 Adapt to deprecated KWindowSystem API 2022-12-07 09:50:26 +00:00
Vlad Zahorodnii
f191efb39e backends/drm: outputLayer -> primaryLayer
It makes terminology consistent.
2022-12-07 08:59:41 +00:00
l10n daemon script
9e82887160 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"
2022-12-07 01:53:13 +00:00
Xaver Hugl
3d9ccaf742 backends/drm: fix modifier check
If we force a linear modifier, the modifier list can't match up with the
display, which causes the surface to be recreated every frame.

CCBUG: 462625
2022-12-06 19:55:19 +00:00
Vlad Zahorodnii
ca7f7a42c8 wayland: Make kwin_wayland create virtual outputs
At the moment, we rely on placeholder output getting created, but there
are cases where it's desired to spin kwin with virtual outputs so you
could take screenshots and things as such.
2022-12-06 17:46:49 +00:00
Vlad Zahorodnii
cdda8593d8 backends/virtual: Fix KWIN_WAYLAND_VIRTUAL_SCREENSHOTS
Image path is incorrectly specified in the EGL backend. Also, `%s` must
be `%2`.
2022-12-06 15:26:07 +00:00
Xaver Hugl
bd26f57e18 backends/drm: allow using both adaptive sync and tearing at the same time
The driver will translate that to adaptive sync in the vrr range, and tearing
above it
2022-12-06 11:49:59 +00:00
Xaver Hugl
7c3489b1a5 wayland/tearingcontrol: actually create the d pointer object 2022-12-06 11:49:59 +00:00
Xaver Hugl
b3e977f416 backends/drm: add buffer format to logging 2022-12-06 10:13:38 +00:00
l10n daemon script
30f73e7b03 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"
2022-12-06 01:49:30 +00:00
Vlad Zahorodnii
fdea693da5 wayland: Implement xwayland-shell-v1
As explained in [1], WL_SURFACE_ID is racy because wayland aggressively
reuses object ids. The xwayland-shell-v1 protocol intends to fix that by
two things:

* associating a serial number with each X11 window. This is to avoid
  potential XID reuse
* referring to the wayland surface by the wl_surface rather than
  specifying an object id

Unfortunately, we will have to maintain both legacy WL_SURFACE_ID and
WL_SURFACE_SERIAL for quiet some time until most instances of Xwayland
support the xwayland-shell-v1 protocol [2].

[1] https://gitlab.freedesktop.org/xorg/xserver/-/issues/1157
[2] https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/163
2022-12-05 17:09:01 +02:00
Xaver Hugl
909378e6fd kcmkwin/kwincompositing: add option to toggle tearing on Wayland 2022-12-05 12:52:18 +00:00
Xaver Hugl
b85550ab41 backends/drm: use tearing presentation where possible and appropriate 2022-12-05 12:52:18 +00:00
Xaver Hugl
b261050be1 wayland: implement tearing_control_v1 2022-12-05 12:52:18 +00:00
l10n daemon script
98951840ca 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"
2022-12-05 01:51:57 +00:00
Vlad Zahorodnii
b4441cd502 backends/x11: Start reading host X11 events in initialize()
There's no reason to wait until the workspace is created.
2022-12-04 11:29:05 +00:00
Vlad Zahorodnii
28baea1c29 backends/x11: Simplify backend initialization 2022-12-04 11:29:05 +00:00
l10n daemon script
2f49029e40 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"
2022-12-04 01:50:24 +00:00
Hongfei Shang
ebafdc4400 [x11] root window support _NET_WM_WINDOW_OPACITY
java gui will check this property on root window.

see:
6b55ef3b58/src/java.desktop/unix/classes/sun/awt/X11/XNETProtocol.java (L328)

Signed-off-by: Hongfei Shang <shanghongfei@kylinos.cn>
2022-12-03 17:09:18 +00:00
Xaver Hugl
09a41d3851 workspace: slightly simplify tilemanager interactions 2022-12-03 15:33:23 +00:00
Vlad Zahorodnii
7939352fb7 backends/x11: Provide a cursor per output
The main motivation behind this change is to allow setting the cursor
per output, which eases up implementing things such as cursor output layers.

It also has another advantage - output related code is more
encapsulated. Furthermore, we could decouple output backends from Cursor.
2022-12-03 15:17:49 +00:00
Xaver Hugl
6e6caa1021 workspace: move desktopResized after adding new outputs
Otherwise it crashes because the tile manager on the added outputs don't
exist yet

BUG: 462568
2022-12-03 15:42:40 +01:00
Vlad Zahorodnii
d93b1d4943 effects/tileseditor: Specify effect chain pos
The explicit effect chain position is needed to ensure that the effect
is properly ordered with other effects such as screenshot.
2022-12-03 13:02:29 +00:00
Jan Grulich
47732c54b6 Screencast: properly renegotiate stream when window size changes
We need to completely renegotiate stream parameters in case of window
size gets changed, otherwise no renegotiation will happen and clients
will not accommodate to our changes.

Fixes: https://github.com/obsproject/obs-studio/issues/7875
2022-12-03 02:40:30 +00:00
l10n daemon script
0c6d62a2ec 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"
2022-12-03 01:55:31 +00:00
Natalie Clarius
b6412454c2 placement: remove cascaded placement policy
becomes redundant with cascade-if-covering for zero-cornered placement
2022-12-02 14:05:32 +00:00
Natalie Clarius
b08ef54727 placement: apply cascade-if-covering to placement modes: random, centered, zero-cornered, under mouse 2022-12-02 14:05:32 +00:00
Natalie Clarius
274922caaf placement: cascade if window would completely overlap another window
BUG: 58063
2022-12-02 14:05:32 +00:00
Harald Sitter
bcfd735808 effects/screenshot: offer an opt out of permission checking
in a CI context the paths are mutable between installation and use
and as such the permission checks can just not ever work. for use
in such scenarios allow completely disabling the permission checks
2022-12-02 10:58:05 +00:00
Vlad Zahorodnii
0047dfc596 backends/wayland: Drop WaylandBackend::getOutputAt()
It's unused.
2022-12-02 08:49:04 +00:00
Xaver Hugl
00b21992c4 backends/drm: don't leak gbm surface if creating egl surface fails 2022-12-02 08:28:46 +00:00
l10n daemon script
c0461f6b48 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"
2022-12-02 02:02:52 +00:00
Vlad Zahorodnii
245dcd2b80 backends/wayland: Provide a cursor per output
It allows us to track cursor state per output and make it more
straightforward to introduce cursor layers in general.
2022-12-01 16:46:27 +00:00
Marco Martin
68517a5806 remove unused member variable 2022-12-01 16:59:27 +01:00
Marco Martin
e4507861f7 Custom quick tiling with configuration ui
* Allow to do quick tiling to custom tile geometries, windows will be snapped to tiles when dragged with the shift modifier pressed.
* Tile geometries are screen specific.
* The global shortcut Meta+T will trigger a fullscreen configuration ui as a QML effect for the tiles which allows to add, remove and resize tiles
* UI and behavior is a bit similar to the Windows Fancy Zones addon: https://docs.microsoft.com/en-us/windows/powertoys/fancyzones
* Its main scope is to help the workflow with very big monitors, especially ultra wide ones, where most application don't make sense maximized to the full screen (eventually also support games to be full screened to a given tile instead of the whole screen)
* it should get also some bindings for scripting, as its ain goal is not to replicate other popular tiling window managers, but should give the popular kwin tiling scripts to have a more robust infrastructure
* it will eventually get support for a set of predefined layouts, but this is for a second phase

BUG: 438788
2022-12-01 14:39:22 +00:00
Samuel Dionne-Riel
81ff7e6316 libinput/connection: Ensure touchpad defaults are used
The previous logic would set `defaults` to the last found group.

Since a touchpad is a pointer, it would set `defaults` to point
to `[Libinput][Defaults][Pointer]`, and thus the next clause would
try to find `[Libinput][Defaults][Pointer][Touchpad]`, instead of the
expected `[Libinput][Defaults][Touchpad]`. That is, only if a default
was set for Pointer.

Signed-off-by: Samuel Dionne-Riel <samuel@dionne-riel.com>
2022-12-01 12:31:02 +00:00
Nicolas Fella
5cab7c79b4 Revert "plugins/idletime: Adjust the poller to deprecation of simulateUserActivity()"
simulateUserActivity was un-deprecated

This reverts commit 4610aaf614.
2022-12-01 10:24:11 +00:00
Vlad Zahorodnii
8d04733682 plugins/nightcolor: Register its own service name
In order to make monitoring Night Color appearing and disappearing robust,
make Night Color register its own dbus service.

CCBUG: 428854
2022-12-01 09:56:15 +00:00
Nicolas Fella
a6a022f00f Port away from deprecated KWindowSystem API 2022-12-01 08:08:54 +00:00
l10n daemon script
3e13c516c4 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"
2022-12-01 01:50:26 +00:00
Vlad Zahorodnii
7c0cdcf472 backends/wayland: Fix input timestamp in relative motion events
RelativePointer::relativeMotion already provides us timestamps with
microseconds granularity, so we need to convert timestamps in vice versa
order.
2022-11-30 11:20:39 +00:00
l10n daemon script
e691c169de 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"
2022-11-29 01:51:31 +00:00
Vlad Zahorodnii
65cd40e85d backends/wayland: Call wl_pointer.set_cursor when pointer enters an output
We must always call wl_pointer.set_cursor when the pointer enters the
surface.
2022-11-27 11:30:03 +00:00
Vlad Zahorodnii
c784217eae backends/wayland: Use software cursor when pointer is locked
Currently, if the pointer is locked, the wayland backend will create a
subsurface. However, when the cursor moves to one of the screen edges,
it looks weird because the xdg window geometry is computed as bounding
geometry of the main surface and its subsurfaces. However, even after
calling xdg_surface.set_window_geometry, it still looks weird because
subsurfaces are stacked above window decoration.

With the proposed change, when the pointer is locked, the wayland
backend will hide the host compositor and use the software cursor. If
the pointer is unlocked, it will go back to using host cursor.

Long term goal is to make every output have its own cursor to make
output layer logic simpler.
2022-11-27 11:30:03 +00:00
Vlad Zahorodnii
711cdc7825 backends/wayland: Try to reallocate output layer data on beginFrame()
Mesa's implementation of wl_egl_window_resize() is pretty smart. It
avoids immediately resizing the buffers. On the other hand, its API
doesn't enforce that behavior and other implementations of wayland-egl
may choose to use a different strategy.

This change moves wl_egl_window_resize() to beginFrame() to make buffer
resizing handling more nicer. Also, for the record, the drm backend
works in similar fashion.
2022-11-26 13:54:22 +02:00
Vlad Zahorodnii
d8c42ec540 backends/wayland: Simplify pointer locking
At the moment, once the first output gets pointer locked, other outputs
release their locks. It's unnecessary, other outputs can keep their locks.
2022-11-26 11:36:02 +00:00
l10n daemon script
79b35e1070 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"
2022-11-26 01:50:13 +00:00
Vlad Zahorodnii
7a1f97754f wayland: Simplify implementation of xdg_toplevel.set_minimized 2022-11-25 07:43:45 +00:00
Vlad Zahorodnii
0987b55cdd wayland: Prefer input()->pointer()->pos() over cursor pos
On Wayland, the cursor primarily visual role, not functional.
Interactive move resize should get the position from the corresponding
input device.
2022-11-25 07:43:45 +00:00
l10n daemon script
738820d438 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"
2022-11-25 01:51:47 +00:00
Vlad Zahorodnii
9e97c7383c Add support for DecoratedClient::windowClass() 2022-11-24 10:18:05 +00:00
Vlad Zahorodnii
b867f76d41 backends/wayland: Stop forwarding keymap and modifiers
These concepts are hard to map to InputDevice abstractions, so remove
them and let kwin use its own internal keymap instead (rather than
get it overridden by the host compositor's keymap) and track modifiers
based on the events it receives.

If the goal is to have these at any cost, I think the way out of it
would be to provide wayland backend specific signals. I would like to
avoid doing that though because it breaks encapsulation and we would
need some casts in kwin to wire in these events.
2022-11-24 09:34:53 +00:00
l10n daemon script
d4b6c8f911 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"
2022-11-24 01:51:45 +00:00
Vlad Zahorodnii
b4569f5985 Add ShapeCursorSource
ShapeCursorSource provides the contents of the given cursor shape in the
Xcursor theme.

If the given cursor shape is animated, ShapeCursorSource will keep
updating its content based on the value of current sprite's delay value.
2022-11-23 20:10:59 +00:00
Vlad Zahorodnii
e552be6cb1 Add CursorSource
CursorSource acts as a black box providing the contents of the cursor.
That's it, the image and the hotspot.
2022-11-23 20:10:59 +00:00
Vlad Zahorodnii
f881bdf51b backends/drm: Use drmModeGetConnectorTypeName()
It ensures that connector type naming is consistent across compositors
and saves us some work adding string mappings.

drmModeGetConnectorTypeName() uses the same naming scheme as the drm
backend so the client side should be unaffected by this change.

CCBUG: 385135
2022-11-23 13:31:00 +00:00
Nicolas Fella
f764861157 Rename Touch Screen KCM to Touchscreen Gestures
To avoid a conflict with the new Touchscreen KCM under input devices
2022-11-23 10:47:54 +00:00
Xaver Hugl
f70caec4b3 backends/drm: drop explicit modifiers completely if no output config works
Removing modifiers one by one creates a huge amount of combinations that
can make KWin hang for a long time in some cases. Instead of doing that,
leave it up to Mesa to pick a modifier when a setup doesn't work, which
will generally result in the least amount of bandwidth used and should be
able to power all output combinations.
2022-11-22 16:28:38 +00:00
Xaver Hugl
6bb4ebdf04 backends/drm: set hdr metadata to 0
Otherwise we might have broken colors from leftover state of other compositors
2022-11-22 15:41:21 +00:00
Vlad Zahorodnii
af24f5b011 Remove Window.clientPos and Window.clientSize properties
The main motivation behind this change is to reduce the number of
geometry properties, in particular limit the use of clientPos that can't
be expressed as an alias to clientGeometry().topLeft().

The client geometry is not useful to scripts as they lack functions to
go from one type of geometry to another. The scripts use exclusively the
frame geometry.

The client geometry is not that useful in kwin too, similar to scripts,
almost all our window management code works with frame geometry. Client
geometry is useful when requesting the client to resize the window.
2022-11-22 13:40:09 +00:00
Xaver Hugl
a762f68c08 kcmkwin/kwincompositing: remove no longer relevant keywords 2022-11-22 12:57:54 +01:00
Nicolas Fella
8986091878 [libinput] Re-run touchscreen->output mapping when externally clearing output name
When setting a device's output name externally we assign the relevant output to the device

If we pass an empty name we set a null output, which causes a crash the next time the touchscreen is touched

Since passing an empty name semantically means 'Detect output automatically' rerun the mapping heuristic so we get a valid output
2022-11-22 11:15:07 +00:00
Xaver Hugl
a054093580 qAbs -> std::abs 2022-11-22 09:27:23 +00:00
Vlad Zahorodnii
bb53b21c4c wayland: Add more inert Output checks 2022-11-22 08:17:20 +00:00
Aleix Pol
df77fcd9e0 x11window: Calculate the native floor from the begining of the output
If this function is useful to make sure we are properly aligned with the
output's pixels, we should start with the output's 0, otherwise we'll be
carrying over the rounding errors increasingly as our workspace grows.

BUG: 459373
2022-11-21 14:16:33 +00:00
Xaver Hugl
cdeacdbdad backends/libinput: update screens on Workspace::outputsChanged
Using OutputBackend::outputsQueried can cause problems because it's emitted
before output settings like enablement get adjusted to the new output configuration.
It also doesn't react to output changes initiated by KScreen and is in the
way of plans to use multiple output backends at the same time.

BUG: 461901
2022-11-21 14:25:24 +01:00
Mouse Zhang
acb25fbd5e effects/blendchanges: move effect chain position after blur and backgroundcontrast 2022-11-21 16:17:28 +08:00
l10n daemon script
9d1f7cde61 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"
2022-11-20 01:49:41 +00:00
Xaver Hugl
cf3b167d50 effects/kwinquickeffect: ensure view map doesn't contain a nullptr view
BUG: 462014
2022-11-19 13:48:01 +01:00
Xaver Hugl
681368d4cc VirtualDesktopManager: clean up API a bit
Using templates brings nothing except complexity here
2022-11-18 23:35:31 +01:00
Xaver Hugl
147f3509ea Refactor placement code
This removes the usage of x11 virtual desktop ids and makes the code a bit
more readable
2022-11-18 23:35:31 +01:00
Vlad Zahorodnii
8197bf8890 Remove Window.visibleRect property
Scripts don't paint so the visible rect is no of use to them.
2022-11-18 20:04:09 +02:00
Vlad Zahorodnii
3d0101e127 Move window XID properties to X11Window
Scripts can't use platform specific apis so it makes little sense to
have these properties. On the other hand, they can be useful for debug
console.
2022-11-18 19:58:54 +02:00
Vlad Zahorodnii
b622bc5ec5 Remove Window.surface property
Scripts don't have sufficient capabilities to use platform specific
apis. So exposing wayland surface object to scripts makes no sense.
2022-11-18 19:55:43 +02:00
Vlad Zahorodnii
a0971264b8 Remove Window.alpha property
Scripts don't paint, there's little point for exposing this property to
scripts.
2022-11-18 19:54:40 +02:00
Vlad Zahorodnii
65130f85e6 Port Workspace from Window::clientPos() 2022-11-18 16:31:37 +00:00
Vlad Zahorodnii
f9abd04459 Port constraint constraints from Window::clientPos() 2022-11-18 16:31:37 +00:00
Vlad Zahorodnii
0ec732491b Port PopupInputFilter to Window::clientGeometry()
Saves us some math operations.
2022-11-18 16:31:37 +00:00
Vlad Zahorodnii
5e04977d31 Drop SurfacePixmap::contentsRect()
It's unused.
2022-11-18 16:31:37 +00:00
Alexey Andreyev
462d5f0642 utils/serviceutils: Improve Exec key parsing
Take into account Exec field codes.

The change makes possible to have both X-KDE-Wayland-Interfaces field
(for example, kde_lockscreen_overlay_v1)
(and additional arguments for Exec field (for example, %U).

See also:

https://specifications.freedesktop.org/desktop-entry-spec/latest/ar01s07.html

Contributes to:

https://invent.kde.org/plasma-mobile/plasma-dialer/-/merge_requests/105
2022-11-18 15:48:38 +00:00
Nate Graham
c01569e4b8 effects/windowview: make search field's placeholder text accurate
This effect has a search field that doesn't actually search; it filters
through open windows. Let's change its placeholder text to reflect this,
so users don't get confused.
2022-11-17 21:22:29 -07:00
Vlad Zahorodnii
3a7b35a95b backends/wayland: Drop WaylandBackend::flush()
These flush()es are unnecessary, wayland backend will work fine without
them.
2022-11-17 18:08:06 +02:00
Vlad Zahorodnii
8655cc76e8 core: Drop initial window state properties in OutputBackend
Relevant output backends take these properties using their (xyz)Options
struct now.
2022-11-17 14:20:44 +00:00
Vlad Zahorodnii
12acd9bb78 autotests: Port away from OutputBackend::setInitialWindowSize() 2022-11-17 14:20:44 +00:00
Vlad Zahorodnii
528abfb00a backends/{x11,wayland}: Rework passing initial configuration to windowed backends
Currently, OutputBackend stores the initial state for windowed backends.
It's messy because the backends can have different needs. Instead, make
windowed backends take an Options struct with all possible options.
2022-11-17 14:20:44 +00:00
Aleix Pol
69c9f19973 screencast: Don't scale the cursor
Otherwise it gets cutt off when scaling > 1.
This fixes Nate's screencasts (and anyone who has a system like nate's,
that is).

Part-of: <https://invent.kde.org/plasma/kwin/-/merge_requests/3195>
2022-11-17 10:03:33 +00:00
Vlad Zahorodnii
b2d78a5c30 backends/wayland: Decouple from Compositor and Scene
Scene::addRepaintFull() is used to request an output update, but there
are other ways to do it that require referencing neither Compositor nor
Scene.

Part-of: <https://invent.kde.org/plasma/kwin/-/merge_requests/3202>
2022-11-17 09:25:12 +00:00
Vlad Zahorodnii
3aa635430b effects: Drop WindowPaintData.shader property
It allows us to encapsulate SurfaceItem rendering. It's needed to add
support for YUV->RGB conversion fallback path.

Effects that use this property must be ported to OffscreenEffect, see
also OffscreenEffect::setShader().

This is a BREAKING CHANGE!
2022-11-17 08:23:51 +00:00
Vlad Zahorodnii
4363b25b2d effects/invert: Port to OffscreenEffect
Allows us to drop WindowPaintData.shader and to encapsulate rendering of
windows, which is needed to provide YUV->RGB conversion path.
2022-11-17 08:23:51 +00:00
Vlad Zahorodnii
69859aec28 kwineffects: Bring back OffscreenEffect::setShader()
OffscreenEffect can be still used to apply a shader effect to a window.
2022-11-17 08:23:51 +00:00
Vlad Zahorodnii
f06dce9d12 backends/wayland: Remove unused includes 2022-11-16 22:19:00 +02:00
Vlad Zahorodnii
bcb38f366d backends/wayland: Port to xdg-decoration-v1
The server-decoration protocol is deprecated, and the clients should use
the xdg-decoration-v1 protocol instead.

kwin will indicate that it wants server side decoration. If the host
compositor insists on client-side decorations, the wayland backend will
render no csd. However, this is de-facto state at the moment too,
perhaps it can be improved by using libdecor?

Regardless, no csd is the current state too, except that both host and
nested compositors can enter a loop where one side says to use CSD and
the other side says that they want SSD.
2022-11-16 19:56:52 +02:00
Vlad Zahorodnii
be3146873f core: Drop OutputBackend::isReady()
OutputBackend has a concept of readiness. When the host compositor goes
down, the OutputBackend will be marked as not ready, and when it
reappears, the output backend will be marked ready again.

On the other hand, host compositor going down is a niche case, it's not
something that often happens and it's hard to justify adding more moving
parts to the startup code. It's easier to call initialize() and check
whether it fails rather than call initialize() and then monitor isReady.

Therefore, this change drops OutputBackend::isReady() to make startup
simpler.
2022-11-16 14:47:25 +00:00
Vlad Zahorodnii
6951d662d6 backends/wayland: Merge WaylandOutput and XdgShellOutput 2022-11-16 14:47:25 +00:00
Vlad Zahorodnii
d4676cceb3 backends/wayland: Linearize startup sequence
This change removes async bits from the startup code in the wayland
backend to make it simpler. The main motivation behind this change is to
refactor the wayland backend so OutputBackend::isReady() can be removed.
2022-11-16 14:47:25 +00:00
David Edmundson
319c6a4cfa activation: Guard against not having any active window
If we have no active window we shouldn't call lastUsageSerial. We may as
well activate whatever client requested it.
2022-11-16 07:44:52 +00:00
l10n daemon script
9e5c577fdb 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"
2022-11-16 01:56:45 +00:00
Vlad Zahorodnii
98b65bb447 Port a usage of QScopedPointer to std::unique_ptr 2022-11-16 00:38:05 +02:00
Xaver Hugl
34aa734c7b plugins: use more std::unique_ptr 2022-11-15 15:28:37 +00:00
Xaver Hugl
738b04a364 libkwineffects: use more modern C++ 2022-11-15 15:28:37 +00:00
Xaver Hugl
0f3ae0216c kcmkwin/kwinscreenedges: use more modern C++ 2022-11-15 15:28:37 +00:00
Xaver Hugl
95599d2ffd ruleitem: use std::unique_ptr 2022-11-15 15:28:37 +00:00
Xaver Hugl
65e886cde2 backends/drm: support the panel orientation property 2022-11-15 13:25:19 +00:00
Vlad Zahorodnii
e58affc71b wayland: Make debug console placeable
Since the debug console has Qt.BypassWindowManagerHint flag set, it
won't be placed or ensured that it stays in the work area.

On the other hand, unlike X11, kwin won't have problems if the debug
console is managed on wayland.

BUG: 453920
2022-11-15 14:11:18 +02:00
l10n daemon script
16de8cf19c 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"
2022-11-15 01:52:24 +00:00
Aleix Pol
ecbe29640c screencast: Fix how we tell pipewire that the stream has been resized
We need to send sizes in a format that param buffers understand.
This fixes some glitches we'd see when sharing a window and resizing it.

Thanks Jan Grulich for pointing me in the right direction!

BUG: 461590
2022-11-14 13:40:13 +00:00
Xaver Hugl
5fd9871fa7 workspace: silence signed unsigned comparison warning 2022-11-13 14:32:16 +00:00
Xaver Hugl
704d1d639a qBound -> std::clamp 2022-11-13 14:32:16 +00:00
Xaver Hugl
d265535f9b qMin -> std::min 2022-11-13 14:32:16 +00:00
Xaver Hugl
b0b7c8b1d3 qMax -> std::max 2022-11-13 14:32:16 +00:00
Vlad Zahorodnii
f1f58a186d plugins/nightcolor: Add a todo note reminding to remove legacy shortcut 2022-11-13 14:24:54 +02:00
l10n daemon script
4cb06a3713 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"
2022-11-13 01:51:17 +00:00
Arjen Hiemstra
cd65515ea6 scene: Store renderTargetRect as QRectF
This allows the projection matrix calculation to properly calculate the
screen edges without losing bits due to earlier rounding.
2022-11-11 13:10:41 +00:00
Xaver Hugl
9130b947e0 backends/drm: generate modes even if some common modes are available
Some monitors claim to support some but not all common modes, despite the display
supporting them all.
2022-11-10 16:07:52 +00:00
Vlad Zahorodnii
f1e8ce9456 x11: Rename X11StandalonePlatform to X11StandaloneBackend 2022-11-10 16:21:00 +02:00
Vlad Zahorodnii
b830d408af core: Rename Platform to OutputBackend 2022-11-10 10:10:28 +02:00
Vlad Zahorodnii
72883df2aa core: Move workspace bits from Platform to Application
Platform will become OutputBackend so some workspace bits, e.g. the
effects handler, have to move a layer above.
2022-11-10 10:10:28 +02:00
Vlad Zahorodnii
f1369a40f9 core: Drop Platform::supportsNativeFence()
Use Scene::supportsNativeFence() directly.
2022-11-10 10:10:28 +02:00
Vlad Zahorodnii
4610aaf614 plugins/idletime: Adjust the poller to deprecation of simulateUserActivity()
Wrap the implementation of the simulateUserActivity() function in an
BUILD ifdef and make it noop since there are valid usecases in the real
world.
2022-11-10 07:27:20 +00:00
Vlad Zahorodnii
e91b621d53 x11: Stop requesting XCB_EVENT_MASK_COLOR_MAP_CHANGE
It's unused.
2022-11-09 11:52:14 +00:00
Vlad Zahorodnii
af39185a9a wayland: Avoid selecting unused X11 events
We don't use input events on Wayland so Xwayland doesn't need to report
them back to us.
2022-11-09 11:52:14 +00:00
Vlad Zahorodnii
9f345d4dd3 autotests: Fix remaining "using namespace KWayland::Client" 2022-11-08 23:15:17 +02:00
David Edmundson
dadfd7aec8 Drop isCompletelyOpaque optimisation
With the floating geometry this becomes a non-trivial check, at some
point this will cost more than the gl blend itself.
2022-11-08 15:04:48 +00:00
David Edmundson
bcd9f1e958 Provide SurfaceItem::shape as a floating vector
Our logical co-ordinates for shape can be floating. The shape is used to
determine final vertices on screen.

The commit appears to introduce some new loops but they're mostly what
QRegion would be doing internally so it shouldn't impact performance.
For most cases we just have a single rectangle in our shape anyway.

opaqueRegion is unchanged for now.
2022-11-08 15:04:48 +00:00
Zhiyi Zhang
68d1ee8f08 x11window: Don't send a final ConfigureNotify event in leaveInteractiveMoveResize()
With 74eb0d8, ConfigureNotify events are always sent when moving windows. It's no longer necessary
to send a final ConfigureNotify event after a window is moved.
2022-11-07 21:16:06 +08:00
Zhiyi Zhang
74eb0d861b x11window: Send ConfigureNotify events when moving windows
This removes the optimization that sends only one ConfigureNotify event after moving is completed.
However, other windows may depend on ConfigureNotify events to adjust their position in a timely
manner. For example, the shadow window surrounding the main login window of WeChat on Wine.

BUG: 449302
2022-11-07 16:11:23 +08:00
l10n daemon script
163c36595e 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"
2022-11-07 01:51:06 +00:00
Vlad Zahorodnii
5762b9a4cc core: Drop Platform::supportsGammaControl()
If the platform doesn't support setting gamma ramps, let the request
fail. In long term, we need a software fallback too so this property is
not that relevant.
2022-11-05 09:03:39 +00:00
Vlad Zahorodnii
084f92bd7a backends/x11: Make OverlayWindow factory function private to the backend
The concept of an overlay window is specific to X11 and it's not present
on other platforms.
2022-11-05 08:44:58 +00:00
Vlad Zahorodnii
1f7bfc7902 backends/x11: Move OverlayWindow handling to standalone backend 2022-11-05 08:44:58 +00:00
Aki Sakurai
62af17617f Screencast: Fix inverted screencast on OpenGLES and memfd
The output of glReadPixels is in inverted when GLTexture is not inverterd.
2022-11-04 23:19:42 +00:00
Marco Martin
a8d0d7f8a5 Option for WindowHeap to not alter the layout
Bring back the DesktopGrid option to not alter window position
so that the grid look like perfect screenshots of each desktop

BUG:455350
2022-11-04 12:15:50 +01:00
Vlad Zahorodnii
432d1f9d31 Remove unused include 2022-11-03 20:30:06 +02:00
Vlad Zahorodnii
af0d39c118 Remove some commented out code 2022-11-03 17:55:46 +00:00
Aleix Pol
fee348d147 buttonrebindsfilter: Add bracesbuttonrebindsfilter: Add braces 2022-11-03 16:41:44 +01:00
Aleix Pol
baac63ca13 buttonrebinds: Fix infinite loops with RebindScope
This way it's possible to assign A to B and B to A (i.e. swap buttons)
without getting it crash in your face.
2022-11-03 16:41:44 +01:00
Aleix Pol
6bcedf3aad buttonrebinds: Allow sending tablet tool button events
Makes it possible to trigger button events from your tablet tool.
2022-11-03 16:41:44 +01:00
Aleix Pol
609065528e buttonrebinds: Allow configuring tablet tool rebinds
Makes it possible to assign an action to one of the tablet tool buttons.
2022-11-03 16:39:53 +01:00
Aleix Pol
d0da1cf751 buttonrebinds: Allow binding mouse button actions
Makes it possible to assign a pointer button event as the trigger to a
button rebind. This would make it possible to make a mouse click the
outcome of such actions.
2022-11-03 16:39:53 +01:00
Vlad Zahorodnii
d257da0a00 Use StrutRects to represent restricted areas
This saves us some StrutRects -> QRegion conversions and it might be
useful for floating point struts.
2022-11-03 13:53:41 +00:00
Vlad Zahorodnii
78ed1e2add Move OpenGL safe point handling to Compositor/CompositorX11
It's not something that output backends care about, so move it to
Compositor.
2022-11-03 12:09:16 +00:00
Vlad Zahorodnii
364c2f3a14 Drop Platform::requiresCompositing()
It doesn't seem to be used elsewhere other than
Options::isUseCompositing(), which is quite X11-specific.
2022-11-03 12:09:16 +00:00
Vlad Zahorodnii
632c3508a7 build: Move libkwineffects specific ecm_setup_qtplugin_macro_names to src/libkwineffects 2022-11-03 11:46:41 +00:00
Vlad Zahorodnii
c76563b174 core: Drop Platform::warpPointer()
It's odd to manipulate host cursor position and it's not highly
important, for example we haven't had a need to warp the cursor on
wayland.

The main motivation behind this change is to slim down the Platform to
make it more output oriented.
2022-11-03 10:35:30 +00:00
l10n daemon script
0c1f5c20e0 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"
2022-11-03 01:54:29 +00:00
Aleix Pol
6ab6d3124a screencasting: Make sure we are reporting properly scaled damage values
It should be in stream pixels rather than logical
2022-11-02 20:18:27 +01:00
Aleix Pol
ea4741cbcc screencasting: Polish region case
- By scaling: make sure we are scaling by the feed size rather than the
output size, which is irrelevant in this case.
- By positioning: properly position the outputs on the feed if the feed
scale is != 1
2022-11-02 20:18:27 +01:00
Aleix Pol
eb7f93002c screencasting: No need to keep calculating the textureSize 2022-11-02 20:18:27 +01:00
Xaver Hugl
d5a2c639a0 window: fix checkWorkspacePosition moveRight/Bottom
With QRectF, moveRight and moveBottom have an effective offset of 1 vs QRect
2022-11-02 17:58:29 +00:00
Xaver Hugl
264ecf40f8 placementtracker: fix some windows not being restored
If a window was moved by the user, it got effectively blacklisted from being
ever restored again. Instead of only tracking the last restore point, compare the
current window state with the state it had when the output configuration was last
seen. If either that or the last restore point match the window, restore the old
window state.
2022-11-02 17:58:29 +00:00
Xaver Hugl
84635c71ec plugins/screencast: centralize format querying into the RenderBackend
BUG: 460563
2022-11-02 17:10:10 +01:00
Vlad Zahorodnii
e73fedf2ae x11: Use moveResizeGeometry() instead of frameGeometry() where appropriate 2022-11-02 11:00:03 +00:00
Vlad Zahorodnii
a235cd6d26 build: Hardcode kwin name
We use KWIN_NAME, KWIN_INTERNAL_NAME_X11 and KWIN_INTERNAL_WAYLAND
properly only in a few places. In other, we use hardcoded names.

Let's not bother and hardcode kwin names everywhere rather than have one
foot in and one foot out, it's simpler.
2022-11-02 10:21:23 +00:00
Vlad Zahorodnii
1801421080 Forward declare Xkb in keyboard_input.h 2022-11-02 09:21:55 +00:00
Vlad Zahorodnii
391c777936 Remove unused keyboard_input.h include 2022-11-02 09:21:55 +00:00
l10n daemon script
33825b2e0a 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"
2022-11-02 02:00:07 +00:00
Nicolas Fella
3eb9106466 Expose enabledByDefault of input device to DBus 2022-11-01 18:21:42 +00:00
Vlad Zahorodnii
89607dfebd qAsConst -> std::as_const
We started using std::as_const() in some parts of kwin, so let's use it
everywhere for the code consistency sake.
2022-11-01 16:52:01 +02:00
l10n daemon script
2f7c77af18 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"
2022-11-01 01:53:35 +00:00
Weng Xuetian
fda53d8253 Fix blur/contrast for X11 window if Xwayland is not scaled.
X property from X11 window contains X native coordinates. Need to
apply transform to use them in the effects like blur/contrast.

BUG:461021
2022-10-31 22:42:10 +00:00
Xaver Hugl
9fd260c3c9 backends/drm: add logging for adding GPUs
We already log when a GPU gets removed, it only makes sense to also log
when it got added
2022-10-31 20:46:51 +00:00
Nicolas Fella
251e211c5b [effects/windowview] Don't allow setting non-global shortcuts
Only global shotcuts make sense here
2022-10-31 19:46:15 +00:00
Vlad Zahorodnii
29188eb7b2 Move InputDevice::{outputName,setOutputName} implementation to cpp file
Removes the need for Q_UNUSED macro.
2022-10-31 19:07:30 +00:00
Xaver Hugl
b5873ef792 backends/drm: fixes for bitmask drm properties 2022-10-31 17:05:26 +00:00
Xaver Hugl
420358709a backends/drm: don't test hardware rotation if not supported by the driver 2022-10-31 17:05:26 +00:00
Vlad Zahorodnii
d7b710a9a1 Fix -Wunused-variable warnings 2022-10-31 15:50:37 +00:00
Vlad Zahorodnii
7fffe99328 build: Add -Wno-unused-parameter compiler option
Due to being a compositor, kwin has to conform to some certain
interfaces. It means a lot of virtual functions and function tables to
integrate with C APIs. Naturally, we not always want to use every
argument in such functions.

Since we get -Wunused-parameter from -Wall, we have to plumb those
unused arguments in order to suppress compiler warnings at the moment.

However, I don't think that extra work is worth it. We cannot change or
alter prototypes in any way to fix the warning the desired way. Q_UNUSED
and similar macros are not good indicators of whether an argument is
used too, we tend to overlook putting or removing those macros. I've
also noticed that Q_UNUSED are not used to guide us with the removal no
longer needed parameters.

Therefore, I think it's worth adding -Wno-unused-parameter compiler
option to stop the compiler producing warnings about unused parameters.
It changes nothing except that we don't need to put Q_UNUSED anymore,
which can be really cumbersome sometimes. Note that it doesn't affect
unused variables, you'll still get a -Wunused-variable compiler warning
if a variable is unused.
2022-10-31 15:50:37 +00:00
Xaver Hugl
c308a262be kcmkwin/compositing: remove tearing prevention and scaling options
The option are confusing and noone should ever need to touch them.

BUG: 450279
2022-10-31 14:43:54 +00:00
Nicolas Fella
378006cc73 [effects/overview] Don't allow setting non-global shortcuts
Only global shotcuts make sense here
2022-10-31 13:28:15 +00:00
Xaver Hugl
3f3d41f259 backends/drm: fix common mode generation
There were overflows in the bandwidth estimation calculation. To simplify things,
also only generate common modes if the display doesn't advertise them on its own
already.
2022-10-31 12:49:25 +00:00
Aleix Pol
f649363a4e Address warnings
|-operator on bool
Comparison on technically different enums.
2022-10-31 12:23:06 +00:00
Albert Astals Cid
a9f5b56804 Make gettext happier
Seems we can't have a plural with an argument in singular and not in the
plural

a format specification for argument 2, as in 'msgstr[0]', doesn't exist in 'msgid_plural'
msgfmt: found 1 fatal error
2022-10-31 08:17:11 +00:00
l10n daemon script
365dfaa4c0 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"
2022-10-31 01:53:33 +00:00
Aleix Pol
8417492781 Include org.freedesktop.locale1 support
Makes it possible to follow the dbus service for locale configuration,
making it possible to have third parties integrate with Plasma.

This is done opt-in for now, it can be adopted generally in the future,
if necessary.
2022-10-30 23:03:55 +01:00
Yunus Erdem Ergül
96cfc411f0 scripting: Expose cursor position to the API
Added cursorPos property and cursorPosChanged signal to WorkspaceWrapper
2022-10-30 10:34:05 +00:00
Aleix Pol
47c3c2d143 libinput: Support switching the targetted output with a shortcut
I was told it's how artists are used to using these tablets so it makes
sense to support the workflow.
2022-10-29 22:30:03 +00:00
Aleix Pol
77c5198dc8 libinput: Allow setting an empty output name
For tablets, it signifies "follow the active output".
2022-10-29 22:30:03 +00:00
Aleix Pol
a11681918a OSD: Fix OSD::show from the non-main thread
If it's issued from a different thread, pass it to the main one so it's
eventually displayed.
Otherwise, it would just crash kwin.
2022-10-29 22:30:03 +00:00
l10n daemon script
ef60c8e53c 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"
2022-10-29 01:52:40 +00:00
Xaver Hugl
b3d0698126 backends/drm: rewrite most of EglGbmLayerSurface
This rewrite ensures that
- formats are tested for multi-gpu transfer
- dmabuf with either 10bpc or 8bpc buffers are preferred to cpu copy
- formats where drmModeAddFB2 fails are skipped
2022-10-28 16:09:10 +02:00
Xaver Hugl
cd6a219961 backends/drm: make the buffer target constant
There's no reason for it to be dynamic
2022-10-28 16:09:10 +02:00
Xaver Hugl
228575f0ae backends/drm: store creation flags in GbmBuffer 2022-10-28 16:09:10 +02:00
Kai Uwe Broulik
0902d91a42 nightcolormanager: Emit timing change only when they have actually changed
Avoids pointless DBus traffic.

Signed-off-by: Victoria Fischer <victoria.fischer@mbition.io>
2022-10-28 11:43:46 +00:00
Vlad Zahorodnii
d89feb33b2 Remove some Q_UNUSED
It's weird to wrap a return value in Q_UNUSED macro.
2022-10-28 09:40:08 +00:00
Vlad Zahorodnii
57eb60122b Make Atoms code more readable
It improves readability by making calling getReply() explicit.
2022-10-28 09:40:08 +00:00
Vlad Zahorodnii
b30e81cb22 x11: Keep compositing mode untouched if kwin crashes
kwin can crash for reasons that have nothing to do with compositing. If
that's the case, after two crashes compositing will be permanently
disabled and you would need to go to system settings to reenable it, the
timestamp based check in the x11 backend won't be effective.

CCBUG: 452344
2022-10-28 09:38:38 +00:00
Vlad Zahorodnii
fd978838cc qpa: Geometry handling fixes
We don't need to emit {x,y,width,height}Changed signals ourselves. We
also need to send an expose event otherwise the window can be rendered
incorrectly if it's resized. The logic follows QtWayland implementation.
2022-10-28 08:47:48 +00:00
Vlad Zahorodnii
9774eacbbe Remove ServiceTypes info
Binary plugins don't need it. KPackage packages have "KPackageStructure"
property instead.
2022-10-28 06:58:44 +00:00
Vlad Zahorodnii
61644305f0 wayland: Drop unused field in XdgOutputManagerV1Interface 2022-10-27 11:57:52 +00:00
Vlad Zahorodnii
0c34957625 wayland: Hide XdgOutputV1Interface class
With the pull approach, the XdgOutputV1Interface class doesn't have to
be exposed in the public api and can be made private to simplify the
implementation of the xdg-output-v1 protocol.
2022-10-27 11:57:52 +00:00
Vlad Zahorodnii
b40d76d35c wayland: Prevent matching dnd actions after drop
Currently, kwin will continue matching dnd actions after a drop. This is
mainly needed in order to make "ask" action work.

However, it appears like there are clients in the wild that update offer
actions after receiving wl_data_source.dnd_drop_performed and wl_data_device.drop
events.

One could argue that's a client bug, and perhaps it is, but the spec is
vague about that. In meanwhile, let's make sure that dnd action matching
is active after drop only when the selected data source action is "ask."
2022-10-27 11:03:06 +00:00
Łukasz Patron
a9acef8573 x11: Don't force QT_QPA_PLATFORM=xcb
This is basically a cherry pick of 77ec43d5e (Don't force
QT_QPA_PLATFORM=wayland), except for X11.
2022-10-27 08:03:59 +00:00
Łukasz Patron
c2b4f03f96 x11: Don't force QT_NO_GLIB=1
This breaks certain apps, e.g. KDE System Settings when launched from
overview effect.

BUG: 460980
2022-10-27 08:03:59 +00:00
Vlad Zahorodnii
a9833dc9dd scripting: Prefer metadata.json over metadata.desktop in GenericScriptedConfig
KPluginMetaData in KF 6 doesn't load desktop files anymore. It means
that plasma packages need to come with json metadata files.

This change adjusts the generic scripted config loader so it can load
configuration even for packages with no metadata.desktop files.
2022-10-27 07:35:36 +00:00
l10n daemon script
109bdf8f42 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"
2022-10-27 01:50:21 +00:00
Xaver Hugl
2997fb24bb x11window: revert more from 3a28c02f
BUG: 461032
2022-10-26 23:17:36 +00:00
Xaver Hugl
1dcbc3c6f8 backends/drm: fix format sorting
As the drm format number of 10 bit colors is lower, the fallback sorting
preferred those formats, even if KWIN_DRM_PREFER_COLOR_DEPTH=24 was set.
To fix that, prefer 8 bit colors over something random.
2022-10-26 18:46:13 +00:00
Vlad Zahorodnii
8fa1883cd9 effects/invert: Make it fully responsible for inverting the screen
The X11 standalone backend has an obscure fallback to hw screen
inversion if compositing is disabled. While it's great, it conflicts
with existing features such as night color.

In order to make code cleaner and clean up dependencies, this change
moves screen inversion shortcut to the invert effect. While it can
potentially affect users that don't use compositing, I think the number
of such affected people is very small.

In hindsight, preferring hw over sw transform is nice, but I think we
need to analyze it first and then come up with a proper solution that
integrates with color management and works great both on x11 and wayland.
2022-10-26 18:18:36 +03:00