Commit graph

19632 commits

Author SHA1 Message Date
Aleix Pol
f60b9176da inputmethod: Use the inputmethod's context as the isActive measure
Ensures that m_active and the input context do not get out of sync and
that the right signals are always emitted by always using setActive to
activate.
Uses the context to define InputMethod::isActive.
2021-05-24 14:16:23 +02:00
Aleix Pol
184e53e5c2 inputmethod: Make sure we send a state commit
Detach from the serials that the client send us, since they don't really
matter to the input method and track our own.
Also issue a commit state whenever we adopt a new input context. This
can happen for reasons that don't come from the client, like for example
the input method has just been enabled.
In practice, this solves an issue that we can easily see with maliit
where it would be left in a half-initialised state and would show
autocorrection fields on terminal applications when unnecessary and
possibly similar problems every now and then.
2021-05-24 14:16:14 +02:00
Nicolas Fella
b31ef46576 [kcms/virtualdesktop] Don't offer to remove the last desktop
The current UI allows to remove the last desktop, but:
- If you remove it it will reappear on the next KCM launch
- The Add button does not work then

Prevent removing the last desktop by disabling the action

BUG: 437561
2021-05-24 11:58:49 +00:00
Nicolas Fella
7f36f01247 [kcms/virtualdesktops] Properly track synchronizing state
When the user applies a change like adding a desktop
DesktopsModel::syncWithServer is called and m_synchronizing is set to
true. The server then sends some kind of response (e.g. desktopCreated)
and updateModifiedState is called which sets m_synchronizing to false
again.

However if a setting is changed that does not trigger any server change
(e.g. the show OSD setting) m_synchonizing is never set to false again,
causing problems down the line.

Instead of relying on updateModifiedState to reset m_synchronizing track
the syncronizing state by refcounting the DBus calls

BUG: 437466
2021-05-24 11:53:59 +00:00
Nicolas Fella
99b84a321a Don't show virtual keyboard SNI when no virtual keyboard is selected in the KCM
Not choosing any virtual keyboard is a valid option. In this case do not show the SNI since it isn't very useful then and takes up some space in the system tray.

BUG: 437171
2021-05-24 11:53:30 +00:00
Vlad Zahorodnii
a18cb8998e wayland: Remove direct session
Most distros use either systemd's logind or consolekit for session
management.

The main reason why there's direct session is because up to some point,
kwin had a class called VirtualTerminal which was kind of like a direct
session backend.

The VirtualTerminal was used in the fbdev backend in conjuction with the
logind session backend, which looked odd.

Since the drm backend supported only logind and consolekit for very
long time and we hadn't received any complaints about it, the fact that
direct session is unsupported should not be noticeable.

Given that, this change removes the support for direct session in order
to reduce the amount of platform-specific code and make it easier to
maintain kwin.
2021-05-24 06:23:00 +00:00
Vlad Zahorodnii
1a464530bd scenes/xrender: Remove SceneXRenderShadow::buildQuads()
It's effectively the same as Shadow::buildQuads().
2021-05-24 06:22:28 +00:00
Nicolas Fella
86ce04a7fc [kcms/virtualdesktops] Enable apply button when typing desktop name
Currently the apply button will only be enabled when you press enter or
change focus away from the text field which is somewhat inintuitive.

Instead enable the apply button as soon as the text changed.

BUG: 435014
2021-05-22 13:54:44 +02:00
Nicolas Fella
d8855cc62a [kcms/virtualdesktops] Clip ListView
ListViews in ScrollViewKCMs need to be clipped, otherwise the content
can exceed the frame
2021-05-22 10:50:26 +02:00
David Edmundson
af66f39f19 Support High DPI Aurorae decorations
With high DPI we can't use the image size as a logical size directly.

The other change is use of QPainter::drawImage(QRect target, QImage
image, QRect source)

This slightly confusing method uses logical pixels for the target, but
the source rect is in native pixels of the source.

BUG: 422342
2021-05-21 11:26:53 +00:00
Aleix Pol
22f2e3e43c No need to reset the damage for objects that we already know have none 2021-05-20 13:38:30 +00:00
Aleix Pol
848e9e2076 aurorae: Fix warning at startup
Give an opportunity to the settings to get initialized. Otherwise we set
an null object and qml scripts complain.
2021-05-20 13:36:04 +00:00
Vlad Zahorodnii
bc22b9e59e Fix build 2021-05-20 16:25:13 +03:00
Xaver Hugl
793cc5fa25 platforms/drm: replace pointer to egl backend with QPointer
If the egl backend gets deleted this leaves a dangling pointer. In
order to prevent crashes with QPainter or EglStreams also don't try
to create dmabuf textures without a EglGbmBackend.
2021-05-20 14:37:55 +02:00
Vlad Zahorodnii
39e2387f9f Rename Item::scheduleRepaint()
One can think that Item::scheduleRepaint() will trigger repaint of the
whole item, but it actually only schedules the next frame. If nothing
has changed on the screen, no real painting will be done unless maybe if
the rendering backend needs to repair the back buffer.
2021-05-19 12:50:11 +00:00
Vlad Zahorodnii
e4ec955d88 Remove shadow related bits in Scene::Window 2021-05-19 14:13:47 +03:00
Vlad Zahorodnii
6f39d79d72 Remove Scene::Window::{discard,update}Pixmap
They are used only by X11Client, so make X11Client call relevants
methods on the surface item directly instead. In hindsight, it will be a
really good idea to make SurfaceItemX11 and SurfaceItemXwayland(?)
automatically manage the window pixmap. However, it can be done once
an item freezing api is added and we fix the cross-fade animation.
2021-05-19 11:10:50 +00:00
Vlad Zahorodnii
9be862999e Remove explicit repaint in InternalClient::commitGeometry()
The associated window item will schedule a repaint if needed.
2021-05-19 09:14:02 +03:00
Vlad Zahorodnii
506214a632 Move repaint scheduling logic to Item
Currently, items depend on scene windows for creating pixmaps, repaint
scheduling, and caching quads.

This change moves repaint scheduling from scene windows to items to
make the scene items depend less on scene windows.

In hindsight, we may clean up the repaint scheduling machinery further
by introducing view objects.
2021-05-19 06:06:01 +00:00
Aleix Pol
386814176b drm: Use KScreen's json files to set up the initial output composition
So far we had a composition setup within kwinrc and kscreen. This
produces flickering sometime and makes the state a bit more flimsy.
This patch changes the kwin's behaviour to use the files produced by
kscreen which are anyways available down the line.

THis simplifies our behaviour down to just one format that we write to
and feed from. This also allows us to leverage it further by using this
format for default setups (which consist in the right file in
~/.local/share/kscreen).
2021-05-18 14:18:38 +00:00
Zhang Liang
66377359e1 Add ther layer property in debug console
Add the layer property for debugging window
2021-05-18 13:35:12 +00:00
Xaver Hugl
7de0f1f2ad platforms/drm: CPU copy for multi-gpu
Not all GPUs can scan out linear buffers, so if import with a dmabuf
fails manually copy the data into a non-linear gbm buffer instead.

BUG: 432707
2021-05-18 14:54:05 +02:00
Vlad Zahorodnii
2d9e2f0c70 effects: Fix EffectWindow::shape() for X11 windows
With the introduction of scene items, the Scene::Window::bufferShape()
method was removed as it makes no sense on wayland - a window may have
several sub-surfaces, so a single region to indicate the shape of the
window won't work.

SurfaceItem::shape() returns the shape of a surface. On Wayland, it
corresponds to the rect of the wl_surface. On X11, it corresponds to the
client window rect inside the frame window, or custom shape region if
the client has set one.

On the other hand, EffectWindow::shape() wants a completely different
thing. If the window is decorated, it needs to return the rect of the
decoration. Otherwise it has to return the shape region if there's one.

In the future, the EffectWindow::shape() function must be removed as it
doesn't fit the item based design. The main reason why we have it at
all is because the x server doesn't support translucency, setting a
shape region is a (hacky) way to work around that limitation, xeyes is
a notable example.

BUG: 437138
BUG: 435862
2021-05-18 12:28:27 +00:00
Aleix Pol
a20a4327f5 screencasting: Make sure we don't stream after we've stopped a stream
When doing some (intense) testing I've seen it crash. This will prevent
it for good.
2021-05-18 11:51:05 +00:00
Vlad Zahorodnii
bd4650482e Remove unused class forward declarations in scene.h 2021-05-18 12:24:56 +03:00
Vlad Zahorodnii
0f2f69ad7c Decouple window pixmaps from scene windows
One of the scene redesign goals is to make wayland surface items
re-usable. So we have the same rendering path for drag-and-drop icons,
software cursors, and window surfaces.

The biggest issue at the moment is that window pixmaps are tightly
coupled with scene windows.

This change de-couples window pixmaps from scene windows. In order to
achieve that, some architecture changes were made.

The WindowPixmap class was replaced with the SurfacePixmap class. A
surface pixmap is created by a surface item.

Under the hood, a SurfacePixmap will create a PlatformSurfaceTexture
object, which contains all the information necessary for the renderer.

The SceneOpenGLTexture class was removed. However, the GLX and the EGL
on X11 backends still mess with GLTexture's internals.
2021-05-18 09:11:24 +00:00
l10n daemon script
13189463b0 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"
2021-05-18 01:24:15 +00:00
Vlad Zahorodnii
5ece6d55d6 Replace Toplevel::clientContentPos() with a better solution
The Toplevel::clientContentPos() function is needed to map the surface
local coordinates to the global coordinates. But its name is highly
confusing as there's already a function with a similar name. This change
introduces a helper with a better name to fix the readability issue.
2021-05-17 06:32:21 +00:00
l10n daemon script
18793f83d3 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"
2021-05-17 01:33:52 +00:00
Vlad Zahorodnii
edb7867ee9 Prepend "Interactive" to interactive move resize methods
This is to improve code readability and make it easier to differentiate
between methods that are used during interactive move-resize and normal
move-resize methods in the future.
2021-05-16 13:50:25 +03:00
Vlad Zahorodnii
3c2e1a71c4 Unvirtualize Toplevel::bufferGeometry()
This makes the implementation of the buffer geometry consistent with the
frame geometry and the client geometry and removes a virtual method call
from a few hot paths.
2021-05-16 10:48:41 +00:00
Vlad Zahorodnii
7c0bb4180a Remove Workspace::updateClientLayer()
It's the same as calling AbstactClient::updateLayer()
2021-05-16 10:48:06 +00:00
Vlad Zahorodnii
4ba249eee5 wayland: Signal about finished move/resize in destroyClient()
We need to emit the clientFinishUserMovedResized signal to notify
effects such as translucency that the interactive move-resize is
finished. Otherwise, the set() animation won't be cancelled and the
window will get stuck frozen.

BUG: 409376
2021-05-16 10:46:57 +00:00
l10n daemon script
b2548fe0a9 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"
2021-05-16 01:23:43 +00:00
Vlad Zahorodnii
07c4057180 autotests: Stabilize tests that create Xwayland windows
The order in which Xwayland surfaces are associated with X11 windows is
undefined, meaning that we cannot assume that a newly created X11 window
won't have a surface associated with it already.
2021-05-15 16:16:48 +00:00
Alexander Lohnau
8125f9137f
GIT_SILENT Remove obsolete KRunner property 2021-05-15 10:03:33 +02:00
l10n daemon script
1a1a6077c1 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"
2021-05-15 01:19:22 +00:00
Vlad Zahorodnii
77a9d38166 Make libdrm required dependency
As is, kwin with the drm backend results in the most pleasant user
experience on Wayland. Given that and the fbdev being about to be
dropped, making libdrm a required dependency seems a reasonable decision.
2021-05-14 18:00:40 +00:00
Aleix Pol
3b05823f1f libinput: bump required version
So we can remove ifdefs and weird cases to support versions that are far
too old to support anyway.
2021-05-14 17:47:46 +00:00
Nate Graham
b29f211fe4 Disable translucency effect by default
Many reasons have been brought up over the years for why this effect is
not appropriate to be enabled by default:
- It was designed to highlight the whizzy technical feature of being
  able to make windows transparent, which is no longer particularly
  impressive today.
- It looks visually dated.
- It can produce a confusing visual soup by blending a window being
  moved or resized with the content below it, which we recently disabled
  for the Highlight Windows effect.
- If one window is covering up another as a way to deliberately hide the
  content of the lower window, this effect will reveal the hidden
  content whenever the upper window is moved or resized at all.

Overall it does not seem to have enough advantages to offset these
issues. Let's disable it by default--but only for the people who did not
modify its configuration at all. We can assume that those people like
it, so let's keep it on for them.

BUG: 384054
FIXED-IN: 5.23

Closes Phab task T7915
2021-05-14 15:21:11 +00:00
Vlad Zahorodnii
c1969afa10 wayland: Port logind session from GetSessionByPID
It's needed to make kwin_wayland properly systemd managed. A service
launched using systemctl --user is per user, not session.

As a consequence, user services run outside the session. Applications
that deal with user session need some quirks to work with systemd boot.

Unfortunately, GetSessionByPID() doesn't work well with systemd boot,
see bug 433364. GetSession(auto) is shown to work better.
2021-05-14 12:59:26 +00:00
Aleix Pol
f4715b9ac5 inputmethod: deactivate the input method when we textinputv3 is committed as disabled
Fixes InputMethodTest::testEnableDisableV3 on my system when running on
Valgrind, should hopefully also fix on CI.
2021-05-14 09:28:57 +00:00
Vlad Zahorodnii
03445424e9 x11: Don't initialize X11Client's geometries to 0,0 100x100
It is actually okay to start with an empty frame geometry because
manage() will compute the frame geometry from the client's window size.
2021-05-14 07:00:20 +00:00
Vlad Zahorodnii
e5799a2131 Remove force geometry flags
With the client-side decoration changes, kwin will properly determine
whether the window needs to be configured even if the frame geometry has
not changed.

This change slightly changes the semantics of the setFrameGeometry()
method. Prior to this, it was possible to force a geometry, i.e. block
other geometry updates, however such a behavior is counter-intuitive and
it exponentially increases the complexity of code.

As far as I know, the force flag was needed to propagate geometry
changes if the frame geometry doesn't change, but the client geometry
does. With the client-side decoration changes, the force flag is not
needed, as kwin now takes into account the client geometry and the frame
geometry when determining whether to send a configure event.
2021-05-14 07:00:20 +00:00
Vlad Zahorodnii
90d60a530f Try to update geometry without checking if it's the same
Even if the frame geometry is the same, the client geometry may not be
the same. We need to call setFrameGeometry() unconditionally.
2021-05-14 07:00:20 +00:00
Vlad Zahorodnii
b6dd7c5860 autotests: Introduce own idle inhibit v1 helpers
Non-core wrappers in kwayland are deprecated. qtwaylandscanner needs to
be used instead for generating client-side wrappers.
2021-05-14 05:36:08 +00:00
Aleix Pol
b9b58b6e66 Use preferred QFileInfo::exists API as documented 2021-05-14 01:35:33 +02:00
Aleix Pol
c405877801 Only mark slots as slots 2021-05-14 01:35:33 +02:00
Aleix Pol
f4adff66cc Do not detach when getting a readonly reference 2021-05-14 01:35:33 +02:00
Aleix Pol
b8a355252d Q_ENUMS -> Q_ENUM
It's more useful
2021-05-14 01:35:33 +02:00