0

これは私の問題です:

(string,VoidFunc) の辞書を使用して、アプリケーションにキーボード コントロールを追加しようとしています。

「app」という名前のアクションを作成することから始めます。+ key_name("h" など) と実行

action.activate.connect( () => f() ) f は関数 (VoidFunc インスタンス) です。

次に、そのアクションをアプリに追加します。

次に、Gtk.accelerator_name を使用してアクセラレータを作成し、それをアプリに追加します。

私は Gtk.Application をサブクラス化しています。

ここでは、作業を行う 2 つの主要な関数を示します。

private void install_keyboard_support()
{
    Gee.HashMap<string,VoidFunc> actions = new Gee.HashMap<string,VoidFunc>();
    fill_actions(ref actions);
    int i = 0;int sz = actions.size;
    while(i < sz)
    {
        string k = actions.keys.to_array()[i];
        var f = actions[k];
        var action_name = "app." + k;

        var action = new SimpleAction(action_name,null);
        action.activate.connect(() => f());
        this.add_action(action);

        var accel_name = Gtk.accelerator_name(k.data[0],Gdk.ModifierType.CONTROL_MASK);
        this.add_accelerator(accel_name,action_name,null);

        _puts(@"Added accelerator with name = $accel_name and which trigers $action_name action!");

        i++;
    }

    _puts("Installed keyboard support!");
}

private void fill_actions(ref Gee.HashMap<string,VoidFunc> actions)
{
    actions["h"] = () => Process.spawn_command_line_async("xdg-open /usr/share/doc/ewns-viewer/help.html");
}

ご覧のとおり、すべてが機能するはずです:)。

うまくいくことの1つはやっている

this.add_accelerator("<Primary>h","app.help",null)

app.help は、次のように定義された単純なアクションです。

var help_action = new SimpleAction("help",null);
    help_action.activate.connect(() => Process.spawn_command_line_async("xdg-open /usr/share/doc/ewns-viewer/help.html"));
    this.add_action(help_action);
4

1 に答える 1

0

問題は、「アプリ」でアクションを作成したことです。+ k アプリ中に。プレフィックスは必要ありませんでした。

于 2012-07-03T14:27:41.760 に答える