Как загрузить карту акселераторов из файла, используя GTK3 в Vala? - PullRequest
2 голосов
/ 08 марта 2012

Я делаю текстовый редактор с использованием 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.

...