Commit 365d8ec0be403c9fcf1dacdf5f079715966b7a77
1 parent
c3f43bd3
Exists in
master
and in
4 other branches
Implementing popup menu on tab labels.
Showing
1 changed file
with
21 additions
and
2 deletions
Show diff stats
src/objects/window/page.c
... | ... | @@ -35,6 +35,7 @@ |
35 | 35 | #include <v3270/print.h> |
36 | 36 | |
37 | 37 | //---[ Gtk Label with customized popup-menu ]--------------------------------------------------------------------------------------- |
38 | + | |
38 | 39 | typedef struct _pw3270TabLabel { |
39 | 40 | |
40 | 41 | GtkLabel parent; |
... | ... | @@ -50,10 +51,28 @@ |
50 | 51 | G_DEFINE_TYPE(pw3270TabLabel, pw3270TabLabel, GTK_TYPE_LABEL); |
51 | 52 | |
52 | 53 | |
53 | - static gboolean tab_label_button_press(GtkWidget *widget, GdkEventButton *event) { | |
54 | + static void popup_menu_detach(GtkWidget G_GNUC_UNUSED(*label), GtkMenu *menu) { | |
55 | + | |
56 | + debug("%s",__FUNCTION__) | |
57 | + | |
58 | + gtk_widget_destroy(GTK_WIDGET(menu)); | |
59 | + | |
60 | + } | |
61 | + | |
62 | + static gboolean tab_label_button_press(GtkWidget *label, GdkEventButton *event) { | |
63 | + | |
64 | + if (event->button == 3 && event->type == GDK_BUTTON_PRESS) { | |
65 | + | |
66 | + GtkWidget * menu = gtk_menu_new(); | |
54 | 67 | |
55 | - debug("%s(%u)",__FUNCTION__,event->button); | |
68 | + debug("menu=%p",menu); | |
56 | 69 | |
70 | + gtk_menu_attach_to_widget(GTK_MENU(menu), GTK_WIDGET(label), popup_menu_detach); | |
71 | + g_signal_emit_by_name(GTK_LABEL(label),"populate-popup",menu); | |
72 | + gtk_menu_popup_at_widget(GTK_MENU(menu),label,GDK_GRAVITY_SOUTH_WEST,GDK_GRAVITY_NORTH_WEST,(GdkEvent *) event); | |
73 | + | |
74 | + return TRUE; | |
75 | + } | |
57 | 76 | |
58 | 77 | return FALSE; |
59 | 78 | } | ... | ... |