Go to file
David Edmundson 29f1ee3858 Update the ungrabMouse hack for Qt 5.8
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
2017-04-24 16:06:51 +01:00
autotests IconItem: Add roundToIconSize property 2017-02-28 11:18:17 +01:00
docs Rename docs/plasmapkg directory to docs/plasmapkg2 2016-06-13 15:55:56 +02:00
examples SVN_SILENT made messages (.desktop file) - always resolve ours 2017-04-14 03:57:03 +02:00
src Update the ungrabMouse hack for Qt 5.8 2017-04-24 16:06:51 +01:00
templates SVN_SILENT made messages (.desktop file) - always resolve ours 2017-04-14 03:57:03 +02:00
tests [PlasmaComponents Menu] Add maximumWidth property 2017-01-25 18:02:33 +01:00
.arcconfig Introduce .arcconfig file for better integration with phabricator.kde.org 2016-08-02 18:22:51 +02:00
.reviewboardrc Fix .reviewboardrc syntax 2014-06-02 17:39:23 +01:00
CMakeLists.txt Generate plugins.qmltypes files for the plugins we install 2017-04-10 15:09:57 +02:00
COPYING Add COPYING and COPYING.LIB files 2013-12-23 18:39:10 +00:00
COPYING.LIB Add COPYING and COPYING.LIB files 2013-12-23 18:39:10 +00:00
ExtraDesktop.sh i18n: translate kdevtemplate for qml-plasmoid too 2016-10-08 14:25:03 +02:00
KF5PlasmaConfig.cmake.in GIT_SILENT add missing include(CMakeFindDependencyMacro) 2017-01-04 00:58:38 +01:00
KF5PlasmaMacros.cmake Remove unavailable ServiceTypes 2017-01-17 14:57:46 +01:00
metainfo.yaml Add FreeBSD to metainfo.yaml. 2016-11-23 20:39:07 +01:00
README.md Add/update first line of README.md to be a short description, useful for inqlude 2015-07-27 19:41:21 +02:00

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.