diff --git a/genmarshal b/genmarshal index d615b87..1360dca 100644 --- a/genmarshal +++ b/genmarshal @@ -9,3 +9,4 @@ BOOL:VOID,UINT,ENUM VOID:VOID,BOOL BOOL:VOID,BOOL,BOOL,POINTER VOID:VOID,UINT,UINT +VOID:VOID,UINT,POINTER,POINTER,POINTER diff --git a/iocallback.c b/iocallback.c index ab42921..d3f080f 100644 --- a/iocallback.c +++ b/iocallback.c @@ -251,10 +251,10 @@ struct bgParameter gpointer BgCall(struct bgParameter *p) { - trace("%s starts",__FUNCTION__); +// trace("%s starts",__FUNCTION__); p->rc = p->callback(p->session, p->parm); p->running = FALSE; - trace("%s ends",__FUNCTION__); +// trace("%s ends",__FUNCTION__); return 0; } @@ -263,7 +263,7 @@ static int static_CallAndWait(int(*callback)(H3270 *session, void *), H3270 *ses struct bgParameter p = { TRUE, session, -1, callback, parm }; GThread *thread; - trace("Starting auxiliary thread for callback %p",callback); +// trace("Starting auxiliary thread for callback %p",callback); p.running = TRUE; thread = g_thread_create( (GThreadFunc) BgCall, &p, 0, NULL); diff --git a/oia.c b/oia.c index 9435051..978ea6a 100644 --- a/oia.c +++ b/oia.c @@ -276,7 +276,7 @@ static void draw_undera(cairo_t *cr, H3270 *host, struct v3270_metrics *metrics, void v3270_draw_connection(cairo_t *cr, H3270 *host, struct v3270_metrics *metrics, GdkColor *color, GdkRectangle *rect) { cairo_text_extents_t extents; - gchar *str = "?"; + const gchar *str; gdk_cairo_set_source_color(cr,color+V3270_COLOR_OIA_FOREGROUND); cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height); @@ -290,9 +290,11 @@ void v3270_draw_connection(cairo_t *cr, H3270 *host, struct v3270_metrics *metri } if(lib3270_in_ansi(host)) - *str = 'N'; + str = "N"; else if(lib3270_in_sscp(host)) - *str = 'S'; + str = "S"; + else + str = "?"; cairo_text_extents(cr,str,&extents); cairo_move_to(cr,rect->x+((rect->width/2)-(extents.width/2)),rect->y+extents.height+( (rect->height/2) - (extents.height/2))); diff --git a/private.h b/private.h index 49024ff..a4fe1fc 100644 --- a/private.h +++ b/private.h @@ -53,6 +53,7 @@ G_BEGIN_DECLS void (*toggle_changed)(v3270 *widget,LIB3270_TOGGLE toggle_id,gboolean toggle_state,const gchar *toggle_name); void (*message_changed)(v3270 *widget, LIB3270_MESSAGE id); void (*luname_changed)(GtkWidget *widget,const gchar *luname); + void (*popup_message)(GtkWidget *widget, LIB3270_NOTIFY id , const gchar *title, const gchar *message, const gchar *text); gboolean (*keypress)(GtkWidget *widget,guint keyval,GdkModifierType state); }; @@ -79,6 +80,7 @@ G_BEGIN_DECLS SIGNAL_PASTENEXT, SIGNAL_CLIPBOARD, SIGNAL_CHANGED, + SIGNAL_MESSAGE, LAST_SIGNAL }; diff --git a/v3270.h b/v3270.h index fb39726..ec62fd0 100644 --- a/v3270.h +++ b/v3270.h @@ -181,6 +181,7 @@ // Misc GtkIMContext * v3270_get_im_context(GtkWidget *widget); gboolean v3270_get_toggle(GtkWidget *widget, LIB3270_TOGGLE ix); + void v3270_popup_message(GtkWidget *widget, LIB3270_NOTIFY type, const gchar *title, const gchar *message, const gchar *text); void v3270_set_host(GtkWidget *widget, const gchar *uri); diff --git a/widget.c b/widget.c index 63f1d93..793efc5 100644 --- a/widget.c +++ b/widget.c @@ -215,6 +215,46 @@ static void get_preferred_width_for_height(GtkWidget *widget,gint height, gint * #endif // GTK(3,0,0) +void v3270_popup_message(GtkWidget *widget, LIB3270_NOTIFY type , const gchar *title, const gchar *message, const gchar *text) +{ + GtkWidget * dialog; + GtkWidget * toplevel = NULL; + GtkMessageType msgtype = GTK_MESSAGE_WARNING; + GtkButtonsType buttons = GTK_BUTTONS_OK; + + if(widget && GTK_IS_WIDGET(widget)) + toplevel = gtk_widget_get_toplevel(GTK_WIDGET(widget)); + + if(type == LIB3270_NOTIFY_CRITICAL) + { + msgtype = GTK_MESSAGE_ERROR; + buttons = GTK_BUTTONS_CLOSE; + } + + if(!title) + title = _( "Error" ); + + if(message) + { + dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",message); + if(text) + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(dialog),"%s",text); + } + else if(text) + { + dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",text); + } + else + { + dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",title); + } + + gtk_window_set_title(GTK_WINDOW(dialog),title); + gtk_widget_show_all(dialog); + gtk_dialog_run(GTK_DIALOG (dialog)); + gtk_widget_destroy(dialog); +} + static void v3270_class_init(v3270Class *klass) { GObjectClass * gobject_class = G_OBJECT_CLASS(klass); @@ -240,6 +280,7 @@ static void v3270_class_init(v3270Class *klass) klass->toggle_changed = v3270_toggle_changed; klass->message_changed = v3270_update_message; klass->luname_changed = v3270_update_luname; + klass->popup_message = v3270_popup_message; #if GTK_CHECK_VERSION(3,0,0) @@ -443,6 +484,15 @@ static void v3270_class_init(v3270Class *klass) pw3270_VOID__VOID_UINT_UINT, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT); + v3270_widget_signal[SIGNAL_MESSAGE] = + g_signal_new( "popup_message", + G_OBJECT_CLASS_TYPE (gobject_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (v3270Class, popup_message), + NULL, NULL, + pw3270_VOID__VOID_UINT_POINTER_POINTER_POINTER, + G_TYPE_NONE, 4, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); + } void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int height) @@ -677,6 +727,16 @@ static void update_selection(H3270 *session, int start, int end) } +static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *text) +{ + g_signal_emit( GTK_WIDGET(session->widget), v3270_widget_signal[SIGNAL_MESSAGE], 0, + (int) id, + (gchar *) title, + (gchar *) message, + (gchar *) text ); + +} + static void v3270_init(v3270 *widget) { trace("%s",__FUNCTION__); @@ -708,7 +768,7 @@ static void v3270_init(v3270 *widget) widget->host->update_model = update_model; widget->host->changed = changed; widget->host->ctlr_done = ctlr_done; - + widget->host->message = message; // Setup input method widget->input_method = gtk_im_multicontext_new(); -- libgit2 0.21.2