Ich muss mit Gtk eine Anwendung in Vala erstellen, die Tastaturbeschleuniger unterstützt, die vom Benutzer geändert werden können.
Zuerst füge ich der globalen Gtk.AccelMap einen Eintrag hinzu und setze dann den accel_path für die Gtk.MenuItems. Aber es funktioniert nicht. Die Beschleunigungen erscheinen nicht in den Elementen der Menüleiste. Um zu verdeutlichen, was ich versuche, ist hier ein Beispielcode:
// main.vala
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);
// 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 = new Gtk.MenuItem.with_label("Quit");
file_menu.append(quit_mi);
// Register a new accelerator with the global accelerator map
Gtk.AccelMap.add_entry("<MyWindow>/File/Quit", 'Q', Gdk.ModifierType.CONTROL_MASK);
quit_mi.set_accel_path("<MyWindow>/File/Quit");
// Connect signals
quit_mi.activate.connect(Gtk.main_quit);
// 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;
}
Ich benutze:
valac main.vala -o main --pkg gtk+-3.0
um den Quellcode zu kompilieren.
Die Frage ist also: Was fehlt im Code? Ich denke, ich muss etwas anderes tun, aber ich weiß nicht was.
quelle