diff --git a/src/lib3270/screen.c b/src/lib3270/screen.c index 2388438..777b606 100644 --- a/src/lib3270/screen.c +++ b/src/lib3270/screen.c @@ -264,6 +264,7 @@ void update_model_info(H3270 *session, int model, int cols, int rows) /* Update the model name. */ (void) sprintf(session->model_name, "327%c-%d%s",session->m3279 ? '9' : '8',session->model_num,session->extended ? "-E" : ""); + trace("%s: %p",__FUNCTION__,session->update_model); session->update_model(session, session->model_name,session->model_num,rows,cols); } @@ -634,7 +635,12 @@ void Error(H3270 *session, const char *fmt, ...) trace("%s: title=%s fmt=%s",__FUNCTION__,"3270 Error",fmt); va_start(arg_ptr, fmt); - popup_handler(session,session->widget,LIB3270_NOTIFY_ERROR, _( "3270 Error" ),NULL,fmt,arg_ptr); + + if(session && session->sz == sizeof(H3270)) + popup_handler(session,session->widget,LIB3270_NOTIFY_ERROR, _( "3270 Error" ),NULL,fmt,arg_ptr); + else + popup_handler(NULL,NULL,LIB3270_NOTIFY_ERROR, _( "3270 Error" ),NULL,fmt,arg_ptr); + va_end(arg_ptr); } diff --git a/src/lib3270/util.c b/src/lib3270/util.c index 965ef6f..d4726ab 100644 --- a/src/lib3270/util.c +++ b/src/lib3270/util.c @@ -167,8 +167,8 @@ char * xs_vsprintf(const char *fmt, va_list args) char *r; #if defined(HAVE_VASPRINTF) /*[*/ (void) vasprintf(&r, fmt, args); - if (r == CN) - Error("Out of memory"); + if(!r) + Error(NULL,"Out of memory in %s",__FUNCTION__); return r; #else /*][*/ char buf[16384]; @@ -1098,7 +1098,7 @@ LIB3270_EXPORT void * lib3270_realloc(void *p, int len) { p = realloc(p, len); if(!p) - Error(NULL,"Out of memory"); + Error(NULL,"Out of memory in %s",__FUNCTION__); return p; } @@ -1114,7 +1114,7 @@ LIB3270_EXPORT void * lib3270_calloc(int elsize, int nelem, void *ptr) if(ptr) memset(ptr,0,sz); else - Error(NULL,"Out of memory"); + Error(NULL,"Out of memory in %s",__FUNCTION__); return ptr; } @@ -1127,7 +1127,7 @@ LIB3270_EXPORT void * lib3270_malloc(int len) r = malloc(len); if (r == (char *)NULL) { - Error(NULL,"Out of memory"); + Error(NULL,"Out of memory in %s",__FUNCTION__); return 0; } @@ -1142,7 +1142,7 @@ void * Calloc(size_t nelem, size_t elsize) char * r = malloc(sz); if(!r) - Error(NULL,"Out of memory"); + Error(NULL,"Out of memory in %s",__FUNCTION__); memset(r, 0, sz); return r; diff --git a/src/pw3270/common/config.c b/src/pw3270/common/config.c index 150a87d..02b803a 100644 --- a/src/pw3270/common/config.c +++ b/src/pw3270/common/config.c @@ -330,21 +330,19 @@ gchar * get_last_error_msg(void) #ifdef WIN_REGISTRY_ENABLED HKEY key_handle; - BYTE data[4096]; - unsigned long datatype; - unsigned long datalen = sizeof(data); - gchar *ret = NULL; + BYTE data[4097]; + unsigned long datalen = 4096; + unsigned long datatype; + gchar * ret = NULL; if(!registry_open_key(group,KEY_READ,&key_handle)) return g_strdup(def); if(RegQueryValueExA(key_handle,key,NULL,&datatype,data,&datalen) == ERROR_SUCCESS) { - ret = (char *) malloc(datalen+1); - - memcpy(ret,data,datalen); - ret[datalen+1] = 0; -// trace("%s\\%s=\"%s\"",group,key,ret); + data[datalen+1] = 0; + ret = g_strdup(data); + trace("datalen=%d",datalen); } else if(def) { diff --git a/src/pw3270/v3270/widget.c b/src/pw3270/v3270/widget.c index 3a0790f..eb2d394 100644 --- a/src/pw3270/v3270/widget.c +++ b/src/pw3270/v3270/widget.c @@ -220,6 +220,8 @@ void v3270_popup_message(GtkWidget *widget, LIB3270_NOTIFY type , const gchar *t GtkMessageType msgtype = GTK_MESSAGE_WARNING; GtkButtonsType buttons = GTK_BUTTONS_OK; + trace("%s: widget=%p",__FUNCTION__,widget); + if(widget && GTK_IS_WIDGET(widget)) toplevel = gtk_widget_get_toplevel(GTK_WIDGET(widget)); @@ -743,6 +745,8 @@ static void v3270_init(v3270 *widget) { widget->host = lib3270_session_new(""); + trace("%s",__FUNCTION__); + if(widget->host->sz != sizeof(H3270)) { g_error( _( "Unexpected signature in H3270 object, possible version mismatch in lib3270") ); @@ -782,6 +786,7 @@ static void v3270_init(v3270 *widget) // Setup events gtk_widget_add_events(GTK_WIDGET(widget),GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_BUTTON_PRESS_MASK|GDK_BUTTON_MOTION_MASK|GDK_BUTTON_RELEASE_MASK|GDK_POINTER_MOTION_MASK|GDK_ENTER_NOTIFY_MASK); + trace("%s",__FUNCTION__); } GtkWidget * v3270_new(void) @@ -1133,6 +1138,12 @@ void v3270_set_font_family(GtkWidget *widget, const gchar *name) terminal = GTK_V3270(widget); + if(!name) + { + // TODO (perry#3#): Get default font family from currrent style + name = "courier new"; + } + if(terminal->font_family) { if(!g_strcasecmp(terminal->font_family,name)) @@ -1141,12 +1152,6 @@ void v3270_set_font_family(GtkWidget *widget, const gchar *name) terminal->font_family = NULL; } - if(!name) - { - // TODO (perry#3#): Get default font family from currrent style - name = "courier new"; - } - terminal->font_family = g_strdup(name); terminal->font_weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; diff --git a/src/pw3270/window.c b/src/pw3270/window.c index bdf7470..de42aff 100644 --- a/src/pw3270/window.c +++ b/src/pw3270/window.c @@ -126,8 +126,13 @@ return 0; } - static int popup_handler(H3270 *session, void *widget, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list args) + static int popup_handler(H3270 *session, void *terminal, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list args) { + GtkWidget *widget = NULL; + + if(session && terminal && GTK_IS_V3270(terminal)) + widget = GTK_WIDGET(terminal); + if(fmt) { gchar *text = g_strdup_vprintf(fmt,args); @@ -138,52 +143,6 @@ { v3270_popup_message(GTK_WIDGET(widget),type,title,msg,NULL); } -/* - GtkWidget * dialog; - GtkWidget * toplevel = NULL; - GtkMessageType msgtype = GTK_MESSAGE_WARNING; - GtkButtonsType buttons = GTK_BUTTONS_OK; - gchar * text = NULL; - - if(fmt) - text = g_strdup_vprintf(fmt,args); - - 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(msg) - { - dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",msg); - - 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); - } - - if(text) - g_free(text); - - gtk_window_set_title(GTK_WINDOW(dialog),title); - gtk_widget_show_all(dialog); - gtk_dialog_run(GTK_DIALOG (dialog)); - gtk_widget_destroy(dialog); -*/ return 0; } @@ -418,6 +377,7 @@ for(f=0;fterminal,str); if(str) g_free(str); -- libgit2 0.21.2