4
static gboolean button_press(GtkWidget *widget, GdkEvent *event)
6
GdkEventButton *button_event;
8
if(event->type == GDK_BUTTON_PRESS) {
9
button_event = (GdkEventButton *)event;
10
gtk_menu_popup(GTK_MENU(widget), NULL, NULL, NULL, NULL,
11
button_event->button, button_event->time);
18
static GtkWidget *create_message_item(const char *summary, const char *body,
19
const char *timestamp, const char *app_name, const char *icon_name)
27
menu_item = gtk_menu_item_new();
29
sprintf(buffer, "<b>%s</b>\n%s\n<small><i>%s from <b>%s</b></i></small>", summary,
30
body, timestamp, app_name);
32
image = gtk_image_new_from_icon_name(icon_name, GTK_ICON_SIZE_DIALOG);
33
gtk_widget_show(image);
35
label = gtk_label_new(NULL);
36
gtk_label_set_markup(GTK_LABEL(label), buffer);
37
gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
38
gtk_widget_show(label);
40
hbox = gtk_hbox_new(FALSE, 0);
41
gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 15);
42
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
43
gtk_container_add(GTK_CONTAINER(menu_item), hbox);
44
gtk_widget_show(hbox);
46
gtk_widget_show(menu_item);
51
int main(int argc, char *argv[])
55
GtkWidget *menu_items;
59
gtk_init(&argc, &argv);
61
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
62
gtk_widget_set_size_request(window, 200, 100);
63
gtk_window_set_title(GTK_WINDOW(window), "Menu Example");
64
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
66
g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
68
menu = gtk_menu_new();
70
menu_items = create_message_item("Your Friend", "I just wanted to say hello.",
71
"2 minutes ago", "Pidgin", "pidgin");
72
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_items);
74
menu_items = create_message_item("Some Guy", "I had cake for lunch #cakelunchie",
75
"1 hour ago", "Gwibber", "gwibber");
76
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_items);
78
vbox = gtk_vbox_new(FALSE, 0);
79
gtk_container_add(GTK_CONTAINER(window), vbox);
80
gtk_widget_show(vbox);
82
button = gtk_button_new_with_label("Example");
83
g_signal_connect_swapped(G_OBJECT(button), "event", G_CALLBACK(button_press), G_OBJECT(menu));
84
gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, TRUE, 0);
85
gtk_widget_show(button);
87
gtk_widget_show(window);