diff --git a/pw3270.cbp b/pw3270.cbp
index 93d0b2c..c093a20 100644
--- a/pw3270.cbp
+++ b/pw3270.cbp
@@ -291,9 +291,13 @@
+
+
+
+
diff --git a/src/include/pw3270/v3270.h b/src/include/pw3270/v3270.h
index 6ca2b47..ff505ff 100644
--- a/src/include/pw3270/v3270.h
+++ b/src/include/pw3270/v3270.h
@@ -157,6 +157,7 @@
LIB3270_EXPORT const gchar * v3270_copy(GtkWidget *widget, V3270_SELECT_FORMAT mode, gboolean cut);
LIB3270_EXPORT const gchar * v3270_copy_append(GtkWidget *widget);
+ LIB3270_EXPORT int v3270_run_script(GtkWidget *widget, const gchar *script);
LIB3270_EXPORT const gchar * v3270_get_selected_text(GtkWidget *widget, gboolean cut);
LIB3270_EXPORT const gchar * v3270_get_copy(GtkWidget *widget);
diff --git a/src/pw3270/actions.c b/src/pw3270/actions.c
index 17a2cd0..1870be7 100644
--- a/src/pw3270/actions.c
+++ b/src/pw3270/actions.c
@@ -861,10 +861,15 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
}
static void action_text_script(GtkAction *action, GtkWidget *widget)
-{
+{
+ v3270_run_script(widget,g_object_get_data(G_OBJECT(action),"script_text"));
+
+/*
gchar **ln = g_strsplit(g_object_get_data(G_OBJECT(action),"script_text"),"\n",-1);
int f;
H3270 * hSession = v3270_get_session(widget);
+
+ lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p\n",gtk_action_get_name(action),widget);
for(f=0;ln[f];f++)
{
@@ -893,7 +898,8 @@ static void action_text_script(GtkAction *action, GtkWidget *widget)
}
- g_strfreev(ln);
+ g_strfreev(ln);
+*/
}
void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *script_text, GError **error)
@@ -902,8 +908,6 @@ void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *s
gchar *text = g_strdup(base);
g_free(base);
- lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p\n",gtk_action_get_name(action),widget);
-
gtk_action_set_sensitive(action,TRUE);
g_object_set_data_full(G_OBJECT(action),"script_text",text,g_free);
g_signal_connect(action,"activate",G_CALLBACK(action_text_script),widget);
diff --git a/src/pw3270/v3270/widget.c b/src/pw3270/v3270/widget.c
index 5779a64..424c244 100644
--- a/src/pw3270/v3270/widget.c
+++ b/src/pw3270/v3270/widget.c
@@ -33,6 +33,7 @@
#include
#include
#include
+ #include
#include
#ifdef HAVE_MALLOC_H
@@ -1542,3 +1543,45 @@ gboolean v3270_is_connected(GtkWidget *widget)
g_return_val_if_fail(GTK_IS_V3270(widget),FALSE);
return lib3270_connected(GTK_V3270(widget)->host) ? TRUE : FALSE;
}
+
+int v3270_run_script(GtkWidget *widget, const gchar *script)
+{
+ gchar **ln;
+ int f;
+ H3270 * hSession;
+
+ if(!script)
+ return 0;
+
+ g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL);
+
+ hSession = v3270_get_session(widget);
+ ln = g_strsplit(script,"\n",-1);
+
+ for(f=0;ln[f];f++)
+ {
+ GError * error = NULL;
+ gint argc = 0;
+ gchar **argv = NULL;
+
+ if(g_shell_parse_argv(g_strstrip(ln[f]),&argc,&argv,&error))
+ {
+ gchar *rsp = lib3270_run_macro(hSession,(const gchar **) argv);
+ if(rsp)
+ g_free(rsp);
+ }
+ else
+ {
+ g_warning("Error parsing \"%s\": %s",g_strstrip(ln[f]),error->message);
+ g_error_free(error);
+ }
+
+ if(argv)
+ g_strfreev(argv);
+
+ }
+
+ g_strfreev(ln);
+
+ return 0;
+}
--
libgit2 0.21.2