20641 Commits (2c6821fdcac8b087bced28d38f16bdd9bca92bcc)
 

Author SHA1 Message Date
Vlad Zahorodnii 84690a0de6 scenes/opengl: Move copying front buffer to back buffer to X11 specific code
On X11, if buffer age is unsupported, kwin can do some quirks like
copying parts of the front buffer to back buffer to avoid repainting the
whole screen.

Currently, the copying is performed in the opengl scene, which is not
perfect because it makes the scene responsible not only for painting the
scene but also some low level platform specific shenanigans.

This change moves the copying step to the glx and egl backends. It
simplifies the opengl scene, makes it less overloaded and more open to
changes, but it also duplicates code, which is not ideal. However, given
the de-facto deprecated state of the X11 platform, it's sort of acceptable
as the main focus is now on wayland session and the things that are
needed to make it fly as expected.
3 years ago
Aleix Pol 13b85d77fc inputmethod: Expose VirtualKeyboard.willShowOnActive on dbus
It can help clients predict how KWin will react. Sometimes, the noise of
seeing a virtual keyboard pop up is reason enough not to focus an input
field.
3 years ago
Xaver Hugl 6a99bfd2f4 make software cursors work per output 3 years ago
Weng Xuetian 8a2f64fbe1
Do not call setActive(true) when request input panel to show
Observed in kdevelop, that isEnabled() could be false when switching
between different tabs with Ctrl+Tab. But Qt may still call show()
if you click on the texteditor widget. This leads to isEnabled == false but
setActive(true) is called. This causes kdevelop in a usable state because
keyboard grab will be created and no key event will reach application
because isEnabled == false. Under normal circumstances, key will reach
widget first and triggers another text_input_v2 enable to make input
method work properly.
3 years ago
Weng Xuetian c074e2eb42 Try our best to convert preedit styling to text-input-v3 cursor range.
text-input-v3 does not have preedit styling, instead, it can only
specify the range of cursor. Try to keep track of any
highlight/selection style range and combine them together. If it matches
the cursor position, use it as the cursor range.
3 years ago
Weng Xuetian f50866d3f8 Fix different semantics of delete_surrounding_text between zwp_input_method_V1 and text_input_v{2,3} 3 years ago
Vlad Zahorodnii e4ccf24cd9 effects/overview: Change default shortcut to Meta+W
Ctrl+Meta+D is already taken by the Minimize All script. "W" in Meta+W
stands for "window". Meta+O wasn't chosen because it's one of a
finger-stretcher.

BUG: 445800
3 years ago
Xaver Hugl f2b29e3555 backends/drm: deep color support
This commit makes 10 bits per color channel the default color depth, which
should reduce banding on outputs that support color formats with more than
8 bits per color channel. In order to support this the commit also removes
the dependency of the EglGbmBackend on a specific format and EglConfig and
instead makes those per-Output properties.
3 years ago
Xaver Hugl cfeeb817bf backends/drm: query min and max values for properties 3 years ago
Weng Xuetian 4f2c3a00c4 Change InputMethod::show() and InputMethod::hide() to not change active state.
Qt usually request InputMethod::hide() upon unfocus, but
InputMethod::show() is actually never called if focus transfer is done
by keyboard, which leads to a permanent disabled input method state.

It can be easily reproduced with a window with two text field, e.g.
QFileDialog, by pressing tab to switch the focused widget.

The semantics of hide/show should not deactivate the input method.
Instead, it should simply hide/show the input panel. Also it should not
be a hard request for input method to permanently hide the window. When
input method asked to show it again, the input panel window should be
shown.
3 years ago
Weng Xuetian 119f0d02be Do no send empty preedit string to text-input-v3.
zwp_input_method_v1 has some different semantics comparing to
text-input-v3. There is no way to indicate that "clear preedit" with
zwp_input_method_v1. In some client (Namely, Gtk), receiving an empty
preedit string will also trigger replace selection action. For example,
focus into address bar in firefox will automatically select the URL in
the address bar, and a following empty preedit string will clear the
selection which is not desirable.

To avoid such behavior, simply send an empty "done()" to clear text
input v3 preedit if preedit is empty.
3 years ago
l10n daemon script 42110d7a46 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"
3 years ago
Nicolas Fella f0cdc1c885 [effects/zoom] Don't allow to set non-global shortcuts
Only global shortcuts make sense here
3 years ago
Nicolas Fella 7fc8fbae63 [effects/mousemark] Don't allow to set non-global shortcuts
Only global shortcuts make sense here
3 years ago
Nicolas Fella fa7e9323cd [effects/overview] Don't allow to set non-global shortcuts
Only global shortcuts make sense here
3 years ago
Xaver Hugl 3135f56576 backends/drm: don't reset damage with direct scanout 3 years ago
Weng Xuetian 6d6ce2981e Add preedit styling support for text-input-v2. 3 years ago
Weng Xuetian a18ccb06e6 Use bufferGeometry as base point for input panel popup.
The cordinate from text-input protocol is based on original surface, instead
of the geometry based on any external protocol, e.g. xdg_surface.
3 years ago
Vlad Zahorodnii defca98a1e effects: Declare logging category per effect
This allows us to decouple effects more and reduce the number of random
odd build failures on freebsd. Besides that, it provides more fine
grained control over logging, for example, one could select log output
from some concrete effect, etc.
3 years ago
Weng Xuetian 0b1565c54c
Do not send reset to an already active input context.
This may be problematic for certain client, e.g. firefox, and cause
input always reset after any key press. Also, sending reset on an
activate also does not match the text input v3 semantics.
3 years ago
Weng Xuetian bd40db7dd1
Fix text input v3 related protocol usage.
zwp_input_method_v1 does not support generic double buffered event.
deleteSurroundingText need to be followed with done().
zwp_input_method_v1 preedit event order is preeditCursor,
preeditStyling, preeditString. To align it with text-input-v3 semantices,
send done() after receiving preedit_string() from input method.
3 years ago
Weng Xuetian c07d3ce7ea
Also fix the flipped case anchor for input panel overlay mode. 3 years ago
Weng Xuetian 8c54c5937a
Fix the input panel popup anchor position.
It should be bottom left instead of top left of the cursor rect.
3 years ago
l10n daemon script 5d99392d1e 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"
3 years ago
Vlad Zahorodnii 4459463823 Make focused window and decoration mutually exclusive 3 years ago
Vlad Zahorodnii 41237ea30b Ignore decoration when updating focused window in PointerInput and TouchInput
Currently, it's possible to have the case where the pointer input device
handler or the touch input device handler thinks that there's a focused
window, but the corresponding focused surface in wayland seat is unset,
because the pointer hovers the server side decoration.

If the server side decoration is destroyed, the input device handler will
fail to update wayland seat's focused surface.

In order to make pointer input device handler and touch input device
handler code more intuitive, this change makes focusUpdate() functions
ignore the decoration.

BUG: 411884
BUG: 440380
3 years ago
David Redondo b1686fd472 Always keep focus on active client when switching activities
While finding this to be benficial when working on the activity
switcher I think it makes sense in general to keep focus on the
current client instead of potentially switching away.
3 years ago
Xaver Hugl dde7a2efac backends/drm: fix crash with direct scanout
BUG: 447079
3 years ago
Fushan Wen 1d0e75bc5c x11client: Replace activityList with m_activityList
KWin does not update activity status when setting `_KDE_NET_WM_ACTIVITIES`
to nullUuid outside of KWin, which causes "All Activities" not working
as expected for KWindowSystem.

`X11Client::activityList` is not kept in sync with
`AbstractClient::m_activityList`. Move `m_activityList` from private to
protected, and use it in `X11Client::readActivities`

BUG: 440496
3 years ago
Vlad Zahorodnii 34a0813567 wayland: Avoid creating abstract socket for Xwayland on FreeBSD
FreeBSD does not support abstract sockets.
3 years ago
Weng Xuetian e71fe9ba79 Support text-input-v3 cursor position and position the overlay mode input panel within the screen. 3 years ago
Weng Xuetian 7a270b5d78 Use QPointer to monitor input method server connection.
Input method may crash and leave a dangling pointer. DBus interface may
access the invalid pointer and crash kwin.
3 years ago
Weng Xuetian d66be7b99f Forward xkb modifier changes to input method.
Since not all the key are forwarded to input method, any modifier
changes need to be forwarded to input method as long as keyboard grab
is active.
3 years ago
Weng Xuetian 11f6292cb5 Move input keyboard filter to be just before the key is sent to application.
Features like global shortcuts should be handled before the input
method.
3 years ago
Weng Xuetian 9e68357ce9 Do not unset DISPLAY and XAUTHORITY for input method.
Those variable are required for XIM to work for Xwayland application.
3 years ago
Vlad Zahorodnii 4bd9708503 autotests: Fix PointerInputTest::testDecoCancelsPopup()
We need to ack configure event that wants to change deco mode.
3 years ago
Vlad Zahorodnii 92317c5eff Remove XdgSurfaceClient::updateGeometryRestoreHack()
It's not defined anywhere.
3 years ago
Vlad Zahorodnii be32a1b1f5 Move createDecoration() and destroyDecoration() from AbstractClient to InternalClient
They are used only by InternalClient. AbstractClient doesn't need to
handle the destruction of DecorationBridge because its lifetime matches
kwin's lifetime.
3 years ago
Vlad Zahorodnii acb0683e0d wayland: Properly handle async xdg-decoration updates
Currently, if a window switches between SSD and CSD, it is possible to
encounter a "corrupted" state where the server-side decoration is wrapped
around the window while it still has the client-side decoration.

The xdg-decoration protocol fixes this problem by saying that decoration
updates are bound to xdg_surface configure events.

At the moment, kwin sort of applies decoration updates immediately. With
this change, decoration updates will be done according to the spec.

If the compositor wants to create a decoration, it will send a configure
event and apply the decoration when the configure event is acked by the
client. In order to send the configure event with a good window geometry
size, kwin will create the decoration to query the border size but not
assign it to the client yet. As is, KDecoration api doesn't make
querying the border size ahead of time easy. The decoration plugin can
assign arbitrary border sizes to windows as it pleases it. We could change
that, but it effectively means starting KDecoration3 and setting existing
window deco ecosystem around kwin on fire the second time, that's off the
table.

If the compositor wants to remove the decoration, it will send a
configure event. When the configure event is acked and the surface is
committed, the window decoration will be destroyed.

Sync'ing decoration updates to configure events ensures that we cannot
end up with having both client-side and server-side decoration. It also
helps us to fix a bunch of geometry related issues caused by creating
and destroying the decoration without any surface buffer attached yet.

BUG: 445259
3 years ago
Vlad Zahorodnii db996e0824 Remove updateDecoration() in AbstractClient 3 years ago
Vlad Zahorodnii 70f46970da Invalidate decoration explicitly
Lets us to remove AbstractClient::updateDecoration().
3 years ago
Vlad Zahorodnii 01a46ff389 Reduce code duplication between X11Client::createDecoration() and AbstractClient::createDecoration() 3 years ago
l10n daemon script 0db88c3ea6 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"
3 years ago
Xaver Hugl 9781f43a48 backends/drm: remove unneeded methods in DrmBackend 3 years ago
Xaver Hugl 5d5bb2422c backends/drm: move definitions into cpp file 3 years ago
Xaver Hugl ca79f11ede backends/drm: minor refactor of DrmPipeline 3 years ago
Vlad Zahorodnii 991f6b458d Create effects handler after letting toplevels setup compositing
Many effects use the stacking order property of the effects handler in
their constructors. This means that windows should have compositing
setup by the time effects are loaded.

After changing how binary effect plugins are loaded, i.e. not queueing
loading effects, but loading them immediately, some effects broke
because the effects handler is created before windows setup compositing.

This change attempts to fix those effects by rearranging compositor
startup code so windows setup compositing first, then create the effects
pointer.
3 years ago
Vlad Zahorodnii b26227348c wayland: Move or resize xdg-toplevel window during initialization only if geometry is enforced by a window rule
move() and resize() functions are not convenience helpers around the
moveResize() function. They communicate what kwin wants to see after the
corresponding change is applied. It's needed to make asynchronous
geometry updates work.

This change replaces a moveResize() during XdgToplevelClient
initialization with explicit move() and resize() function calls instead,
so it's more clear what the expected end result is.
3 years ago
jiya dong fed45422cf fix: Fix the problem of rotating the screen in full-screen state and maximizing the state after exiting full-screen. 3 years ago
Aleix Pol eaa2f538e3 libinput: Pass QStrings as constref 3 years ago