kwin/scripting
David Edmundson d485dfe7ef Avoid crash with on scripted window teardown with threaded quick render loop
Summary:
Qt render loops behave quite differently to each other.

KWin scripting as a workaround for another situation cleans
(17553e5a1f) handles tracking of script
windows by deleting the underlying window handle on hide.

This currently happens before the window gets the hideEvent.

Arguably this is a quirk with Qt, but in the current state:

- QSGThreadedRenderLoop deletes the platform window and cleans up
- We then get the hide() event. This no-ops because there's no window.
   (else branch of     case WM_TryRelease in qsgthreadedrenderloop.cpp)
- We carry on rendering animations despite having no platform
- undefined behaviour

Normally this isn't a problem as typically destruction of the platform window
happens only when a window is being deleted, we're messing with Qt
internals here.

If we make sure the QHideEvent is processed by the render loop first,
things seem fine.

BUG: 397767

Test Plan:
Ran QSG_RENDER_LOOP=threaded
Read output with scenegraph logging rules on

Reviewers: #kwin, broulik

Reviewed By: broulik

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D15025
2018-09-13 10:19:12 +01:00
..
CMakeLists.txt -Wmissing-include-dirs 2015-03-22 22:36:26 +01:00
dbuscall.cpp New QML Type DBusCall 2013-08-13 09:57:51 +02:00
dbuscall.h New QML Type DBusCall 2013-08-13 09:57:51 +02:00
documentation-effect-global.xml export AnimationEffect::set and ::cancel to script 2013-03-28 19:47:30 +01:00
documentation-global.xml Allow configuring script's screen edges from the KCM 2016-10-07 15:20:14 +01:00
genericscriptedconfig.cpp optimize string operations 2015-11-05 14:14:06 +00:00
genericscriptedconfig.h Drop our custom KLocalizedTranslator 2014-06-18 15:02:58 +02:00
genericscriptedconfig.json [kwin] Fix genericscripted config 2014-03-19 08:00:28 +01:00
kwinscript.desktop SVN_SILENT made messages (.desktop file) - always resolve ours 2017-09-27 09:13:10 +02:00
Messages.sh Fix message extraction 2018-05-20 08:14:50 +03:00
meta.cpp Fix no cast to/from ASCII intrduced issues 2013-07-24 09:58:33 +02:00
meta.h Export Toplevel to KWin::Scripts 2013-02-14 08:16:19 +01:00
screenedgeitem.cpp Add support for new touch screen edge actions to declarative KWin scripts 2017-04-07 16:17:48 +02:00
screenedgeitem.h Add support for new touch screen edge actions to declarative KWin scripts 2017-04-07 16:17:48 +02:00
scriptedeffect.cpp [scripting] Fix effect.animate() curve argument being actually used 2018-08-07 21:33:29 +01:00
scriptedeffect.h [scripting] Fix effect.animate() curve argument being actually used 2018-08-07 21:33:29 +01:00
scripting.cpp Avoid crash with on scripted window teardown with threaded quick render loop 2018-09-13 10:19:12 +01:00
scripting.h Remove Qt module declarations in includes 2018-06-05 18:07:23 +01:00
scripting_logging.cpp pedantic fixes 2016-07-16 13:14:44 -04:00
scripting_logging.h [scripting] Add dedicated logging category 2015-07-31 13:25:51 +02:00
scripting_model.cpp Drop cmakedefine HAVE_WAYLAND 2015-08-12 11:39:20 +02:00
scripting_model.h [scripting] ScriptingClientModel operates on AbstractClient 2015-06-06 18:53:55 +02:00
scriptingutils.cpp
scriptingutils.h Add support for new touch screen callbacks to KWin scripts and scripted effects 2017-04-07 16:18:09 +02:00
timer.cpp Strip module path from all Qt #include <> 2013-03-06 10:26:56 +01:00
workspace_wrapper.cpp Port some displayWidth/displayHeight usages to Screens::size() 2017-09-01 17:11:10 +02:00
workspace_wrapper.h Remove Qt module declarations in includes 2018-06-05 18:07:23 +01:00