Strange Caja Behavior

In the house network the Caja file manager started launching with files in detailed list view sorted by modification date rather than by name. A single click in the Name column header fixed the issue for the session. The behavior was ignored for several days until accepting that something was broken and finding time to investigate.

Problems like this don’t happen without reason.

Adding to the curiosity is Caja did not exhibit this behavior with two user accounts in the house network.

Finding the root cause required several sittings. Comparing files from the unaffected user accounts did not help. A decent backup strategy helped. Eventually the cause was identified through a modified $HOME/.config/user-dirs.dir file.

The difference seemed to be changing XDG_DOWNLOAD_DIR="$HOME/Downloads" to XDG_DOWNLOAD_DIR="$HOME/". This was deceiving. The root cause was actually deleting the $HOME/Downloads directory. In the house network there is a common public downloads directory that is identified in the gtk-bookmarks file. The XDG_DOWNLOAD_DIR location can be changed with each user account, but the common directory is where many downloads are stored.

The behavior was repeatable — log out of the X session, delete $HOME/Downloads, log in, and the Caja default sort order changed. Restore the directory and the default sort order was by name.

Browsing the Caja code seems to indicate Caja is designed with a presumption that $HOME/Downloads exists, as well as $HOME/Desktop and $HOME/.local/share/Trash. When $HOME/Downloads does not exist and is not defined then the default sort order changes. The code reveals that xdg-user-dirs-update is called with the set parameter when certain XDG user directories do not exist and are not defined. While $HOME/.config/user-dirs.dir was not directly responsible for the sort behavior, the file always got modified on first launch of Caja. The file would be modified with XDG_DOWNLOAD_DIR="$HOME/" when no such entry existed.

The cure is having a $HOME/Downloads directory even if unused and not needed or explicitly defining XDG_DOWNLOAD_DIR.

When the sort order is changed manually, this information is retained in a binary file at $HOME/.local/share/gvfs-metadata/home.

While ensuring that $HOME/Desktop and $HOME/.local/share/Trash exists makes sense, forcing $HOME/Downloads to exist does not. XDG is a standard, but software should not be designed to presume that additional default XDG user directories must exist.

The fundamental mystery is although presumptions often are necessary in code, why default to sorting by modified date rather than name?

The question probably is academic. GTK software soon will be fading away in the house network.

Posted: Category: Usability Tagged: MATE

Next: Updating an Old Virtual Machine

Previous: Icon theme not found