> On Jan. 26, 2015, 9:41 a.m., Christian Mollekopf wrote:
> > Looks reasonable to me. I'll apply the patch locally and test it for a 
> > while.
> 
> Christian Mollekopf wrote:
>     This patch brings the original problem back, that shared folders do not 
> appear until something causes a dataChanged signal (usually a sync). Since 
> the model now seems to be behaving correctly, I assume the kmail model stack 
> is buggy in yet another place (would have been to trivial otherwise wouldn't 
> it?), and the superfluous dataChanged signal just happened to hide that 
> problem.
> 
> Christian Mollekopf wrote:
>     I tracked the problem down to still be in FolderTreeWidgetProxyModel 
> (which is a KRecursiveFilterProxyModel). I know the relevant index makes it 
> through the sourcemodel because of the debug output added in 
> FolderTreeWidgetProxyModel::acceptRow (which also returns the correct 
> values). I'm fairly sure that the model is the cause for the folder not 
> showing up because I set the foldertreewidgetproxymodel directly as source of 
> the folderTreeView (a QTreeView). Given that the filtering seems to work 
> correctly, and assuming QTreeView isn't buggy, the reason for the folder not 
> showing up has to be in KRecursiveFilterProxyModel (right?). The problem is 
> most likely timing/order dependant because I cannot reproduce the problem 
> with another user but the same kmail/kdelibs version + the same account.
>     
>     The problematic folder tree looks as follows:
>     ```
>       * Shared Folders (no mimetype)
>       ** shared (no mimetype)
>       *** lists (no mimetype)
>       **** kde.org (no mimetype)
>       ***** pim (mail mimetype)
>       ***** ...
>       **** ...
>       *** ...
>     ```
>     
>     The problem is that the complete folder hierarchy, including "Shared 
> Folders" doesn't make it into the visible tree. The top 4 folders of the 
> hierarch would of course only be pulled in by the actual mail folder (pim).
>     
>     So far I couldn't find the actual problem to write another testcase, but 
> I have to assume that KRecursiveFilterProxyModel ist still buggy, and the 
> additional dataChanged signal just happen to rectify the problem.

This definitely sounds like missing rowsInserted signals from the proxy.

I'll try adding a testcase where the source model does rowsInserted(1), 
rowsInserted(1.1), rowsInserted(1.1.1 + with flag set).


- David


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/122252/#review74753
-----------------------------------------------------------


On Jan. 25, 2015, 6:51 p.m., David Faure wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/122252/
> -----------------------------------------------------------
> 
> (Updated Jan. 25, 2015, 6:51 p.m.)
> 
> 
> Review request for kdelibs and Christian Mollekopf.
> 
> 
> Repository: kdelibs
> 
> 
> Description
> -------
> 
> by using an internal cache of the filtering state.
> 
> The tricky part is that filterAcceptsRow() must not use the cache
> (too bad, it would be faster), because of the setFilterFixedString()
> feature which can change the filtering status of indexes without
> KRFPM even being informed (QSFPM has no virtual method, no event...)
> So it only ever writes to the cache, but when dataChanged()
> or row insertion/removal comes in, we can look into the cache
> to find the old state and compare.
> 
> 
> Diffs
> -----
> 
>   kdeui/itemviews/krecursivefilterproxymodel.h 
> c16b62186fb9203ff297bd9fd28d9c13a1c8bdc4 
>   kdeui/itemviews/krecursivefilterproxymodel.cpp 
> efa286ad87ded962b20c8a581b659d1b154ebf3a 
>   kdeui/tests/krecursivefilterproxymodeltest.cpp 
> 3bcb72980730cb22f887ae8fa5fbd91b5609aeb6 
> 
> Diff: https://git.reviewboard.kde.org/r/122252/diff/
> 
> 
> Testing
> -------
> 
> Unit tests.
> 
> Using kmail (and especially testing the substring filtering in the "move 
> dialog", which an earlier version of this patch broke).
> Looking at the number of calls to 
> Akonadi::FavoriteCollectionsModel::Private::reload() for a single 
> dataChanged() signal from the ETM, which went from 10 to 4 (still too many, 
> but the remaining problem is elsewhere).
> 
> 
> Thanks,
> 
> David Faure
> 
>

Reply via email to