Commit 5f503801c68909ecd4c993b8883ca66cc2306e8f
1 parent
94534245
Exists in
master
and in
5 other branches
Implementando suporte a scripts
Showing
3 changed files
with
29 additions
and
13 deletions
Show diff stats
src/pw3270/uiparser/parsefile.c
| ... | ... | @@ -226,6 +226,7 @@ |
| 226 | 226 | { |
| 227 | 227 | g_object_set_data(G_OBJECT(widget),"parent",info->element); |
| 228 | 228 | info->element = G_OBJECT(widget); |
| 229 | + info->action = action; | |
| 229 | 230 | |
| 230 | 231 | #if GTK_CHECK_VERSION(2,18,0) |
| 231 | 232 | gtk_widget_set_visible(widget,ui_get_bool_attribute("visible",names,values,TRUE)); |
| ... | ... | @@ -237,12 +238,11 @@ |
| 237 | 238 | #endif // GTK(2,18,0) |
| 238 | 239 | |
| 239 | 240 | } |
| 240 | -/* | |
| 241 | 241 | else |
| 242 | 242 | { |
| 243 | - info->disabled++; | |
| 243 | +// info->disabled++; | |
| 244 | + info->action = NULL; | |
| 244 | 245 | } |
| 245 | -*/ | |
| 246 | 246 | } |
| 247 | 247 | |
| 248 | 248 | static void element_end(GMarkupParseContext *context, const gchar *element_name, struct parser *info, GError **error) | ... | ... |
src/pw3270/uiparser/private.h
src/pw3270/uiparser/script.c
| ... | ... | @@ -31,26 +31,42 @@ |
| 31 | 31 | |
| 32 | 32 | #include "private.h" |
| 33 | 33 | |
| 34 | + #ifdef X3270_TRACE | |
| 35 | + #define trace_action(a,w) lib3270_trace_event(NULL,"Action %s activated on widget %p\n",gtk_action_get_name(a),w); | |
| 36 | + #else | |
| 37 | + #define trace_action(a,w) /* */ | |
| 38 | + #endif // X3270_TRACE | |
| 39 | + | |
| 34 | 40 | /*--[ Parser struct ]--------------------------------------------------------------------------------*/ |
| 35 | 41 | |
| 36 | 42 | |
| 37 | 43 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 38 | 44 | |
| 39 | - static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, struct parser *info, GError **error) | |
| 45 | + static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, GtkAction *action, GError **error) | |
| 40 | 46 | { |
| 41 | 47 | trace("%s: %s",__FUNCTION__,element_name); |
| 42 | 48 | } |
| 43 | 49 | |
| 44 | - static void element_end(GMarkupParseContext *context, const gchar *element_name, struct parser *info, GError **error) | |
| 50 | + static void element_end(GMarkupParseContext *context, const gchar *element_name, GtkAction *action, GError **error) | |
| 45 | 51 | { |
| 46 | 52 | trace("%s: %s",__FUNCTION__,element_name); |
| 47 | 53 | } |
| 48 | 54 | |
| 49 | - static void script_text(GMarkupParseContext *context, const gchar *element_text, gsize text_len, GtkAction *action, GError **error) | |
| 55 | + static void text_action(GtkAction *action, const gchar *text) | |
| 56 | + { | |
| 57 | + trace("Script:\n%s\n",text); | |
| 58 | + } | |
| 59 | + | |
| 60 | + static void script_text(GMarkupParseContext *context, const gchar *element_text, gsize text_len, GtkAction *action, GError **error) | |
| 50 | 61 | { |
| 51 | - gchar *text = g_strstrip(g_strdup(element_text)); | |
| 52 | - g_object_set_data_full(G_OBJECT(action),"script_text",g_strdup(text),g_free); | |
| 53 | - g_free(text); | |
| 62 | + gchar *base = g_strstrip(g_strdup(element_text)); | |
| 63 | + gchar *text = g_strdup(base); | |
| 64 | + g_free(base); | |
| 65 | + | |
| 66 | + gtk_action_set_sensitive(action,TRUE); | |
| 67 | + g_object_set_data_full(G_OBJECT(action),"script_text",text,g_free); | |
| 68 | + g_signal_connect(action,"activate",G_CALLBACK(text_action),text); | |
| 69 | + | |
| 54 | 70 | } |
| 55 | 71 | |
| 56 | 72 | GObject * ui_create_script(GMarkupParseContext *context,GtkAction *action, struct parser *info, const gchar **names, const gchar **values, GError **error) |
| ... | ... | @@ -77,15 +93,15 @@ |
| 77 | 93 | |
| 78 | 94 | trace("%s: info->element: %p action: %p",__FUNCTION__,info->element, action); |
| 79 | 95 | |
| 80 | - if(!info->element) | |
| 96 | + if(!(info->element && info->actions)) | |
| 81 | 97 | { |
| 82 | 98 | *error = g_error_new(ERROR_DOMAIN,EINVAL,_( "<%s> is invalid at this context"),"script"); |
| 83 | 99 | return NULL; |
| 84 | 100 | } |
| 85 | 101 | |
| 86 | - trace("%s: Parsing script",__FUNCTION__); | |
| 102 | + trace("%s: Parsing script for action %s",__FUNCTION__,gtk_action_get_name(info->action)); | |
| 87 | 103 | |
| 88 | - g_markup_parse_context_push(context,&parser,NULL); | |
| 104 | + g_markup_parse_context_push(context,&parser,info->action); | |
| 89 | 105 | |
| 90 | 106 | return NULL; |
| 91 | 107 | } | ... | ... |