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