Subject: bug#38926: pcmanfm-qt unable to open files by double click

From: Danny Milosavljevic <[email-masked]>
Date: Sun, 5 Jan 2020 23:57:46 +0100

In this case I've tried it myself.  I've invoked 

  gdb $(which pcmanfm-qt)

then 

  r

then I double-clicked an entry and waited until the error dialog window
appeared.

then I DIDN'T CLICK IT AWAY.

then I pressed Ctrl-C in gdb

then

  bt

and so I found:

[...]
#6  0x00007ffff7ea1642 in Fm::FileLauncher::showError(_GAppLaunchContext*, Fm::GErrorPtr const&, Fm::FilePath const&, std::shared_ptr<Fm::FileInfo const> const&) () from /gnu/store/91d7kqg44cfzcav1l2wfn84hr310xvyx-libfm-qt-0.14.1/lib/libfm-qt.so.6
#7  0x00007ffff7e88939 in Fm::BasicFileLauncher::launchWithApp(_GAppInfo*, std::vector<Fm::FilePath, std::allocator<Fm::FilePath> > const&, _GAppLaunchContext*) () from /gnu/store/91d7kqg44cfzcav1l2wfn84hr310xvyx-libfm-qt-0.14.1/lib/libfm-qt.so.6
#8  0x00007ffff7e8ae4d in Fm::BasicFileLauncher::launchFiles(Fm::FileInfoList const&, _GAppLaunchContext*) () from /gnu/store/91d7kqg44cfzcav1l2wfn84hr310xvyx-libfm-qt-0.14.1/lib/libfm-qt.so.6
#9  0x00007ffff7ea11b7 in Fm::FileLauncher::launchFiles(QWidget*, Fm::FileInfoList const&) () from /gnu/store/91d7kqg44cfzcav1l2wfn84hr310xvyx-libfm-qt-0.14.1/lib/libfm-qt.so.6
#10 0x00007ffff7ead5a2 in Fm::FolderView::onFileClicked(int, std::shared_ptr<Fm::FileInfo const> const&) () from /gnu/store/91d7kqg44cfzcav1l2wfn84hr310xvyx-libfm-qt-0.14.1/lib/libfm-qt.so.6
#11 0x000000000044aa55 in PCManFM::View::onFileClicked(int, std::shared_ptr<Fm::FileInfo const> const&) ()
[...]

Therefore, the interesting part would be either Fm::BasicFileLauncher::launchWithApp or Fm::BasicFileLauncher::launchFiles .

The former (inside package "libfm-qt") uses

  g_app_info_get_default_for_type

to get the app to use.  I suspect that that returns "gio-launch-desktop" without the full path--which is wrong. 

Checking glib source code, there's an environment variable GIO_LAUNCH_DESKTOP
that you can set (to the full path of gio-launch-desktop) for a first workaround.

Or, for a complete fix, patch glib-2.60.6/gio/gdesktopappinfo.c 

  tmp = "gio-launch-desktop"

to say

  tmp = "/gnu/store/xyz-glib-.../bin/gio-launch-desktop";

instead.  The latter has the advantage that it magically fixes ALL the applications.

I hope that helps.