Check if configuration's defaults works well with change Autoclean and Nocolor to bool values.
Continue with inlining code.
Wait for translators to check all translations.
Check this: !!! --fetch-restricted only makes sense in --destructive mode. (eClean)

in progress:
*Parse distfile size in CachePortageJob

vaguely prioritized:
check isSuperUser when enabling Apply button in PackageInspector
check Action.isValid() before starting the KExecuteJob as done in Emerge::queue
center KAuth prompts
ebuild view monospace
emerge log monospace
extra newlines in log when run through KAuth because of timed log output callback
spacing in ebuild tab of inspector
Correct parent widget pointer in KMessageBox::*
Convert all QRegExp to QRegularExpression
notifyrc?
Merge live and release ebuild
maintain selected category when package state radio buttons change
better use flag descriptions from metadata.xml - partly done, also read from use.local.desc?
Convert portagedb.cpp into format strings instead of catenation
Status bar generic "emerging. . ." instead of "emerging <pkg>"
Message box when there are news items
Progress bars in Queue tab
click on homepage in package details doesn't launch browser, logs a warning like "Warning: QTextBrowser: No document for https://naev.org/ ((null):0, (null))"
run 'emerge --sync' as portage user if owned by portage
read from cache table to show download size in scanportagejob::scanInfo around line 510
update installed db when merging / unmerging, especially for cases like wine-staging where it is multi-slot and several get unmerged before a new one gets merged
configure checks for XOpenDisplay? this should be fine by wayland not requiring X

Reimplement pause/unpause with KAuth
Warn about big kuroo.log
Use portage-utils? as library?
--depclean instead of -C
	A full depclean task / UI
separate check updates shallow / deep
package inspector dependency tab
upside down treeview in queue to reflect actual order
freezing UI
wayland-i-ness
remember window position - can't do on wayland?
scroll to clicked merge in emerge log
Port unmask package to KAuth (core/emerge.cpp#998)
No error, thinks it's busy when kuroo_helper fails to launch (debugging from build directory, but not installed to /usr/local)
Wayland crashes: Fatal: The Wayland connection broke. Did the Wayland compositor die? ((null):0, (null))
	*** Program received signal SIGABRT (Aborted) ***
History list shows logs available on the merge after the package with logs - is this still the case?
Detect dbus or elogind not started on startup?
configurable diff/merge tool?
sort by 'in-world' column
parse [# processing/# total] or [#%] from output
links in history
multiple homepages
s/newuse/changed-use/
count of packages in view per top and sub category
gray out categories with no packages in view


Crash when removing some items in the queue view, probly selected a child but not parent or vice versa
=================================================================
==7696==ERROR: AddressSanitizer: heap-use-after-free on address 0x611001369478 at pc 0x55cc28e99a41 bp 0x7fff4733c0e0 sp 0x7fff4733c0d0
READ of size 8 at 0x611001369478 thread T0
    #0 0x55cc28e99a40 in QueueListItem::parentItem() const /home/andrew/code/kuroo/trunk/src/queue/queuelistitem.h:52
    #1 0x55cc28e99a40 in QueueListModel::parent(QModelIndex const&) const /home/andrew/code/kuroo/trunk/src/queue/queuelistmodel.cpp:192
    #2 0x7f924b835507  (/usr/lib64/libQt5Widgets.so.5+0x435507)
    #3 0x7f924b82d07b in QTreeView::mousePressEvent(QMouseEvent*) (/usr/lib64/libQt5Widgets.so.5+0x42d07b)
    #4 0x7f924b7bf69b in QAbstractItemView::setSelectionModel(QItemSelectionModel*) (/usr/lib64/libQt5Widgets.so.5+0x3bf69b)
    #5 0x7f924b7c1b96 in QAbstractItemView::viewportEvent(QEvent*) (/usr/lib64/libQt5Widgets.so.5+0x3c1b96)
    #6 0x7f924a862915 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) /var/tmp/portage/dev-qt/qtcore-5.15.10/work/qtbase-everywhere-src-5.15.10/src/corelib/kernel/qcoreapplication.cpp:1190
    #7 0x7f924b56833a in QApplicationPrivate::notify_helper(QObject*, QEvent*) (/usr/lib64/libQt5Widgets.so.5+0x16833a)
    #8 0x7f924b56e96e in QApplication::notify(QObject*, QEvent*) (/usr/lib64/libQt5Widgets.so.5+0x16e96e)
    #9 0x7f924a864f47 in QCoreApplication::notifyInternal2(QObject*, QEvent*) /var/tmp/portage/dev-qt/qtcore-5.15.10/work/qtbase-everywhere-src-5.15.10/src/corelib/kernel/qcoreapplication.cpp:1064
    #10 0x7f924b56bb53 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) (/usr/lib64/libQt5Widgets.so.5+0x16bb53)
    #11 0x7f924b5b6732  (/usr/lib64/libQt5Widgets.so.5+0x1b6732)
    #12 0x7f924b5b84ce  (/usr/lib64/libQt5Widgets.so.5+0x1b84ce)
    #13 0x7f924b56834a in QApplicationPrivate::notify_helper(QObject*, QEvent*) (/usr/lib64/libQt5Widgets.so.5+0x16834a)
    #14 0x7f924a864f47 in QCoreApplication::notifyInternal2(QObject*, QEvent*) /var/tmp/portage/dev-qt/qtcore-5.15.10/work/qtbase-everywhere-src-5.15.10/src/corelib/kernel/qcoreapplication.cpp:1064
    #15 0x7f924af1bdec in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) (/usr/lib64/libQt5Gui.so.5+0x11bdec)
    #16 0x7f924af0493a in QWindowSystemInterface::flushWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) (/usr/lib64/libQt5Gui.so.5+0x10493a)
    #17 0x7f9248d49b9f  (/usr/lib64/libQt5WaylandClient.so.5+0xa9b9f)
    #18 0x7f9248f15482 in g_main_context_dispatch (/usr/lib64/libglib-2.0.so.0+0x5b482)
    #19 0x7f9248f70fb7  (/usr/lib64/libglib-2.0.so.0+0xb6fb7)
    #20 0x7f9248f12bbb in g_main_context_iteration (/usr/lib64/libglib-2.0.so.0+0x58bbb)
    #21 0x7f924a8acb45 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) /var/tmp/portage/dev-qt/qtcore-5.15.10/work/qtbase-everywhere-src-5.15.10/src/corelib/kernel/qeventdispatcher_glib.cpp:423
    #22 0x7f924a8641aa in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) /var/tmp/portage/dev-qt/qtcore-5.15.10/work/qtbase-everywhere-src-5.15.10/src/corelib/kernel/qeventloop.cpp:235
    #23 0x7f924a8654cc in QCoreApplication::exec() /var/tmp/portage/dev-qt/qtcore-5.15.10/work/qtbase-everywhere-src-5.15.10/src/corelib/kernel/qcoreapplication.cpp:1375
    #24 0x55cc28c1fcdf in main /home/andrew/code/kuroo/trunk/src/main.cpp:112
    #25 0x7f924a03e989 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #26 0x7f924a03ea44 in __libc_start_main_impl ../csu/libc-start.c:360
    #27 0x55cc28c229c0 in _start (/home/andrew/code/kuroo/trunk/build/bin/kuroo+0xfa9c0)

0x611001369478 is located 184 bytes inside of 208-byte region [0x6110013693c0,0x611001369490)
freed by thread T0 here:
    #0 0x7f924c4e0f38 in operator delete(void*, unsigned long) (/usr/lib/gcc/x86_64-pc-linux-gnu/13/libasan.so.8+0xe0f38)
    #1 0x55cc28eb32ab in QueueListItem::~QueueListItem() /home/andrew/code/kuroo/trunk/src/queue/queuelistitem.cpp:52
    #2 0x55cc28eb32ab in QueueListItem::~QueueListItem() /home/andrew/code/kuroo/trunk/src/queue/queuelistitem.cpp:51
    #3 0x55cc28eb3770 in QueueListItem::~QueueListItem() /home/andrew/code/kuroo/trunk/src/queue/queuelistitem.cpp:52
    #4 0x55cc28e9d89b in QueueListModel::setPackages(QList<QueueListItem*>&) /home/andrew/code/kuroo/trunk/src/queue/queuelistmodel.cpp:65
    #5 0x55cc28eabe4e in QueueListView::insertPackageList(bool) /home/andrew/code/kuroo/trunk/src/queue/queuelistview.cpp:219
    #6 0x55cc28e86b76 in QueueTab::slotRefresh() /home/andrew/code/kuroo/trunk/src/queue/queuetab.cpp:226
    #7 0x55cc28e870ce in QueueTab::slotReload(bool) /home/andrew/code/kuroo/trunk/src/queue/queuetab.cpp:244
    #8 0x55cc28e8e425 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<bool>, void, void (QueueTab::*)(bool)>::call(void (QueueTab::*)(bool), QueueTab*, void**) /usr/include/qt5/QtCore/qobjectdefs_impl.h:152
    #9 0x55cc28e8e425 in void QtPrivate::FunctionPointer<void (QueueTab::*)(bool)>::call<QtPrivate::List<bool>, void>(void (QueueTab::*)(bool), QueueTab*, void**) /usr/include/qt5/QtCore/qobjectdefs_impl.h:185
    #10 0x55cc28e8e425 in QtPrivate::QSlotObject<void (QueueTab::*)(bool), QtPrivate::List<bool>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/qt5/QtCore/qobjectdefs_impl.h:418
    #11 0x7f924a885533 in QObject::event(QEvent*) /var/tmp/portage/dev-qt/qtcore-5.15.10/work/qtbase-everywhere-src-5.15.10/src/corelib/kernel/qobject.cpp:1347
    #12 0x7f924b56834a in QApplicationPrivate::notify_helper(QObject*, QEvent*) (/usr/lib64/libQt5Widgets.so.5+0x16834a)

previously allocated by thread T0 here:
    #0 0x7f924c4dfe18 in operator new(unsigned long) (/usr/lib/gcc/x86_64-pc-linux-gnu/13/libasan.so.8+0xdfe18)
    #1 0x55cc28eab026 in QueueListView::insertPackageList(bool) /home/andrew/code/kuroo/trunk/src/queue/queuelistview.cpp:165
    #2 0x55cc28e86b76 in QueueTab::slotRefresh() /home/andrew/code/kuroo/trunk/src/queue/queuetab.cpp:226
    #3 0x55cc28e870ce in QueueTab::slotReload(bool) /home/andrew/code/kuroo/trunk/src/queue/queuetab.cpp:244
    #4 0x55cc28e8e425 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<bool>, void, void (QueueTab::*)(bool)>::call(void (QueueTab::*)(bool), QueueTab*, void**) /usr/include/qt5/QtCore/qobjectdefs_impl.h:152
    #5 0x55cc28e8e425 in void QtPrivate::FunctionPointer<void (QueueTab::*)(bool)>::call<QtPrivate::List<bool>, void>(void (QueueTab::*)(bool), QueueTab*, void**) /usr/include/qt5/QtCore/qobjectdefs_impl.h:185
    #6 0x55cc28e8e425 in QtPrivate::QSlotObject<void (QueueTab::*)(bool), QtPrivate::List<bool>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/qt5/QtCore/qobjectdefs_impl.h:418
    #7 0x7f924a885533 in QObject::event(QEvent*) /var/tmp/portage/dev-qt/qtcore-5.15.10/work/qtbase-everywhere-src-5.15.10/src/corelib/kernel/qobject.cpp:1347
    #8 0x7f924b56834a in QApplicationPrivate::notify_helper(QObject*, QEvent*) (/usr/lib64/libQt5Widgets.so.5+0x16834a)

SUMMARY: AddressSanitizer: heap-use-after-free /home/andrew/code/kuroo/trunk/src/queue/queuelistitem.h:52 in QueueListItem::parentItem() const
Shadow bytes around the buggy address:
  0x611001369180: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x611001369200: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x611001369280: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x611001369300: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x611001369380: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
=>0x611001369400: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd[fd]
  0x611001369480: fd fd fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x611001369500: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x611001369580: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x611001369600: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x611001369680: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==7696==ABORTING
*** Failure: Exit code 1 ***
