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,7 +108,8 @@ | ||
108 | static void connected(GtkWidget *terminal, const gchar *host, GtkWindow * window); | 108 | static void connected(GtkWidget *terminal, const gchar *host, GtkWindow * window); |
109 | static void destroy(GtkWidget *terminal, GtkWindow * window); | 109 | static void destroy(GtkWidget *terminal, GtkWindow * window); |
110 | static void close_page(GtkButton *button, GtkWidget *terminal); | 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 | static void label_populate_popup(GtkLabel *label, GtkMenu *menu, GtkWidget *terminal); | 113 | static void label_populate_popup(GtkLabel *label, GtkMenu *menu, GtkWidget *terminal); |
113 | 114 | ||
114 | gint pw3270_application_window_append_page(GtkWidget * window, GtkWidget * terminal) { | 115 | gint pw3270_application_window_append_page(GtkWidget * window, GtkWidget * terminal) { |
@@ -136,9 +137,11 @@ | @@ -136,9 +137,11 @@ | ||
136 | g_signal_connect(G_OBJECT(terminal), "session_changed", G_CALLBACK(session_changed),label); | 137 | g_signal_connect(G_OBJECT(terminal), "session_changed", G_CALLBACK(session_changed),label); |
137 | g_signal_connect(G_OBJECT(terminal), "disconnected", G_CALLBACK(disconnected),window); | 138 | g_signal_connect(G_OBJECT(terminal), "disconnected", G_CALLBACK(disconnected),window); |
138 | g_signal_connect(G_OBJECT(terminal), "connected", G_CALLBACK(connected),window); | 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 | g_signal_connect(G_OBJECT(terminal), "destroy", G_CALLBACK(destroy),window); | 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 | g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(close_page), terminal); | 145 | g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(close_page), terminal); |
143 | 146 | ||
144 | gtk_box_pack_start(GTK_BOX(tab),label,FALSE,FALSE,0); | 147 | gtk_box_pack_start(GTK_BOX(tab),label,FALSE,FALSE,0); |
@@ -285,7 +288,7 @@ | @@ -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 | GtkWidget * popup = window->popups[PW3270_APP_WINDOW_POPUP_OVER_UNSELECTED_AREA]; | 293 | GtkWidget * popup = window->popups[PW3270_APP_WINDOW_POPUP_OVER_UNSELECTED_AREA]; |
291 | 294 | ||
@@ -307,12 +310,28 @@ | @@ -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 | static void label_populate_popup(GtkLabel G_GNUC_UNUSED(*label), GtkMenu *menu, GtkWidget *terminal) { | 329 | static void label_populate_popup(GtkLabel G_GNUC_UNUSED(*label), GtkMenu *menu, GtkWidget *terminal) { |
311 | 330 | ||
312 | static const struct Item { | 331 | static const struct Item { |
313 | const gchar * label; | 332 | const gchar * label; |
314 | GCallback callback; | 333 | GCallback callback; |
315 | - gboolean (*check_permission)(GtkWidget *widget) | 334 | + gboolean (*check_permission)(GtkWidget *widget); |
316 | } items[] = { | 335 | } items[] = { |
317 | 336 | ||
318 | { | 337 | { |
src/objects/window/private.h
@@ -49,6 +49,7 @@ | @@ -49,6 +49,7 @@ | ||
49 | enum pw3270ApplicationWindowPopup { | 49 | enum pw3270ApplicationWindowPopup { |
50 | PW3270_APP_WINDOW_POPUP_OVER_SELECTED_AREA, | 50 | PW3270_APP_WINDOW_POPUP_OVER_SELECTED_AREA, |
51 | PW3270_APP_WINDOW_POPUP_OVER_UNSELECTED_AREA, | 51 | PW3270_APP_WINDOW_POPUP_OVER_UNSELECTED_AREA, |
52 | + PW3270_APP_WINDOW_POPUP_OVER_OIA, | ||
52 | PW3270_APP_WINDOW_POPUP_WHEN_OFFLINE, | 53 | PW3270_APP_WINDOW_POPUP_WHEN_OFFLINE, |
53 | 54 | ||
54 | PW3270_APP_WINDOW_POPUP_COUNT | 55 | PW3270_APP_WINDOW_POPUP_COUNT |
src/objects/window/window.c
@@ -209,10 +209,11 @@ | @@ -209,10 +209,11 @@ | ||
209 | g_autoptr(GtkBuilder) builder = pw3270_application_get_builder("window.xml"); | 209 | g_autoptr(GtkBuilder) builder = pw3270_application_get_builder("window.xml"); |
210 | 210 | ||
211 | // Load popup menus. | 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 | for(ix = 0; ix < G_N_ELEMENTS(popup_menus); ix++) { | 219 | for(ix = 0; ix < G_N_ELEMENTS(popup_menus); ix++) { |
ui/window.xml
@@ -438,6 +438,25 @@ | @@ -438,6 +438,25 @@ | ||
438 | 438 | ||
439 | </menu> | 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 | <menu id="popup-when-offline"> | 460 | <menu id="popup-when-offline"> |
442 | 461 | ||
443 | <item> | 462 | <item> |