summaryrefslogtreecommitdiffstats
path: root/src/gui/graphicsview/qgraphicsitem_p.h
Commit message (Collapse)AuthorAgeFilesLines
* Support for focus scopes: QGraphicsItem::ItemIsFocusScope.Andreas Aardal Hanssen2009-09-151-2/+6
| | | | | | | | | | | | | | | | This feature is essential for Declarative UI, but does not add much value for C++ developers. A FocusScope provides a stack of focused widgets, and it ensures that the topmost item on the stack has focus if any of the items in the stack gains focus. When the topmost loses focus, focus is passed to the "parent" focus scope, and so on. You can get almost the same behavior using panels (ItemIsPanel), except panels impose other behavior, like stopping clickfocus propagation, and stopping event propagation in general. In a QML world you would typically use FocusScope for controlling focus locally, and panels when you need to maintain separate focus stacks. Reviewed-by: akennedy
* Fix update issues in QGraphicsView.Alexis Menard2009-09-151-1/+5
| | | | | | | | | | | | | | | The bug appeared only when calling collidingItems right after setPos. When calling setPos on a parent the sceneTransform is mark as dirty, so when we paint the parent and its children if the scene transform of the parent was dirty then we update all children sceneTransform. In our case here, collidingItems call ensureTransform on one of the children which go recursively to the top most dirty item and update the sceneTransform. The problem is that all sibling children are not mark their sceneTransform dirty so next paint will skip them (since the parent is not dirty anymore). Task-number:260711 Reviewed-by:bnilsen
* Update license headers again.Jason McDonald2009-09-091-4/+4
| | | | Reviewed-by: Trust Me
* Improvements to usage of QMatrix4x4 in QGraphicsItem.Andreas Aardal Hanssen2009-09-031-20/+10
| | | | | | | | | | | This could have been amended to 464ee98eee5ce160b497aec6a1163422980dd797, the idea is that we use QMatrix4x4 only for the QGraphicsTransform instances and QTransform for the rest. The problem with the last submit was that adding any (unrelated) QGraphicsTransform would cause the QGraphicsItem::rotation properties (and friends) to lose precision. Reviewed-by: Olivier Reviewed-by: gabi
* Fix test failure & optimize matrix operations in QGraphicsItem.Andreas Aardal Hanssen2009-09-031-0/+13
| | | | | | | | | | | | | | | | This fixes failures in tst_QGraphicsItem::setTransformProperties(). Change 9e8ff32d introduced QMatrix4x4 as an internal matrix for QGraphicsItem. Problem is, QMatrix4x4 is float-based whereas QTransform is double-based. This change readds the use of QTransform in the case where there are no QGraphicsTransforms in the list. This by itself also makes this common case a bit faster. The workaround is moot if somebody adds any QGraphicsTransform, including one that doesn't do anything (like rotate by 0 degrees). So we might have to find a better fix. Reviewed-by: Olivier
* Make sure the BSP is updated when a graphics effect changes bounding rect.Bjørn Erik Nilsen2009-09-011-0/+3
| | | | | | | | | In the case of applying an effect to a QGraphicsItem, we have to notify the scene's BSP that the item's bounding rect has changed. We do this by calling prepareGeometryChange(). In the case of QWidget, it's sub-optimal that we update its parent, but there's no other way to solve it at the moment.
* Fix activation behavior for panels, and add QGraphicsItem::setActive().Andreas Aardal Hanssen2009-08-311-1/+7
| | | | | | | | | Allow delayed activation for more fine grained control over which panels are activated or left inactive when the scene is created. Autotests included. Reviewed-by: Brad
* Merge branch '4.5' into 4.6Thiago Macieira2009-08-311-13/+13
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: demos/boxes/glshaders.cpp demos/boxes/vector.h demos/embedded/fluidlauncher/pictureflow.cpp demos/embedded/fluidlauncher/pictureflow.h doc/src/desktop-integration.qdoc doc/src/distributingqt.qdoc doc/src/examples-overview.qdoc doc/src/examples.qdoc doc/src/frameworks-technologies/dbus-adaptors.qdoc doc/src/geometry.qdoc doc/src/groups.qdoc doc/src/objecttrees.qdoc doc/src/platform-notes.qdoc doc/src/plugins-howto.qdoc doc/src/qt3support.qdoc doc/src/qtdbus.qdoc doc/src/qtdesigner.qdoc doc/src/qtgui.qdoc doc/src/qtmain.qdoc doc/src/qtopengl.qdoc doc/src/qtsvg.qdoc doc/src/qtuiloader.qdoc doc/src/qundo.qdoc doc/src/richtext.qdoc doc/src/topics.qdoc src/corelib/tools/qdumper.cpp src/gui/embedded/qkbdpc101_qws.cpp src/gui/embedded/qkbdsl5000_qws.cpp src/gui/embedded/qkbdusb_qws.cpp src/gui/embedded/qkbdvr41xx_qws.cpp src/gui/embedded/qkbdyopy_qws.cpp src/gui/embedded/qmousebus_qws.cpp src/gui/embedded/qmousevr41xx_qws.cpp src/gui/embedded/qmouseyopy_qws.cpp src/gui/painting/qpaintengine_d3d.cpp src/gui/painting/qwindowsurface_d3d.cpp src/opengl/gl2paintengineex/glgc_shader_source.h src/opengl/gl2paintengineex/qglpexshadermanager.cpp src/opengl/gl2paintengineex/qglpexshadermanager_p.h src/opengl/gl2paintengineex/qglshader.cpp src/opengl/gl2paintengineex/qglshader_p.h src/opengl/util/fragmentprograms_p.h src/plugins/kbddrivers/linuxis/linuxiskbdhandler.cpp src/plugins/mousedrivers/linuxis/linuxismousehandler.cpp src/script/parser/qscript.g src/script/qscriptarray_p.h src/script/qscriptasm_p.h src/script/qscriptbuffer_p.h src/script/qscriptclass.cpp src/script/qscriptclassdata_p.h src/script/qscriptcompiler.cpp src/script/qscriptcompiler_p.h src/script/qscriptcontext.cpp src/script/qscriptcontext_p.cpp src/script/qscriptcontext_p.h src/script/qscriptcontextfwd_p.h src/script/qscriptecmaarray.cpp src/script/qscriptecmaarray_p.h src/script/qscriptecmaboolean.cpp src/script/qscriptecmacore.cpp src/script/qscriptecmadate.cpp src/script/qscriptecmadate_p.h src/script/qscriptecmaerror.cpp src/script/qscriptecmaerror_p.h src/script/qscriptecmafunction.cpp src/script/qscriptecmafunction_p.h src/script/qscriptecmaglobal.cpp src/script/qscriptecmaglobal_p.h src/script/qscriptecmamath.cpp src/script/qscriptecmamath_p.h src/script/qscriptecmanumber.cpp src/script/qscriptecmanumber_p.h src/script/qscriptecmaobject.cpp src/script/qscriptecmaobject_p.h src/script/qscriptecmaregexp.cpp src/script/qscriptecmaregexp_p.h src/script/qscriptecmastring.cpp src/script/qscriptecmastring_p.h src/script/qscriptengine.cpp src/script/qscriptengine_p.cpp src/script/qscriptengine_p.h src/script/qscriptenginefwd_p.h src/script/qscriptextenumeration.cpp src/script/qscriptextenumeration_p.h src/script/qscriptextqobject.cpp src/script/qscriptextqobject_p.h src/script/qscriptextvariant.cpp src/script/qscriptfunction.cpp src/script/qscriptfunction_p.h src/script/qscriptgc_p.h src/script/qscriptmember_p.h src/script/qscriptobject_p.h src/script/qscriptprettypretty.cpp src/script/qscriptprettypretty_p.h src/script/qscriptvalue.cpp src/script/qscriptvalueimpl.cpp src/script/qscriptvalueimpl_p.h src/script/qscriptvalueimplfwd_p.h src/script/qscriptvalueiteratorimpl.cpp src/script/qscriptxmlgenerator.cpp src/script/qscriptxmlgenerator_p.h tests/auto/linguist/lupdate/testdata/recursivescan/project.ui tests/auto/linguist/lupdate/testdata/recursivescan/sub/finddialog.cpp tests/auto/qkeyevent/tst_qkeyevent.cpp tools/linguist/shared/cpp.cpp
| * Update tech preview license header.Jason McDonald2009-08-311-13/+13
| | | | | | | | Reviewed-by: Trust Me
| * Update license headers.Jason McDonald2009-08-111-1/+1
| | | | | | | | Reviewed-by: Trust Me
* | Merge branch '4.6'Thiago Macieira2009-08-271-2/+2
|\ \ | | | | | | | | | | | | Conflicts: src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
| * | Fix "We mean it." comments in graphicsviewOlivier Goffart2009-08-261-2/+2
| | |
* | | Introduce QGraphicsItem::ItemIsPanel, light-weight window.Andreas Aardal Hanssen2009-08-261-2/+1
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ItemIsPanel allows items that act like windows. They can be activated and deactivated just like windows and focus is handled just like with windows. The main difference is that panels are more light-weight. There's less built-in functionality (e.g., clicking a panel doesn't automatically activate nor raise it). This patch also introduces QGraphicsItem::panel(), QGraphicsItem::isPanel(), and QGraphicsItem::isActive(), as well as QGraphicsScene::activePanel(), QGraphicsScene::setActivePanel(). and QGraphicsScene::isActive(). Regular windows (QGraphicsWidgets with Qt::Window set) are also panels, with added functionality. The ItemIsPanel flag is set automatically for windows. Reviewed-by: brad
* | Merge branch 'master' of git@scm.dev.nokia.troll.no:qt/qt into master-s60axis2009-08-211-1/+79
|\ \ | | | | | | | | | | | | | | | | | | Conflicts: src/gui/graphicsview/qgraphicsitem.cpp src/gui/kernel/qwidget.cpp src/gui/kernel/qwidget_p.h
| * | Cleanup after wrong merge.Bjørn Erik Nilsen2009-08-211-2/+1
| | | | | | | | | | | | | | | | | | ExtraGestures is not in the master branch, and gestures has not been touched in the kinetic-graphicseffect branch so this must be a result of a wrong merge at some point. Remove it.
| * | Merge commit 'qt/master' into kinetic-graphicseffectBjørn Erik Nilsen2009-08-211-8/+11
| |\ \ | | | | | | | | | | | | | | | | Conflicts: src/gui/graphicsview/graphicsview.pri
| * | | Add support for graphics effects on QWidget.Bjørn Erik Nilsen2009-08-201-0/+3
| | | |
| * | | Make QGraphicsItem::effectiveBoundingRect/sceneEffectiveBoundingRect internal.Bjørn Erik Nilsen2009-08-201-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | These shouldn't be in public API unless someone ask for it. The same information is accessible via public functions in QGraphicsEffect and QGraphicsEffectSource, so they are only convenience functions after all.
| * | | Move QGraphicsEffect from src/gui/graphicsview to src/gui/effects.Bjørn Erik Nilsen2009-08-191-1/+2
| | | |
| * | | Merge commit 'qt/master' into kinetic-graphicseffectBjørn Erik Nilsen2009-08-191-4/+6
| |\ \ \ | | | | | | | | | | | | | | | | | | | | Conflicts: src/gui/graphicsview/qgraphicsitem_p.h
| * \ \ \ Merge commit 'qt/master' into kinetic-graphicseffectBjørn Erik Nilsen2009-08-171-1/+3
| |\ \ \ \
| * \ \ \ \ Merge commit 'qt/master' into kinetic-graphicseffectBjørn Erik Nilsen2009-08-071-28/+29
| |\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/gui/graphicsview/graphicsview.pri src/gui/graphicsview/qgraphicsitem.cpp src/gui/graphicsview/qgraphicsitem.h src/gui/graphicsview/qgraphicsitem_p.h src/gui/graphicsview/qgraphicsscene.cpp tests/auto/auto.pro
| * | | | | | Notify QGraphicsEffect whenever the source is invalidated.Bjørn Erik Nilsen2009-08-071-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In case of caching, the effect must be notified whenever the source has been invalidated; otherwise the cached pixmap will not be up-to-date. Auto-test included.
| * | | | | | Fix wrong transform when applying multiple QGraphicsEffects.Bjørn Erik Nilsen2009-08-061-1/+3
| | | | | | |
| * | | | | | Make tst_QGraphicsEffectSource::boundingRect happy.Bjørn Erik Nilsen2009-08-041-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We cannot modify the transformPtr directly because we might want to use the original transform later. The problem in this particular case was that we called source->pixmap() (which modified the transformPtr), then source->boundingRect(Qt::DeviceCoordinates) which in turn used wrong transform to map the bounding rect.
| * | | | | | Notify QGraphicsEffect about source bounding rect changes.Bjørn Erik Nilsen2009-07-311-1/+3
| | | | | | |
| * | | | | | Make sure we don't create pixmaps that are bigger than the device rect.Bjørn Erik Nilsen2009-07-301-0/+9
| | | | | | |
| * | | | | | Merge branch 'kinetic-graphicseffect' of ↵Bjørn Erik Nilsen2009-07-291-1/+3
| |\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | git@scm.dev.nokia.troll.no:qt/kinetic into graphicseffects Conflicts: src/gui/graphicsview/qgraphicseffect.cpp src/gui/graphicsview/qgraphicseffect_p.h
| | * \ \ \ \ \ Merge branch 'kinetic-graphicseffect' of ↵Rhys Weatherley2009-07-241-4/+41
| | |\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | git@scm.dev.nokia.troll.no:qt/kinetic into kinetic-graphicseffect
| | * \ \ \ \ \ \ Merge branch 'custom_shaders' of ../qt-graphics-team into custom-shadersRhys Weatherley2009-07-231-1/+3
| | |\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/gui/graphicsview/qgraphicsitem_p.h
| * | | | | | | | | QGraphicsEffect optimizations for pixmap based items.Bjørn Erik Nilsen2009-07-291-0/+6
| | | | | | | | | |
| * | | | | | | | | Add support for updating the source when bounding rect changes.Bjørn Erik Nilsen2009-07-291-0/+3
| | | | | | | | | |
| * | | | | | | | | Add new enum to global namespace: Qt::CoordinateSystemBjørn Erik Nilsen2009-07-291-2/+2
| | | | | | | | | |
| * | | | | | | | | Remove drawIntoPixmap and implement all the effects with the new API.Bjørn Erik Nilsen2009-07-291-1/+0
| | | | | | | | | |
| * | | | | | | | | add support for passing arbitrary painters intoBjørn Erik Nilsen2009-07-291-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QGraphicsEffectSource::draw
| * | | | | | | | | Add QGraphicsEffectSource::pixmap.Bjørn Erik Nilsen2009-07-291-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We need a convenient way of getting the pixmap representation of the source.
| * | | | | | | | | Add QGraphicsSourceEffect.Bjørn Erik Nilsen2009-07-291-25/+31
| | |_|/ / / / / / | |/| | | | | | |
| * | | | | | | | Make QGraphicsEffect independent of QGraphicsItem.Bjørn Erik Nilsen2009-07-241-4/+41
| |/ / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This makes it possible to basically implement support for graphics effects on pretty much everything, e.g. QWidget. We currently only support effects on QGraphicsItem, but there's more to come :-)
| * | | | | | | Compile after merge commit 8079a0c5b4ee6550501476410fab457d63c705b6Bjørn Erik Nilsen2009-07-211-1/+1
| | | | | | | |
| * | | | | | | Merge commit 'qt/master' into graphicseffectsBjørn Erik Nilsen2009-07-211-36/+66
| |\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/gui/graphicsview/graphicsview.pri src/gui/graphicsview/qgraphicsitem_p.h src/gui/graphicsview/qgraphicsscene.cpp src/gui/graphicsview/qgraphicsscene.h src/gui/graphicsview/qgraphicsview.cpp
| * \ \ \ \ \ \ \ Merge commit 'master/master' into kinetic-graphicseffectAriya Hidayat2009-06-291-113/+206
| |\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/gui/graphicsview/graphicsview.pri src/gui/graphicsview/qgraphicsitem_p.h src/gui/graphicsview/qgraphicsscene.cpp src/gui/graphicsview/qgraphicsview.cpp
| * | | | | | | | | Another n-th attempt at making an API for the effect framework.Ariya Hidayat2009-06-021-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The implementation is not efficient, it serves as the proof-of-concept only. Check the notes in qgraphicseffect.cpp for details.
* | | | | | | | | | Merge commit 'qt/master'Jason Barron2009-08-211-5/+6
|\ \ \ \ \ \ \ \ \ \ | | |_|_|_|_|_|_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: configure.exe examples/examples.pro qmake/Makefile.unix qmake/Makefile.win32 qmake/Makefile.win32-g++ qmake/Makefile.win32-g++-sh qmake/qmake.pro src/script/api/qscriptable.h src/script/api/qscriptclasspropertyiterator.h src/script/api/qscriptcontext.h src/script/api/qscriptengineagent.cpp src/script/api/qscriptstring.cpp src/script/api/qscriptstring.h src/script/api/qscriptvalueiterator.cpp src/script/api/qscriptvalueiterator.h src/script/qscriptclass.cpp src/script/qscriptcontext.cpp src/script/qscriptengine.cpp src/script/qscriptengine_p.cpp src/script/qscriptvalue.cpp src/script/qscriptvalue_p.h src/script/qscriptvalueimplfwd_p.h src/script/script.pro src/src.pro tests/auto/auto.pro tests/auto/qscriptv8testsuite/tst_qscriptv8testsuite.cpp tools/configure/configureapp.cpp
| * | | | | | | | | Merge branch 'kinetic-transform' of git@scm.dev.nokia.troll.no:qt/kineticRhys Weatherley2009-08-201-5/+6
| |\ \ \ \ \ \ \ \ \
| | * | | | | | | | | Remove QGraphicsTransform::project()Rhys Weatherley2009-08-191-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QMatrix4x4::toTransform() now does what project() used to do. Reviewed-by: trustme
| | * | | | | | | | | Re-implement QGraphicsTransform to use QMatrix4x4Rhys Weatherley2009-08-191-5/+6
| | | |_|_|_|_|_|/ / | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QTransform-based transformations create problems when performing X and Y axis rotations because they aren't using true 3D. This change modifies QGraphicsTransform and its sub-classes to use QMatrix4x4 as the standard transformation matrix, with a project() function to project back to 2D when required. Reviewed-by: trustme
* | | | | | | | | | Merge commit 'qt/master'Jason Barron2009-08-201-3/+5
|\ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: examples/painting/svgviewer/files/bubbles.svg src/corelib/kernel/qobject.cpp src/network/kernel/qhostinfo.cpp tests/auto/qhostinfo/tst_qhostinfo.cpp
| * | | | | | | | | Performance issue in QGraphicsItem::addParentItem while building theGabriel de Dietrich2009-08-201-3/+5
| |/ / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | scene bottom-up. When adding n items, the depth was computed n² times. Adding lazy computation fixes this performance issue. Reviewed-by: Andreas
* | | | | | | | | Merge commit 'qt/master'Jason Barron2009-08-181-4/+8
|\ \ \ \ \ \ \ \ \ | |/ / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: doc/src/examples.qdoc doc/src/plugins-howto.qdoc doc/src/topics.qdoc examples/phonon/musicplayer/mainwindow.cpp src/3rdparty/freetype/src/base/ftobjs.c src/corelib/global/qglobal.h src/corelib/tools/qalgorithms.h src/corelib/tools/qshareddata.cpp src/corelib/tools/qsharedpointer.cpp src/corelib/tools/tools.pri src/corelib/xml/qxmlstream.h src/gui/painting/painting.pri src/gui/widgets/qdatetimeedit.cpp tests/auto/qdesktopservices/qdesktopservices.pro tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp tests/auto/qtextcodec/test/test.pro
| * | | | | | | | Merge QGV delta from kinetic-declarativeui into master.Andreas Aardal Hanssen2009-08-171-4/+6
| | |_|_|_|_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | New flag: QGraphicsItem::ItemNegativeZStacksBehindParent, which makes it easy to toggle stack-behind based on the value of Z alone. Add interface initializations to QGV classes. Add a simple internal focus policy to QGraphicsItem to allow derived items to be focusable without allowing clickfocus. Reviewed-by: Alexis