Commit graph

25096 commits

Author SHA1 Message Date
Vlad Zahorodnii
54e2a5761c wayland: Use correct bounds size when computing the source box
The buffer transform specifies a transform from the buffer coordinate
space to the surface coordinate space.

The inverse buffer transform specifies a transform from the surface
coordinate space to the buffer coordinate space.

OutputTransform::map(QRect, QSizeF) expects both arguments to be in the
same coordinate space.

In case of SurfaceInterfacePrivate::computeSourceBox(), both should be
scaled surface coordinates so bufferTransform.inverted() maps the source
rect to the proper buffer coordinate space.
2023-08-21 12:27:06 +00:00
Xaver Hugl
7582d72eac backends/drm: cache the canonical file path of the device 2023-08-21 13:41:57 +02:00
Kai Uwe Broulik
410ca44e6e XdgPopupWindow: Reposition for non-reactive positioners
Ensures that e.g. context menus move about with their parents when they
get moved around.

However, as per spec don't re-constrain the window when its positioner
is non-reactive. This change calculates the offset from its parent window
once initially and places the window relative to that whenever the parent
moves.

Only when the positioner is reactive, will it recalculate the placement fully.

BUG: 461994
2023-08-21 11:17:18 +00:00
Kai Uwe Broulik
74b68a63b5 Drop bounds argument from transientPlacement
XdgPopupWindow disregards it for the most part anyway and asks workspace
for the placement area directly. Also gives XdgPopupWindow more control
on the placement when it's all contained inside of it for the upcoming commit.
2023-08-21 11:17:18 +00:00
Xaver Hugl
adae140d57 backends/drm: delete egl layers before the egl backend
And ensure a context is current when deleting them
2023-08-21 10:34:09 +00:00
Xaver Hugl
5340d729aa backends/drm: move layers out of the pipeline state
They're not actually supposed to be ever reverted, so having them in the
state is just unnecessary overhead
2023-08-21 10:34:09 +00:00
David Edmundson
f7fb9476b3 xwl: Handle X11 clipboard owners closing more thoroughly
Selection acts as an abstraction around multiple X11Sources, when we get
a new source we asyncronously emit that x11OffersChanged when it
completes.

If the selection is lost, we were just deleting the source, without
notifying other parts.

XwlDataSource is the datasource that SeatInterface knows about. We need
to delete this when the X11 connection is no longer valid. SeatInterface
will update the selection when the XwmlDataSource is deleted if it's the
active selection.

The hook is introduced as updating the selection in Clipboard will cause
Selection to delete m_xSource which gets messy.

BUG: 449909
2023-08-21 07:58:12 +00:00
Xaver Hugl
261121547d backends/drm: check explicit gpu paths for symlinks
Otherwise we don't process hotplugs when we should
2023-08-19 13:16:29 +00:00
Ismael Asensio
9add143a40 kcms/decoration: Fix highlight when hovering the preview
The preview item implements hover event filters, which by default
are accepted and not propagated to their parent, breaking the
hightlight on hover for the GridView.

We can simply "ignore()" those events so they are propagated,
but still fully functional.

Preemptively, do the same also for mouse events, which seem to be
already propagated now, but shouldn't according to the QQuickItem
documentation.

CCBUG: 473011
2023-08-18 20:39:32 +02:00
David Redondo
00f1382f27 wayland: Use correct window resource when sending parent_window
While not common a client can have bound the global multiple times
and create window objects through all of them. In this case the event
send to the client would carry the wrong object since only the clients
of the two resources were checked for equality.
We can save the resource of the window managment the window
belongs to by extending the resource and storing it there.
Sending the initialState has been moved out of resource_bind since
it happens directly after allocate() and there being no opportunity
to set the custom wmResource field in between.
2023-08-18 13:35:06 +00: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
Vlad Zahorodnii
36960d8572 plugins/blur: Rewrite it
Given how the blur effect works, if a pixel changes, the surrounding
pixels may have to be repainted as well. Currently, it's achieved by
expanding the damage in the BlurEffect::prePaintWindow() function.
However, it means that the blur effect should see both surface and
buffer damage in the pre paint pass.

Unfortunately, after refactoring surface and buffer damage tracking,
kwin no longer provides the buffer damage in the pre paint pass (it does
so for good reasons). This broke the blur effect. As an example, you may
see visual glitches when moving the software cursor over blurred areas
of a window.

In order to fix this issue, the blur effect has to cache background
behind every window to avoid blurring already blurred areas.

This change implements a background cache. Unfortunately, since the
blur effect's code has become very difficult to change over the years,
this change rewrites the relevant parts of the blur effect.

With the proposed design, the blur effect is going to maintain cached
background for every window + offscreen render targets. It may have
issues with animated windows, however in practice, it seems to behave
good enough. However, if it becomes pressing matter, we can move from
simplistic design in this patch to somewhat more sophisticated design
that involves textures with rounded up size.

BUG: 455526
2023-08-18 13:08:48 +00:00
Vlad Zahorodnii
1b6736e01d plugins/blur: Remove dead code 2023-08-18 13:08:48 +00:00
Vlad Zahorodnii
09fb54dcb6 plugins/blur: Enable strict blurring for all windows
At the moment, the blur effect operates in two modes:

- generic where the blur effect samples from pixels outside the window
- and a more strict version where the blur effect only blurs what's
  behind the window

The latter mode is preferred for panels and its popup. However, it also
makes sense to enable this mode for normal windows too. This simplifies
the blur effect a bit.
2023-08-18 13:08:48 +00:00
Vlad Zahorodnii
47d2126034 plugins/blur: Tidy the header 2023-08-18 13:08:48 +00:00
Vlad Zahorodnii
52031f095d plugins/blur: Move blur window data in a struct
It's going to be useful later to cache the background texture.
2023-08-18 13:08:48 +00:00
l10n daemon script
5d65b43294 GIT_SILENT Sync po/docbooks with svn 2023-08-18 02:13:49 +00:00
l10n daemon script
2f83e41967 GIT_SILENT Sync po/docbooks with svn 2023-08-16 02:15:35 +00:00
Kai Uwe Broulik
8c01959c82 Use PlainText for various Labels
Otherwise if a virtual desktop or window contains something that looks
like an HTML tag, it will try to render it and blow up the layout.
2023-08-15 16:11:43 +00:00
l10n daemon script
8d7e5c726e GIT_SILENT Sync po/docbooks with svn 2023-08-15 02:16:18 +00:00
l10n daemon script
56ff7fd240 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-08-14 02:13:18 +00:00
l10n daemon script
aae482348b GIT_SILENT Sync po/docbooks with svn 2023-08-13 02:13:45 +00:00
l10n daemon script
b9307e8dc2 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-08-13 02:11:59 +00:00
l10n daemon script
13f3805f28 GIT_SILENT Sync po/docbooks with svn 2023-08-12 02:18:21 +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
267dd543f2 scene: port away from manual memory management 2023-08-11 15:47:36 +02:00
Xaver Hugl
1ace5a4cee input: add special handling for tabbox modifiers
modifiersRelevantForTabBox handles modifiers being consumed, which is wrong for the
tabbox; all it needs is to ignore capslock. To ensure that happens, this commit adds
a separate method for modifiers relevant for the tabbox.

BUG: 473099
2023-08-11 13:28:21 +00:00
David Edmundson
169257416e wayland: Send data device selections to data control on bind even if null
Specification for data control states:
"The first selection event is sent upon binding the
wlr_data_control_device object."

This differs to other data devices.

CCBUG: 459389
2023-08-11 06:47:30 +00:00
Kai Uwe Broulik
b0897a9aa5 wayland: Don't send preferred scale and transform if not determined yet
Rather not send anything than a potentially wrong default scale value
of 1.0 or transform of Normal.
2023-08-10 07:05:49 +00:00
Vlad Zahorodnii
ff636fc909 plugins/qpa: Remove unused epoxy include 2023-08-10 06:52:46 +00:00
Kai Uwe Broulik
ed8b581dda XdgTopLevelWindow: Translate window menu coordinate from local
The show_window_menu request is in surface-local coordinates,
which include any client-side window shadows.

Translate the menu coordinates so the window shows up in the
right spot.
2023-08-09 17:03:50 +02:00
l10n daemon script
9ecd378624 GIT_SILENT Sync po/docbooks with svn 2023-08-09 02:19:42 +00:00
l10n daemon script
618bf2a26c 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-08-09 02:17:49 +00:00
Xaver Hugl
2541e3fbe0 backends/drm: don't assume we never get new subpixel types
CCBUG: 472340
2023-08-08 09:12:24 +00:00
l10n daemon script
b198ae6fe1 GIT_SILENT Sync po/docbooks with svn 2023-08-08 02:24:39 +00:00
l10n daemon script
37e490d7cc 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-08-08 02:20:18 +00:00
Xaver Hugl
5007d337b3 backends/drm: queue cursor updates instead of replacing the original commit
At commit time, the newest commit that's ready will be chosen, ensuring that
cursor updates added just before commit time can't delay the primary plane
update unnecessarily
2023-08-07 18:51:04 +00:00
Xaver Hugl
bf17d6388c backends/drm: don't commit buffers that are still being rendered to
This allows updating the commit until the next vblank happens, making the
effect of the dropped frame less visible
2023-08-07 18:51:04 +00:00
Xaver Hugl
a64e43e6b1 utils/filedescriptor: add helper to query if the fd is readable 2023-08-07 18:51:04 +00:00
Vlad Zahorodnii
7c24242300 qpa: Remove Window::eglSurface()
Surfaceless contexts are required now, so hardcode the egl surface in
the relevant place to tidy the api of the Window.
2023-08-07 13:17:18 +00:00
Vlad Zahorodnii
1687183d4d qpa: Port OpenGL code path to GraphicsBuffer
This allows us to unify graphics buffer handling for normal wayland
windows and internal windows.
2023-08-07 13:17:18 +00:00
Vlad Zahorodnii
9911b6b54c libkwineffects: Add support for depth/stencil attachments
It's needed so we can allocate fbos suitable for qtquick.
2023-08-07 13:17:18 +00:00
Vlad Zahorodnii
76335880bf core: Expose graphics buffer allocator in RenderBackend
It can be used by other components to allocate buffers on the
compositing render device. For example, QPA.
2023-08-07 13:17:18 +00:00
Vlad Zahorodnii
c2dfb55c59 wayland: Implement xdg-shell v6
This change adds support for xdg_wm_base v6, which introduces
xdg_toplevel suspended state.

The suspended state is tied to the visibility of the window item so the
effects could possibily "resume" window content updates.
2023-08-07 12:21:28 +00:00
Nathan Mills
05527271f5 wayland: Fix uninitialized variables. 2023-08-07 11:30:16 +00:00
Nathan Mills
890712f872 drm: Fix undefined behavior when bit shifting. 2023-08-07 11:30:16 +00:00
Antonio Russo
5502ce9a9c placeSmart: Properly track width and height
`Placements::placeSmart` searches for an optimal position for windows, attempting to minimize overlap.  The core of this algorithm tracks the
client's height and width in `ch` and `cw`, which have been adjusted by -1. This simplifies logic determining the bottom and right points of a
window when you are starting at the top and left points.

However, this decision requires adjusting that number by +1 when doing the opposite: determining the top and left points when you start with
the bottom and right points.

placeSmart cycles through window locations, searching for acceptable nooks and crannies to fit a window in, nicely.  It begins by checking
for places to put the top left corner of the window which abut another constraint.  If that fails, it then tries to place the bottom right
abutting a constraining feature.

After finding a suitable bottom (or right) location, the top (or left) location must be determined, requiring the -1 adjustment to be undone.

This patch adds that +1 back in.

# The bug it solves

This error can be seen by opening a bunch of windows that are placed using the "Minimal Overlapping" rule.  The open space on the screen will be tiled from left to right, and then top to bottom in the windows.  Once no more windows can be placed like that, the next window will be placed at the extreme bottom-right corner.  However, it will be one pixel too low and one pixel too far to the right---if you try to move the window, it will "snap" to the correct spot.

This single pixel may seem minor or even irrelevant, but when you use the "Present Windows" desktop effect on a multiple-monitor setup, this one pixel will cause the window to show up on both monitors.
2023-08-07 07:14:18 +00:00
l10n daemon script
499ee68656 GIT_SILENT Sync po/docbooks with svn 2023-08-07 02:43:30 +00:00
l10n daemon script
9750581ba9 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-08-07 02:38:56 +00:00