29f1ee3858
Summary: There was an unidentified bug where when opening a context menu in response to a mousePress event led to the next click events not being registered. The mouse got grabbed by the item in the mousePressEvent, but when we open a menu it didn't get released. The next click goes to the currently grabbed item. A workaround was added back in 2015 (and copied into various other parts of Plasma) to ungrab the mouse after launching the context menu inside our rightClickEvent. This doesn't work because qquickwindow code is shuffled. It now sends the event and then grabs the mouse. qquickwindow.cpp:653 on Qt5.8.0 Which means we're now trying to do the ungrab, before QWindow has set our item as the grabber. That obviously doesn't work. This real bug needs fixing in Qt, (I now know the root cause!) but we have a workaround here already, we may as well make it work. FWIW, the root cause of all of these bugs is: The way it should work is: QQuickItem is pressed QtQuick internally says "this item has the mouse" you release the mouse, that gets reset you change window focus, that gets reset In our case, we don't get either of the last two because: We spawn a QMenu on mousePress; this takes focus and more importantly does a mouse grab (a different type. At an X level, not in QtQuick) so our QQuickWindow never gets a mouseReleaseEvent Test Plan: Had 1 reproducible case Added this. No longer could reproduce Reviewers: #plasma Subscribers: plasma-devel, #frameworks Tags: #plasma, #frameworks Differential Revision: https://phabricator.kde.org/D5515 |
||
---|---|---|
autotests | ||
docs | ||
examples | ||
src | ||
templates | ||
tests | ||
.arcconfig | ||
.reviewboardrc | ||
CMakeLists.txt | ||
COPYING | ||
COPYING.LIB | ||
ExtraDesktop.sh | ||
KF5PlasmaConfig.cmake.in | ||
KF5PlasmaMacros.cmake | ||
metainfo.yaml | ||
README.md |
Plasma Framework
Foundational libraries, components, and tools of the Plasma workspaces
Introduction
The plasma framework provides the following:
- QML components
- A C++ library: libplasma
- Script engines
QML components
org.kde.plasma.core
Bindings for libplasma functionality, such as DataEngine and FrameSvg, see @ref core.
org.kde.plasma.components
Graphical components for common items such as buttons, lineedits, tabbars and so on. Compatible subset of the MeeGo components used on the N9, see @ref plasmacomponents.
org.kde.plasma.extras
Extra graphical components that extend org.kde.plasma.components but are not in the standard api, see @ref plasmaextracomponents.
org.kde.plasma.plasmoid
Attached properties for manipulating the current applet or containment, see @ref libplasmaquick
libplasma
This C++ library provides:
- rendering of SVG themes
- loading of files from a certain filesystem structure: packages
- data access through data engines
- loading of the plugin structure of the workspace: containments and applets
See @ref libplasma.
Script engines
Provides support to create applets or containments in various scripting languages.