1

我有一个文件选择器按钮,只要用它选择文件,就会触发标题栏中的更改。它似乎在我的非 flatpak 构建中运行良好。

import gtk.Application : Application;
import gtk.ApplicationWindow : ApplicationWindow;
import gio.Application : GioApp = Application;
import gtkc.gtktypes : GApplicationFlags, FileChooserAction;
import gtk.FileChooserButton : FileChooserButton;

const string AppID = `org.github.flatfcbtest`;

int main(string[] args)
{
    auto app = new App();
    return app.run(args);
}

public class App : Application
{
public:
    this(const string appID = AppID, const GApplicationFlags flags = GApplicationFlags.FLAGS_NONE)
    {
        super(appID, flags);

        addOnActivate(delegate void(GioApp _) {

            auto pw = new PrimaryWindow(this);
            pw.showAll();
        });
    }
}

class PrimaryWindow : ApplicationWindow
{
    this(Application app)
    {
        super(app);
        setSizeRequest(500, 300);

        auto fcb = new FileChooserButton(`Select file`, FileChooserAction.OPEN);
        fcb.addOnFileSet(delegate void (FileChooserButton _) {
            setTitle(`file set!`);
        });
        add(fcb);

    }
}

GtkD 参考

但是,在我的 flatpak 构建中,使用选择器按钮选择的文件没有选择任何内容,并且一直显示(无)。但是我的标题栏会相应地发生变化,所以我知道信号是由文件选择器按钮发出的。

这是我的 flatpak 权限列表:

finish-args:
  - --socket=fallback-x11
  - --share=ipc
  - --filesystem=host
  - --device=all
  - --socket=session-bus

这是什么原因造成的?

4

1 回答 1

1

通常,如果您要运送 flatpak,您希望避免--filesystem=host并直接使用GtkFileChooserNative。此类支持门户,允许用户选择应用程序本身无权访问的文件。

这比给予应用程序完整的文件系统访问权限要好得多。GtkFileChooserNative仍然可以在非 flatpak 应用程序中工作,除非您正在做一些花哨的事情,否则您不应该注意到任何区别。

至于你为什么GtkFileChooser不使用的问题--filesystem=host,我不知道。

于 2020-07-05T20:16:22.660 回答