diff --git a/modules/lib3270 b/modules/lib3270
index 5167705..b8383bb 160000
--- a/modules/lib3270
+++ b/modules/lib3270
@@ -1 +1 @@
-Subproject commit 5167705057b94751624fae6b76db137b86811c4b
+Subproject commit b8383bb61d0ad5e2ad93b56826a614ea9156396e
diff --git a/modules/libv3270 b/modules/libv3270
index 76e1e3f..c6eb598 160000
--- a/modules/libv3270
+++ b/modules/libv3270
@@ -1 +1 @@
-Subproject commit 76e1e3fdf87ace980c4f21222a872f9407639f55
+Subproject commit c6eb5985cdadf9ad3324ec7584bfb31f44b7eb69
diff --git a/pw3270.cbp b/pw3270.cbp
index e0ddc56..34b8ccd 100644
--- a/pw3270.cbp
+++ b/pw3270.cbp
@@ -68,7 +68,6 @@
-
@@ -88,10 +87,6 @@
-
-
-
-
@@ -128,149 +123,38 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -455,52 +339,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/include/pw3270/trace.h b/src/include/pw3270/trace.h
deleted file mode 100644
index accdb24..0000000
--- a/src/include/pw3270/trace.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
- * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
- * aplicativos mainframe. Registro no INPI sob o nome G3270.
- *
- * Copyright (C) <2008>
- *
- * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
- * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
- * Free Software Foundation.
- *
- * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
- * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
- * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
- * obter mais detalhes.
- *
- * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
- * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
- * St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Este programa está nomeado como trace.h e possui - linhas de código.
- *
- * Contatos:
- *
- * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
- * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
- * licinio@bb.com.br (Licínio Luis Branco)
- * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
- *
- */
-
-#ifndef PW3270_TRACE_H_INCLUDED
-
- #include
- #include
-
- #define PW3270_TRACE_H_INCLUDED 1
-
- G_BEGIN_DECLS
-
- #define PW3270_TYPE_TRACE (pw3270_trace_get_type ())
- #define PW3270_TRACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PW3270_TYPE_TRACE, pw3270_trace))
- #define PW3270_TRACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PW3270_TYPE_TRACE, pw3270_traceClass))
- #define IS_PW3270_TRACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PW3270_TYPE_TRACE))
- #define IS_PW3270_TRACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PW3270_TYPE_TRACE))
- #define PW3270_TRACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PW3270_TYPE_TRACE, pw3270_traceClass))
-
- typedef struct _pw3270_trace pw3270_trace;
- typedef struct _pw3270_traceClass pw3270_traceClass;
-
- LIB3270_EXPORT GtkWidget * pw3270_trace_new(void);
- LIB3270_EXPORT GType pw3270_trace_get_type(void);
- LIB3270_EXPORT void pw3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args);
- LIB3270_EXPORT void pw3270_trace_printf(GtkWidget *widget, const char *fmt, ... );
- LIB3270_EXPORT gchar * pw3270_trace_get_command(GtkWidget *widget);
- LIB3270_EXPORT void pw3270_trace_set_destroy_on_close(GtkWidget *widget,gboolean on);
-
- G_END_DECLS
-
-#endif // V3270_H_INCLUDED
diff --git a/src/pw3270/Makefile.in b/src/pw3270/Makefile.in
index 9bcbea7..700aaf8 100644
--- a/src/pw3270/Makefile.in
+++ b/src/pw3270/Makefile.in
@@ -26,12 +26,24 @@
LIBNAME=@DLLPREFIX@@PACKAGE_TARNAME@@DLLEXT@
-LIB_SOURCES=window.c actions.c fonts.c dialog.c hostdialog.c print.c colors.c \
- tools.c plugin.c trace.c
-
-APP_SOURCES=main.c @APP_RESOURCES@
-
-MODULES=uiparser common
+LIB_SOURCES=\
+ window.c \
+ actions.c \
+ fonts.c \
+ dialog.c \
+ hostdialog.c \
+ print.c \
+ colors.c \
+ tools.c \
+ plugin.c
+
+APP_SOURCES=\
+ main.c \
+ @APP_RESOURCES@
+
+MODULES=\
+ uiparser \
+ common
#---[ Configuration values ]-------------------------------------------------------------
diff --git a/src/pw3270/globals.h b/src/pw3270/globals.h
index 7c7b4d5..999f069 100644
--- a/src/pw3270/globals.h
+++ b/src/pw3270/globals.h
@@ -52,6 +52,7 @@
/*--[ Statics ]--------------------------------------------------------------------------------------*/
+ G_GNUC_INTERNAL const gchar * tracefile;
/*--[ Global prototipes ]----------------------------------------------------------------------------*/
diff --git a/src/pw3270/main.c b/src/pw3270/main.c
index 71d6d40..bdfe157 100644
--- a/src/pw3270/main.c
+++ b/src/pw3270/main.c
@@ -42,8 +42,6 @@
#include
#include
#include "v3270/accessible.h"
-#include
-#include
#include
#if defined( HAVE_SYSLOG )
@@ -55,19 +53,19 @@
/*--[ Statics ]--------------------------------------------------------------------------------------*/
static GtkWidget * toplevel = NULL;
- static GtkWidget * trace_window = NULL;
static unsigned int syscolors = 16;
static unsigned int timer = 0;
static const gchar * systype = NULL;
static const gchar * toggleset = NULL;
static const gchar * togglereset = NULL;
static const gchar * logfile = NULL;
- static const gchar * tracefile = NULL;
static const gchar * charset = NULL;
static const gchar * remap = NULL;
static const gchar * model = NULL;
static const gchar * pluginpath = NULL;
+ const gchar * tracefile = NULL;
+
#ifdef HAVE_GTKMAC
GtkOSXApplication * osxapp = NULL;
#endif // HAVE_GTKMAC
@@ -266,79 +264,6 @@ static void g_logfile(const gchar *log_domain,GLogLevelFlags log_level,const gch
}
}
-static void trace_window_destroy(GtkWidget *widget, H3270 *hSession)
-{
- trace("%s",__FUNCTION__);
- lib3270_set_toggle(hSession,LIB3270_TOGGLE_DS_TRACE,0);
- lib3270_set_toggle(hSession,LIB3270_TOGGLE_SCREEN_TRACE,0);
- lib3270_set_toggle(hSession,LIB3270_TOGGLE_EVENT_TRACE,0);
- lib3270_set_toggle(hSession,LIB3270_TOGGLE_NETWORK_TRACE,0);
- trace_window = NULL;
-}
-
-/*
-static void g_trace(H3270 *hSession, const char *fmt, va_list args)
-{
- gchar *ptr = g_strdup_vprintf(fmt,args);
-
- if(tracefile)
- {
- // Has trace file, use it
- int err;
-
- FILE *out = fopen(tracefile,"a");
- err = errno;
-
- if(!out)
- {
- // Error opening trace file, notify user and disable it
- GtkWidget *popup = gtk_message_dialog_new_with_markup(
- GTK_WINDOW(pw3270_get_toplevel()),
- GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE,
- _( "Can't save trace data to file %s" ),tracefile);
-
- gtk_window_set_title(GTK_WINDOW(popup),_("Can't open file"));
-
- gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",strerror(err));
-
- gtk_dialog_run(GTK_DIALOG(popup));
- gtk_widget_destroy(popup);
-
- tracefile = NULL;
- }
- else
- {
- fprintf(out,"%s",ptr);
- fclose(out);
- }
- }
- else
- {
- // No trace file, open standard window
- gchar * utftext = g_convert_with_fallback(ptr,-1,"UTF-8",lib3270_get_display_charset(hSession),"?",NULL,NULL,NULL);
-
- if(!trace_window)
- {
- trace_window = pw3270_trace_new();
- pw3270_trace_set_destroy_on_close(trace_window,TRUE);
- g_signal_connect(trace_window, "destroy", G_CALLBACK(trace_window_destroy), hSession);
- gtk_window_set_default_size(GTK_WINDOW(trace_window),590,430);
-
-#if GTK_CHECK_VERSION(3,4,0)
- gtk_window_set_attached_to(GTK_WINDOW(trace_window),toplevel);
-#endif // GTK_CHECK_VERSION(3,4,0)
-
- gtk_widget_show(trace_window);
- }
- pw3270_trace_printf(trace_window,"%s",utftext);
- g_free(utftext);
- }
-
- g_free(ptr);
-}
-*/
-
static gboolean startup(GtkWidget *toplevel)
{
gtk_window_present(GTK_WINDOW(toplevel));
@@ -495,8 +420,6 @@ int main(int argc, char *argv[])
g_log_set_default_handler(g_logfile,NULL);
}
-// lib3270_set_trace_handler(g_trace);
-
// Check GTK Version
{
const gchar *msg = gtk_check_version(GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
@@ -609,9 +532,6 @@ int main(int argc, char *argv[])
gtk_main();
- if(trace_window)
- gtk_widget_destroy(trace_window);
-
pw3270_stop_plugins(toplevel);
pw3270_unload_plugins();
diff --git a/src/pw3270/trace.c b/src/pw3270/trace.c
deleted file mode 100644
index 7b61cec..0000000
--- a/src/pw3270/trace.c
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
- * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
- * aplicativos mainframe. Registro no INPI sob o nome G3270.
- *
- * Copyright (C) <2008>
- *
- * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
- * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
- * Free Software Foundation.
- *
- * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
- * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
- * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
- * obter mais detalhes.
- *
- * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
- * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
- * St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Este programa está nomeado como trace.c e possui - linhas de código.
- *
- * Contatos:
- *
- * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
- * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
- *
- */
-
- #include
-
- #define ENABLE_NLS
- #define GETTEXT_PACKAGE PACKAGE_NAME
-
- #include
- #include
-
- #include
- #include "common/common.h"
-
-#if defined( HAVE_SYSLOG )
- #include
-#endif // HAVE_SYSLOG
-
-/*--[ Widget definition ]----------------------------------------------------------------------------*/
-
- G_BEGIN_DECLS
-
- struct _pw3270_traceClass
- {
- GtkWindowClass parent_class;
- };
-
- struct _pw3270_trace
- {
- GtkWindow parent;
- GtkAdjustment * scroll;
- GtkTextBuffer * text;
- GtkWidget * entry;
- GtkWidget * button;
- gchar **line;
- guint log_handler;
- gboolean * enabled;
- gboolean destroy_on_close;
- };
-
- const GtkWindowClass * pw3270_trace_get_parent_class(void);
-
- G_END_DECLS
-
- G_DEFINE_TYPE(pw3270_trace, pw3270_trace, GTK_TYPE_WINDOW);
-
-/*--[ Implement ]------------------------------------------------------------------------------------*/
-
- const GtkWindowClass * pw3270_trace_get_parent_class(void)
- {
- trace("%s",__FUNCTION__);
- return GTK_WINDOW_CLASS(pw3270_trace_parent_class);
- }
-
- static void activate_default(GtkWindow *window)
- {
- pw3270_trace * hwnd = PW3270_TRACE(window);
-
- trace("%s",__FUNCTION__);
-
- if(hwnd->enabled)
- {
- if(*hwnd->line)
- g_free(*hwnd->line);
-
- *hwnd->line = g_strdup(gtk_entry_get_text(GTK_ENTRY(hwnd->entry)));
-
- gtk_widget_set_sensitive(hwnd->entry,FALSE);
- gtk_widget_set_sensitive(hwnd->button,FALSE);
-
- *hwnd->enabled = FALSE;
- }
-
- }
-
-#if GTK_CHECK_VERSION(3,0,0)
-static void destroy(GtkWidget *widget)
-#else
-static void destroy(GtkObject *widget)
-#endif
- {
- pw3270_trace * hwnd = PW3270_TRACE(widget);
-
- if(hwnd->log_handler)
- {
- g_log_remove_handler(NULL,hwnd->log_handler);
- hwnd->log_handler = 0;
- }
-
- if(hwnd->line)
- *hwnd->line = NULL;
-
- if(hwnd->enabled)
- *hwnd->enabled = FALSE;
-
- }
-
- static gboolean delete_event(GtkWidget *widget, GdkEventAny *event)
- {
- pw3270_trace * hwnd = PW3270_TRACE(widget);
-
- trace("%s destroy=%s",__FUNCTION__,hwnd->destroy_on_close ? "Yes" : "No");
-
- if(hwnd->line)
- *hwnd->line = NULL;
-
- if(hwnd->enabled)
- *hwnd->enabled = FALSE;
-
- if(hwnd->destroy_on_close)
- return FALSE;
-
- gtk_widget_hide(widget);
- return TRUE;
- }
-
- static void pw3270_trace_class_init(pw3270_traceClass *klass)
- {
- GtkWindowClass * window_class = GTK_WINDOW_CLASS(klass);
- GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass);
-
- trace("%s",__FUNCTION__);
-
- window_class->activate_default = activate_default;
- widget_class->delete_event = delete_event;
-
-#if GTK_CHECK_VERSION(3,0,0)
- {
- widget_class->destroy = destroy;
- }
-#else
- {
- GtkObjectClass *object_class = (GtkObjectClass*) klass;
- object_class->destroy = destroy;
- }
-#endif // GTK3
-
- }
-
- static void activate(GtkButton *button, GtkWindow *window)
- {
- trace("%s",__FUNCTION__);
- activate_default(window);
- }
-
- static void menu_save(GtkWidget *button, pw3270_trace *window)
- {
- GtkWindow * toplevel = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(window)));
- GtkWidget * dialog;
-
- dialog = gtk_file_chooser_dialog_new( _( "Save trace file" ),
- toplevel,
- GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL );
-
- gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
-
- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),g_get_user_special_dir(G_USER_DIRECTORY_DOCUMENTS));
-
- if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
- {
- gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- if(filename)
- {
- GError * error = NULL;
- gchar * text;
- GtkTextIter start;
- GtkTextIter end;
-
- gtk_text_buffer_get_start_iter(window->text,&start);
- gtk_text_buffer_get_end_iter(window->text,&end);
- text = gtk_text_buffer_get_text(window->text,&start,&end,FALSE);
-
- g_file_set_contents(filename,text,-1,&error);
-
- g_free(text);
-
- if(error)
- {
- GtkWidget *popup = gtk_message_dialog_new_with_markup(GTK_WINDOW(dialog),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE,_( "Can't save %s" ),filename);
-
- gtk_window_set_title(GTK_WINDOW(popup),_("Can't save file"));
-
- gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",error->message);
- g_error_free(error);
-
- gtk_dialog_run(GTK_DIALOG(popup));
- gtk_widget_destroy(popup);
-
- }
-
- g_free(filename);
- }
- }
-
- gtk_widget_destroy(dialog);
-
- }
-
- static void menu_close(GtkWidget *button, GtkWidget *window)
- {
- gtk_widget_destroy(window);
- }
-
- struct submenu
- {
- const gchar * stock_id;
- GCallback action;
- };
-
- static void build_menu(GtkWidget *menubar, pw3270_trace *window, const gchar *name, const struct submenu *item, size_t sz)
- {
- int f;
- GtkWidget * menu = gtk_menu_new();
- GtkWidget * topitem = gtk_image_menu_item_new_from_stock( name, NULL );
-
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(topitem), menu);
-
- for(f=0;fscroll = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(widget));
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
- view = gtk_text_view_new();
-
-#if GTK_CHECK_VERSION(3,0,0)
- gtk_widget_override_font(GTK_WIDGET(view), fontdesc);
-#else
- gtk_widget_modify_font(GTK_WIDGET(view), fontdesc);
-#endif // GTK_CHECK_VERSION
-
- window->text = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
- gtk_text_view_set_editable(GTK_TEXT_VIEW(view), TRUE);
-
-#if GTK_CHECK_VERSION(3,8,0)
- gtk_container_add(GTK_CONTAINER(widget),view);
-#else
- gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(widget),view);
-#endif // GTK_CHECK_VERSION
- gtk_box_pack_start(GTK_BOX(vbox),widget,TRUE,TRUE,0);
-
- // Edit box
-#if GTK_CHECK_VERSION(3,0,0)
- widget = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
-#else
- widget = gtk_hbox_new(FALSE,0);
-#endif // GTK_CHECK_VERSION
- gtk_box_pack_start(GTK_BOX(widget),gtk_label_new( _( "Command:" )),FALSE,TRUE,4);
- window->entry = gtk_entry_new();
- gtk_box_pack_start(GTK_BOX(widget),window->entry,TRUE,TRUE,4);
- gtk_widget_set_sensitive(window->entry,FALSE);
- g_signal_connect(G_OBJECT(window->entry),"activate",G_CALLBACK(activate),window);
-
- window->button = gtk_button_new_from_stock(GTK_STOCK_OK);
- gtk_box_pack_end(GTK_BOX(widget),window->button,FALSE,FALSE,4);
- gtk_widget_set_sensitive(window->button,FALSE);
- gtk_button_set_focus_on_click(GTK_BUTTON(window->button),FALSE);
-
- g_signal_connect(G_OBJECT(window->button),"clicked",G_CALLBACK(activate),window);
-
- gtk_box_pack_start(GTK_BOX(vbox),widget,FALSE,TRUE,0);
-
- gtk_widget_show_all(vbox);
-
- gtk_container_add(GTK_CONTAINER(window),vbox);
-
- pango_font_description_free(fontdesc);
-
- window->log_handler = g_log_set_handler(NULL,G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,(GLogFunc) glog,window);
- trace("Log handler set to %d",window->log_handler);
-
- }
-
- GtkWidget * pw3270_trace_new(void)
- {
- return g_object_new(PW3270_TYPE_TRACE, NULL);
- }
-
- void pw3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args)
- {
- GtkTextIter itr;
- gchar * msg;
- pw3270_trace * hwnd = PW3270_TRACE(widget);
-
- gtk_text_buffer_get_end_iter(hwnd->text,&itr);
-
- msg = g_strdup_vprintf(fmt,args);
-
- if(g_utf8_validate(msg,strlen(msg),NULL))
- {
- gtk_text_buffer_insert(hwnd->text,&itr,msg,strlen(msg));
- }
- else
- {
- gtk_text_buffer_insert(hwnd->text,&itr,"** Invalid UTF8 String **",-1);
- }
- g_free(msg);
-
- gtk_text_buffer_get_end_iter(hwnd->text,&itr);
-
-#if GTK_CHECK_VERSION(2,14,0)
- gtk_adjustment_set_value(hwnd->scroll,gtk_adjustment_get_upper(hwnd->scroll));
-#else
- gtk_adjustment_set_value(hwnd->scroll,(GTK_ADJUSTMENT(hwnd->scroll))->upper);
-#endif //
-
- }
-
- void pw3270_trace_printf(GtkWidget *widget, const char *fmt, ... )
- {
- va_list arg_ptr;
- va_start(arg_ptr, fmt);
- pw3270_trace_vprintf(widget,fmt,arg_ptr);
- va_end(arg_ptr);
- }
-
- LIB3270_EXPORT gchar * pw3270_trace_get_command(GtkWidget *widget)
- {
- pw3270_trace * hwnd = PW3270_TRACE(widget);
- gchar * line = NULL;
- gboolean enabled = TRUE;
-
- hwnd->line = &line;
- hwnd->enabled = &enabled;
-
- gtk_window_present(GTK_WINDOW(widget));
- gtk_widget_set_sensitive(hwnd->entry,TRUE);
- gtk_widget_set_sensitive(hwnd->button,TRUE);
- gtk_widget_grab_focus(hwnd->entry);
-
- while(enabled)
- {
- gtk_main_iteration();
- }
-
- hwnd->line = NULL;
- hwnd->enabled = NULL;
-
- return line;
- }
-
- LIB3270_EXPORT void pw3270_trace_set_destroy_on_close(GtkWidget *widget,gboolean on)
- {
- PW3270_TRACE(widget)->destroy_on_close = on;
- }
diff --git a/src/pw3270/window.c b/src/pw3270/window.c
index 2fa057e..6c40ae4 100644
--- a/src/pw3270/window.c
+++ b/src/pw3270/window.c
@@ -33,6 +33,8 @@
#include "uiparser/parser.h"
#include
#include
+#include
+#include
/*--[ Widget definition ]----------------------------------------------------------------------------*/
@@ -155,11 +157,129 @@
}
+ /*
+ static void g_trace(H3270 *hSession, const char *fmt, va_list args)
+ {
+ gchar *ptr = g_strdup_vprintf(fmt,args);
+
+ if(tracefile)
+ {
+ // Has trace file, use it
+ int err;
+
+ FILE *out = fopen(tracefile,"a");
+ err = errno;
+
+ if(!out)
+ {
+ // Error opening trace file, notify user and disable it
+ GtkWidget *popup = gtk_message_dialog_new_with_markup(
+ GTK_WINDOW(pw3270_get_toplevel()),
+ GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE,
+ _( "Can't save trace data to file %s" ),tracefile);
+
+ gtk_window_set_title(GTK_WINDOW(popup),_("Can't open file"));
+
+ gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",strerror(err));
+
+ gtk_dialog_run(GTK_DIALOG(popup));
+ gtk_widget_destroy(popup);
+
+ tracefile = NULL;
+ }
+ else
+ {
+ fprintf(out,"%s",ptr);
+ fclose(out);
+ }
+ }
+ else
+ {
+ // No trace file, open standard window
+ gchar * utftext = g_convert_with_fallback(ptr,-1,"UTF-8",lib3270_get_display_charset(hSession),"?",NULL,NULL,NULL);
+
+ if(!trace_window)
+ {
+ trace_window = v3270_trace_new_from_session(hSession);
+ v3270_trace_set_destroy_on_close(trace_window,TRUE);
+ g_signal_connect(trace_window, "destroy", G_CALLBACK(trace_window_destroy), hSession);
+ gtk_window_set_default_size(GTK_WINDOW(trace_window),590,430);
+ gtk_widget_show(trace_window);
+ }
+ v3270_trace_printf(trace_window,"%s",utftext);
+ g_free(utftext);
+ }
+
+ g_free(ptr);
+ }
+ */
+
+ static void trace_file(G_GNUC_UNUSED H3270 *hSession, void * userdata, const char *fmt, va_list args)
+ {
+ int err;
+
+ FILE *out = fopen(tracefile,"a");
+ err = errno;
+
+ if(!out)
+ {
+ // Error opening trace file, notify user and disable it
+ GtkWidget *popup = gtk_message_dialog_new_with_markup(
+ GTK_WINDOW(userdata),
+ GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE,
+ _( "Can't save trace data to file %s" ),tracefile);
+
+ gtk_window_set_title(GTK_WINDOW(popup),_("Can't open file"));
+
+ gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",strerror(err));
+
+ gtk_dialog_run(GTK_DIALOG(popup));
+ gtk_widget_destroy(popup);
+
+ tracefile = NULL;
+ }
+ else
+ {
+ vfprintf(out,fmt,args);
+ fclose(out);
+ }
+
+ }
+
+ static void trace_window_destroy(GtkWidget *widget, H3270 *hSession)
+ {
+ trace("%s",__FUNCTION__);
+ lib3270_set_toggle(hSession,LIB3270_TOGGLE_DS_TRACE,0);
+ lib3270_set_toggle(hSession,LIB3270_TOGGLE_SCREEN_TRACE,0);
+ lib3270_set_toggle(hSession,LIB3270_TOGGLE_EVENT_TRACE,0);
+ lib3270_set_toggle(hSession,LIB3270_TOGGLE_NETWORK_TRACE,0);
+ }
+
+
+ static void trace_window(G_GNUC_UNUSED H3270 *hSession, G_GNUC_UNUSED void * userdata, const char *fmt, va_list args)
+ {
+ GtkWidget * widget = v3270_trace_new_from_session(hSession);
+ v3270_trace_set_destroy_on_close(widget,TRUE);
+ g_signal_connect(widget, "destroy", G_CALLBACK(trace_window_destroy), hSession);
+ gtk_widget_show(widget);
+ }
+
GtkWidget * pw3270_new(const gchar *host, const gchar *systype, unsigned short colors)
{
GtkWidget * widget = g_object_new(GTK_TYPE_PW3270, NULL);
gboolean connct = FALSE;
+ if(tracefile)
+ {
+ lib3270_set_trace_handler(pw3270_get_session(widget),trace_file,(void *) widget);
+ }
+ else
+ {
+ lib3270_set_trace_handler(pw3270_get_session(widget),trace_window,(void *) widget);
+ }
+
if(host)
{
set_string_to_config("host","uri","%s",host);
@@ -212,7 +332,7 @@
void pw3270_set_url(GtkWidget *widget, const gchar *uri)
{
- g_return_val_if_fail(GTK_IS_PW3270(widget),"");
+ g_return_if_fail(GTK_IS_PW3270(widget));
v3270_set_url(GTK_PW3270(widget)->terminal,uri);
}
--
libgit2 0.21.2