Muon Suite 1.1 Beta packages available for Kubuntu 10.04

December 23, 2010

Just a quick note, I’d like to thank EagleScreen a bunch for doing the backporting work necessary to get QApt and Muon 1.1 beta 2 building on Kubuntu Lucid. ¬†(Packages were previously unavailable due to the lack of a recent enough APT package)

The packages are available from the normal PPA. Note that these packages do require KDE 4.5 from the Kubuntu Backports PPA.

EDIT: It seems that there are a bunch of packages in Lucid that cannot coexist with the newer APT required for QApt 1.1. Trying to upgrade will result in their removal. This unfortunately makes it impossible for Muon 1.1 packages to be made for Lucid. Thanks to EagleScreen for trying all the same. ūüôā


Muon Suite 1.1 Beta 2

December 21, 2010

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:

Muon 1.0.90


  • Add an “addons management” feature, where you can manage common addons available for applications.

Addons management

  • Overhaul the appearance of the application details page.

Revamped 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)

QApt 1.0.90


  • 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

QApt/Muon Suite 1.1 Beta released

December 5, 2010

As promised, this weekend I am proud to present QApt and Muon 1.1 Beta. Most of the major changes can be found in the 1.1 alpha release announcement. But, of course, the major feature for version 1.1 of the Suite is the new Muon Software Center, which you can read all about here.

Prerelease packages are available for both the development version of Kubuntu 11.04 via standard means, and for Kubuntu 10.10 via the QApt PPA. Please test them so that the 1.1 release can be great!

The Muon Software Center can be installed by installing the “muon-installer” package, or by clicking here, as long as the PPA is already added and you’ve checked for updates.


Here is a detailed changelog of what has happened since 1.1 alpha:

QApt 1.0.80


  • Added a new QApt::History class. It provides an interface to the APT history¬†¬† ¬†log(s). It provides a list of all entries in the logs, with each entry providing¬†¬† ¬†a start date, a list of packages acted upon as well as any errors that may have¬†¬† ¬†occurred during the transaction.


  • Update authorization code to work with Polkit-Qt-1 0.98.1 and above. ¬†(Affects users of KDE 4.6) An API break in Polkit-Qt-1 caused the QApt Worker to crash whenever it tried to run a command that needed authorization. Support for Polkit-Qt-1 versions older than 0.98 is still present.


Muon Suite 1.0.80



  • Added a common history log viewer to libmuon.


  • Fix a bug with the new DownloadModel where items from previous downloads would remain if the user cancelled the download.

Muon Package Manager


  • Avoid a l10n reverse-lookup for package status by using the UserRoles available to us in QStandardItem to store the QApt::Package::State, and emitting this state when passing it to the PackageView


“Muon” is now the Muon Package Management Suite

December 4, 2010

Starting with version 1.1, “Muon” is now the “Muon Package Management Suite”. (Don’t worry, I won’t try everybody try to say that for the sake of branding :P) The Muon suite is made up of the following components:

  • The Muon Package Manager. (Which has heretofore been called “Muon”) Its focus has been and will remain hardcore package management with a sane GUI.
  • The Muon Updater, an update manager
  • Finally and with grand introduction, The Muon Software Center.

Yep, the application-centric Muon GUI I’ve been hinting about for the past few blogs will in fact be included in the 1.1 release. The Muon Software Center is designed for ease-of-use, so that anybody can search for and install applications without being bothered about “packages”. But I know that everybody just wants to see the shinies, so here they are:

Screenshot Tour

The Main View

This is what you first see when you start the Muon Software Center. The default view is a categorical view, and by clicking any of the software sources in the sidebar you can view the contents of that particular source, such as a PPA.


Application lister

This is the application list that you get when you enter a category/subcategory, a particular software source, or when you perform a search.


Showing a single PPA

PPA browsing is quite easy.


The search feature is a near-instant way to find the applications you want. Blazingly fast. Seriously.


When you click “More Info” for any application you are brought to this view. The screenshot thumbnails fade in with a nice animation and background shadow after they have been downloaded, and clicking on one brings up a full-size version in a dialog window. The details page is going under some renovation at the moment, so they layout probably will change.


Removing Amor

Installations and removals can be queued, much like in Ubuntu’s Software Center. The action button changes into a progress bar that shows the progress of the installation/removal.


Application Launcher

The Application Launcher allows you to run your newly-installed applications right away.


The History View

The History View is an easy way to figure out just when you installed that one game with a fully searchable and filterable history log. The Muon Package Manager will be getting an identical history viewer.


I plan to do a Muon Suite 1.1 beta release some time over the next two days along with a QApt 1.1 beta. I’ll give the technical rundown with the release announcements, but I thought I’d give you the good stuff early. (As a note for regular readers of my blog, the Muon Software Center is what prompted me to do my KRatingPainter optimizations. Scrolling the applications list was seriously slow before them. It’s nice and smooth now, though. ūüôā

I probably won’t work much more on the Muon Updater for 1.1. I’ll probably rework the GUI to make it more update-centric in 1.2.

Stay tuned for the update this weekend, and thanks for reading.