ScreencastStream is a C++ class, but we're having C style event handling
as static functions within the class. Mixing two styles within a class
isn't very clear.
We can turn them into normal methods with some thin wrapper functions
round the event handling.
Qt6 documentation states:
"Note: When using this window in combination with QQuickRenderControl,
the result of this function is an empty image, unless the software
backend is in use. "
We support a mode of using openGL rendering but then exporting as pixmap
images for Aurorae. In this case we should simply grab data from our
FBO.
BUG: 471041
The event spy is removed when xwayland closed, but it's based on the
process not the wayland socket, so it can be temporarily out of sync.
There were no guards for the connection being null.
BUG: 471789
glCopyTexSubImage2D is super slow on Intel GPUs on wayland.
We have an existing method to read from the framebuffer that is used in
the blur and other effects.
Rather than creating a scratch framebuffer every frame we keep a cache
per window for the lifespan of the effect.
BUG: 469151
qPrintable creates temporary objects that are destroyed before
`xkb_keymap_new_from_names` is called. It's highly likely that the data
we pass to xkbcommon will be overwritten by random data by that point.
Fix that by storing values as QByteArrays just like
`Xkb::loadKeymapFromConfig` does.
Static plugins being linked with shared libraries doesn't work smoothly.
POSITION_INDEPENDENT_CODE target property needs to be set for
every such plugin. However, there can be targets that we have no control
over, which need POSITION_INDEPENDENT_CODE to be set too. Asking such
projects to add this property and them refusing to do so would be
reasonable because kwin's entire static plugin pipeline is weird.
The test framework was made a shared library because kwin build
directory used to get really big (in 10s of gigabytes).
Due to the -fPIC issues, this change makes the test framework a static
lib again. Obviously, this brings back the big build directory problem.
But, it's not as terrible as it used to be. With this change, kwin build
directory is a couple of gigabytes in debug build, which is a lot but
not as bad as it used to be before.
Window captions have a suffix for disambiguation, based on window
captions of other mapped windows.
In xdgshell we update this when a caption changes, but this could be
before a window is mapped. This can lead to two windows at once having
the same suffix, as a suffix could be used but not in the list of
searched clients.
BUG: 450369
Outputs get disabled before they get destroyed, so destroying the window
when the output gets disabled and when it gets destroyed causes the window
to be destroyed twice and run into an assert
The InputConfig was introduced to handle tests that don't have valid
kwinApp object. Those tests have been either reworked or dropped, so
let's drop the InputConfig to tidy the config stuff.
Interactions with KScreen cause settings to be reset to the default when the lid
gets closed, so handling lid closing in KWin needs to wait until KScreen no longer
writes configs
BUG: 471282
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.
Because the kcm list has to be maintained manually, it's prone to get
outdated and incomplete (it already is!). On the other hand, "configure
window manager" is somewhat redundant as same kcms can be opened in
system settings.
If a gbm_bo is allocated with GBM_BO_USE_WRITE, it will be backed by a
dumb buffer under the hood. However, it seems like neither gbm_bo_get_fd()
nor gbm_bo_get_plane_fd() would return valid file descriptors, which are
required to fill in DmaBufAttributes.
As an interim solution, this change makes the GbmGraphicsBufferAllocator
allocate dumb buffers on its own rather than delegate it to gbm.