Re: Review Request 109604: Model to provide easy access to KWin's Clients from QML

2013-03-26 Thread Martin Gräßlin


 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)

Hash/Map do not work as I need the ordering of Clients and not of the ids


- Martin


---
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/109604/#review29660
---


On March 20, 2013, 1:07 p.m., Martin Gräßlin wrote:
 
 ---
 This is an automatically generated e-mail. To reply, visit:
 http://git.reviewboard.kde.org/r/109604/
 ---
 
 (Updated March 20, 2013, 1:07 p.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 Exclude 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 {
 excludes: ClientModel.ExcludeOtherDesktops | 
 ClientModel.ExcludeNotAcceptingFocus | ...
 }
 
 Or to get the classic Present Windows on all desktops:
 ClientModelByScreen {
 excludes: ClientModel.ExcludeNotAcceptingFocus | ...
 }
 
 Or our well known desktop grid:
 ClientModelByScreenAndDesktop {
 id: desktopGrid
 excludes: ClientModel.ExcludeNotAcceptingFocus | ...
 }
 
 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.
 ===
 
 Plasma devs are added to get access to their QML knowledge :-)
 
 
 Diffs
 -
 
   kwin/CMakeLists.txt ecddc55ed89cb4fcb143561e57534b1bb4ea3832 
   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 

Re: Review Request 109604: Model to provide easy access to KWin's Clients from QML

2013-03-26 Thread Martin Gräßlin

---
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.


Changes
---

readding plasma - my script always deletes that...


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

___
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


Review Request 109711: Fixes a bug in the KDE dataengine to use the POST method instead of GET which allows large text to be sent to the server

2013-03-26 Thread Bhaskar Kandiyal

---
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/109711/
---

Review request for Plasma.


Description
---

Fixes a bug where the default text engine 'kde' fails when pasting text longer 
than 513/741 characters in the PasteBin widget.
The problem is that the generic dataengine 'kde' uses a GET request to send 
data to the http://paste.kde.org server which does not allow large text to be 
sent to the server.
This patch changes the GET request to a POST request which fixes the bug.
 
Bug Report: https://bugs.kde.org/show_bug.cgi?id=289647


This addresses bug 289647.
http://bugs.kde.org/show_bug.cgi?id=289647


Diffs
-

  plasma/generic/dataengines/share/backends/kde/contents/code/main.js 600950d 

Diff: http://git.reviewboard.kde.org/r/109711/diff/


Testing
---


Thanks,

Bhaskar Kandiyal

___
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


FYI: Platform content discussion in Qt

2013-03-26 Thread Alan Alpert
Hi,

I can't find it now, but there was a note on one of the Plasma wiki
pages about some of the limitations of how QML files are 'switched
out' with platform content versions in a Plasma package (from memory,
stuff like requiring a qmldir and not working with C++ plugins).

I've chosen the longest possible path to fix that, and am working on
adding platformcontent-like functionality into Qt (which the QML
engine and Plasma could then easily use). There's a discussion going
on in the qt-devel ML right now if anyone's interested:
http://lists.qt-project.org/pipermail/development/2013-March/010564.html .

--
Alan Alpert
___
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


Plasma Media Center meeting on 27th March

2013-03-26 Thread Shantanu Tushar Jha
Hi,

Thanks for filling out the doodle! From the entries, the best time to have
this is on Wednesday 27th March at 3:15 PM - 4:00 PM UTC.
Lets have the meeting then and get some awesome stuff for PMC!

Cheers,

-- 
Shantanu Tushar(UTC +0530)
http://www.shantanutushar.com
___
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


Re: [Nepomuk] Nepomukcontroller rewritten in QML

2013-03-26 Thread Jörg Ehrichs
 [...]

 These things should really be async.

 Especially if there can be multiple services that you have no control about,
 they will hang at some point, and then your UI is blocked -- never a good
 thing.

 We've had a non-funny amount of UI problems due to sync calls across IPC, or
 into Nepomuk (and sometimes both), and it gets you a blocking UI, and it
 really deteriorate the user experience.


I agree, I have already changed all calls to use the async dbus api instead.
So blocking the UI shouldn't be a problem anymore.

I've added a new branch (nepomukcontroller-qml) to kde-workspace and asked for
review on kde-core-devel
___
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


Re: [Nepomuk] Nepomukcontroller rewritten in QML

2013-03-26 Thread Martin Klapetek
On Tue, Mar 26, 2013 at 11:29 AM, Jörg Ehrichs joerg.ehri...@gmx.de wrote:

  [...]
 
  These things should really be async.
 
  Especially if there can be multiple services that you have no control
 about,
  they will hang at some point, and then your UI is blocked -- never a good
  thing.
 
  We've had a non-funny amount of UI problems due to sync calls across
 IPC, or
  into Nepomuk (and sometimes both), and it gets you a blocking UI, and it
  really deteriorate the user experience.
 

 I agree, I have already changed all calls to use the async dbus api
 instead.
 So blocking the UI shouldn't be a problem anymore.


Nicely done! I did a quick look over the code and you're still using

QDBusConnection::sessionBus().interface()-isServiceRegistered

which unfortunately is a blocking DBus call. You can however replace it
with something like

QDBusPendingCall async =
QDBusConnection::sessionBus().interface()-asyncCall(QLatin1String(NameHasOwner),
QLatin1String(org.kde.NepomukServer));

QDBusPendingCallWatcher *callWatcher = new QDBusPendingCallWatcher(async,
this);
connect(callWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
this, SLOT(serviceNameFetchFinished(QDBusPendingCallWatcher*)));

and in serviceNameFetchFinished you do:

::serviceNameFetchFinished(QDBusPendingCallWatcher *callWatcher) {
  QDBusPendingReplybool reply = *callWatcher;
  if (reply.isError()) { return; }
  bool isRegistered = reply.value();
  callWatcher-deleteLater();

And you're done.

There might be a possible race condition between this
and QDBusServiceWatcher though (unlikely, but still), so you might want to
initiate the QDBusServiceWatcher only in the serviceNameFetchFinished (or
whatever you'll call it) slot.

Cheers
-- 
Martin Klapetek | KDE Developer
___
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


Re: FYI: Platform content discussion in Qt

2013-03-26 Thread Marco Martin
On Tuesday 26 March 2013, Alan Alpert wrote:
 Hi,
 
 I can't find it now, but there was a note on one of the Plasma wiki
 pages about some of the limitations of how QML files are 'switched
 out' with platform content versions in a Plasma package (from memory,
 stuff like requiring a qmldir and not working with C++ plugins).
 
 I've chosen the longest possible path to fix that, and am working on
 adding platformcontent-like functionality into Qt (which the QML
 engine and Plasma could then easily use). There's a discussion going
 on in the qt-devel ML right now if anyone's interested:
 http://lists.qt-project.org/pipermail/development/2013-March/010564.html .

Thanks for the heads up, looking into it.

Cheers,
Marco Martin
___
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


Re: FYI: Platform content discussion in Qt

2013-03-26 Thread Marco Martin
On Tuesday 26 March 2013, Alan Alpert wrote:
 Hi,
 
 I can't find it now, but there was a note on one of the Plasma wiki
 pages about some of the limitations of how QML files are 'switched
 out' with platform content versions in a Plasma package (from memory,
 stuff like requiring a qmldir and not working with C++ plugins).

iirc only part on the wiki that talked about packages was:
http://techbase.kde.org/Development/Tutorials/Plasma/PackageOverview#Device_specific_user_interface

i think the limitation was on another thing, that wasn't about packages:
we have also components (as in the hopefully standard qtcomponents set) in 
multiple versions for desktop and touch.
we have just some components that are actually rewritten for touch usage, 
while most are just fine, but we have to install the whole set two times, 
because what we would want is:

import org.kde.plasma.components 1.0 as...

and import the right set, but the ideal way is (if we are importing touch 
components) to have a set of just the components that are rewritten for 
touchscreen, while falling back to the common ones for everything else, that 
now we can't do, so we have the whole set installed two times and we change 
the import paths depending from the platform, and that's not optimal.

-- 
Marco Martin
___
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


Re: Review Request 109711: Fixes a bug in the KDE dataengine to use the POST method instead of GET which allows large text to be sent to the server

2013-03-26 Thread Aaron J. Seigo

---
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/109711/#review29910
---

Ship it!


Ship It!

- Aaron J. Seigo


On March 25, 2013, 6:50 p.m., Bhaskar Kandiyal wrote:
 
 ---
 This is an automatically generated e-mail. To reply, visit:
 http://git.reviewboard.kde.org/r/109711/
 ---
 
 (Updated March 25, 2013, 6:50 p.m.)
 
 
 Review request for Plasma.
 
 
 Description
 ---
 
 Fixes a bug where the default text engine 'kde' fails when pasting text 
 longer than 513/741 characters in the PasteBin widget.
 The problem is that the generic dataengine 'kde' uses a GET request to send 
 data to the http://paste.kde.org server which does not allow large text to be 
 sent to the server.
 This patch changes the GET request to a POST request which fixes the bug.
  
 Bug Report: https://bugs.kde.org/show_bug.cgi?id=289647
 
 
 This addresses bug 289647.
 http://bugs.kde.org/show_bug.cgi?id=289647
 
 
 Diffs
 -
 
   plasma/generic/dataengines/share/backends/kde/contents/code/main.js 600950d 
 
 Diff: http://git.reviewboard.kde.org/r/109711/diff/
 
 
 Testing
 ---
 
 
 Thanks,
 
 Bhaskar Kandiyal
 


___
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


Re: Review Request 109712: Make it possible to use action groups with QMenuItem

2013-03-26 Thread Aaron J. Seigo

---
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/109712/#review29911
---

Ship it!


Ship It!

- Aaron J. Seigo


On March 25, 2013, 7:24 p.m., Aleix Pol Gonzalez wrote:
 
 ---
 This is an automatically generated e-mail. To reply, visit:
 http://git.reviewboard.kde.org/r/109712/
 ---
 
 (Updated March 25, 2013, 7:24 p.m.)
 
 
 Review request for Plasma.
 
 
 Description
 ---
 
 Makes it possible to use the setActionGroup method. It's interesting in case 
 we are displaying options in a menu, since this way we can offer a more 
 appropriate UI.
 
 
 Diffs
 -
 
   plasma/declarativeimports/core/corebindingsplugin.cpp 169fd35 
   plasma/declarativeimports/plasmacomponents/qmenuitem.h 0f43418 
   plasma/declarativeimports/plasmacomponents/qmenuitem.cpp e8d590d 
 
 Diff: http://git.reviewboard.kde.org/r/109712/diff/
 
 
 Testing
 ---
 
 I have some code using it locally in muon. It works fine.
 
 
 Thanks,
 
 Aleix Pol Gonzalez
 


___
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


Re: Review Request 109712: Make it possible to use action groups with QMenuItem

2013-03-26 Thread Aleix Pol Gonzalez

---
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/109712/
---

(Updated March 26, 2013, 8 p.m.)


Status
--

This change has been discarded.


Review request for Plasma.


Description
---

Makes it possible to use the setActionGroup method. It's interesting in case we 
are displaying options in a menu, since this way we can offer a more 
appropriate UI.


Diffs
-

  plasma/declarativeimports/core/corebindingsplugin.cpp 169fd35 
  plasma/declarativeimports/plasmacomponents/qmenuitem.h 0f43418 
  plasma/declarativeimports/plasmacomponents/qmenuitem.cpp e8d590d 

Diff: http://git.reviewboard.kde.org/r/109712/diff/


Testing
---

I have some code using it locally in muon. It works fine.


Thanks,

Aleix Pol Gonzalez

___
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


Re: Review Request 109699: Simplify the behavior of the main UI file in the chat plasmoid

2013-03-26 Thread Commit Hook

---
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/109699/#review29912
---


This review has been submitted with commit 
ee48913d565524d37a32926554a0d3455d0d6574 by Aleix Pol to branch 
kde-telepathy-0.6.

- Commit Hook


On March 25, 2013, 2:18 a.m., Aleix Pol Gonzalez wrote:
 
 ---
 This is an automatically generated e-mail. To reply, visit:
 http://git.reviewboard.kde.org/r/109699/
 ---
 
 (Updated March 25, 2013, 2:18 a.m.)
 
 
 Review request for Plasma and Telepathy.
 
 
 Description
 ---
 
 These are some ideas I got from the last commit, let's see:
 * Provide a bigger minimum size, I thought it would never get to the minimum 
 but it does sometimes, so we can better give a bigger minimum (which is still 
 too small for a proper usage).
 * Rename preferredWidth/Height - implicit*. It seems like it's the proper 
 way to call these.
 * When the plasmoid is empty, offer an empty preferred (uh implicit) size.
 
 
 Diffs
 -
 
   chat/org.kde.ktp-chat/contents/ui/main.qml 1ee042a 
 
 Diff: http://git.reviewboard.kde.org/r/109699/diff/
 
 
 Testing
 ---
 
 Tested it in plasma-desktop (it's very hard to test sizes with plasmoidviewer 
 and such), I still have the Icon Tasks eating up my space, but I guess I have 
 to debug other code to get around that. At least now it doesn't get as 
 squeezed.
 
 
 Thanks,
 
 Aleix Pol Gonzalez
 


___
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


Re: Review Request 109699: Simplify the behavior of the main UI file in the chat plasmoid

2013-03-26 Thread Commit Hook

---
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/109699/
---

(Updated March 26, 2013, 8:03 p.m.)


Status
--

This change has been marked as submitted.


Review request for Plasma and Telepathy.


Description
---

These are some ideas I got from the last commit, let's see:
* Provide a bigger minimum size, I thought it would never get to the minimum 
but it does sometimes, so we can better give a bigger minimum (which is still 
too small for a proper usage).
* Rename preferredWidth/Height - implicit*. It seems like it's the proper way 
to call these.
* When the plasmoid is empty, offer an empty preferred (uh implicit) size.


Diffs
-

  chat/org.kde.ktp-chat/contents/ui/main.qml 1ee042a 

Diff: http://git.reviewboard.kde.org/r/109699/diff/


Testing
---

Tested it in plasma-desktop (it's very hard to test sizes with plasmoidviewer 
and such), I still have the Icon Tasks eating up my space, but I guess I have 
to debug other code to get around that. At least now it doesn't get as squeezed.


Thanks,

Aleix Pol Gonzalez

___
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


Re: Review Request 109604: Model to provide easy access to KWin's Clients from QML

2013-03-26 Thread Thomas Lübking


 On March 21, 2013, 9: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

It did not look like you'd require any particular order - if this is correct, 
you could just use Client* as keys.


- Thomas


---
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/109604/#review29660
---


On March 26, 2013, 9: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, 9: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 

Re: FYI: Platform content discussion in Qt

2013-03-26 Thread Alan Alpert
On Tue, Mar 26, 2013 at 6:07 AM, Marco Martin notm...@gmail.com wrote:
 On Tuesday 26 March 2013, Alan Alpert wrote:
 Hi,

 I can't find it now, but there was a note on one of the Plasma wiki
 pages about some of the limitations of how QML files are 'switched
 out' with platform content versions in a Plasma package (from memory,
 stuff like requiring a qmldir and not working with C++ plugins).

 iirc only part on the wiki that talked about packages was:
 http://techbase.kde.org/Development/Tutorials/Plasma/PackageOverview#Device_specific_user_interface

Maybe it wasn't written down :P . There is the issue that by
redirecting to files using a custom QNAM set on the QQmlEngine means
that remote file limitations are applied, which means requiring a
qmldir and not loading C++ plugins.

 i think the limitation was on another thing, that wasn't about packages:
 we have also components (as in the hopefully standard qtcomponents set) in
 multiple versions for desktop and touch.
 we have just some components that are actually rewritten for touch usage,
 while most are just fine, but we have to install the whole set two times,
 because what we would want is:

 import org.kde.plasma.components 1.0 as...

 and import the right set, but the ideal way is (if we are importing touch
 components) to have a set of just the components that are rewritten for
 touchscreen, while falling back to the common ones for everything else, that
 now we can't do, so we have the whole set installed two times and we change
 the import paths depending from the platform, and that's not optimal.

If the selectors were implemented at a Qt or QML level, then you could
easily apply them in your imports the same as you would in plasma
packages. So that problem would be solved too.

--
Alan Alpert
___
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel