Commit graph

80 commits

Author SHA1 Message Date
Vlad Zahorodnii
b4b0b93188 qpa: Don't delete platform screens manually
According to the documentation, deleting a platform screen manually can
lead to a crash due to a call to a pure virtual method.
2020-08-18 16:12:43 +03:00
Aleix Pol
3733e3e77f Remove embedded implementation of the Virtual Keyboard 2020-08-18 10:55:21 +00:00
Aleix Pol
be22876348 Don't double-delete Window::handle
It also gets deleted when cleaning up the Workspace.

Found using ASAN.
2020-08-14 16:51:46 +02:00
Aleix Pol
71de41a570 Don't leak screens when cleaning up
Found using ASAN.
2020-08-14 16:50:39 +02:00
Vlad Zahorodnii
4ce853e8e4 Prettify license headers 2020-08-07 19:57:56 +00:00
Vlad Zahorodnii
1fb9f6f13a Switch to SPDX license markers
The main advantage of SPDX license identifiers over the traditional
license headers is that it's more difficult to overlook inappropriate
licenses for kwin, for example GPL 3. We also don't have to copy a
lot of boilerplate text.

In order to create this change, I ran licensedigger -r -c from the
toplevel source directory.
2020-08-07 19:57:56 +00:00
Aleix Pol
02fc40fa4a Make sure we don't leak the QPlatformFontDatabase using smart pointers
Found it when running KWin on ASAN
2020-07-28 08:19:41 +00:00
Méven Car
464203c60e Clean #if version check blocks
Since 08a21ae7b6 we now depend on Qt 5.14
2020-05-28 11:43:29 +00:00
Aleix Pol
1b7fd0db3f Properly include private Qt5 targets
Summary: Qt is already providing the cmake files to load them, we just need to load them properly.

Test Plan: Builds and runs

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D29763
2020-05-15 12:24:23 +02:00
Laurent Montel
b54c57505d Fix warning about using 0 as nullptr 2020-05-01 13:02:20 +02:00
Aleix Pol
6abd23ed02 Make it possible to have a separate cursor for the tablet
Summary:
As is KWin only had 1 Cursor which was a singleton. This made it impossible for
us to properly implement the tablet (as in drawing tablets) support and show where
we're drawing.
This patch makes it possible to have different Cursors in KWin, it makes all the
current code still follow the mouse but the tablet can still render a cursor.

Test Plan: Tests pass, been using it and works as well as before but with beautiful tablet cursors.

Reviewers: #kwin, cblack, davidedmundson

Reviewed By: #kwin, cblack, davidedmundson

Subscribers: davidedmundson, cblack, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D28155
2020-04-03 01:16:45 +02:00
Vlad Zahorodnii
55b4912004 Update my email address 2020-01-14 18:17:18 +02:00
Vlad Zahorodnii
e06f83717c Don't use MESA_EGL_NO_X11_HEADERS
Summary:
With recent Mesa updates (19.2.1), MESA_EGL_NO_X11_HEADERS doesn't have
any effect. So, let's include fixx11h.h instead.

Test Plan: I am able to build kwin once again.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D24840
2019-10-21 22:18:30 +03:00
Vlad Zahorodnii
f93875535c Update my last name 2019-09-29 17:03:25 +03:00
Vlad Zagorodniy
bebe81209c Port QPA away from Wayland
Summary:
So far wayland was used by internal clients to submit raster buffers
and position themselves on the screen. While we didn't have issues with
submitting raster buffers, there were some problems with positioning
task switchers. Mostly, because we had effectively two paths that may
alter geometry.

A better approach to deal with internal clients is to let our QPA use
kwin core api directly. This way we can eliminate unnecessary roundtrips
as well make geometry handling much easier and comprehensible.

The last missing piece is shadows. Both Plasma::Dialog and Breeze widget
style use platform-specific APIs to set and unset shadows. We need to
add shadows API to KWindowSystem. Even though some internal clients lack
drop-shadows at the moment, I don't consider it to be a blocker. We can
add shadows back later on.

CCBUG: 386304

Reviewers: #kwin, davidedmundson, romangg

Reviewed By: #kwin, romangg

Subscribers: romangg, kwin

Tags: #kwin

Maniphest Tasks: T9600

Differential Revision: https://phabricator.kde.org/D22810
2019-09-23 17:28:56 +03:00
Christophe Giboudeaux
265e6367f7 Fix a link error when building kwin. 2019-09-18 11:45:23 +02:00
Vlad Zahorodnii
dcf91d4321 Cleanup style in CMakeLists.txt files
We have lots of inconsistency at the moment in CMakeLists.txt files. Most
of it is due to kwin being a very old project. This change hopefully fixes
all of it.
2019-09-17 16:03:05 +03:00
Laurent Montel
42326f6ded GIT_SILENT: QLatin1Literal->QLatin1String 2019-09-08 21:18:29 +02:00
Vlad Zagorodniy
8af2fa73dc Run clang-tidy with modernize-use-override check
Summary:
Currently code base of kwin can be viewed as two pieces. One is very
ancient, and the other one is more modern, which uses new C++ features.

The main problem with the ancient code is that it was written before
C++11 era. So, no override or final keywords, lambdas, etc.

Quite recently, KDE compiler settings were changed to show a warning if
a virtual method has missing override keyword. As you might have already
guessed, this fired back at us because of that ancient code. We had
about 500 new compiler warnings.

A "solution" was proposed to that problem - disable -Wno-suggest-override
and the other similar warning for clang. It's hard to call a solution
because those warnings are disabled not only for the old code, but also
for new. This is not what we want!

The main argument for not actually fixing the problem was that git
history will be screwed as well because of human factor. While good git
history is a very important thing, we should not go crazy about it and
block every change that somehow alters git history. git blame allows to
specify starting revision for a reason.

The other argument (human factor) can be easily solved by using tools
such as clang-tidy. clang-tidy is a clang-based linter for C++. It can
be used for various things, e.g. fixing coding style(e.g. add missing
braces to if statements, readability-braces-around-statements check),
or in our case add missing override keywords.

Test Plan: Compiles.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: davidedmundson, apol, romangg, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22371
2019-07-22 20:03:22 +03:00
Vlad Zagorodniy
bb6d1153f7 [plugins/qpa] Return a fixed value logicalDpi
Summary:
Font scaling is based on the screen scale factor so we can just return
dpi of 96.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22219
2019-07-02 22:32:39 +03:00
Vlad Zagorodniy
c8280963e5 [plugins/qpa] Code tidying
Summary: This change cleans up includes, fixes coding style issues, etc.

Test Plan: Compiles.

Reviewers: #kwin, romangg

Reviewed By: #kwin, romangg

Subscribers: romangg, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22151
2019-07-01 22:04:45 +03:00
Vlad Zagorodniy
f5b66a583d [plugins/qpa] Implement native offscreen surface
Summary:
Depending on whether the underlying platform supports offscreen surfaces,
QOffscreenSurface may create an invisible QWindow. In our case that's the
case, for each offscreen surface a native window is created. This may
lead to some funky results related to window decorations, see bug 407612.

There are several ways to implement offscreen surfaces - either use pbuffers
or utilize a surfaceless context extension. For the sake of simplicity
this change sticks with pbuffers, but it's a good idea to support both
methods.

CCBUG: 407612

Reviewers: #kwin, romangg

Reviewed By: #kwin, romangg

Subscribers: romangg, alexeymin, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22150
2019-07-01 22:04:40 +03:00
Vlad Zagorodniy
22d70d0c56 [plugins/qpa] Split out EGL helpers
Summary: This change is a prerequisite for adding offscreen surface support.

Reviewers: #kwin, romangg

Reviewed By: #kwin, romangg

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22196
2019-07-01 21:42:18 +03:00
Erik Kurzinger
a1e8541b49 [qpa] Don't specify EGL_SURFACE_TYPE when choosing EGLConfig
Summary:
Since QPA only performs off-screen rendering, it does not require an EGLConfig
that supports any particular surface type.  Currently it requests a config
supporting window surfaces, however the EGLDeviceEXT platform, which is the
basis of the EGLStream back-end used with the proprietary NVIDIA driver, does
not support such surfaces resulting in eglChooseConfig not returning any valid
configs when that back-end is in use. Since QPA doesn't actually create any
window surfaces, it should be fine to remove this restriction to allow it to
initialize properly with the EGLStream back-end.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin, davidedmundson

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D20455
2019-04-11 07:43:31 -07:00
Jimi Huotari
3cc39ba35e Fix plugins/qpa build with Qt 5.13
Summary:
Upstream moved screen maintenance functions from
QPlatformIntegration to QWSI.

BUG: 406056
See also: https://code.qt.io/cgit/qt/qtbase.git/commit/?h=5.13&id=01e1df90

Test Plan: Built fine with Qt 5.12.2 and Qt 5.13 stable branch.

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: zzag, arojas, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D20239
2019-04-04 01:17:59 +02:00
Martin Flöser
e48d9df14f [qpa] Drop PlatformContextWayland which uses wayland egl for OpenGL
Summary:
Using the Wayland protocol for OpenGL is no longer used or useful. KWin
internal windows only use OpenGL through QtQuick. We either have the
sharing context (KWin uses OpenGL for compositing) or we have the
QPainter compositor which also turns QtQuick to use software renderer.

Thus a situation where the Wayland platform context is useful doesn't
exist any more. Removing it helps getting the QPA plugin Wayland free.

Test Plan:
Run nested KWin triggering Outline once with OpenGL and once
with QPainter compositor.

Reviewers: #kwin

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19012
2019-02-22 16:57:29 +01:00
Martin Flöser
1d8d7bd9f7 [qpa] Set binary output path for QPA plugin
Summary: Required for kwin_wayland to find it's own plugin.

Test Plan: My kwin_wayland was crashing and gdb showed wrong plugin being loaded

Reviewers: #kwin

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19010
2019-02-17 20:09:23 +01:00
David Edmundson
2df9d22a08 Add high DPI support to internal KWin windows
Summary:
So far we didn't try to do high DPI on kwin internal windows, such as
the user context menu and tab bars and whatever.

Due to wayland scaling they were the correct phyiscal size but upscaled.
This patch fixes our QPA to enable Qt's high-dpi support.

BUG: 402853

Note icons are still low res. This is because the global
QGuiApplication::devicePixelRatio which is the max of all connected
screens is static for the duration of the app. QIcon uses this when
determining the DPR to use. This will require a Qt change.

Test Plan:
Ran at 2x on my normal DPI screen (as that's easier to see anything)
* User action menu is high DPI
* Window deco tooltips are still fine
* Tab switcher is high DPI
* Overlay in present windows Desktop grid are still ok

Reviewers: #kwin

Subscribers: zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18042
2019-01-14 13:59:05 +00:00
David Edmundson
bbb67f2675 [plugins/qpa] Commit wl_surface when flipping FBOs
Summary:
Even though the buffer is passed through a side channel some properties
we might use are double-buffered on the surface commit.

Test Plan: Used by unit test InternalWindowTest::testScale in linked commit

Reviewers: #kwin, graesslin

Reviewed By: #kwin, graesslin

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18085
2019-01-08 15:51:47 +00:00
Volker Krause
3bb07ef12d Bring FindFontconfig.cmake up to ECM standards
Summary:
This is a preparation step to move this to ECM (or possibly CMake),
which makes sense now that qtbase is using this too (for Qt6).

Reviewers: #build_system, cgiboudeaux

Reviewed By: cgiboudeaux

Subscribers: cgiboudeaux, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D17547
2018-12-18 18:11:11 +01:00
Frederik Gladhorn
456cbb9bf7 Remove unused private Qt include
Summary:
Ideally KWin would not depend on private headers... but at least we can
remove unused ones.

Test Plan: still builds, I don't see anything requiring the header.

Reviewers: zzag

Reviewed By: zzag

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D16655
2018-11-04 17:02:19 +01:00
Frederik Gladhorn
503661579f Remove unused FindQt5PlatformSupport.cmake
Summary: This file was required for Qt 5.8. We require 5.11 as minimum version.

Test Plan: Grepped for the file being used in other cmake code, rebuilt KWin without it.

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: kwin, zzag

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D16654
2018-11-04 17:01:49 +01:00
David Edmundson
6724955a76 [qpa] Always keep a at least one screen
Summary:
Qt does not like having no screens. Both Qt XCB and Wayland QPAs have
systems pretend there's always at least 1 screen
present.

Kwin already uses a dummy screen on startup, this patch reinserts the
dummy screen if the platform states that all real screens are removed.

BUG: 399564

Test Plan:
Logged in, everything still worked
Did not reproduce the original bug

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D16096
2018-10-10 11:14:13 +01:00
David Edmundson
0b7778f964 [plugins/qpa] Add explanatory comment 2018-10-05 14:38:55 +01:00
David Edmundson
6ebfa59331 [plugins/qpa] Don't crash on Qt5.12 OpengGL::makeCurrent
Summary:
QOpenGLContext was changed to call platform->makeCurrent before it
called setCurrentContext.

Because we bind window FBO and ultimately that calls
QOpenGlContext::format we need Qt to know which context is current so it
can tell us the format.

This matches the QtWayland EGL code.

BUG: 399392

Test Plan:
Switched virtual desktop with the OSD (previously reliably crashed)
Now it doesn't

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D15957
2018-10-05 14:04:09 +01:00
David Edmundson
a3cff85e7a Remove Qt module declarations in includes
Summary:
Test Plan: Compiles

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D13359
2018-06-05 18:07:23 +01:00
Eike Hein
2c26215d7e Request a high-priority EGL contexts
Summary:
This patch implements using EGL_IMG_context_priority to request
high-priority rendering contexts if the extension is available.

EGL_IMG_context_priority is currently used in this fashion by
e.g. Android's SurfaceFlinger (RenderEngine.cpp) and libweston
(gl-renderer.c) and seems promising given this widespread
acceptance.

Reviewers: #kwin, graesslin, romangg, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D11572
2018-03-29 20:34:22 +09:00
Bhushan Shah
3fa287280b Fix the build on armhf/aarch64
Summary:
qopengl.h redeclares the functions defined in the epoxy/gl.h and it
results in the build error. this is similar to other .cpp files where
epoxy/gl.h is used.

See: https://build.neon.kde.org/job/xenial_unstable_plasma_kwin_bin_armhf/157

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: plasma-devel, kwin, #kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D10762
2018-03-06 09:25:33 +05:30
Martin Flöser
a5b17b2228 Require Qt 5.9
Reviewers: #kwin, #plasma

Subscribers: plasma-devel, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D8331
2017-10-31 12:45:21 +01:00
Martin Flöser
abedb464d5 [QPA] Implement Screen on top of internal Screens API
Summary:
The test DontCrashUseractionsMenu (Waylandonly) found an issue in our
screen handling implementation in the QPA. The code exposed a short time
frame between the dummy screen getting destroyed and the first screen
being added. This could result in a crash of KWin.

There is actually no need to implement Screen on top of Wayland screen.
KWin has all the knowledge, so we can also base this on top of the
Screens API.

Advantages:
 * no delays due to Wayland roundtrips
 * handle screen getting removed (was a TODO)
 * handle resolution changes (was a TODO)

The new implementation has a disadvantage that it destroys and readds
all screens whenever something around the screen changes. This shouldn't
be an issue in practice as it's only for the internal QPA and thus only
affects KWin internal windows which is placed in global coordinates
anyway. If it turns out to be a problem we need to track better the
screen changes - so far those were not tracked at all.

Test Plan: Run a few unit tests which change screens

Reviewers: #kwin, #plasma

Subscribers: plasma-devel, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D8345
2017-10-19 18:03:10 +02:00
Martin Gräßlin
e713df1886 [plugins/qpa] Drop unused variable AbstractPlatformContext::m_integration
Credits to clang for finding unused private variable. This allowed to
similify the ctor and remove a const_cast.
2017-07-31 18:09:15 +02:00
Martin Gräßlin
f5845fec02 [plugins/qpa] Properly ifdef everything with HAVE_WAYLAND_EGL
Hide variables which are only used with wayland egl and mark attributes
as unused if they are not used without having wayland egl.
2017-07-31 18:04:53 +02:00
Martin Flöser
acedee21a5 [qpa] Fix overloaded-virtual warning 2017-07-30 08:22:32 +02:00
Martin Flöser
73fa7b21a1 [qpa] Use the new OpenGLContextAttributeBuilder to create Qt's OpenGL context
Summary:
Introduces a few more attributes needed for creating the OpenGL context
used by the QPA.

Test Plan:
Extended test and run KWin/Wayland and verified that OpenGL context
gets created correctly.

Reviewers: #kwin, #plasma

Subscribers: plasma-devel, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D6734
2017-07-17 16:53:37 +02:00
Martin Flöser
962a2e39ee [qpa] Prevent crash due to Surface getting null
Summary:
This is a regression due to changes in Breeze to support Qt 5.8+ behavior
change. KWin's own QPA operates like < Qt 5.7 and breeze was programmed
against that. Due to that it can happen now that Breeze hits code paths
in which KWin does not have a surface.

To trigger one only needed to open the user actions menu twice.

This change adds a test case which simulates the problem and fixes all
crashes happening in the code path.

Most likely shadows are now broken for KWin's own windows, this change is
only to prevent the crash and thus is for 5.10 branch, while shadow
fixing will go to master branch.

BUG: 382063
FIXED-IN: 5.10.4

Test Plan: New test case

Reviewers: #kwin, #plasma

Subscribers: plasma-devel, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D6533
2017-07-06 19:14:15 +02:00
David Edmundson
80f21064f1 Merge branch 'scaling' 2017-04-29 14:11:13 +01:00
David Edmundson
8ef184e1cd Implement high DPI support in KWin QPA
Summary: Basically just a copy and paste from the relevant Qt Wayland
parts.

Reviewers: #plasma

Subscribers: plasma-devel

Tags: #plasma

Differential Revision: https://phabricator.kde.org/D5172
2017-04-28 10:23:14 +01:00
Martin Gräßlin
ac08c5ac9d [plugins/qpa] Do not replace a valid FBO with an invalid one
Summary:
With the TabBox I observed the following issue:
 1: trigger TabBox through screen edge
 2: exit TabBox
 3: trigger TabBox again through screen edge

Actual behavior: in step 3 the GUI does not show. If now using Alt+Tab
to show the TabBox the gui shows, but through screen edge it stays
broken.

Investigation showed that the difference is a direct show in screen edge
case and a delayed show in Alt+Tab case. Futher investigation shows that
an invalid geometry gets requested in the broken case. While this might
indicate an issue in another area it makes sense to protect KWin
internally against it and not to break rendering.

Thus this change ensures that a valid FBO does not get replaced by an
invalid sized FBO.

Test Plan:
Tested that Alt+Tab works correctly when triggered through
edge

Reviewers: #kwin, #plasma

Subscribers: plasma-devel, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D5438
2017-04-22 08:17:33 +02:00
Martin Gräßlin
16647c3a3c Require Qt 5.7 and remove pre-5.7 code
Summary:
Increases minimum Qt version to 5.7. This allows to drop the pre-5.7
virtual keyboard and various ifdefs for now unsupported versions.

Reviewers: #kwin, #plasma

Subscribers: plasma-devel, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D4485
2017-02-07 20:43:19 +01:00
Takahiro Hashimoto
052fa2e4ee [plugins/qpa] support use of modularized qtplatformsupport from Qt 5.8
REVIEW: 129268
2016-10-28 21:12:48 +09:00