diff --git a/src/include/lib3270/action_table.h b/src/include/lib3270/action_table.h index 63568e3..31de63c 100644 --- a/src/include/lib3270/action_table.h +++ b/src/include/lib3270/action_table.h @@ -41,8 +41,6 @@ /* Keyboard actions */ DECLARE_LIB3270_KEY_ACTION( enter ) - DECLARE_LIB3270_KEY_ACTION( tab ) - DECLARE_LIB3270_KEY_ACTION( backtab ) DECLARE_LIB3270_FKEY_ACTION( pfkey ) DECLARE_LIB3270_FKEY_ACTION( pakey ) @@ -77,6 +75,9 @@ DECLARE_LIB3270_ACTION( nextword ) DECLARE_LIB3270_ACTION( fieldend ) + DECLARE_LIB3270_ACTION( nextfield ) + DECLARE_LIB3270_ACTION( previousfield ) + DECLARE_LIB3270_ACTION( attn ) DECLARE_LIB3270_ACTION( break ) DECLARE_LIB3270_ACTION( pastenext ) diff --git a/src/lib3270/kybd.c b/src/lib3270/kybd.c index 49128e8..e49043b 100644 --- a/src/lib3270/kybd.c +++ b/src/lib3270/kybd.c @@ -1394,7 +1394,7 @@ Tab_action(Widget w unused, XEvent *event, String *params, Cardinal *num_params) } */ -LIB3270_KEY_ACTION( tab ) +LIB3270_ACTION( nextfield ) { // reset_idle_timer(); @@ -1407,7 +1407,7 @@ LIB3270_KEY_ACTION( tab ) status_reset(hSession); } else { - ENQUEUE_ACTION(lib3270_tab); + ENQUEUE_ACTION(lib3270_nextfield); return 0; } } @@ -1439,7 +1439,7 @@ LIB3270_EXPORT int lib3270_clear_operator_error(H3270 *hSession) /* * Tab backward to previous field. */ -LIB3270_KEY_ACTION( backtab ) +LIB3270_ACTION( previousfield ) { register int baddr, nbaddr; int sbaddr; @@ -1455,7 +1455,7 @@ LIB3270_KEY_ACTION( backtab ) } else { - ENQUEUE_ACTION(lib3270_backtab); + ENQUEUE_ACTION(lib3270_previousfield); return 0; } } @@ -3020,7 +3020,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p case '\r': /* ignored */ break; case '\t': - lib3270_tab(session); + lib3270_nextfield(session); skipped = False; break; case '\\': /* backslashes are NOT special when @@ -3106,12 +3106,12 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p break; case 't': - lib3270_tab(session); + lib3270_nextfield(session); skipped = False; state = BASE; break; case 'T': - lib3270_tab(session); + lib3270_nextfield(session); skipped = False; state = BASE; break; diff --git a/src/pw3270/actions.c b/src/pw3270/actions.c index 3a0c577..ebfecd7 100644 --- a/src/pw3270/actions.c +++ b/src/pw3270/actions.c @@ -36,6 +36,7 @@ #include #include #include + #include #include #ifdef DEBUG @@ -736,3 +737,47 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash return action; } +static void action_text_script(GtkAction *action, GtkWidget *widget) +{ + gchar **ln = g_strsplit(g_object_get_data(G_OBJECT(action),"script_text"),"\n",-1); + int f; + H3270 * hSession = v3270_get_session(widget); + + 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); +} + +void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *script_text, GError **error) +{ + gchar *base = g_strstrip(g_strdup(script_text)); + gchar *text = g_strdup(base); + g_free(base); + + 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/uiparser/parser.h b/src/pw3270/uiparser/parser.h index 7eb720e..9b515ce 100644 --- a/src/pw3270/uiparser/parser.h +++ b/src/pw3270/uiparser/parser.h @@ -56,4 +56,6 @@ gboolean ui_get_bool_attribute(const gchar *key, const gchar **name, const gchar **value, gboolean def); GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error); + void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *script_text, GError **error); + #endif // UI_PARSER_H_INCLUDED diff --git a/src/pw3270/uiparser/private.h b/src/pw3270/uiparser/private.h index 48d4440..038309e 100644 --- a/src/pw3270/uiparser/private.h +++ b/src/pw3270/uiparser/private.h @@ -54,11 +54,10 @@ struct parser { -// int disabled; GtkWidget * toplevel; GObject * element; GtkAction * action; -// GCallback callback; + GtkAction * script_action; GtkWidget * center_widget; GtkWidget ** popup; /**< Popup widgets */ GStringChunk * strings; diff --git a/src/pw3270/uiparser/script.c b/src/pw3270/uiparser/script.c index 20a673a..4619a1e 100644 --- a/src/pw3270/uiparser/script.c +++ b/src/pw3270/uiparser/script.c @@ -37,36 +37,21 @@ #define trace_action(a,w) /* */ #endif // X3270_TRACE -/*--[ Parser struct ]--------------------------------------------------------------------------------*/ - - /*--[ Implement ]------------------------------------------------------------------------------------*/ - static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, GtkAction *action, GError **error) + static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, struct parser *info, GError **error) { trace("%s: %s",__FUNCTION__,element_name); } - static void element_end(GMarkupParseContext *context, const gchar *element_name, GtkAction *action, GError **error) + static void element_end(GMarkupParseContext *context, const gchar *element_name, struct parser *info, GError **error) { trace("%s: %s",__FUNCTION__,element_name); } - static void text_action(GtkAction *action, const gchar *text) - { - trace("Script:\n%s\n",text); - } - - static void script_text(GMarkupParseContext *context, const gchar *element_text, gsize text_len, GtkAction *action, GError **error) + static void script_text(GMarkupParseContext *context, const gchar *element_text, gsize text_len, struct parser *info, GError **error) { - gchar *base = g_strstrip(g_strdup(element_text)); - gchar *text = g_strdup(base); - g_free(base); - - 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(text_action),text); - + ui_connect_text_script(info->center_widget, info->script_action,element_text,error); } GObject * ui_create_script(GMarkupParseContext *context,GtkAction *action, struct parser *info, const gchar **names, const gchar **values, GError **error) @@ -91,7 +76,7 @@ return NULL; } - trace("%s: info->element: %p action: %p",__FUNCTION__,info->element, action); +// trace("%s: info->element: %p action: %p",__FUNCTION__,info->element, action); if(!(info->element && info->actions)) { @@ -99,9 +84,8 @@ return NULL; } - trace("%s: Parsing script for action %s",__FUNCTION__,gtk_action_get_name(info->action)); - - g_markup_parse_context_push(context,&parser,info->action); + info->script_action = info->action; + g_markup_parse_context_push(context,&parser,info); return NULL; } diff --git a/src/pw3270/v3270/keyboard.c b/src/pw3270/v3270/keyboard.c index 68a22a4..e065a80 100644 --- a/src/pw3270/v3270/keyboard.c +++ b/src/pw3270/v3270/keyboard.c @@ -95,8 +95,8 @@ { GDK_Up, 0, lib3270_cursor_up }, { GDK_Right, 0, lib3270_cursor_right }, { GDK_Down, 0, lib3270_cursor_down }, - { GDK_Tab, 0, lib3270_tab }, - { GDK_ISO_Left_Tab, GDK_SHIFT_MASK, lib3270_backtab }, + { GDK_Tab, 0, lib3270_nextfield }, + { GDK_ISO_Left_Tab, GDK_SHIFT_MASK, lib3270_previousfield }, { GDK_KP_Left, 0, lib3270_cursor_left }, { GDK_KP_Up, 0, lib3270_cursor_up }, { GDK_KP_Right, 0, lib3270_cursor_right }, @@ -199,13 +199,13 @@ void v3270_tab(GtkWidget *widget) { g_return_if_fail(GTK_IS_V3270(widget)); - lib3270_tab(GTK_V3270(widget)->host); + lib3270_nextfield(GTK_V3270(widget)->host); } void v3270_backtab(GtkWidget *widget) { g_return_if_fail(GTK_IS_V3270(widget)); - lib3270_backtab(GTK_V3270(widget)->host); + lib3270_previousfield(GTK_V3270(widget)->host); } void v3270_set_string(GtkWidget *widget, const gchar *str) diff --git a/ui/00default.xml b/ui/00default.xml index 936a3b2..71b560a 100644 --- a/ui/00default.xml +++ b/ui/00default.xml @@ -16,8 +16,8 @@ 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 + programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + St, Fifth Floor, Boston, MA 02110-1301 USA Contatos: @@ -184,8 +184,8 @@ - - + + @@ -232,8 +232,8 @@ - - + + -- libgit2 0.21.2