Commit 6e14e1d19ac14e53a9c2cef7d51f21609ef302f5
1 parent
27bf76ec
Exists in
master
and in
5 other branches
Implementando ativacao/desativacao das barras de botoes
Showing
6 changed files
with
65 additions
and
4 deletions
Show diff stats
src/include/pw3270.h
... | ... | @@ -79,10 +79,9 @@ |
79 | 79 | |
80 | 80 | LIB3270_EXPORT void pw3270_print(GtkWidget *widget, GObject *action, GtkPrintOperationAction oper, PW3270_SRC src); |
81 | 81 | |
82 | - | |
83 | 82 | #ifdef HAVE_GTKMAC |
84 | - #include <gtk-mac-bundle.h> | |
85 | - LIB3270_EXPORT GtkMacBundle * pw3270_get_bundle(void); | |
83 | + #include <gtk-mac-bundle.h> | |
84 | + LIB3270_EXPORT GtkMacBundle * pw3270_get_bundle(void); | |
86 | 85 | #endif |
87 | 86 | |
88 | 87 | G_END_DECLS | ... | ... |
src/include/pw3270/v3270.h
... | ... | @@ -138,6 +138,7 @@ |
138 | 138 | LIB3270_EXPORT const gchar * v3270_get_font_family(GtkWidget *widget); |
139 | 139 | |
140 | 140 | LIB3270_EXPORT H3270 * v3270_get_session(GtkWidget *widget); |
141 | + LIB3270_EXPORT gboolean v3270_is_connected(GtkWidget *widget); | |
141 | 142 | |
142 | 143 | LIB3270_EXPORT int v3270_connect(GtkWidget *widget, const gchar *host); |
143 | 144 | LIB3270_EXPORT void v3270_disconnect(GtkWidget *widget); | ... | ... |
src/pw3270/uiparser/action.c
... | ... | @@ -30,6 +30,7 @@ |
30 | 30 | */ |
31 | 31 | |
32 | 32 | #include <stdlib.h> |
33 | + #include <pw3270/v3270.h> | |
33 | 34 | #include "private.h" |
34 | 35 | |
35 | 36 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
... | ... | @@ -120,3 +121,53 @@ |
120 | 121 | } |
121 | 122 | } |
122 | 123 | } |
124 | + | |
125 | + struct list_data | |
126 | + { | |
127 | + GtkWidget * terminal; | |
128 | + GtkWidget **keypad; | |
129 | + guint pos; | |
130 | + guint total; | |
131 | + }; | |
132 | + | |
133 | + static void insert_keypad(gpointer key, GtkWidget *widget, struct list_data *dt) | |
134 | + { | |
135 | + if(!widget || dt->pos >= dt->total) | |
136 | + return; | |
137 | + gtk_widget_set_sensitive(widget,v3270_is_connected(dt->terminal)); | |
138 | + | |
139 | + trace("%s: keypad[%d]=%p",__FUNCTION__,dt->pos,widget); | |
140 | + dt->keypad[dt->pos++] = widget; | |
141 | + } | |
142 | + | |
143 | + static void disable_keypad(GtkWidget *terminal, GtkWidget **keypad) | |
144 | + { | |
145 | + while(*keypad) | |
146 | + gtk_widget_set_sensitive(*(keypad++),FALSE); | |
147 | + } | |
148 | + | |
149 | + static void enable_keypad(GtkWidget *terminal, const gchar *dunno, GtkWidget **keypad) | |
150 | + { | |
151 | + while(*keypad) | |
152 | + gtk_widget_set_sensitive(*(keypad++),TRUE); | |
153 | + } | |
154 | + | |
155 | + void ui_setup_keypads(GHashTable *keypads, GtkWidget *window, GtkWidget *widget) | |
156 | + { | |
157 | + struct list_data dt; | |
158 | + | |
159 | + memset(&dt,0,sizeof(dt)); | |
160 | + dt.terminal = widget; | |
161 | + dt.total = g_hash_table_size(keypads); | |
162 | + | |
163 | + if(!dt.total) | |
164 | + return; | |
165 | + | |
166 | + dt.keypad = g_new0(GtkWidget *,dt.total+1); | |
167 | + g_hash_table_foreach(keypads,(GHFunc) insert_keypad, &dt); | |
168 | + | |
169 | + g_signal_connect(widget,"disconnected",G_CALLBACK(disable_keypad),dt.keypad); | |
170 | + g_signal_connect(widget,"connected",G_CALLBACK(enable_keypad),dt.keypad); | |
171 | + | |
172 | + g_object_set_data_full(G_OBJECT(widget),"keypads",dt.keypad,g_free); | |
173 | + } | ... | ... |
src/pw3270/uiparser/parser.c
... | ... | @@ -231,6 +231,9 @@ void parser_build(struct parser *p, GtkWidget *widget) |
231 | 231 | // Pack top toolbars |
232 | 232 | g_hash_table_foreach(p->element_list[UI_ELEMENT_TOOLBAR],(GHFunc) pack_start, p); |
233 | 233 | |
234 | + // Setup keypads | |
235 | + ui_setup_keypads(p->element_list[UI_ELEMENT_KEYPAD], p->toplevel, p->center_widget); | |
236 | + | |
234 | 237 | // Pack top keypads |
235 | 238 | memset(&keypad,0,sizeof(keypad)); |
236 | 239 | keypad.box = vbox; |
... | ... | @@ -238,7 +241,6 @@ void parser_build(struct parser *p, GtkWidget *widget) |
238 | 241 | keypad.pack = gtk_box_pack_start; |
239 | 242 | g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad); |
240 | 243 | |
241 | - | |
242 | 244 | // Pack left keypads |
243 | 245 | keypad.box = hbox; |
244 | 246 | keypad.filter = GTK_POS_RIGHT; | ... | ... |
src/pw3270/uiparser/parser.h
... | ... | @@ -71,6 +71,8 @@ |
71 | 71 | GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error); |
72 | 72 | const gchar * ui_get_dir_name(UI_ATTR_DIRECTION dir); |
73 | 73 | |
74 | + void ui_setup_keypads(GHashTable *keypads, GtkWidget *window, GtkWidget *widget); | |
75 | + | |
74 | 76 | void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *script_text, GError **error); |
75 | 77 | void ui_set_scroll_actions(GtkWidget *widget, GtkAction *action[UI_ATTR_DIRECTION_COUNT]); |
76 | 78 | ... | ... |
src/pw3270/v3270/widget.c
... | ... | @@ -1417,3 +1417,9 @@ void v3270_set_session_name(GtkWidget *widget, const gchar *name) |
1417 | 1417 | |
1418 | 1418 | GTK_V3270(widget)->session_name = g_strdup(name); |
1419 | 1419 | } |
1420 | + | |
1421 | +gboolean v3270_is_connected(GtkWidget *widget) | |
1422 | +{ | |
1423 | + g_return_val_if_fail(GTK_IS_V3270(widget),FALSE); | |
1424 | + return lib3270_connected(GTK_V3270(widget)->host) ? TRUE : FALSE; | |
1425 | +} | ... | ... |