MenuLibre 2.3.2 Released

Fresh out of the oven, MenuLibre 2.3.2 features a refreshed user experience, massively overhauled codebase, and fixes for issues that may not have been reported yet.

MenuLibre 2.3.2 Released

I'm excited to present the latest development release of MenuLibre. This development cycle featured a massive porting effort, numerous usability enhancements, and fixes for bugs that I didn't know existed. This might be the largest update, to-date.

Goodbye Glade

Glade is a powerful design and development tool that has enabled me to build nearly Linux every app that I've worked on over the years. Combined with GtkBuilder, it enables rapid prototyping and development. I frequently discovered new widgets and functionality through Glade's many menus.

The Glade application window. It's complex. It's powerful. Sometimes, it's a mess.

While powerful, Glade can also be limiting. Some widgets simply aren't available, or don't work quite right. Building advanced or dynamic interfaces requires a lot of hacky manipulation outside of Glade. Building repeat and advanced widgets is either difficult or full of repeat effort. Finally, porting between major toolkit versions (GTK 3 to 4, for instance) has varying levels of complexity. I'd rather not dig in too far.

Starting with version 2.3.2, Glade and GtkBuilder are gone from MenuLibre. In their place, I've ported the entire interface to Python code using PyGObject and strictly utilizing GTK libraries. This opens up future development options. I can upgrade the toolkit from GTK 3 to 4 relatively easily. I could migrate the codebase to Vala, or maybe even Rust. It just depends what mood I'm in when I get back to work. :)

New Features

Help Dialogs

Say goodbye to the huge, informative, and difficult-to-use tooltips that would appear while hovering labels in MenuLibre. Instead, I've introduced a new concept: on-demand help buttons! As you hover labels or navigate the interface with your keyboard, a small help icon is presented next to each label. Click this icon to show a dialog with more information, and when necessary, links to the online documentation.

The Copy Button

In the same theme, I've also added an on-demand copy button for the launcher filename displayed at the bottom of the MenuLibre window. Click this to add the filename to your clipboard for whatever nefarious purpose you have. (Either that file is getting deleted or modified directly... I won't judge you.)

Check the bottom right of this screenshot for the new copy button.

User Experience (UX) Improvements

Migrating away from Glade gave me an opportunity to really get familiar with the MenuLibre user experience. The more I worked, the more things I wanted to improve. Enjoy this refreshed application.

The Big, Noticeable Ones

  • Headerbars are now used in more places... but only while headerbars are active for the main window. If you're using a traditional desktop or have opted out of headerbars using the commandline flags, you have nothing to worry about. For everybody else, enjoy seeing the headerbars in select dialogs.
  • The icon browser now makes much better use of space with a full-width search bar and smaller, more consistent icons with padding. The result: a no-nonsense, less stress-inducing icon lookup experience.
  • Separators are now rendered on screen, again. Sometime in recent years, the strikethrough hack I was using stopped working. As a result, separators turned into blank sections in the application treeview. Now, they are displayed with an icon and text, but with reduced opacity to denote their lower priority in the list.
  • Tooltips have been added (you thought I didn't like them anymore!) for the Add and Delete buttons. There are several instances where the Delete button becomes unavailable. The current reason is now displayed when you hover the button. Hopefully this makes somebody a bit less confused.

The Smaller, But Welcome Ones

  • Double-width borders and internal border radii have been removed from the application sidebar. Some themes, Greybird included, still render an additional border between the top of the sidebar and the toolbar. But largely, this is improved.
  • When headerbars are active, the Add button now presents a popover menu instead of a traditional dropdown. This is consistent with the application menu button, just to the left of the Add button.
  • The Execute button is now disabled when a directory or separator is selected. Previously, separators still allowed execution... which caused a nice little crash.
  • The Remove and Clear buttons found in the Category and Action editors are now disabled when appropriate.
  • A new Help button was added to the Command Editor. Clicking this button goes to the online documentation for the Exec key, with examples for the advanced flags.
  • Various spacing and indentation improvements.

Code Quality

Once the porting and feature improvements were complete, I turned toward cleaning up years of accumulated development cruft. Utilizing autopep8, I restructured the codebase with tighter, more consistent formatting. Using Pylance and pygobject-stubs, I was able to identify and resolve several potential bugs. Hopefully, this makes getting through the current backlog of over 90 issues a bit easier.

Translation Updates

Finally, this update features some new translations and translatable strings. I was able to eliminate some unused strings too, so that should make supporting this project just a bit easier. Many thanks to those that are translating MenuLibre into your native language! Here's the updated localisations for version 2.3.2:

Arabic, Basque, Brazilian Portuguese, Breton, Catalan, Chinese (China), Chinese (Hong Kong), Chinese (Traditional), Croatian, Czech, Danish, Dutch, English (Australia), English (United Kingdom), Esperanto, Finnish, French, Frisian, Galician, German, Greek, Hebrew, Icelandic, Italian, Japanese, Kazakh, Korean, Lithuanian, Malay, Malay (Arabic), Malayalam, Norwegian Bokmal, Polish, Portuguese, Portuguese (Portugal), Russian, Serbian, Sinhalese, Slovak, Slovenian, Spanish, Swedish, Turkish, Ukrainian


Source tarball (sig)