Commit graph

561 commits

Author SHA1 Message Date
Martin Gräßlin
d49fba5d30 [libkwinxrenderutils] Clean up static blend picture before going down
Summary:
The method xRenderBlendPicture created a static XRenderPicture on
first usage. To cleanup a XRenderPicture an xcb_connection_t* is needed.
As it's static the cleanup happens on exit handler and at that time Qt
already destroyed the xcb_connection_t*. With a certain chance this will
crash.

To expose the problem a Q_ASSERT(qApp) is added in the destructor of
XRenderPicture. Using xrenderBlendPicture() will hit this assert on
application exit. This is demonstrated by the added auto test.

The actual fix to the problem is moving the static variable out of
the method and introduce a global cleanup method just like the init
method. This is now called from Workspace dtor, so before application
goes down.

CCBUG: 363251

Reviewers: #plasma

Subscribers: plasma-devel

Tags: #plasma

Differential Revision: https://phabricator.kde.org/D1731
2016-06-13 15:29:07 +02:00
Martin Gräßlin
81b81f43df Merge branch 'Plasma/5.6' 2016-06-02 08:54:02 +02:00
Anthony Fieroni
c3cd8df795 Be sure isCurrentTab returns true
REVIEW: 127985

Signed-off-by: Anthony Fieroni <bvbfan@abv.bg>
2016-06-01 20:46:35 +03:00
Martin Gräßlin
ea4de85553 Destroy static Client helper window before application goes down
Summary:
Client uses a static Xcb::Window helper. This so far didn't get
explicitly destroyed, so the application finalize cleaned it up.
To destroy the window the xcb_connection_t* is used which the
QGuiApplication already destroyed.

This change ensures that the window gets destroyed before the xcb
connection gets destroyed.

In addition an assert is added to KWin::connection() to ensure that
we still have the QGuiApplication::instance() when it's invoked.
This way we'll notice if we have more cases where we call into xcb
after the application went down.

Reviewers: #plasma

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1573
2016-05-17 14:17:07 +02:00
Kai Uwe Broulik
320eabc8c2 Add KRunner and Activity Manager screen edge
Allows to toggle Activity Manager and bring up KRunner by hitting the configured screen edge.

BUG: 358627
BUG: 245979

Differential Revision: https://phabricator.kde.org/D1105
2016-05-08 16:53:48 +02:00
Marco Martin
a9fad7396e use a global static for animation ids
using stack adresses makes it possible (even tough not frequent)
for two animations (onle just killed, one just created) to have
the same id, causing scripts to be potentially really confused.
this replaces the id with a global counter, and the
"flying tooltips" bug is gone.

REVIEW:127276
BUG:360068
CCBUG:352254
2016-03-23 12:03:31 +01:00
Marco Martin
595c5937c9 use a global static for animation ids
using stack adresses makes it possible (even tough not frequent)
for two animations (onle just killed, one just created) to have
the same id, causing scripts to be potentially really confused.
this replaces the id with a global counter, and the
"flying tooltips" bug is gone.

REVIEW:127276
BUG:360068
CCBUG:352254
2016-03-04 18:19:40 +01:00
Thomas Lübking
5ee90dce3d fix validation cnp bugs
pushed wrong branch, this fixes the unguarded
from resolution in the to branches

REVIEW: 126981
2016-02-16 15:08:21 +01:00
Thomas Lübking
1faa8aa039 allow to retarget animations 2016-02-16 13:59:22 +01:00
Thomas Lübking
07cc30d136 protect against cancel of just ended animations 2016-02-16 13:58:24 +01:00
Kevin Funk
a33c2730ba AnimationEffect: Fix memory leak
Detected by ASAN

```
Direct leak of 144 byte(s) in 6 object(s) allocated from:
    #0 0x4dc922 in operator new(unsigned long)
(/home/kfunk/devel/install/kf5/bin/kwin_x11+0x4dc922)
    #1 0x7f43dc33d019 in KWin::AnimationEffect::AnimationEffect()
/home/kfunk/devel/src/kf5/kwin/libkwineffects/kwinanimationeffect.cpp:50:44
    #2 0x7f43dbb63e9a in KWin::ScriptedEffect::ScriptedEffect()
/home/kfunk/devel/src/kf5/kwin/scripting/scriptedeffect.cpp:422:1
    #3 0x7f43dbb60513 in KWin::ScriptedEffect::create(QString const&,
QString const&, int)
/home/kfunk/devel/src/kf5/kwin/scripting/scriptedeffect.cpp:407:30
    #4 0x7f43dbb5fcbb in KWin::ScriptedEffect::create(KPluginMetaData
const&)
/home/kfunk/devel/src/kf5/kwin/scripting/scriptedeffect.cpp:402:12
    #5 0x7f43db955fa3 in
KWin::ScriptedEffectLoader::loadEffect(KPluginMetaData const&,
QFlags<KWin::LoadEffectFlag>)
/home/kfunk/devel/src/kf5/kwin/effectloader.cpp:242:25
    #6 0x7f43db9994bf in
KWin::EffectLoadQueue<KWin::ScriptedEffectLoader,
KPluginMetaData>::dequeue()
/home/kfunk/devel/src/kf5/kwin/effectloader.h:257:9
    #7 0x7f43dbf0e2bd in
KWin::AbstractEffectLoadQueue::qt_static_metacall(QObject*,
QMetaObject::Call, int, void**)
/home/kfunk/devel/build/kf5/kwin/moc_effectloader.cpp:179:17
    #8 0x7f43d54de7b0 in QObject::event(QEvent*)
(/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2b67b0)
    #9 0x7f43d5da39db in QApplicationPrivate::notify_helper(QObject*,
QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x15b9db)
```

Differential Revision: https://phabricator.kde.org/D942
2016-02-15 17:42:32 +01:00
Thomas Lübking
db5a798952 depend glsl on TextureNPOT, not LimitedNPOT
The idea was to block shaders that operate on
Texture2D while Texture2DRectangle was use, but
that's indeed controlled by TextureNPOT while
LimitedNPOT indicates Texture2D but without support
for mipmapping and exotic clamping

FIXED-IN: 5.6
REVIEW: 126959
2016-02-02 11:06:37 +01:00
Kevin Funk
8ea4f4dae7 Port to CMake AUTOMOC
Summary: Run convert-to-cmake-automoc.pl over all .cpp files

Differential Revision: https://phabricator.kde.org/D882
2016-02-01 21:05:36 +01:00
Martin Gräßlin
1fb0c31bb4 [kwineffects] Expose fullScreen property in EffectWindow
Also copied to Deleted.
2016-02-01 08:43:46 +01:00
Martin Gräßlin
613d76f2df [effects] Combine all shaders in resources
One resource is used for shader version 1.10 and one for version 1.40.

The ideas behind this change is to remove the locating of the shader
sources and also to fix that user provided shaders could be loaded
instead of the original ones (possible attack vector on Wayland).

To simplify the ShaderManager provides a new method call to load the
shader from the resource. This means the effects don't need to
duplicate the check for the shader version any more and also don't
need to duplicate the file reading functionality.

REVIEW: 126905
2016-02-01 08:42:30 +01:00
Martin Gräßlin
54870d5e14 [libkwinglutils] Cleanup Shader API: removal of ShaderType
As all effects are ported to the ShaderTraits API the old ShaderType
API can be completely removed.
2016-01-26 09:42:49 +01:00
Martin Gräßlin
2e7bc0df87 [kwineffects] Pass screen projection matrix to EffectFrame
Exposes the current screen projection matrix in the render pass of
the EffectFrame, so that effects can make use of it.
2016-01-25 14:11:54 +01:00
Martin Gräßlin
ef7f7b0179 [kwinglutils] Don't setup old shader API for rendering a texture
Old shader API no longer in use, so we don't need to setup the texture
rendering.
2016-01-25 14:11:54 +01:00
Martin Gräßlin
4b11b7b6b8 [kwineffects] Add a generateCustomShader to ShaderManager
This method allows to generate a shader with ShaderTraits but one
part (e.g. vertex and/or fragment) to be replaced by custom shader
code.

Thus it can be used as a replacement for the load*(ShaderType) variants
and allows more effects to transition to shaders using traits.
2016-01-25 14:11:54 +01:00
Martin Gräßlin
3be6ff9f12 [kwineffects] Pass screen projection matrix to WindowPaintData
The screen projection matrix is needed if an effect wants to customize
the modelview projection matrix while rendering a window and keeping
the currently applied screen projection and transformation.
2016-01-25 14:11:54 +01:00
Martin Gräßlin
f284ef814c Pass projection matrix to ScreenPaintData
With this change a new ctor overload is added to ScreenPaintData
which allows passing a projection matrix through the effects. This
allows effects to put up custom shaders with a shared projection matrix
and without having to calculate it themselves.

The projection matrix is a read-only information for the effects. There
is no way to change or overwrite it.
2016-01-25 14:11:54 +01:00
Martin Gräßlin
778a7fd1a0 [kwinglutils] Add a ShaderTraits variant to ShaderBinder
Simplifies binding a Shader with traits.
2016-01-25 14:11:54 +01:00
Thomas Lübking
c7aefc6b6b skip SWAP_BEHAVIOR_PRESERVED for supportsBufferAge
pointless and unsupported on latter MESA/DRI3
http://lists.freedesktop.org/archives/mesa-dev/2015-November/100869.html

Thanks to Uriy Zhuravlev for reporting and investigation

BUG: 356992
CCBUG: 356882
FIXED-IN: 5.5.4
REVIEW: 126783
2016-01-18 22:32:10 +01:00
Michael Pyne
bcc36b87fb Avoid undefined behavior in nearestPowerOfTwo.
The way nearestPowerOfTwo is currently defined allows for the possibility of
left-shifting an int by 32 bits or more, which is undefined behavior on
platforms where int is 32 bits, and is something that can happen here if `s`
is equal to 31 by the end of the loop. Noted by Coverity as CID 1291191.

This patch takes an algorithm to perform the same operation from Hank Warren
Jr.'s book "Hacker's Delight", which should avoid UB.

REVIEW:126540
2015-12-28 17:08:15 -05:00
Martin Gräßlin
416d8060cf Don't query for GL_CONTEXT_FLAGS if not at least OpenGL 3.0
Patch by Thomas Lübking.

BUG: 355522
2015-11-19 11:20:33 +01:00
Martin Gräßlin
01451eea36 Revert "Handle conflicts between epoxy and manually resolved function pointers"
This reverts commit ac1dbac8b1.
2015-11-17 14:58:59 +01:00
Martin Gräßlin
1d75cd26fb Verify that context is robust before resolving robust functions
The extensions specify that you are only allwoed to use the robust
functions if the context is robust. Given that we need to query
whether the robust is context and fall back to our workaround if
the context is not robust.

REVIEW: 126051
2015-11-16 09:08:14 +01:00
Martin Gräßlin
bcf76c0d2f [libkwinglutils] Fix regression in OpenGL version parsing
QByteArray seems to not like a truncate or left with -1.

Reviewed-By: Rohan Garg
2015-11-12 17:14:36 +01:00
Martin Gräßlin
ac1dbac8b1 Handle conflicts between epoxy and manually resolved function pointers
For the functions from GL_FOO_robustness we want to resolve it by
ourselves in order to add a custom implementation if it's not available.
Unfortunately once epoxy.h is included this breaks as epoxy defines the
names and so through the preprocessor epoxy always wins.

So we need different names: all functions from robustness get a "kwin"
prefix and the usage is changed everywhere in kwin source code.

REVIEW: 125883
2015-11-11 08:04:29 +01:00
Nick Shaforostoff
3a8d7d866a optimize string operations
-use qstringliteral only when necessary (i.e. not in concat or comparison)
-use qbytearray instead of qstring when dealing with latin1 input and output (glplatform)
-use qstringref to extract numbers from strings (glplatform)
-define qt_use_qstringbuilder to optimize all string concatenations
-anidata: use ctor init lists, add windowType member initialization

REVIEW: 125933
2015-11-05 14:14:06 +00:00
Martin Gräßlin
aa43852301 Remove build checks for gles or gl
Also removes the building of the kwinglesutils, there's only
kwinglutils now.

REVIEW: 125865
2015-11-03 09:29:37 +01:00
Martin Gräßlin
d5a5725db1 Remove remaining compile time checks for OpenGLES 2015-11-03 09:29:31 +01:00
Martin Gräßlin
03231942bb Bind building of glx support on whether epoxy has a glx header
So far it was bound to whether we build for GLES. But this is
semantically wrong. It might be possible that even on desktop gl
epoxy is built without GLX support, thus we need to reflect this.

This change ensures that epoxy/glx.h is only included if available,
that relevant code is bound to it and that checks are in place to
enforce EGL if not build with glx support.

In addtion the glxbackend.cpp is now only included in the build set
if available.
2015-11-03 09:29:31 +01:00
Martin Gräßlin
9919627106 [kwineffects] Runtime checks for GLES in ColorCorrection 2015-11-03 09:29:31 +01:00
Martin Gräßlin
49d8502567 [kwineffects] Runtime depend on gles in GLPlatform 2015-11-03 09:29:31 +01:00
Martin Gräßlin
fc2805d218 Turn compile time checks to runtime check in kwinglutils.cpp
Only those which truly are different are kept as compile time checks.
In addition the index buffer is made available to GLES as in principle
all required functionality is available on gles.

REVIEW: 125865
2015-11-03 09:29:31 +01:00
Martin Gräßlin
99ddcfbac0 [glplatform] Ensure glsl is supported with OpenGLES
No matter what our checks say on OpenGLES we have shaders.
2015-11-03 09:29:31 +01:00
Martin Gräßlin
1170303fc6 [kwineffects] Runtime detect whether we are on GLES in GLPlatform
We detect from OpenGL version string whether we are on OpenGL ES
instead of using a compile time check.
2015-11-03 09:29:31 +01:00
Martin Gräßlin
5d37ccfce0 Drop PreventScreenLocking electric border
It was broken on so many ways, it's unbelievable:
* action was read but did nothing
* config was saved into a different file than read from

REVIEW: 125701
CCBUG: 331841
2015-10-21 08:14:50 +02:00
Martin Gräßlin
c408e9ccec Drop remaning code for ShowDashboard
Removes the ElectricAction for ShowDashboard and the relevant code
in screenedges and the KCM.

Also a leftover in the glide effect.

REVIEW: 125700
BUG: 353928
2015-10-21 08:12:01 +02:00
Martin Gräßlin
0c448f2ed2 Merge branch 'Plasma/5.4' 2015-09-14 16:52:06 +02:00
Marco Martin
5a55727056 support the slide protocol
take and apply thhe informations from the wayland slide
protocol in the sliding popups effect

REVIEW:125120
2015-09-14 16:39:39 +02:00
Martin Gräßlin
5fb67414d2 [libkwineffects] Proper no-size check in WindowQuadList::splitAt(X|Y)
A quad might have a null size in case it has a null width or null height.
Not just one dimension.

BUG: 236353
BUG: 210467
FIXED-IN: 5.4.2
REVIEW: 125131
2015-09-10 10:43:06 +02:00
Marco Martin
3f5bf65a9e Use the kwayland blur protocol in the blur effect
use the new blur protocol to fetch information about the
region of blur behind to apply to windows like Plasma::Dialog
REVIEW:125017
2015-09-02 14:43:44 +02:00
Martin Gräßlin
c24e315a9b Drop build option KWIN_BUILD_EGL
It doesn't make much sense any more as we do no longer link EGL since the
switch to epoxy. And epoxy pulls it in at runtime if needed.
Even more on Wayland it's just plain stupid to have EGL disabled. So
removing the option just simplifies our code base without any
disadvantages.

REVIEW: 124695
2015-08-11 11:15:25 +02:00
Martin Gräßlin
57c521c214 [libkwineffects] Introduce logging categories for libkwineffects 2015-07-31 12:16:15 +02:00
Aleix Pol
6f345f4915 Clean debug output
Removes endl in the end of qDebug.
Removes the \n in the end of opengl output.

REVIEW: 124320
2015-07-20 13:36:27 +02:00
Martin Gräßlin
c31bb6d46f Drop KF5::Service dependency where it's no longer needed 2015-07-07 09:53:48 +02:00
Nerdopolis Turfwalker
924b66c4d5 Check whether it's platform xcb before calling QX11Info::display()
Internally QX11Info::display() calls into QPA native interface and
tries to resolve the nativeResourceForIntegration for "display".
Unfortunately this key also exists in other QPA plugins, e.g. in
QtWayland.

Calling without a check on platform results on wayland qpa in
wl_display* being casted into Display*.

REVIEW: 124203
2015-06-29 13:56:56 +02:00
Martin Gräßlin
59a6c9ddf9 [libkwineffects] OpenGL ES 3.0 supports glBlitFramebuffer 2015-06-24 09:39:02 +02:00