我在Vala中使用GTK3制作文本编辑器。我在Gtk.MenuBar
中有Gtk.Window
,我想使用加速器轻松激活其Gtk.MenuItems
。但我希望用户能够更改密钥组合,因此我使用方法Gtk.AccelMap.load("accels")
从文件加载加速器规范。但是,在调用此方法后,未加载加速器:菜单项没有AccelLabels
,并且在按下组合键时未激活。这是我正在处理的两个文件。第一个文件包含我的应用程序的小版本(以显示我正在尝试做的事情),第二个文件是加载accels规范的accels文件,它们必须位于同一目录中。
main.vala
// Compile me with: valac main.vala -o main --pkg gtk+-3.0
public class MyWindow: Gtk.Window {
public MyWindow() {
this.set_default_size(500, 500);
var main_box = new Gtk.VBox(false, 0);
this.add(main_box);
var accel_group = new Gtk.AccelGroup();
this.add_accel_group(accel_group);
// Load the accelerators from the file
Gtk.AccelMap.load("accels");
// Create the action
var quit_action = new Gtk.Action("file-quit", "Quit", "Quit the application", null);
quit_action.activate.connect(()=>{
Gtk.main_quit();
});
quit_action.set_accel_group(accel_group);
quit_action.set_accel_path("<MyWindow>/File/Quit");
// Menubar
var menubar = new Gtk.MenuBar();
main_box.pack_start(menubar, false, false, 0);
var file = new Gtk.MenuItem.with_label("File");
menubar.add(file);
var file_menu = new Gtk.Menu();
file.set_submenu(file_menu);
var quit_mi = (Gtk.MenuItem)quit_action.create_menu_item();
file_menu.append(quit_mi);
// Label
var label = new Gtk.Label("My Window");
main_box.pack_start(label, true, true, 0);
this.destroy.connect(Gtk.main_quit);
}
}
int main(string[] args) {
Gtk.init(ref args);
var win = new MyWindow();
win.show_all();
Gtk.main();
return 0;
}
“加速”文件
; main GtkAccelMap rc-file -*- scheme -*-
; this file is an automated accelerator map dump
;
; (gtk_accel_path "<MyWindow>/File/Quit" "<Control>q")
那么,为什么这不起作用?在加载accel文件之前或之后我该做什么?
PS:我不想使用Gtk.UIManager
。
答案 0 :(得分:0)
见:https://docs.xfce.org/faq#keyboard_related ” 自 GTK3 以来,此功能已被禁用,这意味着已迁移到 GTK3(例如 xfce4-terminal)的 Xfce 应用程序不支持它。 请参阅特定应用程序的文档以了解如何配置其快捷方式。 "