rendered paste body#include <gtk/gtk.h>void item_activate(GtkWidget *item, gpointer udata){ gchar *data = g_object_get_data(G_OBJECT(item), "data"); printf("%s clicked\n", data);}gboolean button_release_event(GtkWidget *Event, GdkEventButton *event, gpointer data){ if(event->button != 3) return FALSE; GtkWidget *item, *menu, *smenu,*sitem; menu = gtk_menu_new(); item = gtk_menu_item_new_with_label("sub menu"); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); smenu = gtk_menu_new(); sitem = gtk_menu_item_new_with_label("a"); g_object_set_data_full(G_OBJECT(sitem), "data", g_strdup("a"), g_free); g_signal_connect(G_OBJECT(sitem), "activate", G_CALLBACK(item_activate), NULL); gtk_menu_shell_append(GTK_MENU_SHELL(smenu), sitem); sitem = gtk_menu_item_new_with_label("b"); g_object_set_data_full(G_OBJECT(sitem), "data", g_strdup("b"), g_free); g_signal_connect(G_OBJECT(sitem), "activate", G_CALLBACK(item_activate), NULL); gtk_menu_shell_append(GTK_MENU_SHELL(smenu), sitem); gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), smenu); gtk_widget_show_all(menu); gtk_menu_popup(GTK_MENU(menu), NULL,NULL,NULL,NULL, event->button, event->time); return TRUE;}int main(int argc, char **argv){ gtk_init(&argc, &argv); GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); GtkWidget *event = gtk_event_box_new(); gtk_widget_set_size_request(event, 200,400); gtk_container_add(GTK_CONTAINER(window), event); g_signal_connect(G_OBJECT(event), "button-release-event", G_CALLBACK(button_release_event), NULL); gtk_widget_show_all(window); gtk_main();}