• David Edmundson's avatar
    Fix model updates in RunnerMatchesModel · 892b1b9e
    David Edmundson authored
    Summary:
    RunnerMatchesModel is backed by a list. When this list changes
    RunnerManagerModel add/removes the new number of rows then called
    dataChanged on everything that remained.
    
    It's a common pattern, but not a great one. Especially with QtQuick
    where moving a delegate is faster than updating all the properties of an
    existing one - unfortunately I can't find a nice solution to do this
    properly in linear time.
    
    The problem with the current code is we update the entire list in the
    insert/remove rows. This is a violation of the model rules as we're
    updating rows outside the rows listed inside begin/remove rows.
    
    It works, but Qt's model test fails.
    
    We also have a lot of duplicates of a crash in QtQuick after runner
    model changes, bug 369430. I think it could be related, but can't
    prove anything.
    
    This patch updates the rows that exist in both the before and after
    models before adding/removing the remaining rows.
    
    BUG: 402439
    
    Test Plan:
    Added Qt model tester in https://phabricator.kde.org/P283
    It now passes.
    
    Reviewers: #plasma, hein
    
    Reviewed By: #plasma, hein
    
    Subscribers: hein, apol, plasma-devel
    
    Tags: #plasma
    
    Differential Revision: https://phabricator.kde.org/D17725
    892b1b9e