Commit graph

1366 commits

Author SHA1 Message Date
Aleix Pol
edd1ec389b input: Use specific API
No need to construct values that are already provided
2021-05-14 01:35:33 +02:00
Aleix Pol
84200e7e38 EffectWindow::geometry -> EffectWindow::frameGeometry
::geometry is deprecated.
2021-05-14 01:35:33 +02:00
Vlad Zahorodnii
bf2e54fb5e wayland: Make some animations less glitchy
If a minimized window is animated by the AnimationEffect, the final
layer repaint will be ineffective. In order to account for that, the
AnimationEffect adds the layer repaint to data.paint in the
prePaintScreen() hook. The issue with this hack is that it does not
work on Wayland with per screen rendering.

If a window is animated on screen B, but the layer repaint is added
to data.paint when screen A is painted, there will be a ghost of the
window on screen B.

In order to fix this issue, we need to use effects->addRepaint(), but
we cannot use it in prePaintScreen() as it won't have immediate effect.

effects->addRepaint() can be called either from window paint hooks
or from the postPaintScreen() hook. This change goes after the latter
option.

In the prePaintScreen() hook, AnimationEffect will only advance
animations. In the postPaintScreen() function, it will perform final
janitorial chore.
2021-05-13 20:29:41 +00:00
Vlad Zahorodnii
33b2ea2058 wayland: Fix internal connection teardown
The internal EventQueue is a child of the registry object. This means
that after the registry is destroyed, all proxy objects in that event
queue are going to have invalid reference to it, which is not a problem
as long as the wl_display_dispatch() function is not called.

The wl_display_dispatch() function uses wl_proxy's queue reference to
enqueue incoming events to that queue.

Unfortunately, during teardown, the internal ConnectionThread may
dispatch events right after the registry object has been destroyed,
which can lead to a crash.

In order to fix the crash, we need to destroy all proxy objects and only
after that we can destroy the event queue. It's okay if wayland events
are dispatched in between.
2021-05-13 18:51:35 +00:00
Nate Graham
7861c8d389 Expose compositing status to Switcher QtQuick item
This allows Task Switcher visualizations to know whether compositing is
active or not so they can adjust their visual representations
accordingly, if needed.
2021-05-13 18:50:11 +00:00
Vlad Zahorodnii
7d0cad07fb autotests: Fix XwaylandInputTest
For some reason, Xwayland doesn't like starting without outputs. If
outputs are added later, it sends bogus EnterNotify and LeaveNotify
events.
2021-05-13 11:44:41 +00:00
Vlad Zahorodnii
432c617d10 Revert "wayland: Simplify XdgSurfaceConfigure"
This reverts commit 110182b213.

The reverted commit has introduced a regression where interactively
moved windows jump back to their old position. This needs some time for
proper investigation. Due to beta rolling out quite soon, it will be
better to revert the change.
2021-05-13 10:18:10 +03:00
Vlad Zahorodnii
110182b213 wayland: Simplify XdgSurfaceConfigure
Rather than have an error prone way to detect whether a configure event
has good position information, handle the case where the plasma shell
surface has a position hint explicitly.
2021-05-13 06:50:24 +00:00
Vlad Zahorodnii
0e63b4e8cc wayland: Simplify plasmashell surface installation code 2021-05-13 09:20:20 +03:00
Vlad Zahorodnii
7475385c82 Make scale and glide effect ignore lockscreen greeter
On X11, the lockscreen greeter is an override-redirect window so the
scale and the glide effect ignore it.

On Wayland, the lockscreen greeter is a regular window so both effects
try to animate it upon the screen being unlocked, which looks bad.
2021-05-13 05:46:30 +00:00
Vlad Zahorodnii
32848490ba wayland: Call KSldApp::lockScreenShown() for layer-shell lockscreen clients
The lockscreen no longer creates xdg-toplevel surfaces.
2021-05-12 22:14:42 +03:00
Aleix Pol
8e63bd230f InternalWindowEventFilter: Also track pressed ids for touch points != 0
So far we were only tracking the first touch point, meaning that if 2
touch points were applied to the internal window and removed one, the
second's events would then be sent to Wayland, which would assert since
it didn't know it had been pressed in the first place.

This fixes InternalWindowTest::testTouch
2021-05-12 17:38:03 +00:00
Vlad Zahorodnii
e187e766b0 Only promote windows to upper layers if one of the group members is in fullscreen mode
We want panels to be behind fullscreen windows, but osd windows above
them. With the current layer promotion logic, the panel will be promoted
to the osd layer, which is undesirable. This change restores the old
behavior by allowing layer promotion only to ActiveLayer.

BUG: 436985
2021-05-12 17:02:04 +00:00
Vlad Zahorodnii
d031381f19 Fix a typo
We should update stacking_order, not x_stacking_order.
2021-05-12 16:59:08 +00:00
Vlad Zahorodnii
e29dee951d Don't invalidate x stacking order prematurely
Workspace::updateStackingOrder() will mark it as dirty if the stacking
order actually changes due to a constraint being added or removed.
2021-05-12 16:59:08 +00:00
Aleix Pol
0fbde9a2e0 Add a virtual destructor for XdgSurfaceConfigure
It's inherited by XdgToplevelConfigure and we need to make sure that the
object gets destroyed properly.
Alternatively we get a new-delete-type-mismatch error in ASAN and
rightfully so.
2021-05-12 16:14:31 +02:00
Vlad Zahorodnii
eef97904b6 Simplify Workspace::constrainedStackingOrder()
Workspace::constrainedStackingOrder() is a constant source of issues.
This change replaces the current logic that builds the stacking order to
hopefully make constrainedStackingOrder() less crashy.

With the new version, constrainedStackingOrder() doesn't perform layer
caching. On the other hand, it's quite rare to see apps in the wild that
have more than just 1 or 2 members in the window group.

BUG: 436095
2021-05-12 11:50:38 +00:00
Vlad Zahorodnii
0de2b73393 Introduce transient constraints api in Workspace
Currently, the Workspace has no any api to constrain one window above
another. This results in having hacks such as keepDeletedTransientAbove()

This change introduces a basic api to constrain a given window above
another. It can be used for ensuring that transient windows are placed
above their parents. It also can be used for stacking the outline window
below the move-resize window.

Internal windows may also have transient parents. Because of that, this
change makes the workspace add internal clients to the stacking order by
default. The good thing about it is that it allows us unify some input
related code for "external" windows and internal windows.
2021-05-12 11:50:38 +00:00
Vlad Zahorodnii
9b2b450fdd wayland: Use new api to remove globals safely
BUG: 435258
2021-05-12 11:31:36 +00:00
Aleix Pol
2a32e642ed No need to compare values if we know they already changed
Makes for more readable code as well as less code to execute
2021-05-12 10:44:22 +00:00
Aleix Pol
8979f83e38 Unify the code that turns StrutAreas into QRegion 2021-05-12 10:44:22 +00:00
Zhang Liang
837ef14e46 Change the argument name in function declaration
Change the name from "pipewireStream" to "stream",keep it same as definition.
2021-05-12 10:39:03 +00:00
Vlad Zahorodnii
500321f2b5 xwayland: Relax requirements for /tmp/.X11-unix/ ownership
Hopefully, this will fix some tests in CI. It should be fine if
/tmp/.X11-unix/ is owned by the same user as getuid().
2021-05-12 13:02:12 +03:00
l10n daemon script
4269f13e58 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-12 01:17:30 +00:00
Andrey Butirsky
e74d8ddfc8 Revert "Register unique service name when wayland keyboard interface is in use"
This reverts commit e6eee5f970
2021-05-11 22:37:42 +03:00
Vlad Zahorodnii
1e6c5a7420 effects/squash: Use cubic easing curve
According to the HIG, the InCubic easing curve should be used if the
animated item changes its state from visible to invisible and the
OutCubic easing curve if vice versa.
2021-05-11 19:25:31 +00:00
Bhushan Shah
6b25335a2b inputmethod: fix coding style
GIT_SILENT
2021-05-11 16:44:01 +05:30
Aleix Pol
64178a0536 textinputv3: activate the input method when textinput says it's enabled 2021-05-11 12:47:27 +02:00
Vlad Zahorodnii
000ed7b122 wayland: Init outputs before emitting WaylandServer::initialized
This shouldn't make any difference, but it makes more sense to emit the
initialized signal after the outputs are added rather than before.
2021-05-11 10:45:28 +00:00
Aleix Pol
1e4b48df2e useractions: Remove redundant logic 2021-05-11 12:38:00 +02:00
Bhushan Shah
4e7c6b57a6 platforms/drm: put double tap timer behind config option
This feature was implemented in commit a66eb1a5b9 earlier

Double tap wake up is not a feature to be implemented at compositor
level but rather at the hardware/kernel level. Double tap timer here
means when screen is turned off, libinput will continue to poll the
touchscreen for new events.

double-tap-to-wakeup is generally interrupt at driver/hardware level
which have ability to wake system up even from the sleep.

Provide a option to disable the double tap timer on kwin side for
devices which makes use of suspend since when in suspend kwin can not
wake device up, and that provides confusing user experience.
2021-05-11 00:47:21 +00:00
Vlad Zahorodnii
9577423dfa Remove most_recently_raised micro optimization
This micro optimization is simply not worth having. raiseOrLowerClient()
is not in any hot path, besides that raiseClient() is not the only place
where a window can be raised above other windows. In addition to that,
the most_recently_raised check in raiseOrLowerClient() doesn't take into
account whether the cached window is on the current activity.
2021-05-10 19:49:34 +00:00
Vlad Zahorodnii
7261bbb230 Fix bad QObject::connect() argument
This fixes the warning that's printed when InputMethod tries to connect
the frameGeometryChanged signal of a null toplevel.
2021-05-09 22:45:27 +00:00
l10n daemon script
213c98213a 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-09 01:20:52 +00:00
l10n daemon script
baf3ddea72 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-08 01:17:47 +00:00
Aleix Pol
c544d4f297 slide effect: remove redundant code 2021-05-08 00:37:52 +00:00
Vlad Zahorodnii
77091f7fcb Remove manual discardWindowPixmap() calls in InternalClient
SurfaceItemInternal will discard the current pixmap if the buffer size
changes. Also, one of the goal of the scene redesign is to keep things
such as this out of Toplevel subclasses.
2021-05-07 17:34:31 +00:00
Bhushan Shah
119b00f896 inputmethod: use output geometry for positioning keyboard when locked
otherwise it will take the panel strut in account when positioning
inputmethod on lockscreen and that will not be positioned correctly.
2021-05-07 14:18:57 +00:00
Vlad Zahorodnii
aeca1af4ac Propagate correct maximize mode to decorations
When the maximize mode changes from MaximizeFull to either
MaximizeHorizontal or MaximizeVertical, (max_mode & MaximizeFull) will
evaluate to true because MaximizeFull is defined as bitwise OR between
MaximizeHorizontal and MaximizeVertical.
2021-05-07 14:18:04 +00:00
Aleix Pol
b9b349caa2 Mark deprecated API as deprecated
We'll hardly port away from it if it's just on the documentation. At the
moment they're used all over the place.

If they didn't have a replacement, they should be undepreprecated.
2021-05-07 13:11:26 +00:00
l10n daemon script
64b4caae95 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-07 01:17:26 +00:00
Vlad Zahorodnii
018177b576 Limit VRR policy in support information only to Wayland session
Adaptive sync is only supported on Wayland.

BUG: 436623
2021-05-05 16:55:18 +03:00
Jan Grulich
caaabf84df Screencast: use dma-bufs only when client explicitly asks for it 2021-05-05 10:01:49 +02:00
Vlad Zahorodnii
a0fc0277a7 wayland: Make fullscreen mode updates async
Currently, the fullscreen state is update synchronously, but it needs to
be done in asynchronous fashion.

This change removes some tests as they don't add any value, testFullscreen()
covers them all.
2021-05-05 06:11:42 +00:00
Vlad Zahorodnii
62500acd1a effects/fullscreen: Rewrite the effect using ES6 features
This is to keep the fullscreen effect in sync with the maximize effect.
2021-05-05 06:08:42 +00:00
Friedrich W. H. Kossebau
7b36c6443e Port away from ECMSetupVersion's deprecated *_VERSION_STRING CMake variable
GIT_SILENT
2021-05-04 23:45:34 +00:00
Aleix Pol
4aefbdd175 --warning 2021-05-04 23:07:16 +02:00
Xaver Hugl
5bd938f0f0 platforms/drm: release gbm buffers before eglDestroySurface
BUG: 436500
2021-05-04 17:36:09 +00:00
Adriaan de Groot
49fcadb185 Fix build on 32-bit systems
The added comment explains it all, really: you can't fit a 32-bit
unsigned into a 32-bit (signed) time_t, but we don't care.
2021-05-04 12:34:07 +00:00
Xaver Hugl
bd4a8be319 platforms/drm: fix DrmOutput::updateMode 2021-05-04 10:01:55 +00:00
Vlad Zahorodnii
073b6efc14 wayland: Fix focus follows mouse policy
We want to update the input focus only if the pointer is moved. Due to
that, AbstractClient::enterEvent() checks the last seen pointer position
to decide whether the window needs to be focused.

The issue is that when the pointer moves from a decoration to a surface,
the cached pointer position will be updated to the current pointer
position, and thus the check in AbstractClient::enterEvent() will fail.

We need to update the cached pointer position only if there is a focused
decoration.
2021-05-04 09:41:22 +00:00
Vlad Zahorodnii
b4987a9100 3rdparty: Synchronize xcursor.c with upstream 2021-05-04 09:40:29 +00:00
Nate Graham
85d9efcec7 [kcmkwin/kwindecoration] Make a bit more room for the decoration buttons 2021-05-03 21:42:05 -06:00
Nate Graham
2157e83bfb [kcmkwin/kwindecoration] Use clearer text for "Menu" decoration button 2021-05-03 21:35:27 -06:00
l10n daemon script
84c2e4662e 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-04 01:16:46 +00:00
Vlad Zahorodnii
3af5e9c8c4 effects/screenshot: Fix a typo
grabPointerImage() needs the coordinates of the top left corner of the
screen, not its size.
2021-05-03 20:54:09 +03:00
Xaver Hugl
089134d0bd platforms/drm: GPU power management
When a GPU has no outputs attached we need to release all resources and
close the fd to allow the driver to completely power down the GPU. This
is also required to allow the driver to be unloaded for VFIO.
2021-05-03 18:03:09 +02:00
Vlad Zahorodnii
403a04fe24 wayland: Fix loading of HiDPI cursors
Xcursors don't support hidpi so if a hidpi cursor is needed, kwin will
scale the desired size by the scale factor and ask Xcursor helpers to
load a theme with the given name and the size.

However, the theme loading code doesn't take into account that Xcursor
theme loading helpers may not return cursor sprites of size size * scale
if the theme has no such a size.

For example, if the cursor theme only provides 24, 36, and 48 sizes and
kwin attempts to load cursors of size 48 with a scale factor of 2, we
will get cursors of size 48 instead of 96. Unfortunately, this will
result in the issue where the cursor shrinks when hovering decorations
because kwin doesn't know that the effective scale factor (1) is
different from the requested scale factor (2).

In order to fix loading of HiDPI cursors, we need to approximate the
effective scale factor of every cursor sprite as we load it.
2021-05-03 10:52:25 +03:00
Vlad Zahorodnii
7397364115 scripting: Deprecate WorkspaceWrapper::screenResized
The WorkspaceWrapper::screenResized() signal relies on the QDesktopWidget
class, which is deprecated. Another issue with that signal is that it
uses integers to represent screens. We need to minimize the amount of int
based screen api and prefer more QScreen or AbstractOutput APIs because
the former get completely broken if the output layout changes.

Since we gain not a lot from porting WorkspaceWrapper::screenResized()
away from QDesktopWidget to something else and we don't use this signal
in any of our scripts, this change deprecates the screenResized signal
in favor of manual tracking of QScreen::geometryChanged signal.
2021-05-03 07:50:27 +00:00
Bhushan Shah
d987b94e42 inputmethod: do not deactivate the context when key is pressed
When keyboard_grab is implemented, if we reset the inputmethod context
on any key, input method will not get keyboard input and will not be
able to use it.
2021-05-03 09:44:27 +05:30
l10n daemon script
31cdb8676d 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-03 01:21:56 +00:00
Vlad Zahorodnii
a503efad45 Fix a typo
There is no matching opening parenthesis but the effect still works for
some reason.
2021-05-02 14:42:48 +03:00
Vlad Zahorodnii
411443bc05 effects/fade: Add a note reminding to remove FadeWindows option 2021-05-02 11:10:19 +00:00
Vlad Zahorodnii
24a474cb6c effects/fade: Rewrite the effect using ES6 features
This cleans up the code of the effect.
2021-05-02 11:10:19 +00:00
Vlad Zahorodnii
9fb58479b7 effects/scale: Rewrite the effect using ES6 features
Since the scripted effects were ported to QJSEngine, it's possible now to
use ECMAScript 2015 perks such as classes, let and const.

This change ports the scale effect to some ES6 features to make the code
neater.
2021-05-02 11:09:27 +00:00
Vlad Zahorodnii
db020c5614 effects/maximize: Rewrite the effect using ES6 features
Since the scripted effects were ported to QJSEngine, it's possible now to
use ECMAScript 2015 perks such as classes, let and const.
2021-05-02 11:08:13 +00:00
Xaver Hugl
6a9d82eb55 don't set vrr policy on incompatible monitors 2021-05-02 00:06:39 +00:00
Ömer Fadıl Usta
a8d7e99874 [plugins/platforms/drm/drm_backend] Fix build for bsd 2021-05-01 19:43:00 +00:00
Vlad Zahorodnii
8d9e47ee22 platforms/drm: Introduce KWIN_DRM_DEVICES
This allows to instruct kwin what drm devices must be used explicitly.

BUG: 435467
2021-05-01 12:14:34 +00:00
l10n daemon script
23e3a9a86f 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-01 01:21:12 +00:00
Aleix Pol
904c48d563 inputmethod: properly report the text_input_v2 overlap information
Call ::updateInputPanelState when necessary (instead of a trimmed-down
refreshFrame version.
Actually provide the overlap information when it's available, there's no
need to send wrong information there.
2021-04-30 17:46:52 +02:00
Xaver Hugl
faddf0bf5f Wayland: variable refresh rate support
BUG: 405912
2021-04-30 16:18:39 +02:00
Nate Graham
2a6fe9748f [kcmkwin] Apply grid delegate KCMs on double-click
To be consistent with plasma-workspace KCMs which we applied this to in
https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/606
2021-04-29 20:14:05 -06:00
Vlad Zahorodnii
706eb16b3a Remove Platform::screenGeometries and Platform::screenScales
If you need screen geometries or scales, use AbstractOutput::geometry()
and AbstractOutput::scale(), respectively.
2021-04-29 11:31:31 +00:00
Aleix Pol
cadb13de0e inputmethod: fix how we update to input method changes
Properly notify about changes from the kcm and properly integrate them.
So far it only worked between having and not having a keyboard.
2021-04-29 11:04:19 +00:00
Aleix Pol
baa246fbb7 inputmethod: improve the integration of the SNI
* Adds a context menu to choose virtual keyboards.
* Notifies when there is no virtual keyboard selected.
2021-04-29 11:04:19 +00:00
Aleix Pol
050ce24247 inputmethod: Move the input method process into the InputMethod class
Use the control this gives us for stopping the input method process when
we disable.
2021-04-29 11:04:19 +00:00
Vlad Zahorodnii
ac3c09ba75 Remove Platform::areOutputsEnabled()
This flag is redundant. If an output is disabled, the compositor won't
attempt to perform compositing on it.
2021-04-29 10:47:41 +00:00
Vlad Zahorodnii
f8c00a530f Remove Platform::prepareShutdown()
Platform::prepareShutdown() was introduced to work around the issue
where the platform accesses destroyed OutputDeviceInterface objects.

Since we no longer query OutputDeviceInterface for output info, the
Platform::prepareShutdown() function can be dropped.
2021-04-29 10:47:41 +00:00
Vlad Zahorodnii
2200f4ded9 windowsystem: Fix compilation with no deprecated build of KWindowSystem
Highlight window and present windows API has been deprecated in 5.82.
2021-04-29 10:46:39 +03:00
Vlad Zahorodnii
9e1de4522e platforms/drm: Remove unused defs and includes in drm_backend.cpp 2021-04-29 08:45:27 +03:00
Vlad Zahorodnii
44fc23f6e7 Fix build on FreeBSD 2021-04-29 08:36:26 +03:00
Vlad Zahorodnii
c4c46a089f platforms/drm: Properly detect if there are no DRM devices
If no primary gpu can be found, we need to quit.
2021-04-29 05:34:19 +00:00
Vlad Zahorodnii
9f030ecd40 platforms/drm: Enable atomic modesetting in hot plugged gpus
At the moment, if a gpu is hot plugged, it won't have atomic modesetting
enabled.
2021-04-29 05:34:19 +00:00
Vlad Zahorodnii
03c38e02e9 platforms/drm: Remove DrmBackend::findOutput()
It's unused.
2021-04-29 08:10:37 +03:00
Vlad Zahorodnii
54a034b7cf platforms/drm: Use dev nums to find gpus
This way we don't need to convert strings to ints every time
udev_device_get_sysnum() is called.
2021-04-29 04:58:46 +00:00
Vlad Zahorodnii
fe0039091c platforms/drm: Don't search for gpus on add udev event
If a gpu is added, don't search for it pointlessly in m_gpus.
2021-04-29 04:58:46 +00:00
Felipe Kinoshita
a2ed8cb9da
[effects/presentwindows] add a comment explaining why we are darkening the panel 2021-04-29 01:14:56 -03:00
l10n daemon script
1c6be7e32c 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-04-29 01:20:31 +00:00
David Edmundson
ccc5551ff0 [Input] Unset device group user data on teardown
BUG: 436287
2021-04-28 22:43:57 +00:00
Vlad Zahorodnii
04c3bee803 Remove unused things in drm_backend.h 2021-04-28 22:12:58 +03:00
Xaver Hugl
9cd046f206 platforms/drm: add GPU hotplug support 2021-04-28 18:57:47 +02:00
Xaver Hugl
0284aeb7bb platforms/drm: Don't release drm buffers in EglGbmBackend
When we release the buffers that also removes the drm fbs.
This causes failing atomic commits that the atomic code
doesn't (yet) handle correctly, the result is a black
screen when compositing is restarted.
2021-04-28 13:51:06 +00:00
Cyril Rossi
8af45aa962 KCM KWinTabbox activate/deactivate desktop effects. Fix default value for highlightWindowsEnabled 2021-04-28 09:07:14 +02:00
Cyril Rossi
5bc3316e54 KCM KWinTabbox sidebar default indicator was always on
Use PluginsSettings but it's not part of the default state of the KCM
2021-04-28 09:07:14 +02:00
Cyril Rossi
c17914bc66 KCM KWinTabbox on defaultsIndicatorsVisibleChanged do not update unmanagedWidgetDefaultState
BUG: 419014
2021-04-28 09:07:14 +02:00
Bhushan Shah
18af4032e4 inputmethod: update state on new value not cached value
We want to update the inputpanel state on new value which is being set
and not based on the cached value.

Fixes the keyboard going in wrong mode like pre-edit mode when closed
and re-opened.
2021-04-28 03:39:12 +00:00
l10n daemon script
257d8f32cf 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-04-28 01:22:29 +00:00
Yuri Chornoivan
22ee512ba6 Add docs for virtual keyboard KCM 2021-04-27 17:09:41 +03:00
Xaver Hugl
40eb0e4f0e platforms/drm: only print error for direct scanout when useful
Most wayland-native apps provide buffers that aren't suitable
for direct scanout; the message usually only spams the log full
without proper reason or useful information
2021-04-27 15:22:20 +02:00
Aleix Pol
af6f95b2eb fb: remove unnecessary casts 2021-04-27 15:14:06 +02:00
Aleix Pol
0b14af5624 udev: Do not return a mysterious vector with just a null pointer
When getting the vector, it requires us to check both if it's not empty
but also that it's not null. I haven't seen it but we were not doing
this check.

Just return an empty vector when there's no devices instead.
2021-04-27 15:14:06 +02:00
Aleix Pol
0e433cb83a udev: remove duplicated code
Let UdevDevice offer the method we need for sorting instead of just half
of it.
Always sort Udev enumerations, since the alternative is to sort it every
time it's called otherwise.
2021-04-27 15:12:26 +02:00
Vlad Zahorodnii
d7e9c717af Explicitly cast major() and minor() to uints
On FreeBSD, the major() and the minor() macros return ints instead of
uints.
2021-04-27 12:02:38 +03:00
Vlad Zahorodnii
ba0e18955b Add a debug message that gets printed if TakeDevice fails
This can be useful while debugging why the TakeDevice request fails.
2021-04-27 09:50:12 +03:00
Xaver Hugl
b6231aca92 Remove mentions of Xinerama from the Window Behavior kcm 2021-04-26 19:25:50 +00:00
Xaver Hugl
102f32112f Change the default for "active screen follows mouse" to true 2021-04-26 19:25:50 +00:00
Aleix Pol
a21571c832 Do not run with the drm backend if there's no dri drivers
Only defaults to the drm backend if there is a /dev/dri directory.

CCBUG: 436053
2021-04-26 12:57:21 +00:00
Aleix Pol
4b3b5fa368 fb: make it easier to run on nomodeset
In the few cases where the framebuffer is needed, we'd get problems
because ioctl(KWIN_FB_NO_VSYNC) fails.
This removes the code entirely to just use a timer to refresh.

BUG: 436053
2021-04-26 12:46:55 +00:00
Aleix Pol
92fb680b04 Provide a kcm module to choose a virtual keyboard
BUG: 430850
2021-04-26 12:40:20 +00:00
Vlad Zahorodnii
2c05229141 qpa: Set minimum device ratio of 1 for windows
This is to prevent rendering issues in the present windows close buttons
as Qt supports scale factors that are less than one poorly.
2021-04-26 11:41:37 +00:00
Vlad Zahorodnii
c9ac2e3fb8 decoration: Fix rendering issues with scale factors < 1
QPainter::setWindow() doesn't work as we expect if the device pixel
ratio of the paint device is less than 1, for example 0.5 or 0.75.

QPainter only allows the effective device pixel ratios that are greater
than or equal to 1. This restriction probably has to be lifted.

For the time being, this change introduces a helper function that can be
used to determine the scale factor by which QPainter::window() must be
multiplied.

BUG: 432766
2021-04-26 11:41:37 +00:00
Harald Sitter
385ea10bef SCM_SILENT typo-- 2021-04-26 12:39:44 +02:00
David Edmundson
799db61381 Restore following XDG_SESSION_ID env if set
BUG: 435468

Testing done:
Ran on a VT with an XDG_SESSION_ID from another terminal, ensured it
switched
2021-04-26 09:37:22 +00:00
Vlad Zahorodnii
c103eb8f5c qpa: Simplify backing store blitting
We can use QPainter::drawImage() to update the dirty area of the front
buffer. This way, we don't need to call std::copy().
2021-04-26 09:21:34 +00:00
Felipe Kinoshita
64c721579d
[effects/presentwindows] Darken panel 2021-04-25 17:45:49 -03:00
Tomasz Paweł Gajc
e9fcd9584e effects: add support Panfrost Mali driver 2021-04-24 16:04:44 +02:00
Weng Xuetian
17a585b5d5
Always apply size change from xdg_popup_reposition.
BUG: 436106
2021-04-23 13:36:18 -07:00
Nate Graham
b2ae5378c7 [effects/windowaperture] Hide windows in corners
Reducing the oppacity of these windows causes them to appear as phantoms
in the corners of the screen. They look quite odd on top of anything else
in the corners of the screen, such as any Plasma panels.

However making them 100% opaque doesn;t work either, since then they
look interactive, but they're not, and can't be made so due to the
scripting API used here.

So our only real option to remove the weirdness is to make them 100%
transparent, and therefore show the entirety of the desktop with no sign
that the effect is in use.
2021-04-23 13:23:48 +00:00
Vlad Zahorodnii
55c95f685f Fix crash in debug console
We need an explicit return type; otherwise a QStringBuilder object will
be returned, which can reference already destroyed strings.
2021-04-23 10:28:22 +00:00
Aleix Pol
b372de8c74 Fix startup when running with ASAN
We can't call kwinApp() before KWin::Application hasn't been properly
initialized.
2021-04-23 09:38:42 +00:00
Nicolas Fella
3b66e634f9 Port away from KPluginTrader
It's about to be deprecated.
2021-04-23 09:19:47 +00:00
l10n daemon script
6276c8882e 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-04-23 01:18:39 +00:00
Xaver Hugl
49c650eed2 platforms/drm: don't ignore blob properties without valid blobs
Instead of deleting all blob properties without a valid
blob check for the blob existing before using it. This is
necessary because some properties are needed even without
currently valid blobs.

BUG: 435786
2021-04-22 12:40:48 +00:00
Aleix Pol
ee181ef7a5 layershell: Support virtual keyboards
Resize layershell-based clients to adapt to the keyboard when it
appears.
2021-04-22 10:36:36 +00:00
Aleix Pol
b3ddb11b7c drm: hide the cursor as we are setting dpms off
It seems to crash amdgpu and it's consistent with how we're cleaning all
our planes.

BUG: 435941
2021-04-22 10:18:15 +00:00
Aleix Pol
633136d228 drm: remove unused attribute in DrmOutput 2021-04-22 10:17:29 +00:00
Alexander Lohnau
4ed0fe3182 kcmkwin: Port deprecated KNewStuff signals
This also avoids an unnecessary reload when the changedEntries
are cleared.
2021-04-22 07:22:31 +00:00
Vlad Zahorodnii
0d9185053c platforms/drm: Ignore udev events while session is inactive
While the session is inactive, the drm master permissions are revoked.
Therefore, we cannot perform things such as modesetting, etc. It also
makes no sense to create or destroy DrmOutput objects.

CCBUG: 435941
2021-04-21 23:17:54 +00:00
Aleix Pol
f7526f50fe build... 2021-04-21 17:42:55 +02:00
Aleix Pol
8d186efa08 drm: Do not check egl extensions before setting them up 2021-04-21 17:34:07 +02:00
Felipe Kinoshita
1a9b525970 [effects/presentwindows] Display window icons centered
Displaying them centered makes it a bit more visually appealing and
makes it easier to find which window belongs to what application
2021-04-21 15:10:05 +00:00
Xaver Hugl
5a2177a51c platforms/drm: use surfaceless context
On multi-gpu systems it could happen that the primary GPU
has no working outputs attached, yet we still need the
egl context.
2021-04-21 09:06:17 +00:00
Cyril Rossi
1fa66fb504 Remove KCModuleDataSignaling 2021-04-21 06:38:29 +00:00
Cyril Rossi
1e7428841e KCM KWinEffects : add default settings indicator at module level 2021-04-21 06:38:29 +00:00
Cyril Rossi
2870fb7484 KCM KWin VirtualDesktop add KCModuleData to show default indicator at module level 2021-04-21 06:37:42 +00:00
Felipe Kinoshita
16ae008104 [effects/presentwindows] change filterFrame position and text
Move filterFrame to the top of the screen and change it's text,
removing the "Filter: ".
2021-04-20 19:32:04 +00:00
Vlad Zahorodnii
700028b37d Fix build 2021-04-20 14:37:43 +03:00
Vlad Zahorodnii
15f1b9792b Revert "platforms/drm: Introduce DrmPipeline"
This reverts commit 5a22deda3b.

We still need more work to finish the DrmPipeline. At the moment, there
are a few major issues, e.g. some outputs not turning on, output
transforms not working correctly, a crash when changing dpms mode.

Let's merge this change back once all major issues are fixed and after
more testing.
2021-04-20 11:34:04 +00:00
Aleix Pol
d999aa6c6a drm: destroy the gbm device after we are done with all of the objects
Just in case they still need to interact with gbm
2021-04-20 13:02:46 +02:00
Aleix Pol
300f28a5a9 drm: remember to clean up DrmGpu's outputs when destroying 2021-04-20 13:02:46 +02:00
Aleix Pol
d5ac0cf919 drm: Also release the pipeline buffer when DrmOutput::releaseBuffers() 2021-04-20 13:02:46 +02:00
Aleix Pol
b82840d7e0 drm: Don't call virtual methods from a parent class destructor
We'd be relying on AbstractEglDrmBackend on calling cleanup but we'd be
doing it when cleanupSurfaces cannot be reached out anymore, turning it
into a half-baked cleanup.

Instead call cleanup from the leaf class destructors.
2021-04-20 13:02:46 +02:00
Aleix Pol
4c74a24059 Do not schedule further repaints when terminating
We'd hit a deleted options singleton and in any case it's not something
we need.
2021-04-20 13:00:28 +02:00
Xaver Hugl
7a9676dc0a Introduce the legacy flag for drm properties
There are properties like for example rotation
that don't have the atomic flag, yet work and
are needed in atomic mode setting.
2021-04-20 09:22:50 +02:00
Vlad Zahorodnii
5839e59e24 effects: Properly reset present times in coverswitch and flipswitch effects
The last presentation timestamps should be reset when all animations
finish rather than when the effect finishes. Otherwise, the calculated
time diff for the first animation frame will be too big.

BUG: 433471
2021-04-19 17:03:36 +00:00
Xaver Hugl
0292c4a74c platforms/drm: Add support for setting overscan
BUG: 428201
2021-04-19 18:46:41 +02:00
Felipe Kinoshita
ff3cb59967 [effects/presentwindows] Show Panels by default
Showing the panels makes this effect a little bit more integrated
with the desktop. With the panels disabled it creates a separate state,
with the panels enabled it creates a more friendly state with
the effect adding to the already existing experience.
2021-04-19 15:17:32 +00:00
Vlad Zahorodnii
9719d6c5a2 wayland: Fix handling of exclusive zone of -1
We cannot use Workspace::clientArea() to get the geometry of the screen
as the clientArea() method needs a valid frame geometry. This is not the
case if the layer shell surface is being configured for the first time.
2021-04-19 13:16:17 +00:00
Xaver Hugl
7dddcf202b platforms/drm: Don't create outputs without primary plane in AMS 2021-04-19 12:12:26 +00:00
Vlad Zahorodnii
d6cca178f7 wayland: Pick better initial window class string
With ksplash migrating to the layer-shell protocol, it no longer
provides an app id. This means that the window class string will be
different, e.g. "ksplashqml " instead of "ksplashqml ksplashqml", and
some effects (login, etc) will stop working as expected.

In order to keep effects working as before, this change adjusts the
window class initialization in WaylandClient so both the resource class
and the resource name are set to the executable file name.
2021-04-19 09:53:03 +00:00
Vlad Zahorodnii
675d5c4216 effects: Remove outdated ksplash window class strings
ksplash nowadays has only "ksplashqml ksplashqml" window class.
2021-04-19 10:42:58 +03:00
Ömer Fadıl Usta
94f558356b Add missing include for errno 2021-04-16 20:32:50 +00:00
Xaver Hugl
5a22deda3b platforms/drm: Introduce DrmPipeline
DrmPipeline is what now contains all the drm bits related to
modesetting and presentation, instead of that being in DrmOutput.
This gives a lot more freedom for managing drm resources and
enables far better usage of the atomic API with guaranteed
immutability for failed tests.
2021-04-16 20:26:34 +02:00
Aleix Pol
b68cd3110a Fix streaming of windows when we are using a mix of scales
At the moment a streamed screen when the screen scale was differnt
buffer scale would render wrong. This change addresses it by
compensating it.

This change compensates it resizing the rendered viewport to their
difference.

BUG: 428594
2021-04-16 17:18:56 +02:00
Aleix Pol
a8867e292d tablet: Show a default cursor when the cursor has not been set
In this context, the cursor will (almost) always be defined as we set it
as soon as an application is bound to it. We need to show the default
cursor if set_cursor hasn't been called yet. The way to do that is to
check whether the serial is still.
2021-04-15 15:25:55 +00:00
Aleix Pol Gonzalez
bd7300215e Apply 1 suggestion(s) to 1 file(s) 2021-04-15 15:00:52 +00:00
Aleix Pol
ca1e4a255a udev: never construct UdevDevices with a null device
It allows to trust the device we have as it's referenced. We were
already checking for pointer validity when getting them so it still
makes sense.
2021-04-15 15:00:52 +00:00
Aleix Pol
bec580f3c5 udev: Add a method to get all properties of an UdevDevice
It's useful for debugging.
2021-04-15 15:00:52 +00:00
Aleix Pol
01f7ef35e7 drm: Make sure we read all pending udev events 2021-04-15 15:00:52 +00:00
Aleix Pol
d216e74cfc udev@drm: Acknowledge that udev_monitor_receive_device can return NULL
Do not build UDevDevice unless the device itself is valid.
2021-04-15 15:00:52 +00:00
Aleix Pol
97b9e516d1 tablet: account for the activeClient to occasionally being nullptr
Instead use the device assigned output.

 #0  KWin::Toplevel::screen() const (this=0x0) at /home/apol/devel/frameworks/kwin/src/toplevel.cpp:409
 #1  0x00007fe60ad9bef9 in KWin::LibInput::Connection::processEvents() (this=0x55d9efc155f0) at kwin/src/libinput/connection.cpp:579
 #2  0x00007fe60ad4987c in KWin::InputRedirection::setupLibInput()::$_3::operator()() const (this=0x55d9efc29a70) at kwin/src/input.cpp:2315
2021-04-15 15:00:15 +00:00
Aleix Pol
b49c7497fa --warning: remove unused class member 2021-04-15 16:40:38 +02:00
Xaver Hugl
888a08530e Make DrmObject::Property flags const 2021-04-15 11:16:18 +00:00
David Edmundson
ab34fa348c Follow kwindoweffects::windowSizes deprecation 2021-04-15 05:55:46 +00:00
l10n daemon script
82723be8db 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-04-15 01:16:21 +00:00
Alois Wohlschlager
59f6b77612
Fix crash when stopping PipeWire streaming
The stream object was deleted from a slot connected to its stopStreaming
signal. This is unsafe and can lead to memory corruption and ultimately
crashes when PipWwire streaming is stopped. Use deleteLater instead.

BUG: 428268 435588
2021-04-13 10:28:15 +02:00
Xaver Hugl
68f58076f4 Fix sendToScreen for fullscreen apps
screen() only gets updated after AbstractClient::sendToScreen if invoked
by a shortcut or menu (as opposed to moveresize), so we can't use it in
AbstractClient::updateGeometryRestoresForFullscreen as it points to the
old screen.
2021-04-12 20:47:29 +00:00
Xaver Hugl
a461ff918d platforms/drm: replace dpms property hack with proper check
Instead of marking the dpms property as immutable, read the
DRM_MODE_PROP_ATOMIC flag and only add atomic properties to
atomic requests.
2021-04-12 19:30:17 +02:00
Xaver Hugl
18f857b1f3 platforms/drm: fix crash with multi-gpu 2021-04-11 20:52:08 +02:00
l10n daemon script
fbdcdaf125 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-04-11 01:15:44 +00:00
Yuri Chornoivan
60d12b91f2 Add touch screen KCM docs 2021-04-10 18:59:20 +03:00
Aleix Pol
2894913f93 lockscreen: also activate lock screen windows
We are running a slightly different code path, make sure that we still
honour conventions like screen focus.

BUG: 427882
2021-04-09 12:18:29 +00:00
Vlad Zahorodnii
62432133e0 const'ify Platform::findOutput() 2021-04-09 09:21:59 +03:00
Vlad Zahorodnii
e88033f914 wayland: Fix blank window thumbnails
With the introduction of stripped down window items, the WindowPixmap
objects no longer form a hierarchy. WindowPixmap::children() method was
removed.

Surprisingly, the removal of the children() method didn't result in a
compilation error because the QObject class has a method with the same
name.

Currently, a window pixmap will have no QObject children even if the
associated wayland surface has child sub-surfaces. This may result in
blank thumbnails of apps that use sub-surfaces, e.g. Firefox. In order
to fix that issue, we need to check if there are child items instead.
2021-04-08 22:15:33 +03:00
Vlad Zahorodnii
24d865ea38 wayland: Generate valid output uuids
Currently, kwin generates invalid output uuids.
2021-04-08 19:04:17 +00:00
Aleix Pol
d419729331 debug_console: Improve rendering of non-x11 clients
We'd always get "0x0: something" where the 0x0 is the xcb_window which
obviously doesn't translate.

Instead show the class name so we can easily track what kind of object
we are dealing with.
It's an easy way to show which shell it's using on Wayland, will be
useful in other cases as well.
2021-04-08 16:01:34 +00:00
David Redondo
1419993b89 Add a DBus interface to the presentWindows effect
The same as for the highlightWindows effect. Toggling it through
DBus is platform independent.
2021-04-08 09:09:00 +00:00
David Redondo
26bf4f51d0 Add a DBus interface to the highlightWindows effect
The Taskmanager can now activate it this way, instead of using X
atoms. This means it will also work on Wayland.
2021-04-08 09:09:00 +00:00
Vlad Zahorodnii
ab58171ed8 wayland: Check workspace position after creating decoration
If a decoration is created for an already mapped maximized window, check
the workspace position to ensure that the window still fits the maximize
area.

BUG: 432326
2021-04-07 20:38:05 +00:00
Vlad Zahorodnii
d1c5970273 Fix build 2021-04-07 20:49:32 +03:00
Vlad Zahorodnii
da5fc3d9e9 wayland: Wire in subpixel information
kwaylandserver has all the code to send subpixel information but kwin
doesn't really use it.
2021-04-07 16:33:50 +03:00
Vlad Zahorodnii
9d9747490e wayland: Send missing output-device properties
Currently, we don't set eisa id and the serial number.
2021-04-07 15:00:56 +03:00
Vlad Zahorodnii
5619a2939a wayland: Send only current wl_output mode 2021-04-07 14:23:16 +03:00
Vlad Zahorodnii
707c724d61 wayland: Adjust kwin to OutputInterface changes
The new OutputInterface class has not create() method and it also works
around the wl_global race condition.
2021-04-07 14:23:16 +03:00
Vlad Zahorodnii
c27230719c wayland: Move Wayland-specific code out of AbstractWaylandOutput
Currently, output properties are looked up either on the wl_output
object or the output device object. This puts a hard dependency on the
wayland server in the platforms.

This change intends to fix some flaws in the current output
abstractions, and allow creating/destroying wayland-specific globals as
we wish.

With the work done in this patch, the need for the AbstractWaylandOutput
class is unclear, and it might be a good idea to merge it with the base
AbstractOutput class.
2021-04-07 14:23:16 +03:00
Vlad Zahorodnii
3d231b3cb5 Remove documentation for already documented methods in AbstractOutput
The documentation in AbstractWaylandOutput is the same as the one in the
AbstractOutput class.
2021-04-07 14:23:16 +03:00
Xaver Hugl
50f03ac6dc platforms/drm: improve buffer handling with GbmBuffer 2021-04-06 23:18:25 +02:00
Vlad Zahorodnii
dbdc30da7b wayland: Return a type of NET::Unknown for popups
This is to ensure that isNormalWindow() returns false for popups. One
could argue that we abuse netwm window types, on the other hand, we
don't know the exact type of popups and NET::Unknown is the closest type.
2021-04-06 15:15:37 +00:00
Nate Graham
dd3f85d19a Improve text for "keep above"/"keep below" buttons
It may not be totally clear what exactly they're being kept above.

CCBUG: 435292
2021-04-06 13:33:23 +00:00
Vlad Zahorodnii
913d242bd9 platforms/drm: Fix crash in EglGbmBackend::presentOnOutput()
If the damage history is empty and EGL_KHR_partial_update is supported,
kwin may crash.
2021-04-06 11:53:26 +03:00
Andrey Butirsky
91f47c9092 fix global shortcuts for non-Latin symbols
Re-use Qt's implementation of handling non-Latin layouts here
For full ASCII range support (Alt+`, etc.) Qt needs to be patched still,
see QTBUG-90611

BUG: 375518
2021-04-05 19:39:06 +00:00
Jan Blackquill
bc3ac17141 GlobalShortcuts: clang-format 2021-04-05 19:28:38 +00:00
Jan Blackquill
ccca3b2af2 GlobalShortcuts: refactor
I consider this a prerequisite commit to improving the quality of touchpad gestures provided by KWin.
In short, this breaks apart a weird all-in-one class into an std::variant for the different types
of shortcuts in order to make it easier to add new types of global shortcuts. For the byte shavers, this
roughly halves the size of the GlobalShortcut class as well. On top of all this, the code is about half
the size it was before, mostly due to newer C++ concepts being used that allow us to let the compiler
do more work for us.
2021-04-05 19:28:38 +00:00
Jan Blackquill
9f215a06fa Fix crash on hotplugging displays while switched to another TTY
Currently, we inhibit renderloops when switching to another TTY, and unhibit
when switching back. When we hotplug a display while switched to another TTY,
its renderloop isn't inhibited by default, yet when we switch back, we try
to uninhibit the fresh renderloop, which triggers an assert.

Inhibiting newly created outputs while switched to another TTY fixes this crash.

BUG: 435388
FIXED-IN: 5.21
2021-04-05 15:08:59 -04:00
David Edmundson
c53b2fa3c5 Fix crash in Unmanaged without compositing
Without compositing we don't have surfaceItems

BUG: 435322
2021-04-05 12:56:34 +01:00
Xaver Hugl
8bbd186f8e platform/drm: add dpmsFinishOn to atomicEnable
Without it the output will stay blank after enabling
2021-04-05 11:03:53 +00:00
Xaver Hugl
b2653c45c8 platforms/drm: drop connector name from modelName with serial
The connector name is not relevant to applications or
users - expectation is that the same physical monitor always gets the
same name, regardless of how it's connected. If no serial is available,
fall back to the old scheme to prevent multiple connected outputs from
having the same name.
2021-04-05 11:02:01 +00:00
Alexander Lohnau
002c4612e3 kwinscripts kcm: Only delete entries once changes are applied
This makes it consistent with other QML KCMs
2021-04-05 09:59:08 +00:00
Vlad Zahorodnii
d1b537b587 Move insertion of safety points to X11Compositor
Safety points only work on X11. On Wayland, we gain nothing from them.
2021-04-05 07:27:10 +00:00
Nicolas Fella
dcdca9be6a Remove unused include 2021-04-03 16:28:49 +02:00
Vlad Zahorodnii
9168ced30f wayland: Make KWinDisplay less chatty
There is no point for printing a warning if kwin cannot read the exe
symlink in /proc. It may happen for processes such as polkit agent.
2021-04-02 06:45:53 +00:00
Vlad Zahorodnii
7054f6b2d6 platforms/drm: Drop stream operator for DrmOutput
There is already one that works for all AbstractOutput classes and
properly restores the state of QDebug.
2021-04-01 18:15:42 +03:00
Vlad Zahorodnii
dd9a1e5320 platforms/drm: Rename DrmCrtc::resIndex()
The value that the DrmCrtc::resIndex() function returns is better known
as "pipe index." This change renames the method to match the terminology
used by kernel developers and other compositor developers.
2021-04-01 14:41:07 +03:00
Vlad Zahorodnii
53796aacb2 platforms/drm: Remove unused parameter in DrmCrtc constructor 2021-04-01 14:41:07 +03:00
Vlad Zahorodnii
d883cccfd3 platforms/drm: Minor coding style fixes
This reformats some code according to the KF coding style.
2021-04-01 14:41:05 +03:00
Vlad Zahorodnii
7926fce598 platforms/drm: Make DrmObject::m_id private
There's already a getter for the object id.
2021-04-01 14:19:48 +03:00
Vlad Zahorodnii
2ea66eb4c3 platforms/drm: Remove unused field in DrmObject 2021-04-01 14:17:46 +03:00
Vlad Zahorodnii
f534b64e5c platforms/drm: Associate drm objects with their gpus
This makes the code more consistent. At the moment, we initialize drm
objects either with the corresponding gpu object or with its fd.
2021-04-01 14:15:42 +03:00
Vlad Zahorodnii
75e7562953 platforms/drm: Fix handling of missing EDID
drmModeGetPropertyBlob() may return null and we should handle that. In
addition to that, m_conn is not initialized in DrmConnector so kwin will
crash whenever the connector info is accessed.
2021-04-01 11:01:53 +00:00
Vlad Zahorodnii
53f7bda7d2 platforms/drm: Make DRM backend less chatty
These warnings can be safely ignored, their priority can be lowered.
2021-04-01 13:21:33 +03:00
Xaver Hugl
2efb9c473d Move Edid and DPMS into DrmConnector 2021-03-31 16:08:33 +00:00
Vlad Zahorodnii
326d211691 platform: Use damage tracked by SurfaceItem
There is no need for both kwin and kwaylandserver track damage.
2021-03-31 13:56:55 +00:00
Vlad Zahorodnii
2ade92d69b platform: Make OpenGLBackend::scanout take SurfaceItem
This allows removing SurfaceInterface::trackedDamage().
2021-03-31 13:56:55 +00:00
Vlad Zahorodnii
36b55261da Drop AbstractClient::addRepaintDuringGeometryUpdates()
It's not needed since the scene keeps track of repaints.
2021-03-31 13:56:55 +00:00
Vlad Zahorodnii
98b0b13f98 libkwineffects: Drop windowPaddingChanged signal
It makes no sense on Wayland.
2021-03-31 13:56:55 +00:00
Vlad Zahorodnii
a9d5b84596 scene: Refactor damage teardown in X11SurfaceItem
This introduces the markedAsZombie signal, which is emitted when the
window is about to become deleted. The X11SurfaceItem uses this signal
to determine when the damage must be destroyed.
2021-03-31 13:56:55 +00:00
Vlad Zahorodnii
47113e09b8 scene: Introduce window items
Currently, dealing with sub-surfaces is very difficult due to the scene
design being heavily influenced by X11 requirements.

The goal of this change is to re-work scene abstractions to make improving
the wayland support easier.

The Item class is based on the QQuickItem class. My hope is that one day
we will be able to transition to QtQuick for painting scene, but in
meanwhile it makes more sense to have a minimalistic internal item class.

The WindowItem class represents a window. The SurfaceItem class represents
the contents of either an X11, or a Wayland, or an internal surface. The
DecorationItem and the ShadowItem class represent the server-side deco and
drop-shadow, respectively.

At the moment, the SurfaceItem is bound to the scene window, but the long
term plan is to break that connection so we could re-use the SurfaceItem
for things such as software cursors and drag-and-drop additional icons.

One of the responsibilities of the Item is to schedule repaints as needed.
Ideally, there shouldn't be any addRepaint() calls in the core code. The
Item class schedules repaints on geometry updates. In the future, it also
has to request an update if its opacity or visibility changes.
2021-03-31 13:56:55 +00:00
Vlad Zahorodnii
b61c800cee libkwineffects: Introduce windowExpandedGeometryChanged()
This signal can be useful if you want to know when the visible geometry
has changed to update cached repaint region during an animation.
2021-03-31 13:56:55 +00:00
Vlad Zahorodnii
c6d2eee3c1 Introduce signals to notify about Shadow changes
These signal can be useful if you need to know when the shadow must be
repainted or its geometry has changed.
2021-03-31 13:56:55 +00:00
Vlad Zahorodnii
0f1afdbdc0 scene: Pass dirty region to SceneOpenGLTexture::updateTexture 2021-03-31 13:56:55 +00:00
Vlad Zahorodnii
369b768f36 wayland: Mark Xwayland windows ready for painting when mapped
This makes the logic that determines when Xwayland windows can be marked
as ready for painting more robust.

At the moment, we call setReadyForPainting() when the surface is damaged,
but we want Toplevel stop managing damages.
2021-03-31 13:56:55 +00:00
Vlad Zahorodnii
0bb5a51da8 x11: Move damage fetching code to X11Compositor
This is needed to make damage fetching specific to X11 surfaces.
2021-03-31 13:56:55 +00:00
Xaver Hugl
c0c3ec09af Refactor DrmObject 2021-03-31 10:19:42 +00:00
Xaver Hugl
e262c8df33 Move pageFlipHandler to DrmGpu 2021-03-30 14:32:43 +02:00
Vlad Zahorodnii
72cc1daf22 wayland: Introduce an environment variable to disable Xauthority
This is primarily intended for debugging purposes.
2021-03-29 11:37:28 +00:00
David Edmundson
a7aee99a23 Port kwin from Plasma Components2
Testing done:
 - ran present windows, checked the button
 - changed desktop with the OSD enabled
 - toggled nightcolour (which shows the other OSD)
2021-03-27 23:26:31 +00:00
Ismael Asensio
3048d92c09 kcm/kwinrules: Unify windows properties methods in KCM class
Put together the two methods about window properties and rules
into the same class, since they are tightly related and they seem
a bit out of place within RuleBookModel

Small refactor patch. No behavior changes
2021-03-27 01:51:39 +07:00
Vlad Zahorodnii
6fdfd8be5f wayland: Switch to new keyboard event notify methods in SeatInterface 2021-03-26 12:33:12 +02:00
Aleix Pol
57aec19744 Remove cleanTabBox duplicated code 2021-03-25 13:56:17 +01:00
Xaver Hugl
ad7a826ea1 Drag'n'drop: only activate clients after still hover
BUG: 395368
2021-03-25 12:40:16 +00:00
Jan Blackquill
1f39c45a10 PopupEventFilter: handle keyboard events too
XDG popups want keyboard events routed to the topmost popup
as well as the pointer-outside-of-popup-cancels functionality.
2021-03-25 12:38:43 +00:00
Nate Graham
63b96d7c0d Correct use of KUIT markup in kill dialog text
<p> is HTML; the correct KUIT tag is <para>.
2021-03-24 16:46:30 -06:00
Vlad Zahorodnii
0683597099 effects/screenshot: Introduce dbus interface version 2
With the new interface, the compositor sends raw image data instead of
encoding it as a png image, which causes a lot of overhead on Wayland.

In addition to that, the new interface is more extensible, for example
we can add new options or change the written image data format, however
the latter is less likely to happen.

BUG: 433776
2021-03-24 10:52:22 +00:00
Xaver Hugl
eb7703cd64 Only use drmModeAddFB2WithModifiers if supported 2021-03-23 22:13:00 +00:00
Xaver Hugl
c1635c1179 Explicitly preserve buffer contents in EglDmabuf 2021-03-23 20:00:00 +00:00
Xaver Hugl
c737fde3da DRM: Use QSharedPointer 2021-03-23 15:47:59 +00:00
Vlad Zahorodnii
5c15cca190 wayland: Switch to SeatInterface::notifyPointerButton() 2021-03-23 11:20:50 +02:00
Vlad Zahorodnii
ade861d6de Refactor session code
At the moment, the session code is far from being extensible. If we
decide to add support for libseatd, it will be a challenging task with
the current design of session management code. The goal of this
refactoring is to fix that.

Another motivation behind this change is to prepare session related code
for upstreaming to kwayland-server where it belongs.
2021-03-23 08:01:19 +00:00
Vlad Zahorodnii
aad767f91f Fix initialization of ColorManager
There might be some outputs during the initialization of the color
manager, we need to handle this case.
2021-03-23 08:01:19 +00:00
Vlad Zahorodnii
9e999fe2a1 x11: Move event filter logic to kwinApp()
This allows the X11 platform plugin to create event filters before the
workspace object is created.
2021-03-23 08:01:19 +00:00
Cyril Rossi
7c55f5ed7d KCM KWin Window Behavior : fix KCM default/reset state. Add KCModuleData to show default indicator at module level
BUG: 433379
2021-03-22 17:30:52 +01:00
Xaver Hugl
a8055e4546 Refactor DRM presentation
Presentation doesn't have to go through DrmBackend and by moving
DrmGpu::deleteBufferAfterPageflip into DrmBuffer some code can be
simplified
2021-03-22 13:52:50 +00:00
Bharadwaj Raju
8c352f685e Make ghost windows in highlight effect be fully transparent
BUG: 298487
FIXED-IN: 5.22
2021-03-22 12:00:38 +00:00
Kevin Ottens
9a10af9569 Wire the activity protocol parts to AbstractClient 2021-03-22 11:29:41 +00:00
Weng Xuetian
d612d76e09
Replace xdg output done with explicit wl_output done
BUG: 433224
2021-03-19 09:53:22 -07:00
Usarin Heininga
af53647cf7 Set stackingOrderUuids as well. 2021-03-19 13:39:14 +00:00
Nate Graham
37445d9c29 [kcmkwin/kwinrules] Add explanatory text to placeholder messages 2021-03-19 13:13:31 +00:00
Xaver Hugl
ca23bca813 Port DrmSurfaceBuffer to drmModeAddFB2 2021-03-19 08:59:58 +00:00
Ismael Asensio
a82be242ea [kwinrules] Launch full KCM when editing from window menu
When rules configuration is invoked from window `Alt+F3` menu,
we call a custom binary `kwin_rules_dialog` which currently provides
only the rule edition dialog by embedding `RulesEditor.qml` within a
QQuickView.

This MR changes that behavior to call the full KCM from the menu.
The code to match previous rules, or compose a new one based on window
properties has been ported to the KCM from the dialog, so the overall
interaction is similar.

It has several advantages:
 - uses only one entry-point to the code
 - adds discoverability to the full KCM (I guess many users know how to
   create a rule, but not where to delete it later)

And a drawback:
 - only one instance of the KCM can be called at a time, so it will show an
   error when calling it from two different windows, or if the KCM is open
   in System Settings

This drawback can be solved after adding argument passing via dBus in KCM
infraestructure.

BUG: 433837
CCBUG: 417923
2021-03-19 10:16:01 +07:00
Xaver Hugl
38a15996f4 Consider the opaque region for direct scanout 2021-03-18 23:51:29 +01:00
Xaver Hugl
6569bf80c3 EglGbmBackend: use output reference
CCBUG: 432707
2021-03-18 15:22:31 +01:00
Alexander Lohnau
3cbbdbee99 GIT_SILENT Silence warning about unused parameter in windows runner 2021-03-16 08:45:29 +01:00
Xaver Hugl
20fca90855 Consider the tool type for distinguishing between tools 2021-03-14 23:58:17 +01:00
Alexander Lohnau
81b40966ed GIT_SILENT Add trailing comma to enums 2021-03-14 18:06:22 +01:00
Vlad Zahorodnii
75d39f6a8e Revert "wayland: Emulate tablet events only if there is pointer"
This reverts commit ee54fa7898.

Unfortunately, this is not a totally correct fix. If there's no pointer,
we need to announce the wl_pointer capability anyway so clients that do
not support tablet input devices can still receive emulated pointer
events.
2021-03-12 14:13:20 +02:00
Vlad Zahorodnii
ee54fa7898 wayland: Emulate tablet events only if there is pointer
If the seat has no pointer, there is no point for emulating tablet
events.
2021-03-12 10:20:22 +00:00
Vlad Zahorodnii
7b68644974 wayland: Adjust input code to SeatInterface with some renamed methods 2021-03-12 10:19:47 +00:00
Adrien Faveraux
37731af7d2 adapt Output management to kwaylandserver change 2021-03-12 10:14:52 +00:00
Vlad Zahorodnii
5b6c36f953 wayland: Check that seat has wl_pointer before canceling gestures
The seat must have the wl_pointer capability in order to gestures work.
2021-03-12 09:15:40 +02:00
Aleix Pol
9786ea3c58 input: prevent seat touch methods from being called when there's no touch
Otherwise we get a crash as we are asserting with Q_ASSERT(d->touch).
2021-03-11 14:08:40 +00:00
Aleix Pol
58debd72a3 Only scanout when the texture matches the display size
Otherwise drmModeAtomicCommit() in DrmOutput::doAtomicCommit() fails due
to unmatched buffer sizes.

While rendering continues working properly, this makes drm freak out and
try to go back to a previous state (see the test commit in
presentAtomically()) that in turn starts issuing screen events to every
process even though it's just to say the same thing. The fact that this
happens per frame makes the system unusable as soon as fullscreen starts
happening on a scaled display.

Another thing we could do is get EglGbmBackend::scanout() to take care
of the resizing.
2021-03-11 15:01:09 +01:00
David Edmundson
82551e143d Adapt to window management changes
Our wayland interface lifespan only needs to live as long as the window
is mapped.

Given this corresponds directly to the lifespan of AbstractClient we can
just set a parent and everything is handled implicitly.
2021-03-11 12:02:35 +00:00
Méven Car
ef19948c00 Reflect changes in kwayland-server changes
https://invent.kde.org/plasma/kwayland-server/-/merge_requests/180
2021-03-11 08:24:33 +00:00
Vlad Zahorodnii
00fcc3a423 wayland: Adjust kwin to SeatInterface changes 2021-03-11 07:36:31 +00:00
Kevin Ottens
0ab41802f4 Avoid KWin starting kactivitymanagerd synchronously
Prevent KWin from synchronously autostarting kactivitymanagerd. Indeed,
kactivitymanagerd being a QApplication it will depend on KWin
startup... this is unsatisfactory dependency wise, and it turns out
that it leads to a deadlock in the Wayland case
2021-03-10 23:40:59 +00:00
Nicolas Fella
a406eef9a0 Update link to kwin-scripting-api-generator 2021-03-10 17:40:24 +01:00
Aleix Pol
3953c0c650 inputmethod: Use the object to connect to slots
Otherwise I see the Qt::UniqueConnection not working sometimes making
(at least) commitString happen twice consecutively.
2021-03-10 15:32:51 +01:00
Aleix Pol
178e7e22e4 wayland: Do not force qtvirtualkeyboard
Remnant from the past, it made it work weird on some systems, should
have been removed when we removed elsewhere in KWin.
2021-03-10 14:29:12 +00:00
Vlad Zahorodnii
83388295c8 wayland: Adjust kwin to PointerInterface changes 2021-03-10 14:10:16 +00:00
Kevin Ottens
c812ffbe1d Move basic activities support from X11Client to AbstractClient
We're now sharing most of the X11Client activity behavior accross all
clients. This allows to cleanup some of the existing virtuals and remove
quite a bit of code overalls.

Has to introduce an extra platform specific hook since X11Client
serializes the activity information in an atom and we will probably need
to do something similar on the Wayland platform at some point.

This allows us to start interacting with the activities with kwin
wayland. They are not restored properly accross sessions though since
nothing is really persisted and the session management still seems to
be amiss.
2021-03-09 15:22:55 +00:00
Kevin Ottens
da0aed5446 Enable KActivities integration by default in kwin_wayland 2021-03-09 15:22:55 +00:00
Kevin Ottens
41766d3594 Activities now accept AbstractClient, no need to downcast
Which means now it doesn't need to be limited to X11Clients only.
2021-03-09 15:22:55 +00:00
Kevin Ottens
228a6e444a Get Activities to depend only on AbstractClient
Since all the services are available on the abstract class, there is no
need to depend on X11Client anymore.
2021-03-09 15:22:55 +00:00
Kevin Ottens
c795e8a3d8 Move setOnActivity to AbstractClient
Since we want to support activities for wayland clients too this needs
to move up in the hierarchy.
2021-03-09 15:22:55 +00:00
Kevin Ottens
391b7e023e Receive the activity list as a const reference
This is mainly to make that coherent with common coding style in other
places.
2021-03-09 15:22:55 +00:00
David Edmundson
0eb37563e9 Restore script DBus API
The Script class has a DBus API we want to export. At some point this
has got broken and the run method is not exported.

It's a bit messy with script subclasses also having other invokables
that we want to export to scripts, so an adaptor is used to keep things
separated.

The interface name has technically changed, but KWin was doing something
weird and using the same interface names for the manager. Fortunately
calling Plasma code doesn't specify an interface so this still works.
2021-03-09 09:14:13 +00:00
Vlad Zahorodnii
9a786cd8bf effects/screenshot: Minor style fixes
We prefer pragma once and put braces on the same line as the if
statement.
2021-03-09 08:58:22 +00:00
Vlad Zahorodnii
1fb44b5bd5 effects/screenshot: Prepare for versioned dbus interface
On Wayland, when the compositor sends a screenshot to the requesting
app, it encodes the screenshot as a PNG image and sends the encoded data
over the pipe. The requesting app (Spectacle) then needs to decode the
data.

The issue is that encoding PNG images is not cheap. This is the main
reason why Spectacle is shown with a huge delay after you press the
PrtScr key.

In order to fix the latency issue, we need to transfer raw image data.
Unfortunately, the current dbus api of the screenshot is too cluttered
and the best option at the moment is to start with a clean slate.

This change prepares the screenshot effect for versioned dbus interface.
Most of existing dbus logic was moved out in a separate class. In order
to schedule screen shots, the screenshot effect got some new API.

    QFuture<QImage> scheduleScreenShot(window, flags)
    QFuture<QImage> scheduleScreenShot(area, flags)
    QFuture<QImage> scheduleScreenShot(screen, flags)

If a dbus interface needs to take a screenshot, it needs to call one of
the overloaded scheduleScreenShot() functions. Every overload returns a
QFuture object that can be used for querying the result.

This change also introduces "sink" and "source" objects in the dbus api
implementation to simplify handling of QFuture objects.

Note that the QFutureInterface is undocumented, so if you use it, you do
it on your own risk. However, since Qt 5.15 is frozen for non-commercial
use and some other Plasma projects already use QFutureInterface, this
is not a big concern. For what it's worth, in Qt 6, there's the QPromise
class, which is equivalent to the QFutureInterface class.

CCBUG: 433776
CCBUG: 430869
2021-03-09 08:58:22 +00:00
Vlad Zahorodnii
38996d9725 libkwineffects: Introduce EffectScreen
This provides the compositor a way to indicate what output is being
rendered. The effects such as the screenshot can check the provided
screen object in order to function as expected.
2021-03-09 08:58:22 +00:00
Vlad Zahorodnii
b3e7031893 platforms/drm: Fix potential stack corruption
If the file descriptor of the DRM device is greater than FD_SETSIZE, the
stack will be corrupted. However, it is highly unlikely that we ever hit
this case because DRM devices are opened at startup of kwin, so the file
descriptors should small.

In order to prevent the potential stack corruption, this change replaces
the usage of select() with poll().

Unlike select(), the api of poll() is much more sensible. Back 20 or so
years ago the main argument against poll() was that it's not implemented
by all platforms. But, nowadays, it's supported on all major platforms.
2021-03-09 10:27:17 +02:00
l10n daemon script
fd68cf3ff4 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-03-08 07:03:02 +01:00
Aleix Pol Gonzalez
05811535d4 Apply 1 suggestion(s) to 1 file(s) 2021-03-06 03:37:51 +00:00
Aleix Pol
92d3cb2f22 inputmethod: If the client hides itself, act accordingly 2021-03-06 03:25:48 +00:00
Xaver Hugl
7a937fc7af Ignore fully translucent Toplevels for direct scanout 2021-03-05 19:59:48 +01:00
Nicolas Fella
ecd9e1c98d Use imported target for Threads 2021-03-04 15:11:30 +00:00
Bhushan Shah
debea631f3 platforms/drm: inhibit the renderloop when screen is turned off
Otherwise we will continue using gpu resources even when we can not show
any content on screen.
2021-03-04 15:01:15 +00:00
Vlad Zahorodnii
691df1ae00 qpa: Use imported targets for QtCore and QtGui private headers 2021-03-04 13:11:27 +00:00
Chaojiang Luo
fdc7e976fe screencast: Add OpenGLES support for screencasting
OpenGLES does not support glGetTextureImage, we use glReadPixels to
replace it.
2021-03-04 09:29:57 +00:00
Vlad Zahorodnii
d9ec482257 x11: Initialize opacity when starting to track Unmanaged
This is a minor regression that was introduced with the refactoring of
Toplevel::opacity().

Previously, neither X11Client nor Unmanaged had to explicitly initialize
the opacity because it was queried from the net info object in
Toplevel::opacity().

With the refactored version, X11-specific opacity code was removed from
the Toplevel class. When starting to manage a window, the opacity must
be explicitly initialized.

BUG: 432744
2021-03-03 11:58:16 +00:00
l10n daemon script
5f7a2806f0 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-03-03 07:52:05 +01:00
Xaver Hugl
7cc95d931b Improvements for direct scanout
Instead of cancelling direct scanout if the client buffer is not
fitting, adjust the atomic planes. Also ignore all toplevels from
other screens.
2021-03-02 17:17:36 +00:00
Aleix Pol
4638f2f309 inputmethod: Refactor VirtualKeyboardDBus to have its own InputMethpd
This way we can have it call methods directly instead of connecting to
its signals.
2021-03-02 13:55:35 +00:00
Aleix Pol
63a7b25801 inputmethod: Provide DBus API so the shell can integrate with it
It makes it possible to show if the virtual keyboard is being shown and
if it is to hide it.
2021-03-02 13:55:35 +00:00
Vlad Zahorodnii
6a26540065 wayland: Query pkg-config if Xwayland supports listenfd
-listen <fd> option is deprecated in favor of the -listenfd option. This
change makes kwin query whether Xwayland supports the -listenfd option
at build time. If the pkg-config file is missing, we'll use the old listen
option.
2021-03-02 13:29:22 +00:00
Aleix Pol
b409f523f0 Revert "cmake: Get XKB information directly from PkgConfig"
This reverts commit 3c97cecdb0.

It seems to break on the CI and I don't understand why.
2021-03-02 02:14:39 +01:00
Aleix Pol
3c97cecdb0 cmake: Get XKB information directly from PkgConfig
Rather than having it abstracted in a local FindXKB package.
Makes the code more standard and removes a custom finder we ultimately
don't need.
2021-03-01 20:33:38 +01:00
Aleix Pol
618c330ca8 Do not attempt to compare iterators of potentially different containers
I got this crash after leaving my system unattended:
```
0  std::__atomic_base<int>::load(std::memory_order) const (this=0x0, __m=std::memory_order_relaxed) at /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../include/c++/10.2.0/bits/atomic_base.h:426
1  QAtomicOps<int>::loadRelaxed<int>(std::atomic<int> const&) (_q_value=...) at /home/apol/devel/kde5/include/QtCore/qatomic_cxx11.h:239
2  QBasicAtomicInteger<int>::loadRelaxed() const (this=0x0) at /home/apol/devel/kde5/include/QtCore/qbasicatomic.h:107
3  QtPrivate::RefCount::isShared() const (this=0x0) at /home/apol/devel/kde5/include/QtCore/qrefcount.h:101
4  QMap<KWin::Group*, KWin::Layer>::detach() (this=0x7f1b577b7870 <qt_array+48>) at /home/apol/devel/kde5/include/QtCore/qmap.h:357
5  QMap<KWin::Group*, KWin::Layer>::find(KWin::Group* const&) (this=0x7f1b577b7870 <qt_array+48>, akey=<optimized out>) at /home/apol/devel/kde5/include/QtCore/qmap.h:861
6  KWin::Workspace::constrainedStackingOrder() (this=this@entry=0x564b368c6290) at /home/apol/devel/frameworks/kwin/src/layers.cpp:502
7  0x00007f1b5708d027 in KWin::Workspace::updateStackingOrder(bool) (this=0x564b368c6290, propagate_new_clients=false) at /home/apol/devel/frameworks/kwin/src/layers.cpp:110
8  0x00007f1b571629be in KWin::X11Client::setFrameGeometry(QRect const&, KWin::AbstractClient::ForceGeometry_t) (this=0x564b374b4e60, rect=<optimized out>, force=<optimized out>) at /home/apol/devel/frameworks/kwin/src/x11client.cpp:4193
9  0x00007f1b57003fbf in KWin::AbstractClient::blockGeometryUpdates(bool) (this=this@entry=0x564b374b4e60, block=<optimized out>) at /home/apol/devel/frameworks/kwin/src/abstract_client.cpp:871
10 0x00007f1b570054f1 in KWin::GeometryUpdatesBlocker::~GeometryUpdatesBlocker() (this=<optimized out>) at /home/apol/devel/frameworks/kwin/src/abstract_client.h:1334
11 KWin::AbstractClient::checkWorkspacePosition(QRect, int, QRect) (this=0x564b374b4e60, oldGeometry=..., oldDesktop=1, oldClientGeometry=...) at /home/apol/devel/frameworks/kwin/src/abstract_client.cpp:3189
12 0x00007f1b571409e0 in KWin::Workspace::updateClientArea(bool) (this=<optimized out>, this@entry=0x564b368c6290, force=false) at /home/apol/devel/frameworks/kwin/src/workspace.cpp:2234
13 0x00007f1b57138fc6 in KWin::Workspace::updateClientArea() (this=0x564b368c6290) at /home/apol/devel/frameworks/kwin/src/workspace.cpp:2243
14 KWin::Workspace::desktopResized() (this=0x564b368c6290) at /home/apol/devel/frameworks/kwin/src/workspace.cpp:1980
15 0x00007f1b57707806 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7fff671a2e50, r=0x564b368c6290, this=0x564b372f1860) at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:398
16 doActivate<false>(QObject*, int, void**) (sender=0x564b368a0fe0, signal_index=4, argv=0x7fff671a2e50) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:3886
17 0x00007f1b57707806 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7fff671a2f30, r=0x564b368a0fe0, this=0x564b368a10f0) at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:398
18 doActivate<false>(QObject*, int, void**) (sender=0x564b36775640, signal_index=3, argv=0x7fff671a2f30) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:3886
19 0x00007f1b4ee2f9c3 in KWin::DrmBackend::updateOutputs() (this=this@entry=0x564b36775640) at /home/apol/devel/frameworks/kwin/src/plugins/platforms/drm/drm_backend.cpp:374
20 0x00007f1b4ee31d54 in KWin::DrmBackend::openDrm()::$_2::operator()() const (this=<optimized out>) at /home/apol/devel/frameworks/kwin/src/plugins/platforms/drm/drm_backend.cpp:328
```
2021-03-01 15:11:52 +00:00
Aleix Pol
e4bed6ea27 Still mark setUnresponsive(false) when the pings arrive late
It usually means that the client was busy and couldn't answer the ping
as early as we'd hoped but there's a good chance the process is healthy
again.
2021-03-01 14:10:46 +01:00
Yuri Chornoivan
b5f9d9fda8 Fix disambiguation found by gettext 0.21 2021-02-28 11:59:10 +02:00
l10n daemon script
7b557527f5 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-02-27 06:24:41 +01:00
Xaver Hugl
1f7e794b82 DrmGpu: add gbm device nullptr check
BUG: 433145
2021-02-25 19:14:02 +01:00
Vlad Zahorodnii
37c145e94b wayland: Fix PrepareForSleep dbus connection
This is a typo. We must use the path of the manager rather than the
session path, which is not initialized yet.
2021-02-25 07:34:27 +00:00
Đoàn Trần Công Danh
5ba3284712 ftrace: use quint32 for context counter
Some old platforms don't have atomic integer supports for 64-bit wise
integer.

As indicated in GPUVis:

	// Erase all knowledge of this ctx so it can be reused

We can reuse numbers after end_ctx, so with we should be fine with
32-bit integer.

Let's use a 32 bit integer for context.
2021-02-24 23:45:19 +00:00
Đoàn Trần Công Danh
5cc062c77c 3rdparty/xcursor: build with _DEFAULT_SOURCE
For both DT_UNKNOWN and DT_LNK.
2021-02-24 16:36:49 +00:00
Đoàn Trần Công Danh
7800f15587 helper: wl-socket: fix build for musl
bind(2) expects its second parameters is a "const struct sockaddr*",
let's cast the "struct sockaddr_un*" to "struct sockaddr*" before
passing into bind(2).

SUN_LEN is a BSD extension that also implemented by GNU, let's define
_DEFAULT_SOURCE before including "sys/un.h".
2021-02-24 16:36:49 +00:00
Vlad Zahorodnii
9977f21980 wayland: Honor NoPlugin option
If decorations are disabled, don't send xdg-toplevel-decoration
configure events requesting ssd mode.
2021-02-24 10:44:29 +00:00
Vlad Zahorodnii
6c9e0781cd Simplify code that destroys plugins and color manager
This reduces some code duplication and ensures that plugins and the
color manager are destroyed while Platform is still valid.
2021-02-24 09:38:56 +00:00
Vlad Zahorodnii
e1279e516c wayland: Track already existing subsurfaces in SubSurfaceMonitor
When the monitor is created, the surface may already have child
sub-surfaces. The childSubSurfaceAdded signal won't be emitted for them,
we need to handle this case explicitly.

BUG: 433511
FIXED-IN: 5.21.2
2021-02-24 10:25:36 +02:00
Vlad Zahorodnii
73dd65f452 Fix build 2021-02-23 15:21:04 +02:00
Aleix Pol
65ad7ffb27 inputmethod: do not cover panels with the input method (e.g. virtual keyboard)
This way we can adapt the panels themselves to show useful UX like
hiding the keyboard or switching.
2021-02-23 12:10:28 +00:00
Vlad Zahorodnii
220a1e0441 Add QDebug stream operator for AbstractOutput
This can be useful for debugging purposes.
2021-02-23 12:47:16 +02:00
Vlad Zahorodnii
33ba2974eb effects: Properly copy previous geometry
In QJSEngine, QRect is an Object, which is correct. This means that we
cannot use simple assignment operator to copy geometries, we need to use
standard ways to copy Objects, such as Object.assign() or the spread
operator, which is not available in QJSEngine yet.
2021-02-23 07:47:01 +00:00
Vlad Zahorodnii
bd4d17b3a1 Drop QtScript dependency
QtScript is not used anywhere anymore plus it's dropped in Qt 6.
2021-02-23 07:47:01 +00:00
David Edmundson
ae6e6dc63c [scripting] Port ScriptedEffects to QJSEngine
Summary:
QScriptEngine is deprecated for years and suffers bitrot.
Plasma hit one super major bug with it in 5.11.0 and has now ported
away.

Main porting notes:
- creating low level functions no longer exists
The old global functions are exposed on the ScriptedEffect instance
and then the QJSValue wrappers of the globalObject are modified to
trampoline the methods at a wrapper level.

- We can then use QJSEngine to automatically do argument error checking
rather than unmarshalling a QJSValue manually which significantly
reduces a lot of code.

- We can't make FPX2 a native type, so these are QJSValue args and
unboxed there.

Long term I want overloads for animate that take int/QSize/QPoint which
are native JS types, but that might be an API break.

Test Plan:
Hopefully comprehensive unit test which passes
Tested fade/fadeDesktop manually.

It's a very invasive change, so I expect some things will be broke
please help test any JS effects.

Reviewers: #kwin, mart, fvogt

Subscribers: fvogt, zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D14536
2021-02-23 07:47:01 +00:00
Vlad Zahorodnii
566d4aa27b scripting: Port Script to QJSEngine
QtScript is not well maintained and deprecated in favor of QJSEngine.
2021-02-23 07:47:01 +00:00
Bhushan Shah
28d2650f24 [platforms/drm] include missing errno.h include
CCMAIL: Xaver Hugl <xaver.hugl@gmail.com>
2021-02-23 12:07:17 +05:30
Xaver Hugl
6703bc9d24 Improve teardown of DrmGpu 2021-02-22 21:56:03 +01:00
Bhushan Shah
ae8e69b4bb [platforms/drm] accept both keypress and keyrelease event in filter
We don't want to pass out either of key press or release event to other
filters.
2021-02-22 21:52:57 +05:30
Vlad Zahorodnii
58bee8e38a Fix build 2021-02-22 18:11:06 +02:00
Bhushan Shah
b24fc72969 [platforms/drm] only enable output on key press not release
Otherwise if powerdevil for example is configured to turn screen off on
the power key press, we will turn it right back on when we get key
release event.

Suggested-by: David Edmundson <kde@davidedmundson.co.uk>
2021-02-22 21:16:00 +05:30
Vlad Zahorodnii
4061cbc97d Create Xcursor sprites with correct format
"ARGB32" is a typo, it needs to be "ARGB32_Premultiplied."
2021-02-22 15:28:50 +02:00
l10n daemon script
553b6d39c6 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-02-22 06:57:46 +01:00
Vlad Zahorodnii
33e3b92946 effects/wobblywindows: Allow model geometry and real geometry get out of sync
Currently, the wobbly windows effect assumes that the window data will
be updated on every repaint. However, there are legit cases when the
time diff between frames can be 0, for example when per screen rendering
is on.

If we are unlucky enough and the geometry of the window changes in that
very short moment, the mapping between window quads and the bezier
patch will be wrong. The window will most likely bounce back and forth.

In order to improve handling of that tricky case, this change makes the
computeBezierPoint() function take the "uv" coordinates rather than the
absolute "xy" coordinates of window vertices. This loosens the
connection between the real geometry of the window and the cached bezier
patch, and overall makes the effect's timing code more robust.

This can be also useful if the wobbly windows effect starts accumulating
time diffs and performing the integration step every N msecs with the
purpose of maintaining uniform "wobbliness" across different refresh rates.

BUG: 433187
2021-02-19 16:34:15 +00:00
Vlad Zahorodnii
823692abc1 effects/wobblywindows: Refactor the update loop
This way, the code is more tidier.
2021-02-19 17:53:47 +02:00
Vlad Zahorodnii
45979ed460 x11: Introduce an envvar to force software vsync
This can be useful for debugging purposes and for people wishing to ramp
up the refresh rate on their setups with different refresh rates.

BUG: 433094
2021-02-19 14:59:47 +00:00
Vlad Zahorodnii
fb93037ca7 x11: Introduce an envvar to prevent sync'ing to vblanks
This can be useful if you want to ensure that the buffer swap operation
won't block.

CCBUG: 433094
2021-02-19 14:59:47 +00:00
Vlad Zahorodnii
e179fb697d platforms/drm: Refactor event dispatching code
There are a couple of reasons not to use the lambda:

* It is unnecessary. The DrmGpu has the DRM file descriptor
* If a crash occurs somewhere in the lambda, the backtrace will be hard
  to read
* Instead of processing events in the destructor of the DrmBackend
  class, we should keep dispatching events without involving
  QCoreApplication::processEvents() until all page flips are completed.
2021-02-19 13:40:07 +00:00
Aleix Pol
d8cb48e6b7 inputmethod: honour SNI disabled state
At the moment we were sending activation signals even if it's disabled.
2021-02-19 13:18:55 +00:00
Xaver Hugl
79ccfaddf0 Properly clean up DrmGpu
CCBUG: 433145
2021-02-19 13:19:21 +01:00
Vlad Zahorodnii
6053bbd2d0 Sprinkle static keywords
There is no need to query the environment variables every time kwin
tries to determine the current compositing refresh rate.
2021-02-19 11:16:50 +02:00
David Faure
abab1660aa Define -DQT_NO_CAST_TO_ASCII and fix compilation 2021-02-19 11:00:27 +02:00
Jan Blackquill
c6b638267a Fix crash on pasting too soon after copying from XWayland
There seems to be an interval between when you copy something from a Wayland
client and when you attempt to paste it into an X client where m_chunks.first().first
is empty, and trying to access its .data() will cause an assertion. While we can't
really gracefully handle this situation, we can at least terminate the function early
and turn the paste operation into a noop instead of a crash.
2021-02-19 07:24:23 +00:00
Aleix Pol
04465e996c Prevent layershell from crashing when rearranging when we shouldn't
Here's the backtrace that prompted the MR:
```
0  QVector<KWin::VirtualDesktop*>::count() const (this=0x10) at
/home/apol/devel/kde5/include/QtCore/qvector.h:241
1  KWin::VirtualDesktopManager::count() const (this=0x0) at
/home/apol/devel/frameworks/kwin/src/virtualdesktops.h:687
2  KWin::Workspace::updateClientArea(bool) (this=0x0, force=false) at
/home/apol/devel/frameworks/kwin/src/workspace.cpp:2089
3  0x00007fef12a180b3 in KWin::LayerShellV1Integration::rearrange()
(this=<optimized out>) at
/home/apol/devel/frameworks/kwin/src/layershellv1integration.cpp:208
4  0x00007fef13094806 in QtPrivate::QSlotObjectBase::call(QObject*,
void**) (a=0x7ffcf9674f70, r=0x5569d2981a40, this=0x5569d2981e50) at
../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:398
5  doActivate<false>(QObject*, int, void**) (sender=0x5569d2981dc0,
signal_index=3, argv=argv@entry=0x7ffcf9674f70) at
/home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:3886
6  0x00007fef1308db60 in QMetaObject::activate(QObject*, QMetaObject
const*, int, void**) (sender=<optimized out>, m=m@entry=0x7fef1332d280
<QTimer::staticMetaObject>,
local_signal_index=local_signal_index@entry=0,
argv=argv@entry=0x7ffcf9674f70) at
/home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:3946
7  0x00007fef1309871a in QTimer::timeout(QTimer::QPrivateSignal)
(this=<optimized out>, _t1=...) at .moc/moc_qtimer.cpp:205
```
2021-02-19 00:25:20 +01:00
Aleix Pol
4fb2493826 --warning: Don't try to connect to a null object
It happens when running without libinput.
2021-02-18 20:03:06 +01:00
Aleix Pol
8950b78121 pipewire: Don't crash if we're passed a null spa_data
I just had that crash, this is what coredumpctl suggested it was
happening.
We don't need to make sure we're in dmabuf mode to remove the buffer.
Worst case scenario it won't remove anything. Check the spa_data before
querying in case it's null.
2021-02-18 17:13:36 +00:00
Méven Car
11c3ada121 DrmGpu fix atomicModeSetting try 2021-02-18 16:26:18 +00:00
Vlad Zahorodnii
cf2486d643 x11: Properly detect whether swap events have to disabled
qEnvironmentVariableIntValue() will return 0 if the specified variable
is not set.

This means that swap events will be disabled on AMD GPUs unless the env
var is set explicitly to 1.
2021-02-18 12:04:27 +00:00
Bhushan Shah
892b8cf6cb inputmethod: toggle the inputmethod if we get second show request
This is in a way working around bad protocol, input-method-unstable-v1
and also input-method-unstable-v2 does not have a way for input-method
to mark itself as "deactivated". This can happen when e.g. user closes
the virtual keyboard using swiping down or "close keyboard" button in
keyboard.

When this happens, the state between compositor, text_input and
input_method gets out of sync, compositor does not know that input
method got deactivated and hence it will continue sending various events
to it. The quick way around it is to change focus, which makes
compositor send deactivate request to input-method, that puts compositor
and input-method in sync again.

This patch aims to solve this by tracking the last state of input
method, If we know that input method is active and text input sends us
the show event, we toggle the input-method.

I will re-iterate that this is in no way proper solution, ideally
input-method-unstable-v3 or input-method-unstable-v2 even (since it is
not upstream anyway) gains the new request which essentially allows
input-method to sync enabled/disabled state with compositor.
2021-02-18 10:36:39 +05:30
Vlad Zahorodnii
378ecbc88c wayland: Implement maximized horizontal/vertical states
BUG: 407793
2021-02-17 14:39:24 +00:00
Vlad Zahorodnii
dd1b45d828 x11: Simplify X11Client::damageNotifyEvent()
The contents of the if branch is identical to the implementation of the
Toplevel::damageNotifyEvent() function and setReadyForPainting() will
never be called because m_syncRequest.isPending can be true only if the
window supports sync counters.
2021-02-17 12:09:23 +00:00
Vlad Zahorodnii
d23dab7be9 wayland: Fix handling of synthetic touch cancel events
In case the compositor wants to cancel a touch sequence, we need to
ignore subsequent touch motion and touch up events until a new sequence
is initiated by the user.

Previously, it was implicitly handled by clearing the mapping table
between the touch slots and touch ids generated by kwayland-server.
2021-02-16 17:53:30 +00:00
Vlad Zahorodnii
8f2520e00e x11: Emit missing geometry changed signals for Unmanaged
Otherwise the scene might miss some geometry updates and render override
redirect windows distorted.
2021-02-16 14:35:26 +02:00
Vlad Zahorodnii
242544a056 core: Drop Toplevel::bufferMargins()
It can be expressed via other means.
2021-02-16 09:06:05 +02:00
Vlad Zahorodnii
10a8ef2969 Unvirtualize Toplevel::visibleGeometry() 2021-02-16 06:56:04 +00:00
Vlad Zahorodnii
8570b64384 Rename visibleRect to visibleGeometry
"rect"s have their origin at the top-left corner of the frame. However,
visibleRect() returns a QRect that's in the global coordinates.
2021-02-16 06:56:04 +00:00
Vlad Zahorodnii
311a370d77 wayland: Port kwin to SeatInterface::touchDown() changes 2021-02-16 06:54:39 +00:00
Vlad Zahorodnii
22d386cdd8 xwayland: Improve handling of Xwayland restarts
At the moment, the display name might change between Xwayland restarts.
It is a problem because the session process (plasma) may have an
outdated value of the DISPLAY environment variable after a restart.

With this change, it is guaranteed that the DISPLAY and the Xauthority
file stay the same until the server is stopped explicitly.
2021-02-15 18:09:46 +00:00
Xaver Hugl
995437f57c decouple DRM planes from DrmOutput 2021-02-15 17:28:58 +00:00
Méven Car
7c2c213f52 QPA Integration: Save enabled screens
Since QWindowSystemInterface::handleScreenRemoved would not be called in Integration::handleScreenDisabled, Qt apps would still reference disabled screens resulting in crashes.
2021-02-15 07:30:18 +00:00
Ismael Asensio
3b87c6ea2d kcm/kwinrules: Update values on text edit
Previously the text values were updated to the model after
`onEditingFinished()`, that is after losing focus, to prevent
erroneus updates.

This was making also the `needsSaving` signal fire only after
a focus change, which is not consistent with the behavior of
other KCMs.

Use `onTextEdit()` instead, so the model is updated as the user
types.

BUG: 431211
2021-02-13 22:57:38 +00:00
Cyril Rossi
12e0376fea KCM KWin VirtualDesktop highlight settings
Currently the highlight is only for the items. KCModuleData will come in another MR.
This is more simple implementation than the one I previously made.

Some default value are hardcoded in the KCM such as Rows count (2) and the number
of virtual desktop, on revert to default, it keeps only the first one.
2021-02-12 15:16:35 +00:00
Vlad Zahorodnii
c5e91b94c4 xwayland: Refuse to create connection sockets if sockets dir doesn't exist
Since kwin runs as a normal user, it cannot create the X11 connection
socket directory because any user process can easily compromise the
security of the system by unsetting the sticky bit.

In order to guarantee the security of the system, the socket directory
must be created by root and have the sticky bit on.
2021-02-12 10:03:02 +02:00
Vlad Zahorodnii
118b817134 xwayland: Reserve enough space for sun_path
We also need to reserve space for the final null terminator.
2021-02-11 20:57:48 +00:00
Dan Leinir Turthra Jensen
df498d9be4 Add CLI tool to set window decorations, and use for KNS adoptions
This adds a command line tool which allows the user to set the window
decoration, and then that tool is used in the two knsrc files to allow
the user to switch window decoration directly from either a KNS dialog,
or from Discover.
2021-02-11 16:44:33 +00:00
Vlad Zahorodnii
93d5901c85 Fix build on FreeBSD 2021-02-11 18:21:32 +02:00
Vlad Zahorodnii
a2c7c66d8a xwayland: Emit Xwayland::started() after WM_S0 is claimed
Xwayland starts listening to -listenfd file descriptors after the WM_S0
selection is claimed. At the moment, it is claimed asynchronously by
kwin. First, we create a dummy window and change one of its properties
to get the timestamp. After the timestamp has been received, we actually
call xcb_set_selection_owner().
2021-02-11 15:10:01 +00:00
Vlad Zahorodnii
9f0f452702 xwayland: Manually create sockets
This provides kwin greater control over how X11 sockets are created for
Xwayland. For example, it can be used to ensure that the DISPLAY remains
the same across Xwayland server restarts or launching Xwayland on
demand.

Even though -listen <fd> option is deprecated, we still pass it because
older versions of Xwayland may not have the -listenfd option.
2021-02-11 15:10:01 +00:00
Vlad Zahorodnii
3d363fb797 Fix build on FreeBSD 2021-02-11 16:49:05 +02:00
Vlad Zahorodnii
9ccae5eda6 platforms/wayland: Round up fractional scale factors
Currently, fractional scale factors that are less than 1 will be floored
to 0, which is a protocol violation.

CCBUG: 432766
2021-02-11 12:06:37 +00:00
Vlad Zahorodnii
2ce49877f7 platforms/wayland: Emit outputEnabled() signal
Otherwise the QPA won't create QPlatformScreens and the compositor may
not work as expected.
2021-02-11 12:03:26 +00:00
Fabian Vogt
7c325b7436 xwayland: Also write a FamilyWild entry to the Xauthority file
This is needed to deal with hostname changes during lifetime of a session.
2021-02-10 18:19:17 +00:00
Fabian Vogt
06d2a31bd3 xwayland: Rename updateXauthorityFile and add error handling
This renames updateXauthorityFile to writeXauthorityEntries as it doesn't
actually update (i.e. change) anything, it just writes new ones.

Error handling is introduced, to avoid that it continues silently without
entries, which would cause all connections to fail.
2021-02-10 18:19:16 +00:00
Fabian Vogt
d51703e335 xwayland: Simplify writeXauthorityEntry
Extract writing of what libXau calls "counted strings".
2021-02-10 18:19:16 +00:00
Fabian Vogt
357713fa78 xwayland: Simplify m_authorityFile
Use a shorter file name (which is already part of apparmor profiles) and avoid
using a pointer.
2021-02-10 18:19:16 +00:00
Vlad Zahorodnii
93e0265e4e Move source code to src/ directory
Once in a while, we receive complaints from other fellow KDE developers
about the file organization of kwin. This change addresses some of those
complaints by moving all of source code in a separate directory, src/,
thus making the project structure more traditional. Things such as tests
are kept in their own toplevel directories.

This change may wreak havoc on merge requests that add new files to kwin,
but if a patch modifies an already existing file, git should be smart
enough to figure out that the file has been relocated.

We may potentially split the src/ directory further to make navigating
the source code easier, but hopefully this is good enough already.
2021-02-10 15:31:43 +00:00