2012-04-27 97 views
3

Gtk小部件发出信号scroll-event。我想将一个函数连接到MenuItem上的那个信号。以下示例代码不起作用。如何捕获菜单项上的gtk滚动事件

$ cat scroll-event-on-menu-item.c 
#include <gtk/gtk.h> 

void scroll_cb(GtkStatusIcon* icon, GdkEvent* ev, gpointer userdata) 
{ 
    g_message("scrolled!"); 
} 

void quit_cb(GtkMenuItem* item, GdkEventButton* ev, gpointer userdata) 
{ 
    gtk_main_quit(); 
} 

void click_cb(GtkStatusIcon* icon, GdkEventButton* ev, gpointer userdata) 
{ 
    GtkWidget* menu = gtk_menu_new(); 
    GtkWidget* item = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL); 
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); 
    gtk_widget_show(menu); 
    gtk_widget_show(item); 
    g_signal_connect(item, "button-press-event", G_CALLBACK(quit_cb), NULL); 
    g_signal_connect(item, "scroll-event", G_CALLBACK(scroll_cb), NULL); 
    gtk_menu_popup(GTK_MENU(menu), NULL, NULL, gtk_status_icon_position_menu, 
      icon, ev->button, ev->time); 
} 

int main(int argc, char *argv[]) 
{ 
    gtk_init(&argc, &argv); 

    GtkStatusIcon* icon = gtk_status_icon_new_from_stock(GTK_STOCK_INFO); 
    g_signal_connect(icon, "button-press-event", G_CALLBACK(click_cb), NULL); 

    gtk_main(); 

    return 0; 
} 

$ cat Makefile 
CFLAGS := $(shell pkg-config --cflags gtk+-3.0) 
LDFLAGS := $(shell pkg-config --libs gtk+-3.0) 
scroll-event-on-menu-item: 

我怎么能钓上的菜单项的滚动事件?

回答

7

您必须启用GDK_SCROLL_MASK掩码来接收滚动事件。

gtk_widget_add_events(GTK_WIDGET(item), GDK_SCROLL_MASK); 
+1

另外,在本蟒如'item.add_events(Gdk.EventMask.SCROLL_MASK) '完成。 – 2014-04-25 04:46:13