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