ui/gtk/menu.c

changeset 1256
da0899b1699d
parent 1251
a1623c48c998
child 1257
e201fe56f890
equal deleted inserted replaced
1255:4681df3739f7 1256:da0899b1699d
44 44
45 #include <cx/linked_list.h> 45 #include <cx/linked_list.h>
46 #include <cx/array_list.h> 46 #include <cx/array_list.h>
47 #include <cx/printf.h> 47 #include <cx/printf.h>
48 48
49 static void contextmenu_handler(GtkWidget *widget) {
50 UiContextMenuPopupCallback *cb = g_object_get_data(G_OBJECT(widget), "ui_contextmenu_handler");
51 if(cb && cb->callback) {
52 cb->callback(NULL, cb->userdata);
53 }
54 }
55
49 #if GTK_MAJOR_VERSION <= 3 56 #if GTK_MAJOR_VERSION <= 3
50 57
51 static ui_menu_add_f createMenuItem[] = { 58 static ui_menu_add_f createMenuItem[] = {
52 /* UI_MENU */ add_menu_widget, 59 /* UI_MENU */ add_menu_widget,
53 /* UI_MENU_ITEM */ add_menuitem_widget, 60 /* UI_MENU_ITEM */ add_menuitem_widget,
500 void ui_widget_set_contextmenu(GtkWidget *widget, GtkMenu *menu) { 507 void ui_widget_set_contextmenu(GtkWidget *widget, GtkMenu *menu) {
501 g_signal_connect(widget, "button-press-event", (GCallback) ui_button_press_event, menu); 508 g_signal_connect(widget, "button-press-event", (GCallback) ui_button_press_event, menu);
502 } 509 }
503 510
504 void ui_contextmenu_popup(UIMENU menu, GtkWidget *widget, int x, int y) { 511 void ui_contextmenu_popup(UIMENU menu, GtkWidget *widget, int x, int y) {
512 contextmenu_handler(widget);
505 gtk_widget_show_all(GTK_WIDGET(menu)); 513 gtk_widget_show_all(GTK_WIDGET(menu));
506 #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 16 514 #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 16
507 gtk_menu_popup_at_pointer(menu, NULL); 515 gtk_menu_popup_at_pointer(menu, NULL);
508 #else 516 #else
509 gtk_menu_popup(menu, NULL, NULL, 0, 0, 0, gtk_get_current_event_time()); 517 gtk_menu_popup(menu, NULL, NULL, 0, 0, 0, gtk_get_current_event_time());
1013 gtk_widget_add_controller(widget, GTK_EVENT_CONTROLLER(gesture)); 1021 gtk_widget_add_controller(widget, GTK_EVENT_CONTROLLER(gesture));
1014 g_signal_connect(gesture, "pressed", G_CALLBACK(gesture_button_press), menu); 1022 g_signal_connect(gesture, "pressed", G_CALLBACK(gesture_button_press), menu);
1015 } 1023 }
1016 1024
1017 void ui_contextmenu_popup(UIMENU menu, UIWIDGET widget, int x, int y) { 1025 void ui_contextmenu_popup(UIMENU menu, UIWIDGET widget, int x, int y) {
1026 contextmenu_handler(widget);
1018 gtk_popover_set_pointing_to(GTK_POPOVER(menu), &(GdkRectangle){ x, y, 0, 0 }); 1027 gtk_popover_set_pointing_to(GTK_POPOVER(menu), &(GdkRectangle){ x, y, 0, 0 });
1019 gtk_popover_popup(GTK_POPOVER(menu)); 1028 gtk_popover_popup(GTK_POPOVER(menu));
1020 } 1029 }
1021 1030
1022 #endif 1031 #endif

mercurial