diff --git a/src/objects/window/page.c b/src/objects/window/page.c index 1d88671..6fd76c4 100644 --- a/src/objects/window/page.c +++ b/src/objects/window/page.c @@ -108,7 +108,8 @@ static void connected(GtkWidget *terminal, const gchar *host, GtkWindow * window); static void destroy(GtkWidget *terminal, GtkWindow * window); static void close_page(GtkButton *button, GtkWidget *terminal); - static gboolean on_popup_menu(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window); + static gboolean terminal_popup(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window); + static gboolean oia_popup(GtkWidget *widget, guint field, GdkEvent *event, pw3270ApplicationWindow * window); static void label_populate_popup(GtkLabel *label, GtkMenu *menu, GtkWidget *terminal); gint pw3270_application_window_append_page(GtkWidget * window, GtkWidget * terminal) { @@ -136,9 +137,11 @@ g_signal_connect(G_OBJECT(terminal), "session_changed", G_CALLBACK(session_changed),label); g_signal_connect(G_OBJECT(terminal), "disconnected", G_CALLBACK(disconnected),window); g_signal_connect(G_OBJECT(terminal), "connected", G_CALLBACK(connected),window); - g_signal_connect(G_OBJECT(terminal), "popup", G_CALLBACK(on_popup_menu), window); g_signal_connect(G_OBJECT(terminal), "destroy", G_CALLBACK(destroy),window); + g_signal_connect(G_OBJECT(terminal), "popup", G_CALLBACK(terminal_popup), window); + g_signal_connect(G_OBJECT(terminal), "oia-popup", G_CALLBACK(oia_popup), window); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(close_page), terminal); gtk_box_pack_start(GTK_BOX(tab),label,FALSE,FALSE,0); @@ -285,7 +288,7 @@ } - static gboolean on_popup_menu(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window) { + static gboolean terminal_popup(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window) { GtkWidget * popup = window->popups[PW3270_APP_WINDOW_POPUP_OVER_UNSELECTED_AREA]; @@ -307,12 +310,28 @@ } + static gboolean oia_popup(GtkWidget *widget, guint field, GdkEvent *event, pw3270ApplicationWindow * window) { + + debug("%s(%u)",__FUNCTION__,field); + + GtkWidget *popup = window->popups[PW3270_APP_WINDOW_POPUP_OVER_OIA]; + + if(!popup) + return FALSE; + + gtk_widget_show_all(popup); + gtk_menu_set_screen(GTK_MENU(popup), gtk_widget_get_screen(widget)); + gtk_menu_popup_at_pointer(GTK_MENU(popup), event); + + return TRUE; + } + static void label_populate_popup(GtkLabel G_GNUC_UNUSED(*label), GtkMenu *menu, GtkWidget *terminal) { static const struct Item { const gchar * label; GCallback callback; - gboolean (*check_permission)(GtkWidget *widget) + gboolean (*check_permission)(GtkWidget *widget); } items[] = { { diff --git a/src/objects/window/private.h b/src/objects/window/private.h index 6a2cb9c..cebb586 100644 --- a/src/objects/window/private.h +++ b/src/objects/window/private.h @@ -49,6 +49,7 @@ enum pw3270ApplicationWindowPopup { PW3270_APP_WINDOW_POPUP_OVER_SELECTED_AREA, PW3270_APP_WINDOW_POPUP_OVER_UNSELECTED_AREA, + PW3270_APP_WINDOW_POPUP_OVER_OIA, PW3270_APP_WINDOW_POPUP_WHEN_OFFLINE, PW3270_APP_WINDOW_POPUP_COUNT diff --git a/src/objects/window/window.c b/src/objects/window/window.c index e438b9d..ed45e3a 100644 --- a/src/objects/window/window.c +++ b/src/objects/window/window.c @@ -209,10 +209,11 @@ g_autoptr(GtkBuilder) builder = pw3270_application_get_builder("window.xml"); // Load popup menus. - const gchar * popup_menus[G_N_ELEMENTS(window->popups)] = { - "popup-over-selected-area", - "popup-over-unselected-area", - "popup-when-offline" + const gchar * popup_menus[PW3270_APP_WINDOW_POPUP_COUNT] = { + "popup-over-selected-area", // PW3270_APP_WINDOW_POPUP_OVER_SELECTED_AREA + "popup-over-unselected-area", // PW3270_APP_WINDOW_POPUP_OVER_UNSELECTED_AREA + "popup-over-oia", // PW3270_APP_WINDOW_POPUP_OVER_OIA + "popup-when-offline" // PW3270_APP_WINDOW_POPUP_WHEN_OFFLINE }; for(ix = 0; ix < G_N_ELEMENTS(popup_menus); ix++) { diff --git a/ui/window.xml b/ui/window.xml index 4a881f5..ae02532 100644 --- a/ui/window.xml +++ b/ui/window.xml @@ -438,6 +438,25 @@ + + + + Insert + win.insert + + + + Track Cursor + win.cursorpos + + + + Alert sound + win.beep + + + + -- libgit2 0.21.2