Gtk.Application关键加速器无法正常工作

时间:2012-07-03 12:33:27

标签: gtk vala

这是我的问题:

我正在尝试使用(string,VoidFunc)

字典向我的应用程序添加键盘控件

我首先创建一个名为“app”的动作。 + key_name(例如“h”)并执行

action.activate.connect(()=> f())其中f是函数(VoidFunc实例)。

然后我将该操作添加到我的应用中。

然后我使用Gtk.accelerator_name创建一个加速器并将其添加到我的应用程序。

我正在继承Gtk.Application。

以下是完成这项工作的两个主要功能。

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");
}

如你所见,一切都应该有效:)。

有一件事是做的

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);

1 个答案:

答案 0 :(得分:0)

问题是我用“app”创建了动作。应用时+ k。不需要前缀。