Commit graph

18756 commits

Author SHA1 Message Date
David Edmundson
bac9d554f1 Move m_display construction to the constructor
We will always create one, this resolves potential to call a getter on a null object.
Requires some code shuffling.
2020-12-15 15:22:40 +00:00
Vlad Zahorodnii
3e1443e003 wayland: Don't force a bpp of 24 for desktop windows
plasmashell provides the compositor buffers with an alpha channel and
without indicating the opaque region. Given that, kwin forces a bpp of
24 for desktop windows to improve performance. Unfortunately, there are
legit cases where plasma may attach a buffer that is not fully opaque,
for example when switching between activities.

BUG: 423545
BUG: 421237
2020-12-14 14:09:24 +00:00
Vlad Zahorodnii
ecac025a2a Port wayland code away from factory methods in KWaylandServer::Display 2020-12-14 13:05:47 +00:00
Vlad Zahorodnii
3b1c143881 scene: Fix window pixmap traversal order
Since the last child window pixmap is the top-most one, it needs to be
pushed on the stack first. This may fix KMail rendering issues.
2020-12-14 12:55:55 +00:00
Vlad Zahorodnii
64ad9a61d8 Introduce ColorManager component
This change introduces a new component - ColorManager that is
responsible for color management stuff.

At the moment, it's very naive. It is useful only for updating gamma
ramps. But in the future, it will be extended with more CMS-related
features.

The ColorManager depends on lcms2 library. This is an optional
dependency. If lcms2 is not installed, the color manager won't be built.

This also fixes the issue where colord and nightcolor overwrite each
other's gamma ramps. With this change, the ColorManager will resolve the
conflict between two.
2020-12-13 23:53:33 +02:00
Vlad Zahorodnii
b06fb6b060 Drop redundant find_package(Qt5Multimedia)
We need the multimedia component only to play preview videos in a KCM.

The find_package(Qt5Multimedia) is not needed because we already check
if Qt5Multimedia QML module is present using ecm_find_qmlmodule().

The main motivation behind this change is to work around constant build
failures caused by buggy config file of the Qt5::Multimedia component.
2020-12-13 16:22:35 +02:00
Andrey Butirsky
eebae29bcc Revert "refactor: localize checkLayoutChange() check"
This reverts commit c459faba5a

Fixes kwin_x11 crash on typing regression,
see original MR for details
2020-12-13 03:06:16 +00:00
Aleix Pol
2c6bfdf0b8 --warning
Set -DLIBINPUT_HAS_TOTEM per file rather than per target so that all
targets that build it have the define.
This particular file is also used by some tests and this fixes the
warning that this ifdef resolves at once for all targets.
2020-12-11 23:59:19 +00:00
Andrey Butirsky
c459faba5a refactor: localize checkLayoutChange() check
We don't have to postpone the check until client would be actually
switched any more, so do it where it actually needed
2020-12-11 20:19:32 +00:00
Andrey Butirsky
b127b5f45e impr: no keyboard layout OSD on switching between windows
now if two windows have different layouts, there will be no OSD on
switching between them on Alt+Tab

GUI:
DIGEST:
BUG: 418699
2020-12-11 20:19:32 +00:00
Aleix Pol
3f66aabd48 Use variables instead of macros for local variables 2020-12-11 17:51:27 +00:00
Aleix Pol
8b461ff49f --warning
Do not capture a variable that we don't use.
2020-12-11 18:26:12 +01:00
l10n daemon script
f7cd5c5d4a 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"
2020-12-11 06:35:01 +01:00
Vlad Zahorodnii
48728f3b8f Remove fixqopengl.h
Qt stopped defining GLdouble type on uncontrolled ES2 platforms since
version 5.4.
2020-12-10 12:00:20 +02:00
Vlad Zahorodnii
6b2e6cfd53 Prevent EGL headers from including Xlib headers
One of the annoying things about EGL headers is that they include
platform headers by default, e.g. on X11, it's Xlib.h, etc.

The problem with Xlib.h is that it uses the define compiler directive to
declare constants and those constants have very generic names, e.g.
'None', which typically conflict with enums, etc.

In order to work around bad things coming from Xlib.h, we include
fixx11.h file that contains some workarounds to redefine some Xlib's
types.

There's a flag or rather two flags (EGL_NO_PLATFORM_SPECIFIC_TYPES and
EGL_NO_X11) that are cross-vendor and they can be used to prevent EGL
headers from including platform specific headers, such as Xlib.h [1]

The benefit of setting those two flags is that you can simply include
EGL/egl.h or epoxy/egl.h and the world won't explode due to Xlib.h

MESA_EGL_NO_X11_HEADERS is set to support older versions of Mesa.

[1] https://github.com/KhronosGroup/EGL-Registry/pull/111
2020-12-10 11:15:06 +02:00
Vlad Zahorodnii
8e060e7218 Prepare kwin for compiling with EGL_NO_PLATFORM_SPECIFIC_TYPES 2020-12-10 10:54:45 +02:00
Vlad Zahorodnii
9f2cb0ae1b Provide expected presentation time to effects
Effects are given the interval between two consecutive frames. The main
flaw of this approach is that if the Compositor transitions from the idle
state to "active" state, i.e. when there is something to repaint,
effects may see a very large interval between the last painted frame and
the current. In order to address this issue, the Scene invalidates the
timer that is used to measure time between consecutive frames before the
Compositor is about to become idle.

While this works perfectly fine with Xinerama-style rendering, with per
screen rendering, determining whether the compositor is about to idle is
rather a tedious task mostly because a single output can't be used for
the test.

Furthermore, since the Compositor schedules pointless repaints just to
ensure that it's idle, it might take several attempts to figure out
whether the scene timer must be invalidated if you use (true) per screen
rendering.

Ideally, all effects should use a timeline helper that is aware of the
underlying render loop and its timings. However, this option is off the
table because it will involve a lot of work to implement it.

Alternative and much simpler option is to pass the expected presentation
time to effects rather than time between consecutive frames. This means
that effects are responsible for determining how much animation timelines
have to be advanced. Typically, an effect would have to store the
presentation timestamp provided in either prePaint{Screen,Window} and
use it in the subsequent prePaint{Screen,Window} call to estimate the
amount of time passed between the next and the last frames.

Unfortunately, this is an API incompatible change. However, it shouldn't
take a lot of work to port third-party binary effects, which don't use the
AnimationEffect class, to the new API. On the bright side, we no longer
need to be concerned about the Compositor getting idle.

We do still try to determine whether the Compositor is about to idle,
primarily, because the OpenGL render backend swaps buffers on present,
but that will change with the ongoing compositing timing rework.
2020-12-10 07:14:42 +00:00
Aleix Pol
6646422007 screencasting: fix build
Properly specify a null format.

CCMAIL: jgrulich@redhat.com
2020-12-10 00:11:08 +01:00
Vlad Zahorodnii
fb0bcff1c8 plugins/qpa: Improve handling of output addition and removal
With this change, the QPA will try to avoid re-creating all platform
screens if a single output has been connected or disconnected.
2020-12-09 17:44:00 +00:00
Vlad Zahorodnii
5943eea4c9 Introduce Platform::{outputEnabled,outputDisabled} signals
These signals can be useful if you want to know what output exactly has
been disabled or enabled.

The outputEnabled signal is emitted after the outputAdded signal, and
the outputDisabled signal is emitted before the outputRemoved signal.
2020-12-09 17:44:00 +00:00
Vlad Zahorodnii
1b31f5279a Document Platform::{outputAdded,outputRemoved} signals 2020-12-09 17:44:00 +00:00
Jan Grulich
0ddc360776 Screencast: support BGRx format for backwards compatibility with WebRTC 2020-12-09 15:34:34 +00:00
Vlad Zahorodnii
94201cbadd Remove unused signal in Platform 2020-12-09 16:54:15 +02:00
Vlad Zahorodnii
3cdc97a4e9 Avoid converting socket name between QString and QByteArray back and forth
It only contributes overhead.
2020-12-09 15:07:29 +02:00
David Edmundson
1e2f2a28c7 Port to kwayland-server socket changes 2020-12-09 07:23:40 +00:00
l10n daemon script
9799456f3b 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"
2020-12-09 06:48:24 +01:00
Vlad Zahorodnii
279aef103e platforms/wayland: Print a warning message if buffer swap fails
If eglSwapBuffers() fails, frame scheduling will be broken. KWin can't
recover from that, but still, having a log message might be useful for
the debugging purposes.
2020-12-08 11:16:31 +00:00
Vlad Zahorodnii
592633eed7 Fix KWIN_BUILD_XRENDER_COMPOSITING build option 2020-12-08 11:23:12 +02:00
Vlad Zahorodnii
d99e6b5d2a platforms/x11: Move XRenderBackend to platformsupport directory
This change moves the XRender backend to platformsupport directory,
similar to the OpenGL and the QPainter backend. This allows to put
platform-specific logic in XRenderBackend.
2020-12-08 08:50:19 +00:00
Vlad Zahorodnii
b41a1eba50 wayland: Ignore the move request for immovable windows
A window can be immovable due to various reasons, for example the window
position is enforced by a window rule or the window is shown in the full
screen mode. In which case, the move request has to be ignored.
2020-12-08 08:22:18 +00:00
Vlad Zahorodnii
5578437522 wayland: Check serials in move and resize requests
If a move or a resize request is processed after the button is released,
the window will be stuck in the move/resize mode.

This change prevents that kind of race condition by adding relevant serial
checks in the move and the resize request handlers.
2020-12-08 08:22:18 +00:00
Thiago Sueto
4dba1da7c7 Add keyboard shortcuts for general navigation following the Meta-for-desktop xdg spec 2020-12-07 15:09:08 +00:00
Adrien Faveraux
50b1bb4a2b adapt Fake input to kwayland change 2020-12-07 08:12:12 +00:00
Adrien Faveraux
22ad35e876 Adapt kwin to sliding change in kwaylandserver 2020-12-07 07:47:29 +00:00
l10n daemon script
b1a115aa76 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"
2020-12-05 06:33:37 +01:00
Gabriel Souza Franco
c50acc0179 Add window id to failed pixmap request debug msg 2020-12-04 19:35:44 +00:00
Carson Black
49c7316e8c input: update keyboard repeat config reading to reflect new configuration style 2020-12-04 17:29:42 +00:00
Gabriel Souza Franco
c2b0a31e08 Show window ids as hex in debug console 2020-12-03 19:09:15 -03:00
Vlad Zahorodnii
e320f76fb0 platforms/virtual: Emit missing outputAdded signal 2020-12-03 22:06:07 +02:00
Vlad Zahorodnii
41a5362136 platforms/wayland: Add initial HiDPI support
This can be useful for test purposes and for people who have HiDPI monitors.
2020-12-03 15:59:54 +00:00
Vlad Zahorodnii
6b94be8652 Revert "Change the defaults for active screen"
This reverts commit bcba2e252f.

This change broke a dozen of tests, most of which were fixed. However,
it made more clear that we need to re-evaluate if enabling this option
by default is a good idea.
2020-12-03 12:04:10 +02:00
Vlad Zahorodnii
c793d5d619 autotests: Fix PointerInputTest
The "Active screen follows mouse" option may make the test fail. We want
it to pass no matter what the current value of the option is.
2020-12-03 09:55:37 +00:00
Vlad Zahorodnii
919e878d35 autotests: Set initial cursor position in QuickTilingTest
This is to ensure that tests pass no matter what the current value of
the "Active screen follows pointer" option is.
2020-12-03 11:53:40 +02:00
Vlad Zahorodnii
f1483b11af platforms/virtual: Emit outputAdded and outputRemoved
Otherwise things that rely on those two signals may introduce undefined
behavior in autotests.
2020-12-02 20:55:30 +02:00
Vlad Zahorodnii
9d5a1b0531 platforms/virtual: Remove redundant m_enabledOutputs
It's the same as VirtualBackend::m_outputs.
2020-12-02 20:52:01 +02:00
Vlad Zahorodnii
ebf4e082c1 platforms/hwcomposer: Emit outputAdded 2020-12-02 20:51:14 +02:00
Vlad Zahorodnii
64260000d6 platforms/fbdev: Emit outputAdded 2020-12-02 20:51:14 +02:00
Vlad Zahorodnii
2d5482b013 plugins/x11: Emit outputAdded and outputRemoved
Currently, these two signals are emitted primarily only on Wayland, but
in order to have consistent core API, it's better to emit them on X11 too.
2020-12-02 20:51:14 +02:00
Vlad Zahorodnii
389407805c platforms/drm: Properly clean up the shadow framebuffer object
In case hardware transforms can be used again, the shadow framebuffer
must be destroyed; otherwise rendered results will be distorted due to a
mismatch between the dimensions of the shadow framebuffer and the mode
size.
2020-12-02 16:05:08 +00:00
Vlad Zahorodnii
9236254d5c Schedule a repaint when a window is damaged
Currently, if an X11 or Wayland window is damaged, we will schedule a
repaint. This results in some code duplication that this change intends
to get rid of.
2020-12-02 15:33:08 +00:00