> On 2010-03-29 18:34:53, Aaron Seigo wrote: > > trunk/KDE/kdebase/workspace/libs/taskmanager/strategies/desktopsortingstrategy.cpp, > > lines 59-71 > > <http://reviewboard.kde.org/r/3375/diff/3/?file=21852#file21852line59> > > > > all of the winIds() stuff can be gotten rid of now that there is the > > id() method. if winIds().isEmpty(), then desktop() is going to be 0. and > > since the winIds() list isn't beig used, then it's probably enough to just > > do this: > > > > const int leftDesktop = left->desktop(); > > const int rightDesktop = right->desktop(); > > if (leftDesktop() == rightDesktop) { > > return left->id() < right->id(); > > } > > > > return leftDesktop < rightDesktop; > > Dmitry Suzdalev wrote: > This really should work, but it doesn't. Exactly startup items pose the > problem: > > if they are not in the end of the *whole* list, then tasks layouting class > 1) Sees that some new task (start up one) appeared in the middle of the > list and rearranges the items, reassigning their indexes > 2) At the same time it tries to keep "startup items" in the end, and > because of this user observes "strange" moves of tasks in the middle, while > startup ones are still in the end (visually). > > Putting startup tasks explicitly in the end of the list and ensuring > they'll always be there solves these problems. > > But I guess the real fix should be in layouting classes in tasks applet, > but it's source is not so trivial, I need to study the code more. > So perhaps it'll need to wait to fix this in the right place. > I'll try to dig in and report when done :)
perhaps a more straightforward solution would be to add a virtual bool isStartupItem() to AbstractGroupableItem. the default impl would return false, and the reimp in TaskItem would just be "return d->startupPtr;"? so then it would be something like: if (left->isStartup()) { if (right->isStartup()) { return left->name().toLower() < right->name().toLower(); } return false; } if (right->isStartup()) { return true; } const int leftDesktop = left->desktop(); const int rightDesktop = right->desktop(); if (leftDesktop() == rightDesktop) { return left->id() < right->id(); } return leftDesktop < rightDesktop; - Aaron ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: http://reviewboard.kde.org/r/3375/#review4747 ----------------------------------------------------------- On 2010-03-29 17:08:22, Dmitry Suzdalev wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > http://reviewboard.kde.org/r/3375/ > ----------------------------------------------------------- > > (Updated 2010-03-29 17:08:22) > > > Review request for Plasma. > > > Summary > ------- > > This patch fixes a sorting order for "Sort by Desktop" mode of taskmanager > lib. > > Summary: > When in "Sort by Desktop" mode, sort by_desktop+by_winId, instead of > by_desktop+by_winTitle as it is now. > > More details: > Currently in "by desktop" sorting mode tasks are sorted by desktop and then > by name. > This leads to inconvenient things, here are some examples: > > - I have a browser with several tabs open. Whenever I change a tab, browser > changes window title. > This makes task jump in a task bar from one position to another while I'm > simply changing tabs. > - I have a 'konsole' window and as I do 'cd onedir', 'cd zletter_dir', etc, > title is changed, task jumps > - Some other situations caused this too, don't recall, but you got the idea :) > > What I've done: > Instead of sorting by name, i made it to sort by winId. Tasks without winId > are sorted out to the end of the list > and sorted by name there. Typically these are the startup-in-progress items. > > As a side effect this fixes bug https://bugs.kde.org/show_bug.cgi?id=219528 > which has the same roots: > invalid sorting order due to wrong comparison of regular items with "starting > up" items. > > Long description, short patch ;) > > > This addresses bug 219528. > https://bugs.kde.org/show_bug.cgi?id=219528 > > > Diffs > ----- > > trunk/KDE/kdebase/workspace/libs/taskmanager/abstractgroupableitem.h > 1105271 > trunk/KDE/kdebase/workspace/libs/taskmanager/abstractgroupableitem.cpp > 1105271 > > trunk/KDE/kdebase/workspace/libs/taskmanager/strategies/desktopsortingstrategy.cpp > 1105271 > > Diff: http://reviewboard.kde.org/r/3375/diff > > > Testing > ------- > > Tested on trunk. Task items retain their sort order, not reacting to title > changes, charming :) > > It affects only task applets with sort mode set to "by desktop" > > > Thanks, > > Dmitry > > _______________________________________________ Plasma-devel mailing list Plasma-devel@kde.org https://mail.kde.org/mailman/listinfo/plasma-devel