How to catch gtk scroll-event on menu item

c, gdk, glib, gtk, gtk3

Solution

You'll have to enable the GDK_SCROLL_MASK mask to receive the scroll events.

gtk_widget_add_events(GTK_WIDGET(item), GDK_SCROLL_MASK);

Problem

Gtk widgets emit a signal scroll-event. I would like to connect a function to that signal on a MenuItem. The following example code doesn't work. ``` $ 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: ``` How can I catch the scroll-event on the menu item?

Original source