简体   繁体   中英

How to catch gtk scroll-event on menu item

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?

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

gtk_widget_add_events(GTK_WIDGET(item), GDK_SCROLL_MASK);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM