Xfce 4.16pre1 released!

  • September 12, 2020
  • André Miranda

As scheduled we have just released Xfce 4.16pre1 on August 27th (sorry for the long time to write a post about it) - the first development release leading up to Xfce 4.16. And it comes with a boatload of new features and improvements, so prepare yourselves.

Notable Changes


  • Dropping lots of code (Gtk2 support), improving maintainability
  • Adding new icons to all core components to extend Xfce’s visual identity (also: follow freedesktop.org rDNS icon naming standard) New icons

  • A revamped and improved “About Xfce” dialog that also holds general system details About dialog

  • Switch to client-side decorations for settings dialogs CSD Settings

  • Lots of bugfixes everywhere


  • New “Default Applications” dialog: merge between “Mime Settings” and “Preferred Applications” Mime editor

  • Display: Support for fractional scaling (with XRandR), better fallback in case of mis-configuration Display dialog

  • Settings Manager: Improved search/filter


  • New Plugin: “Status Tray” - a merger between the systray and the statusnotifier plugin, will make life for users much easier and less confusing, now supports the panel’s global “icon size” setting Status tray plugin

  • Autohide animation: Makes “autohide” more easily understandable (in the sense of: where did my panel just go?) Autohide animation

  • Launchers now show desktop file actions on right-click (e.g. “Open a New Private Window” for Firefox)
  • The Window list now supports “launching a new instance” of an application in the right-click menu Launch new instance

  • The Workspace switcher can optionally show numbering for workspaces
  • Dark mode for the panel (precondition: your theme has to support dark mode)


  • Copying and moving can be paused Thunar transfer dialog

  • Support for queued file transfer (configurable)
  • Initial support to remember view settings per directory
  • New versioning scheme


  • Removed PDA Tab
  • New versioning scheme


  • Show alt-tab dialog only on the primary monitor (if one is set)

Power Manager

  • Cleaner settings dialog (battery and “on power” settings)
  • Optional visual indicator in the panel when “Presentation mode” is enabled
  • Automatically dismiss low-power notifications upon connecting of a charger


  • Improved gpg-agent support
  • Smaller visual cleanups


  • Allow sorting apps by frecency (frequency and recency)

Thumbnailing Service

  • Support for excluding paths (in the tumbler.rc settings file)

Xfconf Settings Service

  • Enable gsettings backend by default
  • Bash auto-completion for xfconf-query
  • Drop Perl bindings

Where can you get it?

Besides manually compiling tarballs, it’s also possible to use xfce-test (ubuntu_20.04-xfce-4.16pre1 tag) to easily preview Xfce 4.16 without the risk of breaking your system.

Please go ahead try this release if possible, we would be more happy to hear your impressions as well as get bug reports before the final release.

What’s next?

We’re expecting to release Xfce 4.16pre2 at the end of this month and if necessary pre3 will be released in October. If everything goes as planned Xfce 4.16 should be released by November!

Xfce infrastructure in 2020

  • July 18, 2020
  • Skunnyk

Oh boy, 3 years without any blogpost ! So much things happened in the Xfce world!
First, we finally released Xfce 4.14 in August 2019, more than 4 years of effort, a migration to gtk3, and so much new things, but you already know that, and you surely already run it. We are now working on Xfce 4.16 , with the hope to release it this year (yes, in 2020) !
You can read more development news on our blog.
Some buzzwords: new icons, CSD, drop of gtk2 support, UI revamp, and tons of other stuff.

xfce4-setting-manager 4.15

I want to talk a bit about the infrastructure.
Last year, we had a Gandi sponsorship for our servers. I started an Ansible repository with all our services (no more -undocumented- local modifications!), and we migrated a big part of our infra to the new servers (docs, www, wiki etc).

Then came the time to think about our development environment. We used the cgit/gitolite/bugzilla triptych, which worked fine for us for more than a decade, but make difficulty to have new contributor (our workflow was…hm, suboptimal).
We tested differents solutions (mainly Gitea and GitLab), and we opted for the famous Gitlab, already used by multiples open source projects. In the core team we were several to use it at work, so we were in a familiar environment.

For months, a gitlab was running on one of our Gandi instance, to do tests and prepare the transition.

But it was so much work that we never started the real migration. Then came the Covid-19 lockdown. No friends, no bars, lot of free time, so why not spent it on Xfce ?

With Simon (ochosi) and Andre (andreldm), we started to use our own gitlab by opening issues, creating todo, doing merge requests etc related to the migration.
The 1st of May, we finally did the migration to GitLab ! Woot !

Jason (j4yav), working for Gitlab inc, joined us and proposed to help us for the Gitlab CI/CD setup. At the same time, we got a new (sponsored !) VM from FossHost ! Perfect timing, we can now run a dedicated gitlab-runner instance, and we started to use gitlab-ci !

As of July 2020, almost all Xfce components (core, apps, panel plugins) run make distcheck on every merge requests and push to master, thanks to our xfce-build docker container.

xfce gitlab-ci pipelines

Now that we have a beautiful GitLab, merge requests and CI, the only missing part was… the migration from Bugzilla !
I forked and modified bztogl, a tool developped and used by Gnome and Freedesktop folks when they migrated away from bugzilla to gitlab in 2018/2019.
Initially, we wanted to migrate all bugzilla issues to gitlab (opened and closed ones). But we had more than 15000 issues ! We decided to only migrate opened issues. We took the opportunity to do a biiig cleanup of old bugs by closing more than 500 of them.

A important condition of the bugzilla migration was to not lose our 15 years of history.
AndreLDM did a huge work by creating bzstatic, a tool to snapshot a bugzilla instance and make it a simple static html version : https://bugzilla.xfce.org.
He open sourced it at https://gitlab.xfce.org/andreldm/bzstatic !

xfce bugzillla bzstatic

As a result, we now have a modern developments workflow, fully integrated with gitlab. We enabled github and gitlab.com auth on our instance (some people requested it), and since 3 months, we’ve seen a surge of new contributors, issues and merge request ! Really a good news for the Xfce project ! We also had a sponsorship from Scaleway lately, that we need to set up !

So much things left to do, like update all our documentations for the new workflow, work on Xfce 4.16, get rid of our old release manager and use gitlab-ci to generate artifacts, simplify our translation workflow and tons of other things !

Enjoy !

Bountysource update

  • June 26, 2020
  • Simon Steinbeiß

I quickly wanted to share an update to my previous post our leaving Bountysource behind (at least as platform for individual bug bounties).

Bountysource support has informed us that “All bounties on Xfce issues have been refunded and backers notified.”

If you are a backer of one of our issues registered on Bountysource and haven’t been refunded or at least approached please reach out to Bountysource support! (support@bountysource.com)

Meanwhile others (e.g. the elementary project) have also decided to move on for the same reasons…

Thunar, GtkAction and a big mess

  • June 24, 2020
  • Alexxcon's Software Development Blog


My journey into the GtkAction abysses of Thunar began in the mid of 2019. Be warned, it is no story of success. It is rather a story about finding a way through a maze while walking into almost every dead end.

Actually I just wanted to fix #198 (Merge all file-context-menus into one). But somehow things got weird. More than half a year later and after numerous interactive rebases I finally merged my branch into master \o/


The old Thunar used to create the same menu items in different places using different code. In the past that led to inconsistencies. E.g. the location bar only provided a very minimal context menu, no custom actions at all.

location button context menu

From time to time I found myself right-clicking on a location-button, just to find out that there still is no custom action. At some point of maximal annoyance I decided to fix that problem … not sure if I would have done so when I knew how long that road would be.

Looking at thunar-location-buttons.c revealed a lot of duplicated code. thunar-standard-view and thunar-window both used the deprecated GtkActionEntry to define menu item labels and related actions. The location buttons just mirrored parts of that code. On top some other actions were defined in thunar-launcher or had their own classes, inheriting GtkAction.

So yay, lets just copy+paste the missing stuff to the location buttons? Nah, that would be too easy. As a developer who values DRY, it would hurt my belief in clean code to produce more mess.

Let’s Start Hacking

I started to do some coding .. first I created a new widget thunar-menu which internally is a gtk-menu, and moved menu-item creation and the related actions for copy/cut/paste/delete/move_to_trash there to have them at some central place, so they can be reused by different menus. I as well moved the actions from thunar-launcher to thunar-menu (I guess the original intention of the launcher was, to actually launch things, not to manage menu-items) and replaced separate action classes in favour of methods inside thunar-menu.

Meanwhile the location-button-menu and the context-menu, which I used for testing, were populated with some items again.

The old code made massive use of the deprecated GtkAction and GtkActionEntry classes together with GtkUiManager. I did not want to add more G_GNUC_BEGIN_IGNORE_DEPRECATIONS to silence warnings. So I decided to replace the deprecated calls.

Looking into the gtk3 documentation revealed that there now is GAction and GActionEntry which provides some service around accelerator activation, and there is GtkMenu/GMenu for which at that time I had no clear idea why there are two of them.

The documentation of GAction told me that it should not be used for anything related to labels, icons or creation of visual widgets, damn. So at that time I did not see an advantage in using this class. I decided to rather go for GtkMenu together with some custom replacement for GtkActionEntry: XfceGtkActionEntry.

In retrospective ignoring GAction might not have been my smartest move. Meanwhile I understood how GAction can be used with GtkMenu, and I will most likely go for it at some later point.

Regarding GtkUiManager: The definition of menu-items of Thunar was scattered across 7 different *-ui.xml files, making it hard to figure out what belongs together. Because of that I decided to just get rid of the deprecated GtkUiManager and create menu-items in the code instead of predefining their order in xml. IMO the usage of xml files might be nice for static GUI’s, though for dynamic menu-creation it just introduces unnecessary complexity.

So I started to build XfceGtkActionEntry and some support methods.XfceGtkActionEntry is a structure which holds labels, tooltips, icons, types, the accelerator paths and callbacks to the related actions. Like GtkActionEntry it is just a struct and can be filled in a static way.

Next problem: The menus in Thunar so far did not get destroyed, but were updated whenever the selected items got changed, and got shown when needed. That sounded wrong to me. Why should I want to update menu-items, which can be expensive, while no menu is visible at all ? There were bugs about menu flickering and slowness while rubber banding/mass select which seem to be related. Since I anyhow needed to touch that part, I decided to build menus only when they need to be shown.

Things went well, I came to the point where I needed some items from thunar-window, like the zoom-section and the view-specific settings. As well most file-menu items in the thunar-window menu did not work any more since I moved management of them from thunar-launcher to thunar-menu. So next step clearly was: Introduce XfceGtkActionEntry to thunar-window … and than shit hit the fan.

So far the thunar-window menu was always present and took care for any accelerator actions. Since my concept was “create menu on request”, there was no menu instance which could take care for accelerators any more, leading to dysfunctional accelerator keys, rendering my whole concept as faulty .. aargh.

Start all over again

After some time of grieve and doubts I fixed the problem by moving most of the code from thunar-menu back to thunar-launcher, which lifetime is coupled to thunar-window.

From now on thunar-menu was more or less just an convenience wrapper for thunar-launcher … still useful, but sadly it lost its glory. thunar-launcher now builds volatile menu items on request and permanently listens to the related accelerators. Finally accelerators started to work fine, and I was able to continue to fight with the window menu.

I had much more trouble with that menu, too much to tell it here .. however somehow I managed to get it functional, so that it mostly worked like before.

An unpleasant discovery

Later on, while reporting a bug against gtk I learned that the class gtk_accel_map, which I use as a central part will be deprecated soon … aargh again. The gtk devs so far just missed to set a deprecation macro. So it seems like I will need to touch the accelerator part again. This time I plan to make use of the GActionMap interface .. going to be a story for another day.

Testing and open issues

For first testing and code-review I luckily got support of some early adopters. They found many more defects and regressions which kept me busy a long while. Fortunately nothing concept-breaking was found.

While writing this there are still some regressions I introduced, waiting to get fixed by me before a stable release:

And there are related tasks on my agenda, for which I just did not find the time so far:

  • rename thunar-launcher to e.g. thunar-action-manager
  • use thunar-menu in bookmark view
  • use thunar-menu in Tree view
  • many minor things


Finally I ended up with 25 commits and +4717 / -7149 line changes. The occurrence of G_GNUC_BEGIN_IGNORE_DEPRECATIONS got reduced from 250 to 35. The remaining 35 occurrences will further drop when using GtkMenu for bookmark-view/tree-view. That should simplify the move to gtk4 in the future. The location-button context menu shows custom-actions now, and as well some other bugs got fixed with the changes.

So overall, the result does not look too bad I guess.

Well, this blogpost grew by far too long. I hope you nevertheless enjoyed the journey into the Thunar internals!

… enough storytelling for now, I really need to take care of these remaining regressions! :)

Thanks to Reuben, AndreLDM, DarkTrick and others for early testing and bug reporting! Special thanks to AndreLDM, motivating me to write this blogpost at all :D.

Why Bountysource? Why?

  • June 18, 2020
  • Simon Steinbeiß


  1. No more Xfce bugs on Bountysource.com (no support for GitLab)
  2. All remaining bug bounties returned to original backers
  3. Xfce Team account on Bountysource remains intact for now (including all donations so far)

Some background

When we kicked off Bountysource as one way to contribute to Xfce financially, this platform really seemed to be in a different place. It supported a multitude of bugtrackers (including our own, now archived, Bugzilla instance) and the web interface was frankly much more reliable.

When Bountysource decided to change its Terms of Service yesterday (note: the ToS change has been withdrawn since) this was a bit of a wake-up call for us. Let me briefly summarize: All uncollected bounties would after a fixed amount of time would have been withdrawn and the money retained by Bountysource. I can only presume that the business model of the platform is seriously struggling if such a drastic measure is imposed on the community when at the same time the fee of withdrawing/collecting bounties is at a not exactly unconsiderable 10%.

This all comes also after a so-called “inactivity fee” was introduced in 2018, which already felt strange and made me wonder what Bountysource does with all the money it holds for its users to justify such a fee. (Just putting the money in a regular bank account while holding on to it would earn you a little interest, as opposed to costing you – inflation ignored).

In any case, even if my reasoning above is not sound, we took the decision to disable bug bounties for Xfce starting now. This is the only reasonable step because GitLab is not supported, so we don’t have any way of updating our issues or confirming that they were closed (GitHub is the only supported platform these days).

The Bountysource Support team confirmed that all existing bug bounties will be returned to the original backers by them.

Please note that this change does not affect the Xfce Team account. We haven’t decided what our next step will be there but for the time being we will leave things as they are. So you can still donate to the Team and we can withdraw that money to use it for the project (footnote: we have not withdrawn anything so far).

GitLab CI is up and running

  • May 10, 2020
  • Simon Steinbeiß


As announced less than two weeks ago, the next steps in our GitLab migration are following. While we originally planned that the migration from Bugzilla to GitLab issues would be the next step we received generous support from the brand new fosshost project: They provided us with the virtual infrastructure to be able to set up our first GitLab Runner.
A huge thank you to the fosshost for welcoming us aboard (and in record time)!

Standing on the shoulders of the xfce-test project by Florian and with support from Jason we managed to get a Docker container xfce-build up and running that we now use for a (for now: very basic) test, aka “does it build?”. A nice side-effect of having this container published on Dockerhub is that everyone can easily use it locally by running docker pull xfce/xfce-build.

If you’re curious what’s inside the container you can take a look at the Dockerfile. In short we use the latest Ubuntu 20.04 as a basis and then compile the Xfce core libraries based on the latest Git tag on the master branch.

The first project I set a pipeline up for is xfce4-settings. So from now on every commit and merge request will be built automatically and we as developers will receive immediate feedback. If you want to see what this looks like feel free to click here.

Next steps

Enabling the pipeline in more core repos will certainly be the next step. This should be as easy as adding this .gitlab-ci.yml file to the repository’s master branch and enabling the CI/CD feature of the project.

In parallel we have continued to work on the Bugzilla migration, but more on that later. Stay tuned!

Xfce switches to GitLab

  • April 30, 2020
  • Simon Steinbeiß

GitLab is here!

Starting today, May 1, we’re switching from our cgit/gitolite setup to GitLab. Our old server, git.xfce.org, is now a ready-only in-sync mirror (so you can still pull code). Our new server is gitlab.xfce.org.

(The detailed version of this blog post can be read in my announcement on the Xfce Mailing List.)

For users nothing changes.

For distributors nothing changes (presuming you’re using the release tarballs and not Git tags).

For developers and contributors quite a few things change.

  • Most importantly: The Git URL changed, so you need to update the remotes of your local repositories. Feel free to use our helper script.
  • Fork repositories and use branches and merge requests!
  • If you don’t have an account yet (we created quite a few for you regulars already) please sign up! We have opened registrations for GitLab accounts as well as allowing you to register with your GitHub account (if you have one).
    Please poke us on IRC or the mailinglist if you’re lacking repository access or ownership. (By default new users cannot fork before being manually approved. Yes. We are afraid of the spambots.)

Have a nice GitLab!

Xfce 4.14 Maintenance and 4.15 Updates

  • January 14, 2020
  • Simon Steinbeiß

Xfce 4.14 Maintenance

As promised we’re trying to be much better at doing maintenance releases for Xfce 4.14. In part, we had a hard time doing maintenance for Xfce 4.12 because with all the porting work it was hard to focus on fixing Gtk+2 bugs and many bugreports/fixes didn’t apply to both 4.12 and 4.14.
This has now changed and as many bugs apply to both Xfce 4.14 and the current 4.15 development versions we can much more easily backport fixes. Consequently we have already done quite a few maintenance releases so far and this week a few more followed, fixing bugs and featuring improved translations:

  • xfce4-panel 4.14.3 (4.14.2 had a bad release build)
  • xfce4-session 4.14.1
  • xfce4-settings 4.14.2
  • xfdesktop 4.14.2

Xfce 4.15 Updates

One of the major UI changes that we announced for the 4.16 cycle was the switch to GtkHeaderBars or so-called Client-side decorations (CSD). The first big step in this direction has now happened in libxfce4ui, our main user interface library. With the change, almost all dialogs will be converted to using CSD by default without any code changes in existing projects.

There are quite a few advantages we’re looking forward to (improved resize areas, consistent theming etc) by making use of this core Gtk feature.

A few more features that got released (in the xfce4-panel 4.15.1, libxfce4ui 4.15.1, libxfce4util 4.15.0 and xfce4-settings 4.15.0):

  • an improved “About Xfce” dialog that features basics of the system properties
  • improvements to the “Display” dialog (show Aspect Ratio, show Preferred Mode)
  • only show Gtk themes that support Gtk3 in the “Appearance” dialog
  • function for improved application icon lookup (used in Xfce Session’s settings dialog and in the Xfce Panel’s systray settings for now)
  • the panel’ dark mode got enabled by default (which means it will look nicer with Adwaita e.g. on Fedora by default)
  • the Directory Menu plugin now allows you to directly create Folders and Files
  • we also bumped the overall Xfce version to 4.15 so people testing 4.15 packages should see the right version in e.g. the “About Xfce” dialog.

Enjoy! 🙂

(and don’t forget to write bug reports 😉 )

Some Screenshots

Appearance Settings (Adwaita)
Appearance Settings (Greybird)




New Settings Manager layout
New and shiny About dialog



Better app icons (Panel Systray)

Technical background: XfceTitledDialog with CSD

(This subsection is targeted at developers.)

Some components (namely Thunar, Thunar volman, xfce4-panel, xfce4-settings, xfburn and xfce4-mixer) inherit the XfceTitledDialogClass explicitly when creating their dialog object have to be fixed by using the new API introduced in the upcoming release libxfce4ui-4.15.1.
All other dialogs should work out of the box and not require any additional meddling.

  • xfce_titled_dialog_create_action_area (to initialize the custom action area)
  • xfce_titled_dialog_add_button (as an equivalent to gtk_dialog_add_button)
  • xfce_titled_dialog_add_action_widget (as an equivalent to gtk_dialog_add_action_widget)
  • xfce_titled_dialog_set_default_response (as an equivalent to gtk_dialog_set_default_response)

The point of the new API is packing the dialog’s action buttons in the action area at the bottom of the dialog (vs. the standard GtkDialog behavior of packing them in the GtkHeaderBar as part of the window decorations). This means that dialogs remain in their previous/traditional layout with minimal effort on the developer’s/maintainer’s side, in part because the parameters were kept the same as in their upstream GtkDialog counterparts.

Here is a (very simple) example commit of how to port existing dialogs that use XfceTitledDialogClass:

Catfish 1.4.12 Released

  • January 1, 2020
  • Sean Davis
Catfish 1.4.12 Released

Welcome to 2020! Let's ring in the new year with a brand new Catfish release.

What's New

Wayland Support

Catfish 1.4.12 adds support for running on Wayland. Before now, there were some X-specific dependencies related to handling display sizes. These have now been resolved, and Catfish should run smoothly and consistently everywhere.

Catfish 1.4.12 Released
Catfish 1.4.12 on Wayland on Ubuntu 19.10

Dialog Improvements

All dialogs now utilize client-side decorations (CSD) and are modal. The main window will continue to respect the window layout setting introduced in the 1.4.10 release.

I also applied a number of fixes to the new Preferences and Search Index dialogs, so they should behave more consistently and work well with keyboard navigation.

Release Process Updates

I've improved the release process to make it easier for maintainers and to ensure builds are free of temporary files. This helps ensure a faster delivery to package maintainers, and therefore to distributions.

Translation Updates

Albanian, Catalan, Chinese (China), Chinese (Taiwan), Czech, Danish, Dutch, French, Galician, German, Italian, Japanese, Norwegian Bokmål, Russian, Serbian, Spanish, Turkish


Source tarball

$ md5sum catfish-1.4.12.tar.bz2 

$ sha1sum catfish-1.4.12.tar.bz2 

$ sha256sum catfish-1.4.12.tar.bz2 

Catfish 1.4.12 will be included in Xubuntu 20.04 "Focal Fossa", available in April.

Catfish 1.4.11 Released

  • December 21, 2019
  • Sean Davis

What's New?


  • Radio indicators are now displayed on the layout options, making your selection clearer on all themes

Bug Fixes

  • Startup crash when GdkDisplay or GdkScreen calls return None (LP #1822914)
  • Configuration of preferred window layout (Xfce #16085)
  • Finding files in the target directory (Xfce #15985, #16233)
  • Symbolic links looping, causing search to go on forever (Xfce #16272)
  • Home (~) expansion for the start path, simplifying commandline usage:
catfish --path=~/Desktop

Translation Updates

Catfish 1.4.11 Released

Albanian, Belarusian, Catalan, Chinese (China), Chinese (Taiwan), Croatian, Czech, Dutch, French, German, Interlingue, Italian, Korean, Lithuanian, Malay, Norwegian Bokmål, Portuguese, Portuguese (Brazil), Russian, Serbian, Slovak, Spanish, Thai, Turkish


Source tarball

$ md5sum catfish-1.4.11.tar.bz2 

$ sha1sum catfish-1.4.11.tar.bz2 

$ sha256sum catfish-1.4.11.tar.bz2 
Checksums since the Xfce Release Manager is not currently publishing them.

Catfish 1.4.11 will be included in Xubuntu 20.04 "Focal Fossa", available in April.