Commit Graph

18017 Commits (df9e36ee68a1285d0fab6be2590610ca71fec90f)

Author SHA1 Message Date
Vlad Zahorodnii df9e36ee68 [wayland] Destroy XdgToplevelClient and XdgPopupClient on unmap
There are several ways to handle unmapping of a wl_surface. The first
one is to destroy the associated AbstractClient instance. The second one
is to transition the AbstractClient in a special state.

The problem with the second approach is that it makes animations such as
fade out more difficult to handle since effects in kwin are geared more
towards the first approach (destroying AbstractClient).
2020-06-01 15:13:03 +03:00
Vlad Zahorodnii 31ea780d79 [wayland] Rework xdg-shell implementation
Summary:
This change splits the XdgShellClient class to better match existing
abstractions in the xdg-shell protocol and fix a few issues related to
sending configure events.

In the new client classes, configure events are handled differently.
Instead of blocking configure events, we try to send them as late as
possible. Delaying configure events will let us merge changeMaximize()
for X11 clients and Wayland clients and it also fixes the bug where
we don't send the final configure event when user has finished resizing
a window.

Given that configure events are not sent immediately, XdgSurfaceClient
keeps the last requested frame geometry and the last requested client
geometry.

This patch doesn't intend to fix all issues in kwin's implementation of
the xdg-shell protocol. For example, we still handle surface unmapping
very poorly.

Test Plan: Tests pass.

Reviewers: #kwin

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D27861
2020-06-01 15:12:59 +03:00
Vlad Zahorodnii 076b8bc14c [effects/zoom] Implement text caret tracking
The text caret tracking feature allows to keep the text caret inside the
zoomed area. It can be especially useful when the zoomed area is smaller
than the text editor.

BUG: 362189
2020-06-01 10:43:59 +03:00
Vlad Zahorodnii c1ea0412a4 [effects/zoom] Implement focus tracking with QAccessibilityClient
Currently, the focus tracking functionality in the zoom effect does not
work because it relies on kaccessibleapp, which is dead. Luckily for us,
there is a library called libqaccessibilityclient that provides a way
to monitor focus changes.

BUG: 421234
2020-06-01 10:43:59 +03:00
Mikhail Zolotukhin 7226e75bc8 Notify about decoration theme change 2020-05-31 19:55:38 +00:00
l10n daemon script 7230c95320 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-05-31 20:24:40 +02:00
Ismael Asensio 379ce9327a Merge branch 'Plasma/5.19' 2020-05-31 13:42:53 +02:00
Ismael Asensio 623ee1011c [kcm/kwinrules] Fix first item position on property list
The first time the list in `Add properties` is shown, the position of the first
delegate is miscalculated as (0, 0) and gets hidden behind the section header.
It only repositions when the delegate is destroyed and re-created, for example, when
setting and deleting a filter text. (https://bugs.kde.org/show_bug.cgi?id=422289)

This works-around it by delaying the `overlayModel` filtering until the list is first
shown, which makes the delegate position correctly.

BUG: 421583
FIXED-IN: 5.19
2020-05-31 10:54:28 +00:00
Ismael Asensio d725fc59bf [kcm/kwinrules] Detect also window complete class
Summary:
When detecting the properties of a window, now it shows and lets the user select the window complete class.
If this property is selected in the overlay, `Window class` takes the whole class value, and the option `Match window whole class` is set.

This adds back a feature the old kcm was offering.

BUG: 421542
FIXED-IN: 5.20

Test Plan:
- `Detect window properties` and pick a firefox window
- The property selector shows: `Window class: navigator` and `Whole window class: navigator firefox`
- Selecting the latter set the properties as per summary

{F8334118}

Reviewers: ngraham, #kwin, #plasma, meven

Reviewed By: ngraham, #kwin, #plasma, meven

Subscribers: broulik, davidedmundson, meven, anthonyfieroni, zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D29791
2020-05-31 12:51:44 +02:00
Carl Schwan 1dcf514e21
Don't compare string with empty string
Summary: Instead compare string length with an integer

Test Plan: Compile && run

Reviewers: #plasma, iasensio

Reviewed By: iasensio

Subscribers: broulik, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D29772
2020-05-29 22:50:01 +02:00
Vlad Zahorodnii ab5d310119 Merge branch 'Plasma/5.19' 2020-05-29 16:48:10 +03:00
Vlad Zahorodnii 783c2f47d6 Merge branch 'Plasma/5.18' into Plasma/5.19 2020-05-29 16:47:54 +03:00
Vlad Zahorodnii 2c76cc4784 [wayland] Fix misuse of EGL/eglmesaext.h
The recommended way to get all EGL extension defines is to include
EGL/eglext.h. EGL/eglmesaext.h is a private header that compositors
should not use.

BUG: 422131
2020-05-29 16:21:01 +03:00
Benjamin Port 301d3defc5 Take in consideration keyboard shortcuts inhibit rename to V1 2020-05-29 11:24:04 +02:00
Benjamin Port 4a90f6ab60 Add support to keyboard shortcuts inhibitor
Summary:
- Disable all global shortcuts
- For now don't disable spies (So opening menu with meta key is not disabled for now)

Depends on D29231

Test Plan: Tested with https://github.com/swaywm/wlroots/blob/master/examples/keyboard-shortcuts-inhibit.c

Reviewers: davidedmundson, zzag

Reviewed By: davidedmundson

Subscribers: romangg, broulik, apol, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D29272
2020-05-29 08:49:11 +00:00
Benjamin Port 98701b6f38 Wayland server getters => const 2020-05-29 08:40:36 +00:00
Vlad Zahorodnii 30a5b11148 Merge branch 'Plasma/5.19' 2020-05-29 10:55:16 +03:00
Vlad Zahorodnii ed02ece38d Merge branch 'Plasma/5.19' 2020-05-29 10:48:45 +03:00
Vlad Zahorodnii 309fbf1837 [effects/blur] Don't blur outside the frame rect
We need to clip the blur region to ensure that the background behind
client side drop shadows is not blurred.

BUG: 422202
2020-05-29 10:42:48 +03:00
Méven Car 464203c60e Clean #if version check blocks
Since 08a21ae7b6 we now depend on Qt 5.14
2020-05-28 11:43:29 +00:00
Vlad Zahorodnii c54d069d43 [wayland] Adjust to kwayland-server changes
"V1" suffix has been added to Display::createDataControlDeviceManager().
2020-05-28 11:58:38 +03:00
David Edmundson d88bf7cdf1 [wayland] Allow nested mode to have a fractional scale < 1
The bug reporter presents a use case of wanting to run a game and scale
down the result.

For everyone else kwin_wayland nested is just a test tool, so I don't
see any disadvantages.

It could be useful in testing.

BUG: 422141
2020-05-28 08:53:54 +00:00
Ismael Asensio 61c6d58172 [kwinrules] Add kconf_update script to fix placement rule
Since the port to KConfigXT, the placement setting in `kwinrulesrc` now stores the enum value instead of a string equivalent.
The strings and enum values are taken from `placement.h/.cpp`

This was suggested by @zzag in https://phabricator.kde.org/D29790
2020-05-27 18:13:00 +00:00
Méven Car 5c3e03259a DrmOutput: Ensure waylandOutput dpms mode matches DrmOutputs
After 797ccca48c
It appeard WaylandOutput (OutputInterface) would never get their Dpms
mode.
2020-05-27 10:07:39 +02:00
Johnny Jazeix 00b285623a fix compilation, remove extra parenthesis 2020-05-26 19:14:10 +02:00
Méven Car f0f465ccbd Wayland: avoid binding disabled outputs to surfaces
We don't need to bind disabled outputs to surfaces that overlaps them.
This prevents error down the line and warnings about ignoring surface.enter events with Qt.

BUG: 419749
2020-05-26 17:18:11 +02:00
Méven Car 797ccca48c Wayland: avoid binding disabled outputs to surfaces
We don't need to bind disabled outputs to surfaces that overlaps them.
This prevents error down the line and warnings about ignoring surface.enter events with Qt.

BUG: 419749
2020-05-26 15:14:13 +00:00
David Edmundson b267ea41b2 [wayland] Create DataControlDeviceManager 2020-05-26 12:38:18 +01:00
David Edmundson 1c2f23d31c [xwl] Update to kwaylandserver changes
Summary:
Change so we track track and set a DataSource instead of a DataDevice

This means we have to reverse a connection:
- we need to update Seat with our selection only when our selection is
received by the DataDeviceInterface

- we no longer need to track and watch a dataDevice for changes after
the seat emits selectionChange

Change so that we handle an AbstractDataSource. Meaning we can paste
from clipboard managers.

Testing done:
There is an existing xwayland-selections_test
This still passes.

Copied from:
wl-copy(wlr) to firefox (x)
firefox to wl-paste
firefox to kate (wayland)
kate to firefox

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: cblack, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D29332
2020-05-26 12:38:18 +01:00
David Edmundson e3044e619e Correctly align natural layout in present windows
Summary:
Present windows works as follows:

- It moves all windows about until nothing is overlapping with any
other window.
- This doesn't resize anything so ultimately we end up with a new
co-ordinate space that's bigger than the screen depending on the amount
of overlap.

 - We then render this whole view transformed to the screen

The rectangle "bounds" is in overviewpixels, with "scale" being the
ratio to convert to screen pixels.

When adjusting the new bounds there's an attempt to centre align things.
As bounds is in "overviewpixels" we multiply references to the previous
bounds by scale, and divide everything through at the end. bounds.x/y
were missed.

This is mostly unoticable except on massive super-ultra-wide monitors
which will otherwise have a tendency to shift to the left.

Test Plan:
Kai created a whole new test framework for this code that copy pasted
this algorithm then showed mock windows as rectangles

Reviewers: #kwin, apol, broulik, zzag

Reviewed By: #kwin, apol, broulik, zzag

Subscribers: zzag, apol, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D29705
2020-05-26 10:52:16 +01:00
David Edmundson 963491cc5e [effects/blur] Update to kwayland changes 2020-05-26 09:52:17 +01:00
Christian Muehlhaeuser 7b545bf47a Improve code readability of presentwindows effect
Summary:
Added newlines in various places to make the code a bit easier
to read and digest.
2020-05-24 08:58:39 +00:00
Noah Davis f474686a58 Change CommandAllKey to Meta
Summary: Alt + Left Click to move windows has a tendency to conflict with creative workflow apps. While Alt can be changed to Meta in KWin's settings, Alt + Left Click shortcuts often cannot be customized in apps. Rather than making every user who runs into this problem change their settings, we should change our default settings to improve KWin's default usability. The fact that Alt + Left Click to move windows is older does not matter. We are trying to use Meta for global/shell shortcuts anyway.

BUG: 399375

Test Plan: The relevant parts of the relevant tests pass. kwin-testInternalWindow fails, but for unrelated reasons that have something to do with XWayland.
2020-05-22 22:39:08 -04:00
Nate Graham 85b9aea5b4 Position OSD a bit farther down
Summary:
A common user complains is that our OSDs--particularly the volume OSD--are too intrusive
and get in the way of the screen content. For example when adjusting the volume while
watching a full-screen video, the volume change OSD will typically appear right in the
middle of an actor's face.

D20569 was an attempt to use a horizontal OSD to alleviate this issue. It mostly worked,
but IMO it was still positioned too high up.

This patch moved the placement down a little bit to make the OSD appear even farther from
the center of the screen to make it less likely to

I tried not to move it down too far or else it would interfere with subtitles in videos.

Test Plan:
With D20569:

{F8269172}
{F8269164}
{F8269163}

Reviewers: #kwin, #vdg, broulik, ndavis, zzag

Reviewed By: #kwin, #vdg, ndavis, zzag

Subscribers: meven, ndavis, niccolove, baberts, davidedmundson, filipf, zzag, kori, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D29263
2020-05-22 08:38:11 -06:00
Ismael Asensio 91eee99fca [kcm/kwinrules] Extend upper limit of position and size spinners
Currently, the spinners used to edit position and size rules have an upper
limit of 4098, which may be not enough for wide/hdpi/mutiple screens.

The property itself has no such limit in the `.kcfg` schema
This is just an issue with the editor.

BUG: 421892
FIXED-IN: 5.19
2020-05-22 16:03:32 +02:00
Vlad Zahorodnii 621b2e1cde [decoration] Fix propagation of client size
Even though the frame geometry and the client geometry have a connection
between themselves, it doesn't mean that the frame geometry will change
if the client geometry has changed and vice versa. For example, it can be
the case when the border size changes. The frame geometry won't change,
but the client geometry will.

In general, similar to the frameGeometryChanged signal, we need another
signal that is emitted when the client geometry has been changed that
can be used then in DecoratedClientImpl.

Unfortunately, 5.19 release is around the corner and I would prefer not
to do any geometry-related changes in order to avoid introducing new
regressions.

In order to fix the propagation of the client size to decorations, this
change ports DecoratedClientImpl from frameGeometryChanged to a signal
that is emitted whenever geometry of any kind has been changed.

BUG: 419080
FIXED-IN: 5.19.0
2020-05-21 09:44:55 +00:00
Bhushan Shah 6caad6ee2f Merge branch 'Plasma/5.19' 2020-05-21 14:26:28 +05:30
Bhushan Shah b2df11bf7e [platforms/drm] show cursor only when it is enabled
In previous code we used to update/show cursor even when the pointer
device was present, e.g mobile device. Guard it behind the cursor
enabled check.

BUG: 418977
FIXED-IN: 5.19.0
2020-05-21 12:38:02 +05:30
Tiago Corrêa 232984c123 scripting: Provide methods to create and remove virtual desktops
Summary: There are methods to create and remove virtual desktops via dbus, but I think it would be convenient to provide these methods for KWin scripts as well.

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D29786
2020-05-21 09:14:55 +03:00
Ilya Bizyaev 3e337603e4 GIT_SILENT: add KWin icon as repository logo
logo.png is used by KDE's Gitlab infrastructure to set
repository's logo in the web UI. This is the preferred
way of configuring repository logos to avoid exhausting
sysadmin team's attention.
2020-05-20 12:47:52 +00:00
Méven Car b77d29119e Drm backend: delete DrmOutput* after DrmScreens notified its users
Test:

Plug-in and out HDMI screen

Before:
Crash when pluggin-in
After:
No crash
2020-05-19 17:25:19 +02:00
Vlad Zahorodnii 7569bdf6a3 [scene] Re-build window quads after creating a WindowPixmap
In order to generate window quads for a window, the scene needs a valid
WindowPixmap tree. If it's time to render the window, the scene will
build window quads for the contents, the server-side window decoration,
the drop-shadow and cache the resulting window quads. With this way of
generating window quads, we need the window pixmap tree to be valid,
or else no contents window quads will be generated.

While the window pixmap tree is guaranteed to be valid at the time of
generation of window quads for Wayland and X11 clients, this is not the
case for Xwayland clients.

When an Xwayland client is created, some time may pass between the
moment it's been created and the moment when a regular wayland surface
has been associated with the xwayland window. If the compositor decides
to render the Xwayland client in that short period of time, the window
quads cache won't have window quads cache.

In order to work around the weird asynchronous behavior of Xwayland
clients, this change makes the scene discard the window quad cache when
a new window pixmap has been created. This will ensure that the current
window quads are always in sync with the current window pixmap tree.
2020-05-19 14:06:06 +03:00
Ismael Asensio bd5e34f5b4 [kcm/kwinrules] Detect virtual desktops in Wayland
The list of virtual desktops is retrieved using a DBus method, instead of
`KWindowSystem`, to make it work both in Wayland (as well as X11).

FIXED-IN: 5.20
BUG: 416165
2020-05-19 00:49:15 +02:00
Ismael Asensio fdd9ed53d9 [kcm/kwinrules] Fix Placement setting
Summary:
Since the port to KConfigXT, the setting "placement" is stored using the enum value, instead of a string equivalent.
This updates the kcm model to be able to communicate this property with the config schema.

BUG: 421586
FIXED-IN: 5.19.0

Test Plan:
- In a rule set the "Initial Placement" property
- The value is stored in `~/.config/kwinrulesrc`
- Close/reopen the kcm. The placement value is correctly loaded.

Reviewers: #kwin, #plasma, zzag

Reviewed By: #kwin, #plasma, zzag

Subscribers: zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D29790
2020-05-18 20:27:59 +02:00
Laurent Montel be245e2f8b GIT_SILENT: we don't use phabricator now 2020-05-17 19:02:22 +02:00
Ismael Asensio 923340e6b1 Merge branch 'Plasma/5.19' 2020-05-15 20:04:57 +02:00
Ismael Asensio db7fb26eed [kcm/kwinrules] Fix size properties not being stored
Summary:
Use `QSize`/`QPoint` to handle and store coordinate values (size and position)

Previously, the rules model stored the "coordinate" type properties as a
`QString` with format `x, y`.

This fails when setting the properties to the config schema, as it requires
a proper `QPoint` or `QSize` value, specially the latter which can't be
convert from such a string.

BUG: 421055
FIXED-IN: 5.19.0

Test Plan:
- Add a new rule and set its position and size properties
- Hitting apply stores the right values in `~\.config\kwinrulesrc`
- Close the kcm and reopen, the values are loaded
- Property detection still works for size and position

Please note that there is a pre-existing bug of some position/sizes not being
applied to the windows in some cases, when using `Apply Initially`.
Better try using the `Force` policy.

Reviewers: ngraham, #kwin, #plasma, zzag

Reviewed By: #kwin, #plasma, zzag

Subscribers: zzag, ltoscano, yurchor, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D29764
2020-05-15 19:45:11 +02:00
Ismael Asensio 973957127d [kcm/kwinrules] Fix placeholder message in RulesEditor
Summary:
Fix the anchoring of the placeholder message after https://phabricator.kde.org/R108:9e5498238f88ece28f4f0d22da00879280cb7955
It needs to center on the free space, not the whole ListView.

Test Plan
Before: {F8323417}
After: {F8323416}

Reviewers: ngraham, broulik, #vdg, #plasma

Reviewed By: ngraham, #vdg

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D29783
2020-05-15 19:44:43 +02:00
Jonathan Riddell 1080069496 Update version number for 5.19.80
GIT_SILENT
2020-05-15 16:50:46 +01:00
Aleix Pol da81b0f86c Improve opengl debug messages
Summary: Don't include the \n at the end of the debug messages

Test Plan: Now I can see the debug errors without an empty line below

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D29684
2020-05-15 12:27:58 +02:00