Update the "roles" for items that become visible again after filtering
Review Request #114266 - Created Dec. 2, 2013 and submitted
Since Dolphin 4.11, we store not only KFileItems, but also the corresponding ItemData struct for filtered items. This is required for keeping track of the parent-child relationships, and has the nice side effect that the ItemData need not be re-determined when the items are shown again. However, this can become a problem if the visible roles or the sort role change while some items are filtered: Problem A: 1. Open a folder in Details View. 2. Press Ctrl+I, add a filter that removes some items. 3. Enable the "Permissions" column. 4. Clear the filter. 5. Note that the previously filtered items have an empty "Permissions" field. Problem B (more difficult to reproduce in the GUI, but easily unit-testable): 1. Open a large folder in Details View. 2. Enable the "Permissions" column ("User" and "Group" will also do, but it is important that there are files for which these fields differ). 3. Hide some items with the filter bar. 4. Switch to "Sort by Permissions/User/Group". 5. Clear the filter. 6. Note the incorrect sort order. I think that there are no bug reports for these problems yet. Problem A is fixed simply by clearing the QHash "values" for the filtered items if the visible roles change. The hash will be re-populated with all requested data as soon as the items are shown again and the data(int) method of the model is called. Problem B requires a bit more work - before the items are inserted into the model after filtering, we have to make sure that the sort role "Permissions"/"User"/etc. is present in the hash "values". I think the easiest way to ensure that is to factor out the code that currently does this job for new items in createItemDataList() into a new function, and calling this in insertItems(), because the same treatment is required for the previously filtered files.
Fixes the problems for me. Old and new tests pass (and the new tests fail with current KDE/4.12 and master). I have not found any regressions yet.