Comment by dylan-m
4 years ago
> … but something like a file chooser cannot be its own program?
That's happening! Gtk 3 and 4 include GtkFileChooserNative[1]. It works like a file dialog except the application doesn't know about its widgets. That means it can proxy another application.
So if you're running a Gtk app in a sandbox like Flatpak or Snap, Gtk will use the Xdg file chooser portal[2]. In GNOME, this is implemented by an application (in the host) which, itself, creates a GtkFileChooser. In the future, it could be a beefier application. One benefit of that taking a while to happen is, once the implementation gets fancier, there won't be too many weird mismatched applications.
(Also, I mention GNOME, but it's important to notice the file chooser portal is itself platform neutral; KDE apps use this, too, and the implementation depends on what desktop you are running. Yay, decoupling!).
Not everything uses GtkFileChooserNative, but pretty much any recent Gtk app that doesn't have weird requirements probably does. Off the top of my head, Firefox, Secrets, Bottles, GNOME Builder and GNOME Text Editor (although they still ask for access to all of the of the files for other reasons), … even Slack and VS Code! (Electron switched over recently).
[1] https://docs.gtk.org/gtk4/class.FileChooserNative.html
[2] https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.free...
What I don't understand is why it took so long.
That bundling file chooser with a GUI framework is a bad idea should be obvious since well, ... Java Swing?.
And a easy to use system interface for a file chooser isn't hard to make, could have been (preferable) a binary you call and communicate with pipes with or similar or could have been something else (e.g. shared object).
It's kinda sad that the various Linux communities where so focused on their GUI framework being the best that it didn't happen until it was technically needed (for sandboxing) ...
EDIT just to be clear 95+% of applications could use a cmd with Linux style arguments which once done emits the selected file(s) to stdout, but there are a minority of advanced use-cases which require a bit of two way communication. Through most of them are bad ideas anyway, so maybe that could have been ignored.
Was it a thing anywhere except recently? Going through some different native Windows apps, I see a host of different file choosers (many of which were once "the one" for their version of Windows), and they all belong to the same process as their respective applications. Definitely not to a privileged service. (Unless Windows is doing something exceptionally fancy here?).
A lot of this stuff was "decided" back when we had serious memory constraints, and less technology to manage them. Switching processes was costly. Running the file chooser in the same application was an excellent compromise. A solution. (I remember an article about this problem in the context of early MacOS, along with drag & drop and the like. Will share if I find it).
In addition, having the file chooser in-process makes sense if you're trying to appease app developers, who think they want the ability to change everything. In particular, they'd really like to add a custom preview widget and some other gizmos to the file chooser. Photoshop puts all sorts of buttons in its Export dialog, for instance. And because Photoshop does it, a bunch of other applications think they should, too. And they still want to, even if they're using Gtk.
Saying "this is dumb, we need this dialog to be a simpler interface for [reasons] and if your app has a weird file dialog you'll have to deal with it" is a very decisive action, and it is not without friction. So I think the reason this took so long is partly an accident of history (the bad solution stuck because it was too late by the time we could afford the good solution), and partly just luck: things reached an inflection point where app developers actually get something (sandboxing and clever app containers) in exchange for the inconvenience.
> A lot of this stuff was "decided" back
But the time where the overhead mattered in any way is over since well over a decade.
Even when e.g. GTK3/QT5 was released the overhead of a out-of-process file chooser was more then irrelevant.
> makes sense if you're trying to appease app developers,
I have yet to see a single application which uses that for any reassemble thing which couldn't also work with a native file chooser (e.g. custom preview images) or can be handled well outside of the file chooser (but then I'm on Linux since quite a while, but this is about Linux in the end).
I have been hearing complains about non-native file chooser pretty much since I started using Linux 12? years ago. In difference to very few Linux programs customizing anything but filters in a file chooser.
So I don't buy that it's inconvenient for developers to any relevant degree (wrt. Linux) the very few application which insist on it still can roll their own file picker by using on of the "guaranteed to pop up" custom file picker libraries.
One the other hand having file picking as a system service would have lead to more consistent appearance, more convenience (consistent system interactions) and more accessibility (e.g. alternative system file picker specialized for blind people).
So you will have a hard time convincing me that it wasn't dump to not switch to native file picker around a decade ago when GTK3/QT5 came out, sure there where reasons, but there had been much more reasons in favor of it then against. It's just not a decision anyone ever did actively I guess, because not making a decision is easier then people across distros/GUI frameworks agreeing to making a decision.