Commit 3a7c025414a88f2dd4dd8ed806aec840d153649c

Authored by Perry Werneck
1 parent 4a8250dc

Adding popup menu over OIA.

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