The second beta of the Muon Package Management Suite (as well as its supporting library LibQApt) version 1.1 is now available. The focus of this release is to fix bugs found during the testing of the first beta, as well as UI tweaks to the new Muon Software Center. Packages for K/Ubuntu 10.10 are available from the QApt PPA. (Of interest are the muon and muon-installer packages)
Here’s a detailed list of what’s changed since Beta 1:
- Add an “addons management” feature, where you can manage common addons available for applications.
- Overhaul the appearance of the application details page.
- Move the progress bar in the ApplicationExtender into the ApplicationDelegate itself. This way you can see applications that are being installed/uninstalled without having to click on them to extend the extender.
- Get rid of the unused status bar in the Muon Software Center. It was only slowing down startup time.
- Use the new QApt::Backend::Package(QLatin1String) overload to find out what package our Application represents. Slightly speeds up ApplicationBackend::init()
- Create one KRatingPainter in the ApplicationDelegate constructor, and don’t create a new one for every paint()
- Use the new QApt::Backend::areChangesMarked() function. This avoids constructing a QApt::PackageList as well as 67,000 calls to QApt::Package::state() in the Backend::markedPackages() function
- Make reloading the Muon Software Center’s ApplicationBackend two-staged so that we can both delete things before they become invalid and cause crashes, while at the same time not reloading too early and causing crashes. (Bug 259026)
- Don’t bump the Muon Software Center’s current transaction pointer on CommitErrors; A CommitChangesFinished signal will still fire in this case and workerEvent will handle this for us. This fixes a crash where errorOccurred would bump the iterator to the end, and then workerEvent would try to use the iterator and crash.
- Watch for the search view’s destruction and set the pointer back to 0. This way searching, going back to top-level, navigating to some other categories, and then doing another top-level search doesn’t crash the Muon Software Center.
- Ditch our KIconLoader stuff and use straight KIcon. The KIconLoader stuff led to some icons not being found, and some ones with transparent backgrounds having a loss in quality. On the downside, apps without an icon have the generic “unknown” icon rather than the “applications-other” icon.
- Blacklist any apps that have “kdebase-runtime”, “kdepim-runtime” or kdelibs5-plugins as a package, since removing these would remove most of KDE.
- We must clear the Muon Software Center’s old category pointers from the list after they are deleted, else the list grows by ~200 bytes in useless pointers each reload.
- In the Muon Software Center, don’t under any circumstances show the ApplicationLauncher when there are no apps to show. (E.g. in the case of a commit failure where the package is still installed or somesuch)
- Fix a bug where the progress bar in the Muon Software Center would say “Removing” when you would install/remove addons for an already-installed App.
- Use proper horizontal size hints for libmuon’s PackageDelegate.
- Don’t enable the Muon Package Manager’s search widget before the package list is populated, so that it is impossible to try to search before the backend has initialized. (And crash) In theory this sort of thing could only happen under valgrind-levels of load, but for the sake of being proper this is should be fixed.
- Bump up from KCategoryDrawerV2 to V3 for the Muon Software Center’s category drawer. Fixes some compile warnings.
- Fix a small memory leak of QPropertyAnimations in the Muon Software Center.
- Move libmuon to the top of the link list, so that ld can link it when the –as-needed flag is passed to it. (gold is unaffected)
- Add some new functions: recommendsList(), suggestsList(), enhancesList() and enhancedByList() to return QStringLists of the names of packages that have various relational statuses with the Package.
- Added an areChangesMarked() function to provide an easier/more efficient way to check if there are pending changes without checking the emptiness of the QApt::PackageList that Backend::MarkedPackages() constructs and returns.
- API documentation updates, including making note of which functions are asynchronous and have signals to report events/data.
- Add a Backend::package() overload that takes a QLatin1String. If you can use this overload, it is more efficient since you don’t have to go QString -> ascii -> latin1 -> const char.
- Make the regular Backend::package() implementation use the QL1S overload. This is slightly more efficient since we can convert directly from QString -> latin1 without converting to ascii in between (since APT package names will always be latin1)
- Use the new Backend::package(QL1S) overload inside Backend::search(). the QL1S overload is faster in the first place, plus since Xapian gives us an std::string it is also faster to go to QL1S than to QString.
- Since package names are always latin1-compliant, prevent the unnecessary conversion of const char * -> std::string -> QString::fromAscii -> QString::fromLatin1 by using QLatin1String to wrap around the const char *, making the conversion process look more like const char * -> QL1S -> QString::fromLatin1.
- Fixed an infinite loop in the Backend::search(QLatin1String) overload introduced in Beta 1. The QString::toLatin1() function returns a QByteArray when I thought it returned a QLatin1String, and my use to toLatin1() still compiled because there is a QByteArray constructor for QString, which made the search() overload use the normal search function in an infinite loop.
- Fix a potential problem with homepage URLs with UTF8 characters not displaying correctly.
- Fix a small memory leak in PackagePrivate. We had a pointer that we allocate to in the Package constructor which we weren’t deleting in the PackagePrivate destructor