Commit graph

92 commits

Author SHA1 Message Date
Vlad Zahorodnii
784d48ef52 Port away from deprecated KConfigBase::group() api 2023-11-28 10:02:03 +00:00
Xaver Hugl
673cb16f15 utils: move drm format list to a cpp file
Makes compilation a little bit faster and removes warnings about the unused
function in some files
2023-11-24 16:14:07 +01:00
Vlad Zahorodnii
86084d118c libkwineffects/ -> effect/ 2023-11-20 11:32:43 +00:00
Vlad Zahorodnii
36021b12a7 Drop redundant "kwin" prefix in some filenames 2023-11-16 13:37:50 +00:00
Aleix Pol Gonzalez
3568829216 opengl: Add support for NV12 on Wayland dmabufs
Offers wayland clients the possibility to send us their contents using
an NV12 texture.
It implements it by rendering into scene using a shader.
2023-11-15 21:32:25 +01:00
Xaver Hugl
ee146d33b9 libkwineffects: move files out to more fitting places 2023-11-14 17:03:40 +01:00
David Edmundson
aec896acc0 wayland: Prefer security context appId for permission lookup where available
The security context appId is set by the launching container (i.e
flatpak) and is therefore more trustworthy than any other source of
application ID.

Use this when looking up allowed wayland extensions.
2023-11-13 10:41:35 +00:00
David Edmundson
4f9531ad77 Support SecurityContextManagerV1
This allows KWin to securely identify the client for a given connection,
without relying on the process name.

This patch does not do anything meaningful with the application ID other
than store it.

This first version does not support kwin restarts, it can come
afterwards.

Testing done:
With latest flatpak, running `WAYLAND_DEBUG=1 flatpak run org.telegram.desktop |& grep security`
shows that flatpak itself bound the security context, and the client did not see it advertised.
2023-11-13 09:51:28 +00:00
Xaver Hugl
bd6b946a7e utils/edid: log a warning when parsing fails 2023-11-10 16:50:31 +01:00
Vlad Zahorodnii
d7b1661e08 Merge libkwineffects into libkwin
libkwineffects was introduced when kwin used to be an executable. It
provided an api to implement effects and shielded from the technical
quirks in kwin.

Over the time, kwin internals had been split and abstractions were
refactored so they can be consumed in scripts or plugins. Besides that,
new ways to implement extensions have been introduced, which use
kwin's internal abstractions.

On the other hand, effects continue using libkwineffects specific apis.
This has a few issues: qtquick effects use both apis and it bites us,
duplicating same apis.

The best solution so far is to merge libkwineffects with libkwin, and
replace libkwineffects abstractions with libkwin abstractions, e.g.
EffectScreen -> Output, etc. This change takes care of adjusting libs.

Obviously, the main disadvantage of doing so is that binary effects
have to be recompiled every time new libkwin is released. But it's
already the case with libkwineffects too.
2023-10-25 12:46:12 +00:00
Laurent Montel
bc6116c5a7 There's no QVector anymore, QList is the QVector in Qt6 2023-10-19 13:43:53 +00:00
Xaver Hugl
ae84480fbf outputconfigurationstore: add new config system
Instead of an external service (like KScreen) storing and restoring output configurations,
with this commit KWin takes over that responsibility. This allows it to, among other things,
generate appropriate configs for new sets of outputs immediately, and take KWin-internal information
about outputs into account when generating them.

CCBUG: 474021
CCBUG: 469653
CCBUG: 466342
CCBUG: 470863
CCBUG: 466556
BUG: 466208
BUG: 455082
BUG: 457430
2023-10-05 20:29:04 +02:00
Nicolas Fella
47edb14425 Adapt to KService::property API change 2023-10-05 13:44:48 +00:00
Vlad Zahorodnii
0b21c53d44 Move resource_cast helper to shared utils/ directory 2023-09-30 08:09:34 +00:00
Vlad Zahorodnii
e0074d6078 Move wayland utils to shared utils directory 2023-09-30 08:09:34 +00:00
Vlad Zahorodnii
de36fe82e8 wayland: Integrate KWaylandServer classes into KWin namespace 2023-09-15 16:31:15 +03:00
Vlad Zahorodnii
8bf2318800 wayland: Drop "_interface" from filenames
The cpp files in the wayland directory are named after protocol names.
"_interface" does not contribute anything new.
2023-09-15 13:13:43 +00:00
Vlad Zahorodnii
79a0bc3f80 utils: Add static FileDescriptor::isReadable() overload 2023-09-11 15:47:45 +00:00
Xaver Hugl
ed02051a4a libkwineffects: move x server version query to xcb utils 2023-09-07 21:13:16 +02:00
Xaver Hugl
a5df88b0de libkwineffects: move linux kernel version query out of GLPlatform
It has nothing to do with OpenGL
2023-09-07 21:13:15 +02:00
Xaver Hugl
56aab75a57 plugins/qpa: handle modifiers more correctly
Instead of hardcoding ARGB8888 and using implicit modifiers, look through
the list of available formats and modifiers and pick a match that egl will
actually accept.
2023-08-18 13:17:38 +00:00
Xaver Hugl
f60727c438 utils/udev: drop Ptr alias
It's not very useful and makes it less clear what the type is
2023-08-11 15:58:16 +02:00
Xaver Hugl
74f10d0cdf port most uses of the reset(new ...) pattern to std::make_unique 2023-08-11 15:58:15 +02:00
Xaver Hugl
a64e43e6b1 utils/filedescriptor: add helper to query if the fd is readable 2023-08-07 18:51:04 +00:00
Xiao YaoBing
1502fa9ab1 prevent the primaryGpu is a usb device in multi-gpu scenes
if usb device is the primaryGpu, the device unplug kwin_wayland exit

`   } else if (device->action() == QStringLiteral("remove")) {
            DrmGpu *gpu = findGpu(device->devNum());
            if (gpu) {
                if (primaryGpu() == gpu) {
                    qCCritical(KWIN_DRM) << "Primary gpu has been removed! Quitting...";
                    QCoreApplication::exit(1);
                    return;
                } else {
                    gpu->setRemoved();
                    updateOutputs();
                }
           }`
2023-07-18 08:44:09 +00:00
Laurent Montel
b823747c3b Add explicit moc includes to sources for moc-covered headers
* speeds up incremental builds as changes to a header will not always
  need the full mocs_compilation.cpp for all the target's headers rebuild,
  while having a moc file sourced into a source file only adds minor
  extra costs, due to small own code and the used headers usually
  already covered by the source file, being for the same class/struct
* seems to not slow down clean builds, due to empty mocs_compilation.cpp
  resulting in those quickly processed, while the minor extra cost of the
  sourced moc files does not outweigh that in summary.
  Measured times actually improved by some percent points.
  (ideally CMake would just skip empty mocs_compilation.cpp & its object
  file one day)
* enables compiler to see all methods of a class in same compilation unit
  to do some sanity checks
* potentially more inlining in general, due to more in the compilation unit
* allows to keep using more forward declarations in the header, as with the
  moc code being sourced into the cpp file there definitions can be ensured
  and often are already for the needs of the normal class methods
2023-07-15 08:40:49 +00:00
Xaver Hugl
7872e7cb22 backends/drm: hardcode a list of known formats instead of querying egl for information on drm formats 2023-06-20 18:24:37 +02:00
Vlad Zahorodnii
df8cb7df3c wayland: Make surface damage buffer local
This allows us to avoid losing precision when updating surface pixmaps.
Surface damage needs special handling either way.

Another advantage from switching to buffer damage is that it lets us to
decouple surface textures from surface items, which is useful for making
surface helpers more reusable.
2023-06-20 08:27:18 +00:00
Xaver Hugl
d8e57f7886 backends/drm: improve multi gpu performance with NVidia as secondary GPU
With the Nvidia driver, linear textures are external_only, so additional
measures need to be taken to make the egl import path work

CCBUG: 452219
2023-06-20 09:59:42 +02:00
Vlad Zahorodnii
30ac125986 backends/wayland: Use linux dmabuf feedback to get main device
Currently, the render node is hardcoded. It works okay as long as the
main device and the hardcoded node are the same. But it breaks on multi
gpu setups where the render device is not /dev/dri/renderD128.
2023-06-04 18:07:29 +00:00
Xaver Hugl
f1536973d4 introduce ColorDescription and fix screen casting with color management 2023-05-23 22:49:12 +00:00
Xaver Hugl
7fa12ee4a6 utils/edid: use the common Colorimetry class instead of a separate struct 2023-05-23 22:49:12 +00:00
Aleix Pol
d6b07b313f libkwineffects: Stop including xcb/xcb.h everywhere
Provide a kwinxcb.h header file instead that offers the xcb-specific bits
from that API. It helps keep kwin effects disconnected from XCB.
2023-05-15 18:59:46 +00:00
Xaver Hugl
2fb95eb80c utils/edid: add color and HDR information 2023-05-15 17:01:03 +00:00
Xaver Hugl
a48c98f5ab xcbutils: fix nativeFloor
The floor was not done in the X-native coordinate space but with double
scaling

BUG: 459373
2023-05-10 10:52:51 +00:00
Xaver Hugl
4f9f73e28d utils/edid: use libdisplay-info 2023-05-09 10:52:04 +00:00
Vlad Zahorodnii
60dc812b21 utils: Fix FileDescriptor duplicates potentially leaking to child processes
dup() doesn't duplicate flags such as FD_CLOEXEC.
2023-04-25 06:07:22 +00:00
Vlad Zahorodnii
e9614f030c Move vsync monitor helpers to utils/
There was no utils directory when they had been introduced.
2023-04-15 17:51:28 +00:00
Xaver Hugl
c51824b535 Add OutputManager for taking care of output settings in KWin
As a first step to move away from having an external service remember output settings
for KWin, this commit introduces an output manager that can load configuration files
and generate new output configurations.
2023-03-28 16:19:09 +02:00
Vlad Zahorodnii
1211d8e3d6 Prefix more kwineffects includes with libkwineffects/ 2023-03-25 21:05:12 +00:00
Vlad Zahorodnii
e88a4e34a3 Remove some include_directories()
It seems we've settled on dir/dir/header.h includes, so let's use them
consistently.
2023-03-23 14:37:48 +02:00
Vlad Zahorodnii
19fec2a657 backends/x11: Use DRI3 directly
At the moment, the buffers for wsi are allocated implicitly by the EGL
implementation, which is fine for "normal" use cases. But we start
hitting the ceiling the moment we need to something more advanced. For
example the EGL backend creates a dummy fbo object wrapping the default
framebuffer, meaning that we cannot pass it to qtquick (because it can
use its own opengl context).

Another reason for using explicit buffers is that it lets us to clean up
some output related abstractions.
2023-03-09 15:56:46 +00:00
Vlad Zahorodnii
fd9504f649 wayland: Fix interactive resize of debug console
The internal window doesn't gravitate the geometry during interactive
resize so it can produce unexpected results when dragging the top-left
window corner.
2023-03-06 10:10:33 +00:00
David Redondo
693ea96599 Fix edid serial parsing
Descriptor blocks are 18 bytes, the serial number one has space
for 13 bytes of serial number.
BUG:466136
FIXED-IN:5.27.2
2023-02-24 11:06:02 +00:00
David Redondo
7366545d0f Move Layer and QuickTile enum to kwinglobals.h
Q_NAMESPACE can ever only be used once for a namespace otherwise
there will be multiple defintions of the staticMetaObject.
2023-02-20 20:22:26 +00:00
Tobias Berner
99b2e6072c Add missing cerrno include. 2023-02-17 09:36:26 +00:00
Aleix Pol
96962941e3 QuickTile: register enum to metaobject/QDebug 2023-01-24 17:58:26 +01:00
Nate Graham
6a1552efb6 utils/xcbutils: reduce severity of "precision lost" message a debug
Right now this is marked as critical, but it's not a critical error.
Make it a debug to avoid spamming logs with not-very-actionable
information.

BUG: 463259
FIXED-IN: 5.27
2023-01-05 13:59:43 -07:00
Xaver Hugl
3204d6ac3c port all headers to pragma once 2022-12-16 20:58:17 +00: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