Commit 365d8ec0be403c9fcf1dacdf5f079715966b7a77

Authored by Perry Werneck
1 parent c3f43bd3

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 }
... ...