Commit graph

17123 commits

Author SHA1 Message Date
Kai Uwe Broulik
68fca9a613 Merge branch 'Plasma/5.15' 2019-04-01 10:34:45 +02:00
Kai Uwe Broulik
dc552ee2ae Force server-side decoration if no borders are forced by user
Otherwise the client will start drawing its own border now.

BUG: 405385
FIXED-IN: 5.15.4

Differential Revision: https://phabricator.kde.org/D19705
2019-04-01 10:29:45 +02:00
David Edmundson
835455939f Avoid potential assert in SM saving
Summary:
Sesison Manager stores all relevant clients. There's an assert if the
window type is outside of the standard client window types. It assumed
that all windows outside this would be Unmanaged windows rather than
Client objects, something probably true but not something enforced.

This particular crash was probably cased as we have a new window type in
Plasma OSD, which does not set BypassWindowManager in Qt window flags.

BUG: 395712

Test Plan:
Set to restore session
Logged out and back in
Saw some windows

Set to restore manually saved session
Hit save
No crash

Reviewers: #kwin, graesslin

Reviewed By: #kwin, graesslin

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D13715
2019-03-31 14:51:23 +01:00
l10n daemon script
0196b6f29a 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"
2019-03-30 06:07:26 +01:00
Aleix Pol
2e1880b85a Fix crash when using kwin on windowed mode
Summary:
Used to get:
`kwin_wayland: kwin/composite.cpp:646: void KWin::Compositor::aboutToSwapBuffers(): Assertion "!m_bufferSwapPending' failed."`

Test Plan: Ran `kwin_wayland --socket dave --output-count 2 konsole`

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D20056
2019-03-29 18:43:47 +01:00
Nate Graham
c795f1389b Use Meta+D to Show Desktop by default
Summary: Bind the keyboard shortcut {key Meta D} to {nav Show Desktop}.

Test Plan:
Apply patch, compile KWin, do `kwin --replace`, reset KWin shortcuts to default values if you've previously changed the Show Desktop's keyboard shortcut

{key Meta D} now shows and hides the desktop.

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: filipf, abetts, zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D20066
2019-03-27 10:22:56 -06:00
Vlad Zagorodniy
97ea80219d Merge branch 'Plasma/5.15' 2019-03-27 10:32:28 +02:00
Vlad Zagorodniy
9560588570 Merge branch 'Plasma/5.12' into Plasma/5.15 2019-03-27 10:26:37 +02:00
Erik Kurzinger
3ce5af5c21 [platforms/x11] Force glXSwapBuffers to block with NVIDIA driver
Summary:
The NVIDIA implementation of glXSwapBuffers will, by default, queue up
to two frames for presentation before blocking. KWin's compositor,
however, assumes that calls to glXSwapBuffers will always block until
the next vblank when rendering double buffered. This assumption isn't
valid, as glXSwapBuffers is specified as being an implicit glFlush,
not an implicit glFinish, and so it isn't required to block. When this
assumption is violated, KWin's frame timing logic will
break. Specifically, there will be extraneous calls to
setCompositeTimer with a waitTime of 0 after the non-blocking buffer
swaps, dramatically reducing desktop responsiveness. To remedy this,
a call to glXWaitGL was added by Thomas Luebking after glXSwapBuffers
in 2015 (see bug 346275, commit
8bea96d701). That glXWaitGL call is
equivalent to a glFinish call in direct rendering, so it was a good
way to make glXSwapBuffers behave as though it implied a glFinish
call.

However, the NVIDIA driver will by default do a busy wait in glFinish,
for reduced latency. Therefore that change dramatically increased CPU
usage. GL_YIELD can be set to USLEEP (case insensitive) to change
the behavior and use usleep instead. When using the NVIDIA driver,
KWin will disable vsync entirely if GL_YIELD isn't set to USLEEP
(case sensitive, a bug in KWin).

However, the NVIDIA driver supports another environment variable,
__GL_MaxFramesAllowed, which can be used to control how many frames
may be queued by glXSwapBuffers. If this is set to 1 the function
will always block until retrace, in line with KWin's expectations.
This allows the now-unnecessary call to glXWaitGL to be removed along
with the logic to conditionally disable vsync, providing a better
experience on NVIDIA hardware.

Reviewers: #kwin, davidedmundson, zzag

Reviewed By: #kwin, davidedmundson, zzag

Subscribers: kwin, davidedmundson, zzag

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19867
2019-03-27 10:26:21 +02:00
David Strobach
1d4a9d24f8 Expose AbstractClient::setMaximize to scripting
Summary: Fixes BUG: 403071

Reviewers: graesslin, davidedmundson

Reviewed By: graesslin, davidedmundson

Subscribers: davidedmundson, zzag, graesslin, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D20044
2019-03-26 09:38:21 +01:00
Volker Krause
008143c9db Update URLs to use https
Summary: Largely done automatically using the tools from D19996.

Reviewers: yurchor, zzag

Reviewed By: yurchor, zzag

Subscribers: zzag, yurchor, kwin, kde-doc-english

Tags: #kwin, #documentation

Differential Revision: https://phabricator.kde.org/D20017
2019-03-25 19:26:23 +01:00
l10n daemon script
9fd4cc33b0 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"
2019-03-25 06:01:07 +01:00
Aleix Pol
75c0c415cc Don't show the OrientationSensor if it's not supported
Test Plan: I don't get the OrientationSensor SNI on my laptop, which is fine, because it was useless.

Reviewers: #kwin, #plasma, zzag

Reviewed By: #kwin, #plasma, zzag

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19955
2019-03-24 23:12:00 +01:00
Aleix Pol
4020056532 Make it possible to autodetect the tablet mode
Summary:
At the moment it's broken for many of the laptops I've seen, this opens the possibility to start toying with them. The right fix would be to get the kernel to emit the right signals but I'm afraid for some hardware it will be close to impossible.
This includes a kconfig variable variable that will detect it as follows: if there's a touchscreen, when the touchpad gets removed we are on tablet mode (i.e. the pointing will be done using the finger), when it's connected back tablet mode will be restored.

Reviewers: #kwin, #plasma, davidedmundson

Reviewed By: #kwin, #plasma, davidedmundson

Subscribers: mart, davidedmundson, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19604
2019-03-22 18:29:21 +01:00
l10n daemon script
5966465aad 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"
2019-03-22 09:03:46 +01:00
l10n daemon script
4d29d9a133 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"
2019-03-22 08:38:07 +01:00
l10n daemon script
e7d3099ddd 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"
2019-03-22 05:46:39 +01:00
Aleix Pol
6d37ce7f36 RFC: Fix wayland backend initialisation
Summary:
Otherwise it thinks outputs couldn't be created and it leaves.
Problem is that after this fix it crashes when it actually does things with:
kwin_wayland: /home/apol/devel/frameworks/kwin/composite.cpp:646: void KWin::Compositor::aboutToSwapBuffers(): Assertion `!m_bufferSwapPending' failed.

Test Plan: As said, it proceeds correctly and crashes elsewhere

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: davidedmundson, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19921
2019-03-20 18:24:57 +01:00
Erik Kurzinger
22a441e071 [platforms/x11] Force glXSwapBuffers to block with NVIDIA driver
Summary:
The NVIDIA implementation of glXSwapBuffers will, by default, queue up
to two frames for presentation before blocking. KWin's compositor,
however, assumes that calls to glXSwapBuffers will always block until
the next vblank when rendering double buffered. This assumption isn't
valid, as glXSwapBuffers is specified as being an implicit glFlush,
not an implicit glFinish, and so it isn't required to block. When this
assumption is violated, KWin's frame timing logic will
break. Specifically, there will be extraneous calls to
setCompositeTimer with a waitTime of 0 after the non-blocking buffer
swaps, dramatically reducing desktop responsiveness. To remedy this,
a call to glXWaitGL was added by Thomas Luebking after glXSwapBuffers
in 2015 (see bug 346275, commit
8bea96d701). That glXWaitGL call is
equivalent to a glFinish call in direct rendering, so it was a good
way to make glXSwapBuffers behave as though it implied a glFinish
call.

However, the NVIDIA driver will by default do a busy wait in glFinish,
for reduced latency. Therefore that change dramatically increased CPU
usage. GL_YIELD can be set to USLEEP (case insensitive) to change
the behavior and use usleep instead. When using the NVIDIA driver,
KWin will disable vsync entirely if GL_YIELD isn't set to USLEEP
(case sensitive, a bug in KWin).

However, the NVIDIA driver supports another environment variable,
__GL_MaxFramesAllowed, which can be used to control how many frames
may be queued by glXSwapBuffers. If this is set to 1 the function
will always block until retrace, in line with KWin's expectations.
This allows the now-unnecessary call to glXWaitGL to be removed along
with the logic to conditionally disable vsync, providing a better
experience on NVIDIA hardware.

Reviewers: #kwin, davidedmundson, zzag

Reviewed By: #kwin, davidedmundson, zzag

Subscribers: kwin, davidedmundson, zzag

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19867
2019-03-20 09:56:05 -07:00
Marco Martin
d2820bf05e Don't try to resize desktop or fullscreen windows
Summary: those windows should always take all the space no matter what

Test Plan: text areas on desktop or fullscreen windows don't cause resizes anymore

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19922
2019-03-20 17:47:08 +01:00
Aleix Pol
1f3fd63790 Fix crash on closing
Test Plan: Start in windowed mode, close. Doesn't crash anymore.

Reviewers: #plasma, #kwin, mart

Reviewed By: #plasma, #kwin, mart

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19919
2019-03-20 17:35:14 +01:00
Aleix Pol
ba22fe0d43 Fix wrong command line argument name
Reviewed by David Edmundson
2019-03-20 15:12:45 +01:00
Roman Gilg
7b13393b64 [platforms/wayland] Multi output support
Summary:
This patch rewrites large parts of the Wayland platform plugin, in order to
facilitate the testing of multi output behavior in nested KWin sessions.

For that a new class WaylandOutput is introduced, which is based on
AbstractOutput and by that shares functionality with our virtual and DRM
platform plugins.

The EGL/GBM and QPainter backends have been remodelled after the DRM one,
sharing similiarities there as well now.

Pointer grabbing has been rewritten to support multiple outputs, now using
pointer locking instead of confining and drawing in this case onto a sub-
surface, which get dynamically recreated in between the different output
surfaces while the cursor is being moved.

Window resizing is possible if host supports xdg-shell, but currently the
mode size does not yet fill the new window size.

The number of outputs can be set by command line argument `--output-count`,
scaling is also supported by setting the argument `--scale`.

Further steps could be:
* Enabling automatic fill of resized windows via Wayland mode change
* Multiple diverging initial sizes and scale factors for mulitple outputs

**Watch it in action:** https://youtu.be/FYItn1jvkbI

Test Plan: Tested it in live session.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: davidedmundson, zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18465
2019-03-20 14:43:03 +01:00
Aleix Pol
0ab907c7fd orientation sensor: Add comments for translators 2019-03-20 11:41:44 +01:00
Aleix Pol
f1fa3a2cab Fix build 2019-03-20 11:41:06 +01:00
Marco Martin
6bc2ddd56a virtualkeyboard: resize the focused window to make room for the keyboard
Summary:
alternative approach: try to resize the winidow to make room for the keyboard.
the new input wayland protocol doesn't have anymore the overlap rectangle (and it would not be going to work with qwidget apps anyways)

in the future will probably be needed anextension to the input protocol v3 which partially gets back this, tough window resizing is needed regardless

what's missing: the resize should be "temporary" and the window should be restored to its previous geometry when the keyboard closes

Test Plan: tested with test QML code

Reviewers: #plasma, #kwin, bshah, graesslin, romangg, davidedmundson

Reviewed By: #plasma, #kwin, romangg, davidedmundson

Subscribers: nicolasfella, mart, kwin, davidedmundson, graesslin

Tags: #kwin

Maniphest Tasks: T9815

Differential Revision: https://phabricator.kde.org/D18818
2019-03-20 11:05:06 +01:00
Albert Astals Cid
d51070223b There's no qml folder here anymore
CCMAIL: vladzzag@gmail.com
2019-03-19 22:04:39 +01:00
Aleix Pol
c192d35192 Improve SNI text
Summary:
Allow the user to see if rotation lock is enabled by reading the text.
Alternatively one has to hover it and wait for the tooltip.

Reviewers: #plasma, #kwin, ngraham

Reviewed By: ngraham

Subscribers: ngraham, arvidhansson, bruns, niccolove, ndavis, zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19690
2019-03-19 22:02:15 +01:00
Aleix Pol
9e42ff2f48 Virtual Keyboard SNI: Improve text and usability
Summary:
This way we can see from the system tray its state.

CCBUG: 405397

Reviewers: #plasma, #vdg, ngraham

Reviewed By: #vdg, ngraham

Subscribers: ngraham, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19898
2019-03-19 21:57:59 +01:00
Erik Kurzinger
d9c79e3627 [platforms/drm] Fix software cursors with drm backend
Summary:
If hardware cursor support is not available when using the drm backend for
Wayland compositing, the software cursor texture will not be updated when the
cursor image changes, and it will still be drawn when no cursor image is set
(such as when running a full-screen game). Furthermore, the drmModeSetCursor
and drmModeMoveCursor functions will still be unnecessarily called when the
cursor is moved or hidden.

To correct this, SceneOpenGL should connect Platform::cursorChanged as opposed
to Cursor::cursorChanged to its texture update function, as only the former
will be emitted when the cursor is updated and the compositor should check if
the cursor is hidden and the software cursor image is not null before rendering
it. DrmBackend::moveCursor and DrmBackend::hideCursor should also return
immediately if using a software cursor.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18376
2019-03-19 12:46:16 -07:00
Vlad Zagorodniy
c5a3b47050 Get rid of Deleted's properties
Summary:
EffectWindow no longer looks up properties from Toplevel derived
classes, thus we can get rid of Deleted's properties. It's safe to do
because Deleted is not exposed to scripting API and those properties
were used only by effects.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19722
2019-03-19 18:06:27 +02:00
Vlad Zagorodniy
380c93ac19 [platforms/drm] Add DPI connector type
Reviewers: #kwin, apol, davidedmundson

Reviewed By: #kwin, apol, davidedmundson

Subscribers: apol, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19781
2019-03-19 18:05:15 +02:00
Aleix Pol
d8af2ee566 Rotate cursors also on portrait mode
Summary: Like we do on inverted mode

Test Plan: Not much, because we don't support portrait mode on intel hardware just yet. I can see the cursor properly rotated before drm tells us to fall back to the previous configuration.

Reviewers: #kwin, #plasma, graesslin

Reviewed By: #kwin, #plasma, graesslin

Subscribers: zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19710
2019-03-19 16:33:05 +01:00
l10n daemon script
5cba424dc0 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"
2019-03-19 05:59:50 +01:00
Vlad Zagorodniy
56b24f959f [kcmkwin] Properly load effects
Summary:
EffectsModel has to communicate with KWin in order to receive the
actual value of SupportedRole. So, in theory the model should notify
about loaded effects after receiving response from KWin, but that's
not the case.

Test Plan: Desktop Effects KCM no longer flashes when resetting changes.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18728
2019-03-18 13:11:24 +02:00
Vlad Zagorodniy
dc0b11eea7 [kcmkwin] Rename EffectsModel::m_effectsList to EffectsModel::m_effects
Summary: "List" suffix is redundant.

Test Plan: Compiles.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: davidedmundson, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18713
2019-03-18 13:11:07 +02:00
Vlad Zagorodniy
b91cfae308 [kcmkwin] Rename EffectModel to EffectsModel
Summary: Model names have plural form.

Test Plan: Compiles.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: davidedmundson, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18712
2019-03-18 13:10:51 +02:00
Vlad Zagorodniy
dc3bc5f7b7 [kcmkwin] Remove some name duplication in EffectModel
Summary: `effect.effectStatus` looks very weird.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18707
2019-03-18 13:10:33 +02:00
Vlad Zagorodniy
7a28a7442e [kcmkwin] Simplify EffectModel::save
Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18706
2019-03-18 13:10:09 +02:00
Vlad Zagorodniy
bc34a9d653 [kcmkwin] Don't discard unsaved changes when reloading effects model
Summary:
If an effect is installed or removed, then all not yet committed changes
will be lost. This is undesired behaviour.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: davidedmundson, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18705
2019-03-18 13:09:44 +02:00
Vlad Zagorodniy
1faa861bd5 [kcmkwin] Add requestConfigure to effects model
Summary:
The main motivation for adding this method is to avoid code duplication.
Both virtual desktops kcm and desktop effects kcm have their own logic
to create configuration dialogs for effects.

On the bright side, if we add support for declarative effect kcms, we
will need to change only this method.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18704
2019-03-18 13:09:03 +02:00
Vlad Zagorodniy
2211a951e7 [kcmkwin] Split out Desktop Effects KCM
Summary:
A while ago desktop effects and compositing settings lived under the
same roof

{F6584639}

{F6584642}

but time has passed and now those two have their own kcms. This causes
some issues:

* for newcomers it's harder to find code of the Desktop Effects KCM;
* git history doesn't look good, e.g. "[kcmkwin/compositing] Add some
  bugs to Desktop Effects KCM to fix later";
* in general, the mix of two doesn't look good in the code.

This change splits out the Desktop Effects KCM. Unfortunately, in order
to have more nicer code I had to refactor EffectModel a little bit.

Before:

{F6584669}

After:

{F6587570}

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: davidedmundson, ltoscano, mart, ngraham, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18703
2019-03-18 13:08:32 +02:00
Björn Feber
5eb28512dd Use new window decoration theme icon for the Window Decorations KCM 2019-03-15 14:18:21 +01:00
Vlad Zagorodniy
d0604f99f2 Remove unused constant 2019-03-15 12:46:52 +02:00
Kai Uwe Broulik
bc25e7c474 [kcmkwin/kwindecoration] Use new API to set cell size properly
Thanks to 5cfdbaa4b081a030a01477fd13c20f710fe58d4b in kdeclarative the implicitCellWidth
and implicitCellHeight of the GridView can be adjusted without hacks.

Differential Revision: https://phabricator.kde.org/D19729
2019-03-14 09:34:48 +01:00
Kai Uwe Broulik
50e74c5517 [kcmkwin/kwindecoration] Set implicit size
Ensures the KCM opens with a sane default size when opened standalone via kcmshell

Differential Revision: https://phabricator.kde.org/D19730
2019-03-14 09:34:27 +01:00
Vlad Zagorodniy
8f1b246396 Merge branch 'Plasma/5.15' 2019-03-13 11:46:14 +02:00
Vlad Zagorodniy
0847283793 Merge branch 'Plasma/5.12' into Plasma/5.15 2019-03-13 11:45:43 +02:00
Vlad Zagorodniy
f7af113261 Properly restore current desktop from session
Summary:
VirtualDesktopManager is initialized in two places: Workspace::init and
Workspace::initWithX11. The former method loads virtual desktops from
the config file and the latter method synchronizes VirtualDesktopManager
with RootInfo.

Both methods do

    if (!VirtualDesktopManager::self()->setCurrent(m_initialDesktop))
        VirtualDesktopManager::self()->setCurrent(1);

which makes sense in Workspace::init, but not in Workspace::initWithX11.

When Workspace::initWithX11 is called, the current virtual desktop is
the same as m_initialDesktop. So that piece of code basically makes
the first virtual desktop current no matter what.

BUG: 390295
FIXED-IN: 5.15.3

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19520
2019-03-13 11:45:24 +02:00
Vlad Zagorodniy
99f7be6ddd Merge branch 'Plasma/5.15' 2019-03-13 10:54:51 +02:00