2015-03-05 3 views
0

Я скопировал код на этом сайте (https://sites.google.com/site/gtkdtutorial/#chapter2_2) и скомпилировал его по dmd2.(dlang, GtkD) Использование меню

import gtk.MainWindow; 
import gtk.Box; 
import gtk.Main; 
import gtk.Menu; 
import gtk.MenuBar; 
import gtk.MenuItem; 
import gtk.Widget; 
import gdk.Event; 

void main(string[] args) 
{ 
    Main.init(args); 
    MainWindow win = new MainWindow("MenuBar Example"); 
    win.setDefaultSize(250, 200); 

    MenuBar menuBar = new MenuBar(); 
    menuBar.append(new FileMenuItem()); 

    Box box = new Box(Orientation.VERTICAL, 10); 
    box.packStart(menuBar, false, false, 0); 

    win.add(box); 
    win.showAll(); 
    Main.run(); 
} 

class FileMenuItem : MenuItem 
{ 
    Menu fileMenu; 
    MenuItem exitMenuItem; 

    this() 
    { 
     super("File"); 
     fileMenu = new Menu(); 

     exitMenuItem = new MenuItem("Exit"); 
     exitMenuItem.addOnButtonRelease(&exit); 
     fileMenu.append(exitMenuItem); 

     setSubmenu(fileMenu); 
    } 

    bool exit(Event event, Widget widget) 
    { 
     Main.quit(); 
     return true; 
    } 
} 

Окно было правильно показано, но оно не умирает, когда я нажимаю [Exit] MenuItem. Я смущен. Есть идеи?

Окружающая среда: Ubuntu 14.04 LTS

+0

Вы пытались отладить обработчик событий? – Bauss

+0

Я попытался вставить «writeln (« test »);», но «test» не отображался. Кажется, что событие не было поднято правильно. – carrot031

+0

Я имел в виду обработчик события gtkd, где обрабатываются все сообщения событий. – Bauss

ответ

0

button-release-event (addOnButtonRelease() в GtkD) неправильный сигнал для подключения к GtkMenuItem. Это низкоуровневое событие GDK; то есть абстракции над необработанным событием, созданным оконной системой, когда пользователь позволяет перейти от кнопки мыши. Он предназначен для обработки пользовательских событий, например, если вы используете GtkDrawingArea.

Вместо этого, вы хотите получить сигнал activate (в GtkD).