Я делаю текстовый редактор с использованием GTK3 в Vala.У меня есть Gtk.MenuBar
в Gtk.Window
, и я хочу использовать ускорители, чтобы легко активировать Gtk.MenuItems
.Но я хочу, чтобы пользователь мог изменять комбинации клавиш, поэтому я загружаю спецификации ускорителей из файла, используя метод Gtk.AccelMap.load("accels")
.Однако после вызова этого метода ускорители не загружаются: пункты меню не имеют AccelLabels
и не активируются, когда я нажимаю комбинации клавиш.Вот два файла, над которыми я работаю.Первый файл содержит небольшую версию моего приложения (чтобы показать, что я пытаюсь сделать), а второй - файл accels, из которого я загружаю спецификации accels, и они должны находиться в одном каталоге.1007 * 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;
}
файл "accels"
; main GtkAccelMap rc-file -*- scheme -*-
; this file is an automated accelerator map dump
;
; (gtk_accel_path "<MyWindow>/File/Quit" "<Control>q")
Итак, почему это не работает?Что мне делать до или после загрузки файла acl?
PS: я не хочу использовать Gtk.UIManager
.