Review Request 109604: Model to provide easy access to KWin's Clients from QML
Martin Gräßlin
mgraesslin at kde.org
Wed Mar 27 07:19:58 UTC 2013
> On March 21, 2013, 10:06 p.m., Thomas Lübking wrote:
> > kwin/scripting/scripting_model.cpp, line 190
> > <http://git.reviewboard.kde.org/r/109604/diff/1/?file=120515#file120515line190>
> >
> > considered to keep m_clients and m_ids as hash/map or at least a pair (implicitly documenting "this is assigned and has to be in sync")
>
> Martin Gräßlin wrote:
> Hash/Map do not work as I need the ordering of Clients and not of the ids
>
> Thomas Lübking wrote:
> It did not look like you'd require any particular order - if this is correct, you could just use Client* as keys.
the ordering needs to be somewhat stable. Currently new Clients are only added to the list, that's what I mean with it needs ordering. But thinking about it: the ids should apply to this ordering constraint as whenever a new Client is added to the list, the new id will be larger than all existing ids.
- Martin
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/109604/#review29660
-----------------------------------------------------------
On March 26, 2013, 10:35 a.m., Martin Gräßlin wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://git.reviewboard.kde.org/r/109604/
> -----------------------------------------------------------
>
> (Updated March 26, 2013, 10:35 a.m.)
>
>
> Review request for kwin and Plasma.
>
>
> Description
> -------
>
> Model to provide easy access to KWin's Clients from QML
>
> A new ClientModel is added which provides multiple different views on
> KWin's Clients. The model is organized as a tree model supporting the
> following levels:
> * activities
> * virtual desktops
> * screens
> * none
>
> The levels can be ordered in whatever way one wants. That is the tree
> structure can have an ordering of activities then virtual desktops or
> the other way around.
>
> In addition the model provides Exclusion flags to exclude clients of
> certain types. E.g. it's possible to exclude all windows which are not on
> the current desktop or all windows which are of type dock.
>
> The model gets automatically updated whenever a Client is added/removed
> or changes a state in a way that it should be excluded/included. This is
> currently still rather limited, as some signals from KWin core are not
> yet available. Also the model does not yet react on screen, desktop and
> activity changes.
>
> The ClientModel is not directly exported to QML. Instead there are
> specific sub classes for certain common orderings. This solutions is
> chosen to workaround some limitations of QML. The initial idea was to
> use a property taking a list of the levels, but this doesn't work because
> we are not notified when the QDeclarativeListProperty changes.
>
> Currently the following models are provided to QML:
> * ClientModel -> no restrictions
> * ClientModelByScreen -> ordering by screen
> * ClientModelByScreenAndDesktop -> screen, then desktop
>
> These can be used to get all Clients:
> ClientModel {
> }
>
> Or to get the classic Present Windows on current desktop:
> ClientModelByScreen {
> exclusions: ClientModel.OtherDesktopsExclusion | ClientModel.NotAcceptingFocusExclusion | ...
> }
>
> Or to get the classic Present Windows on all desktops:
> ClientModelByScreen {
> exclusions: ClientModel.NotAcceptingFocusExclusion | ...
> }
>
> Or our well known desktop grid:
> ClientModelByScreenAndDesktop {
> id: desktopGrid
> exclusions: ClientModel.NotAcceptingFocusExclusion | ...
> }
>
> To support filtering as known by the Present Windows effect one can use
> a ClientFilterModel, which is a QSortFilterProxyModel filtering on
> window caption, role and class:
> ClientFilterModel {
> id: filterModel
> clientModel: desktopGrid
> filter: filterItem.text
> }
>
> In case it's a tree level obviously QML does not support this correctly.
> So we need to use a VisualDataModel:
> VisualDataModel {
> id: clientModel
> model: filterModel
> Component.onCompleted: {
> clientModel.rootIndex = modelIndex(0);
> clientModel.rootIndex = modelIndex(0);
> clientModel.delegate = thumbnailDelegate;
> }
> }
>
> As we can see, the rootIndex has to be set to the level which contains
> the Clients. Also it seems to be important to create the delegate after
> the model index has been set. The idea is to have only one ClientModel
> and multiple VisualDataModels if multiple views on the data is needed.
>
> The model has been tested with a painful modeltest session. It looks good
> so far modulo the listed limitations and that modeltest is not liking
> closing Yakuake in the ClientModelByScreenAndDesktop setup, though it
> works fine in real world testing.
>
> Support saturation/brightness in ThumbnailItem
>
> Two new properties saturation and brightness are added to the
> ThumbnailItem which can be set from QML.
>
> The properties are honoured by the Scene when rendering the thumbnail.
>
>
> Diffs
> -----
>
> kwin/CMakeLists.txt f0795b4873ac58a06c737b200559fa76e3c9c11e
> kwin/scene.cpp 939f000f0c3d09ffacccb0b25c50f83f0010ef47
> kwin/scripting/scripting.cpp e124827174317ab6adbfdb90cec796a02e7bd2b7
> kwin/scripting/scripting_model.h PRE-CREATION
> kwin/scripting/scripting_model.cpp PRE-CREATION
> kwin/thumbnailitem.h f7dc4fe621e9cf2786794d1be55930ce79ca5c7c
> kwin/thumbnailitem.cpp 66b665a685188767201ada7d5cfbb32a0ea7ff0a
>
> Diff: http://git.reviewboard.kde.org/r/109604/diff/
>
>
> Testing
> -------
>
>
> File Attachments
> ----------------
>
> Example PresentWindows/DesktopGrid QML
> http://git.reviewboard.kde.org/media/uploaded/files/2013/03/20/main.qml
> WindowItemComponent.qml - needed for the example
> http://git.reviewboard.kde.org/media/uploaded/files/2013/03/20/WindowItemComponent.qml
>
>
> Thanks,
>
> Martin Gräßlin
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/plasma-devel/attachments/20130327/fef87cd5/attachment-0001.html>
More information about the Plasma-devel
mailing list