Weekly update

  • June 25, 2021
  • Yongha Hwang

Another update!

Safety flag - almost done!

Related : Thunar !121

Interface for safety flag is almost done. A bit more polishing and it would be good to go.


Keep metadata on edit

Related : xfdesktop #68->Exo #64, Exo !43

exo-desktop-item-edit, which is used to edit .desktop files, removed metadata while writing changes. This caused permission bits to be reset without execution bit. It is now patched to preserve metadata (including safety flag and execution bit).

Support for safety flag

Related : Exo !44

While fixing previous issue, I added an optional feature to support safety flag on exo-desktop-item-edit. Now if libxfce4util supports safety flag, .desktop file will be created with safety flag on.

Xfce participation in GSoC 2021

  • June 23, 2021
  • Alexxcon's Software Development Blog

I am a bit late with my blog post .. though I suppose better late than never :D

This year Xfce applied to the Google Summer of Code program and I am happy to tell you that we accomplished to get 3 slots ! (That’s very good, since new organization usually only receive one or two slots)

There was a lot of interest by students. In total 15 proposals were received for Xfce. So sadly we had to refuse several nice proposals. However the number of mentors as well was limited, so that this year Xfce anyhow would not be able to mentor more students.

Now there are 3 very motivated GSoC students supporting Xfce. Allow me to introduce:

Yongha Hwang, who applied for various thunar issues, mostly related to file transmission.

Sergios Anestis Kefalidis, who as well works on thunar, targeting a wide range of features.

Vishal Sharma, who is looking into sample/skeleton panel plugins in different GOI supported languages.

Since I maintain thunar, I am the main mentor of Sergios and Yongha.

These two and as well some other thunar focused GSoC applicants kept me very busy by adding many contributions long before the official coding part started :) Already now I think mentoring for GSoC was a good thing to do. The gain by far outweighs the burden. I don’t have much time left to work on issues myself, though the students overcompensate that by magnitudes.

Here a small taste of the recent activity related to GSoC:

… and that is only thunar. There is as well a lot of activity on exo and libxfce4-util !

Many various smaller tweaks already made it into thunar 4.17.2. Some bigger ones, e.g. issues from the project ideas list are currently in work, or even already landed in the current master.

If you want to take a peek on the upcoming changes and new features already now, you can check the students frequent blog posts:

Yongha Hwang:

Sergios Anestis Kefalidis:

Vishal Sharma:

Hope you will enjoy the upcoming changes!

GTK-Recent and other improvements

  • June 23, 2021
  • Sergios - Anestis Kefalidis
Σέργιος - Ανέστης Κεφαλίδης Support for GTK-Recent and various improvements

 In the introductory blog-post I wrote that for the first month of my GSoC time I had planned to work on supporting the `recent:///` location and on adding some other requested features, most notably the option to save the zoom-level per directory. The time has come for you to take a closer look at what I've been working on.

  • Support for GTK-Recent: A way to easily access recently used files is a staple of contemporary file managers. For that purpose, GTK has a special location on its virtual filesystem called 'recent:///'. Until now users could access this location manually (by typing `recent:///` in the path bar) but because this location wasn't supported files appeared locked and there were a variety of other issues, which rendered it useless. The following MR solves these problems. Users will be able to use the `Recent` location like any other location that Thunar supports. In addition opening a file from Thunar adds it in the list of recently used files (previously files got added to the recently used files only if they were opened by an app that supports GTK-Recent), there is an option to remove files from `Recent` and a new sorting column called `Recency` has been added (only visible in the `Recent` folder).
  • Zoom-level as a per-directory setting: This is a feature that has already been merged, which means that you can try it by using the latest development release. Thunar has supported per-directory settings for quite some time. A significant omission was the ability to use different zoom-levels for different directories (e.g. a different zoom-level for a folder with family photos and a folder with work documents). If you've been waiting for that... rejoice :-)
  • Preference to restore tabs on restart: Lately I've been working on a feature that is pretty common in web browsers, the option to restore the tabs as they were before exiting the program. I've coded a rudimentary version that lacks support for things like the split-view. I'm hoping that in the next few days I'll complete my work on this feature.
  • Restore and show: This is a new option for restoring files from the Trash folder. The goal is to make it easier for users to use the restored files. The existing `restore` option removes the selected files from the Trash folder and places them back in their original locations. Unfortunately, if you don't remember (or check) the location of the now restored files you might have a hard time finding them. With this option the locations of the restored files will be opened as new tabs (I'm not quite sure if following the existing tabs/windows preference is the way to go, more on that later).

 Originally I had planned to accompany this post with a video showcasing these features and talking about some minor details. Unfortunately it looks like my video editing software doesn't support the format that I used to record my footage and it's getting pretty late over here, so I'll keep that for next week's update, stay tuned :^)

Link to all my Merge Requests: link
Previous post Next post

(A bit late) weekly update

  • June 21, 2021
  • Yongha Hwang

Well, it’s a bit late for a weekly update that it should be rather called decadly update. But well, better than nothing!

WIP: Safety flag


I’m still working on safety-flag, which is mentioned in my introduction post and 2nd saturday post. Not much have changed, but now an interface for safety flag is going to be merged into libxfce4util. Also, this flag will now only be used for .desktop files, rather than every executables.

Also, the UI part of this project also got its MR page (Thunar !121). Several discussion later (startig from here), we decided to put checkbox for safety flag on Property->Launcher. Because flicking trusted flag on should also trigger executable flag on, it would be preferrable to show it visually. Thus toggle button for executable flag would also be on Launcher tab. So this would be how it will look like:


Additional update

Related: libxfce4ui !42 (42 is a nice number!)

While I was working on safety flag, I got distracted by the boilerplates used on several XFCE projects, which was a direct copy of thunar_gtk_label_set_a11y_relation(). To use this function across XFCE projects, I ported this to libxfce4ui as xfce_gtk_label_set_a11y_relation(). Doesn’t it feel good when duplicate codes are replaced with a proper function?

Weekly update – transfer queueing, execution safety flag, and MTP

  • June 12, 2021
  • Yongha Hwang

Transfer queueing

Thunar !569

After transfer queueing was introduced, it frequently caused crashes or freezing when working with remote location. This problem was solved by introducing a waiting queue. To be released in Thunar 4.17.4.

  • This patch will not be backported. If you have this problem with Thunar 4.16, it is recommended to set parallel transfer to “Always” to avoid this problem.

  • You might ask about how it was done before. How can a job can be queued when there is no queue? The answer is simple. Since every transfer job runs on a separate thread, it is possible to play a game of musical chairs. Every thread tries to be the only active thread, and if a thread fails to start, it waits until the next opportunity arises. This is easy to implement when parallel transfer is already implemented. But unfortunately, the game did not go well.

WIP: Introduction of an execution safety flag

(I recommend reading Thunar !156 for the context.)

Since the executable bit is not enough to confirm that the file is safe to execute, I am implementing an additional metadata (execution safety flag). Thunar will check this flag even if the execution bit is on, so a user has to confirm that they know that they are launching an executable. This data is contained in GVFS-metadata, and will remember SHA-256 hash value of that file. This will work as a per-file option to allow launching the executable.

I already finished coding a feature to save a hash value per-file and using it to verify executable, and will be added to libxfce4util soon. Interface with this safety flag is still work-in-progress, though.

WIP: MTP freeze


Recently, there are a lot of issue reports about MTP, and most of the complaints are about freeze. A directory under mtp:// that contains a lot of files tends to cause problems. One problem is that icon renderer reads file contents and might clog the main event loop, so I am experimenting with icon rendering right now. Trying to change directory while a directory is loading also freezes the environment, so requesting a file list of the current directory (or cancelling it) might be blocking for some reason.


  • June 9, 2021
  • Sergios - Anestis Kefalidis
Σέργιος - Ανέστης Κεφαλίδης Introduction

 Hello and welcome to the first of a series of blog posts detailing my work in this year's Google Summer of Code (GSoC from now on). Most of you have probably found this page from one of Xfce's development channels, but for those of you who just happened to stumble upon it let me say a few quick words about Xfce. Xfce is a FOSS desktop environment for Unix-like systems. It has a dedicated community of developers and users and it is one of the most widely available DEs. It also happens to be the desktop environment that my/our department uses for its Linux systems.

 Allow me to introduce myself, which is also the main point of this blog post. I am Sergios - Anestis Kefalidis and I am a 3rd year undergraduate student at the department of Informatics and Telecommunications of the University of Athens. This is my second year in GSoC and my first time contributing to Xfce. I've made significant contributions to another high profile open source project, MuseScore with whom I also completed my first GSoC project as you might have guessed.

 This summer I will work on improving Thunar, Xfce's file manager. File managers are one of the most used system programs and the Xfce project considers Thunar one of its core components. A good file manager positively impacts the user experience and allows the user to achieve his/her file managing tasks intuitively and quickly. Thunar is a pretty decent file manager that is unfortunately missing some features that other widely used file managers support. I am aiming to bring the parts of Thunar that are lagging behind up to par with the rest of its rock-solid components. I've already made a significant amount of contributions in the previous months that improve various parts of Thunar, most notably the Trash folder. The time has come for even bigger improvements.

 In the first month of GSoC I have planned to work on 2 things. Support for the `Recent` location (as seen in Nautilus, Dolphin, Windows' File Explorer and others) and support for saving zoom levels as a per-directory setting. I've already started working on these 2 features and the early results are more than encouraging (you can see and test the latest implementations by visiting the Thunar gitlab). I'll talk more about these things in the following weeks.

 In the second month of GSoC I will work on improving Thunar's search functionality which is bare-bones and on implementing a missing part of freedesktop.org's thumbnail spec. More on both of those in the coming weeks.

 As an ending note, I want to congratulate my fellow GSoC students Yongha and Vishal and wish them good luck. I am looking forward to working with all of you on improving Xfce :^)

Link to all my Merge Requests: link
Next post

GSOC 2021

  • June 2, 2021
  • Yongha Hwang

Good news! I have been accepted to GSoC 2021. (Well, actually, it had been 3 weeks since it was announced, so I “was” accepted, to be exact.) I am contributing to XFCE this summer, so I will explain who I am, and what I am going to do.

First stop. So, who am I? My name is Yongha Hwang, and I am an Electronic Engineering sophomore. And that’s enough for personal information to do about contributing, so I’ll explain my experience with Linux, XFCE and C altogether.

I use Linux as my main OS. For developemnt, for surfing web, for entertainment like gaming, and everything else that happens after pressing power button. Although I use it as a main OS, I reinstall linux every 3~6 months. Since I don’t install the same thing everytime, I have used Ubuntu, Xubuntu, Linux Mint (both Cinnamon and MATE), Manjaro, Arch, Gentoo, and et cetra. I have even used Linux from Scratch (with LXQt) as a main OS.

My first experience with XFCE was Xubuntu in 2011. My first linux distribution was Ubuntu, as you have guessed. At that time Ubuntu was packed with Unity DE. It looked very futuristic to me since the only UI experience was with Windows XP and 98. But it did have one big problem to me: it was resource-heavy. The computer I was using at that time was quite slow and Internet Explorer took a whopping 12 seconds to show up. So I had to look for a lighter alternative and Xubuntu was a natural choice. Since then I liked how light DEs look like, so I use light DEs most of the time not because of my low-end PC, but because I like the visual of “nothing fancy but looks fine enough.”

I started programming in C about the time I started using Linux. I have not much to tell about C, though. What I do have to show is a Scheme interpreter, which I made when I was studying SICP (for fun, and I think it’s worth the time.)

So, what do I work on for XFCE? I have set two big goals for this summer.

Fix buggy launch behavior

Some people experience a bug that thunar tries to execute ordinary files like subtitles, and even directories. That happens when these files have execution bit (+x) enabled. I will try to fix this problem by checking MIME type before executing.

Another problem with launch behavior is that someone can slip in an executable file with execution bit on by packing it inside tar archives. This may not be a problem with normal scripts, but .desktop files can change their icon or file name to resemble normal document files. Files (formerly known as Nautilus,the file manager of GNOME) had the same problem before and they introduced safety flags using GVFS metadata as a solution. We can do the same trick because we use GVFS, too.

Improvements to file transmission

Have you ever experienced this: You were copying a lot of files, and somehow it got interrupted. You copy same files again. You skipped everything that was “already copied” to save time, only to find out a year later that the most important file was interrupted during the copy and you are left with the first 10KB of that file. To prevent this issue, you can copy every files again just to be sure, but that is a huge waste of time. If there is an option that leaves a partailly copied file as *.partial and it automatically deletes one, wouldn’t it be a better solution? If I have spare time I also would implement pedantic feature like “verify checksum of every files copied” to use on network drives.

Speaking of network files, Thunar loses metadata when copying files from GVFS. GVFS is a wrapper (naively speaking) for exotic locations like network file shares, smartphones, trash bin, and et cetra. Also, files copied from GDrive are labeled with unreadable names rather than the actual file name. I would also fix this problem.

Well, that’s what as far as I can tell! Congratulations to fellow XFCE GSoC contributors Vishal Sharma and Kefalidis Sergios, and major thanks to my mentor Alexander Schwinn.

Check out my Thunar contributions here: