Commit 3a7c025414a88f2dd4dd8ed806aec840d153649c
1 parent
4a8250dc
Exists in
master
and in
4 other branches
Adding popup menu over OIA.
Showing
4 changed files
with
48 additions
and
8 deletions
Show diff stats
src/objects/window/page.c
| ... | ... | @@ -108,7 +108,8 @@ |
| 108 | 108 | static void connected(GtkWidget *terminal, const gchar *host, GtkWindow * window); |
| 109 | 109 | static void destroy(GtkWidget *terminal, GtkWindow * window); |
| 110 | 110 | static void close_page(GtkButton *button, GtkWidget *terminal); |
| 111 | - static gboolean on_popup_menu(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window); | |
| 111 | + static gboolean terminal_popup(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window); | |
| 112 | + static gboolean oia_popup(GtkWidget *widget, guint field, GdkEvent *event, pw3270ApplicationWindow * window); | |
| 112 | 113 | static void label_populate_popup(GtkLabel *label, GtkMenu *menu, GtkWidget *terminal); |
| 113 | 114 | |
| 114 | 115 | gint pw3270_application_window_append_page(GtkWidget * window, GtkWidget * terminal) { |
| ... | ... | @@ -136,9 +137,11 @@ |
| 136 | 137 | g_signal_connect(G_OBJECT(terminal), "session_changed", G_CALLBACK(session_changed),label); |
| 137 | 138 | g_signal_connect(G_OBJECT(terminal), "disconnected", G_CALLBACK(disconnected),window); |
| 138 | 139 | g_signal_connect(G_OBJECT(terminal), "connected", G_CALLBACK(connected),window); |
| 139 | - g_signal_connect(G_OBJECT(terminal), "popup", G_CALLBACK(on_popup_menu), window); | |
| 140 | 140 | g_signal_connect(G_OBJECT(terminal), "destroy", G_CALLBACK(destroy),window); |
| 141 | 141 | |
| 142 | + g_signal_connect(G_OBJECT(terminal), "popup", G_CALLBACK(terminal_popup), window); | |
| 143 | + g_signal_connect(G_OBJECT(terminal), "oia-popup", G_CALLBACK(oia_popup), window); | |
| 144 | + | |
| 142 | 145 | g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(close_page), terminal); |
| 143 | 146 | |
| 144 | 147 | gtk_box_pack_start(GTK_BOX(tab),label,FALSE,FALSE,0); |
| ... | ... | @@ -285,7 +288,7 @@ |
| 285 | 288 | |
| 286 | 289 | } |
| 287 | 290 | |
| 288 | - static gboolean on_popup_menu(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window) { | |
| 291 | + static gboolean terminal_popup(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window) { | |
| 289 | 292 | |
| 290 | 293 | GtkWidget * popup = window->popups[PW3270_APP_WINDOW_POPUP_OVER_UNSELECTED_AREA]; |
| 291 | 294 | |
| ... | ... | @@ -307,12 +310,28 @@ |
| 307 | 310 | |
| 308 | 311 | } |
| 309 | 312 | |
| 313 | + static gboolean oia_popup(GtkWidget *widget, guint field, GdkEvent *event, pw3270ApplicationWindow * window) { | |
| 314 | + | |
| 315 | + debug("%s(%u)",__FUNCTION__,field); | |
| 316 | + | |
| 317 | + GtkWidget *popup = window->popups[PW3270_APP_WINDOW_POPUP_OVER_OIA]; | |
| 318 | + | |
| 319 | + if(!popup) | |
| 320 | + return FALSE; | |
| 321 | + | |
| 322 | + gtk_widget_show_all(popup); | |
| 323 | + gtk_menu_set_screen(GTK_MENU(popup), gtk_widget_get_screen(widget)); | |
| 324 | + gtk_menu_popup_at_pointer(GTK_MENU(popup), event); | |
| 325 | + | |
| 326 | + return TRUE; | |
| 327 | + } | |
| 328 | + | |
| 310 | 329 | static void label_populate_popup(GtkLabel G_GNUC_UNUSED(*label), GtkMenu *menu, GtkWidget *terminal) { |
| 311 | 330 | |
| 312 | 331 | static const struct Item { |
| 313 | 332 | const gchar * label; |
| 314 | 333 | GCallback callback; |
| 315 | - gboolean (*check_permission)(GtkWidget *widget) | |
| 334 | + gboolean (*check_permission)(GtkWidget *widget); | |
| 316 | 335 | } items[] = { |
| 317 | 336 | |
| 318 | 337 | { | ... | ... |
src/objects/window/private.h
| ... | ... | @@ -49,6 +49,7 @@ |
| 49 | 49 | enum pw3270ApplicationWindowPopup { |
| 50 | 50 | PW3270_APP_WINDOW_POPUP_OVER_SELECTED_AREA, |
| 51 | 51 | PW3270_APP_WINDOW_POPUP_OVER_UNSELECTED_AREA, |
| 52 | + PW3270_APP_WINDOW_POPUP_OVER_OIA, | |
| 52 | 53 | PW3270_APP_WINDOW_POPUP_WHEN_OFFLINE, |
| 53 | 54 | |
| 54 | 55 | PW3270_APP_WINDOW_POPUP_COUNT | ... | ... |
src/objects/window/window.c
| ... | ... | @@ -209,10 +209,11 @@ |
| 209 | 209 | g_autoptr(GtkBuilder) builder = pw3270_application_get_builder("window.xml"); |
| 210 | 210 | |
| 211 | 211 | // Load popup menus. |
| 212 | - const gchar * popup_menus[G_N_ELEMENTS(window->popups)] = { | |
| 213 | - "popup-over-selected-area", | |
| 214 | - "popup-over-unselected-area", | |
| 215 | - "popup-when-offline" | |
| 212 | + const gchar * popup_menus[PW3270_APP_WINDOW_POPUP_COUNT] = { | |
| 213 | + "popup-over-selected-area", // PW3270_APP_WINDOW_POPUP_OVER_SELECTED_AREA | |
| 214 | + "popup-over-unselected-area", // PW3270_APP_WINDOW_POPUP_OVER_UNSELECTED_AREA | |
| 215 | + "popup-over-oia", // PW3270_APP_WINDOW_POPUP_OVER_OIA | |
| 216 | + "popup-when-offline" // PW3270_APP_WINDOW_POPUP_WHEN_OFFLINE | |
| 216 | 217 | }; |
| 217 | 218 | |
| 218 | 219 | for(ix = 0; ix < G_N_ELEMENTS(popup_menus); ix++) { | ... | ... |
ui/window.xml
| ... | ... | @@ -438,6 +438,25 @@ |
| 438 | 438 | |
| 439 | 439 | </menu> |
| 440 | 440 | |
| 441 | + <menu id="popup-over-oia"> | |
| 442 | + | |
| 443 | + <item> | |
| 444 | + <attribute name="label" translatable="yes">Insert</attribute> | |
| 445 | + <attribute name="action">win.insert</attribute> | |
| 446 | + </item> | |
| 447 | + | |
| 448 | + <item> | |
| 449 | + <attribute name="label" translatable="yes">Track Cursor</attribute> | |
| 450 | + <attribute name="action">win.cursorpos</attribute> | |
| 451 | + </item> | |
| 452 | + | |
| 453 | + <item> | |
| 454 | + <attribute name="label" translatable="yes">Alert sound</attribute> | |
| 455 | + <attribute name="action">win.beep</attribute> | |
| 456 | + </item> | |
| 457 | + | |
| 458 | + </menu> | |
| 459 | + | |
| 441 | 460 | <menu id="popup-when-offline"> |
| 442 | 461 | |
| 443 | 462 | <item> | ... | ... |