Commit 72bdaf3378d0d3a708634b05fd0c7947e8e407ac
1 parent
0326d968
Exists in
master
and in
5 other branches
Iniciando reconstrução das barras lateral e de funções posto que, aparentemente,…
… o widget usado nelas não funciona depois da última atualização do gtk.
Showing
4 changed files
with
57 additions
and
168 deletions
Show diff stats
src/pw3270/uiparser/button.c
@@ -77,6 +77,7 @@ | @@ -77,6 +77,7 @@ | ||
77 | 77 | ||
78 | void keypad_button_start(GMarkupParseContext *context, const gchar **names,const gchar **values, GError **error, struct keypad *keypad) | 78 | void keypad_button_start(GMarkupParseContext *context, const gchar **names,const gchar **values, GError **error, struct keypad *keypad) |
79 | { | 79 | { |
80 | + /* | ||
80 | const gchar * label = ui_get_attribute("label", names, values); | 81 | const gchar * label = ui_get_attribute("label", names, values); |
81 | const gchar * icon = ui_get_attribute("icon", names, values); | 82 | const gchar * icon = ui_get_attribute("icon", names, values); |
82 | const gchar * name = ui_get_attribute("action", names, values); | 83 | const gchar * name = ui_get_attribute("action", names, values); |
@@ -132,5 +133,6 @@ | @@ -132,5 +133,6 @@ | ||
132 | gtk_widget_set_sensitive(widget,FALSE); | 133 | gtk_widget_set_sensitive(widget,FALSE); |
133 | g_signal_connect(G_OBJECT(widget),"clicked",G_CALLBACK(button_script),info->center_widget); | 134 | g_signal_connect(G_OBJECT(widget),"clicked",G_CALLBACK(button_script),info->center_widget); |
134 | } | 135 | } |
136 | + */ | ||
135 | } | 137 | } |
136 | 138 |
src/pw3270/uiparser/keypad.c
@@ -31,46 +31,14 @@ | @@ -31,46 +31,14 @@ | ||
31 | 31 | ||
32 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 32 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
33 | 33 | ||
34 | - void keypad_row_start(GMarkupParseContext *context, const gchar **names,const gchar **values, GError **error, struct keypad *keypad) | ||
35 | - { | ||
36 | - keypad->row = g_malloc0(sizeof(struct row)); | ||
37 | - | ||
38 | - keypad->row->pos = ++keypad->num_rows; | ||
39 | - keypad->col = 0; | ||
40 | - | ||
41 | - keypad->rows = g_list_append(keypad->rows,keypad->row); | ||
42 | - } | ||
43 | - | ||
44 | static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, struct keypad *keypad, GError **error) | 34 | static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, struct keypad *keypad, GError **error) |
45 | { | 35 | { |
46 | - static const struct _cmd | ||
47 | - { | ||
48 | - const gchar *element_name; | ||
49 | - void (*start)(GMarkupParseContext *, const gchar **,const gchar **, GError **, struct keypad *); | ||
50 | - } cmd[] = | ||
51 | - { | ||
52 | - { "row", keypad_row_start }, | ||
53 | - { "button", keypad_button_start }, | ||
54 | - }; | ||
55 | - | ||
56 | - int f; | ||
57 | - | ||
58 | - for(f = 0; f < G_N_ELEMENTS(cmd); f++) | ||
59 | - { | ||
60 | - if(!g_ascii_strcasecmp(cmd[f].element_name,element_name)) | ||
61 | - { | ||
62 | - cmd[f].start(context,names,values,error,keypad); | ||
63 | - return; | ||
64 | - } | ||
65 | - } | ||
66 | - | ||
67 | - *error = g_error_new(ERROR_DOMAIN,EINVAL, _( "Unexpected element <%s>"), element_name); | 36 | + trace("%s(%s)",__FUNCTION__,element_name); |
68 | } | 37 | } |
69 | 38 | ||
70 | static void element_end(GMarkupParseContext *context, const gchar *element_name, struct keypad *keypad, GError **error) | 39 | static void element_end(GMarkupParseContext *context, const gchar *element_name, struct keypad *keypad, GError **error) |
71 | { | 40 | { |
72 | - keypad->widget = NULL; | ||
73 | -// trace("%s: %s",__FUNCTION__,element_name); | 41 | + trace("%s(%s)",__FUNCTION__,element_name); |
74 | } | 42 | } |
75 | 43 | ||
76 | static void toggled(GtkToggleAction *action, GtkWidget *widget) | 44 | static void toggled(GtkToggleAction *action, GtkWidget *widget) |
@@ -88,44 +56,37 @@ | @@ -88,44 +56,37 @@ | ||
88 | 56 | ||
89 | } | 57 | } |
90 | 58 | ||
91 | - UI_ATTR_DIRECTION ui_get_position_attribute(const gchar **names, const gchar **values) | 59 | + GtkPositionType ui_get_position_attribute(const gchar **names, const gchar **values) |
92 | { | 60 | { |
93 | - static const gchar * posname[] = { "top", "bottom", "left", "right" }; | ||
94 | - const gchar * dir = ui_get_attribute("position",names,values); | ||
95 | - int f; | 61 | + static const struct _pos { |
62 | + GtkPositionType type; | ||
63 | + const gchar * name; | ||
64 | + } pos [] = { | ||
65 | + | ||
66 | + { GTK_POS_LEFT, "left" }, | ||
67 | + { GTK_POS_RIGHT, "right" }, | ||
68 | + { GTK_POS_TOP, "top" }, | ||
69 | + { GTK_POS_BOTTOM, "bottom" }, | ||
70 | + | ||
71 | + }; | ||
72 | + | ||
73 | + const gchar * dir = ui_get_attribute("position",names,values); | ||
74 | + int f; | ||
96 | 75 | ||
97 | if(dir) | 76 | if(dir) |
98 | { | 77 | { |
99 | - for(f=0;f<G_N_ELEMENTS(posname);f++) | 78 | + for(f=0;f<G_N_ELEMENTS(pos);f++) |
100 | { | 79 | { |
101 | - if(!g_ascii_strcasecmp(dir,posname[f])) | ||
102 | - return f; | 80 | + if(!g_ascii_strcasecmp(dir,pos[f].name)) |
81 | + return pos[f].type; | ||
103 | } | 82 | } |
104 | } | 83 | } |
105 | 84 | ||
106 | - return UI_ATTR_DIRECTION_NONE; | 85 | + return GTK_POS_TOP; |
107 | } | 86 | } |
108 | 87 | ||
109 | static void element_text(GMarkupParseContext *context, const gchar *text, gsize sz, struct keypad *keypad, GError **error) | 88 | static void element_text(GMarkupParseContext *context, const gchar *text, gsize sz, struct keypad *keypad, GError **error) |
110 | { | 89 | { |
111 | - if(keypad->widget) | ||
112 | - { | ||
113 | - gchar *base = g_strstrip(g_strdup(text)); | ||
114 | - gchar *text = g_strdup(base); | ||
115 | - g_free(base); | ||
116 | - | ||
117 | - if(*text) | ||
118 | - { | ||
119 | - gtk_widget_set_sensitive(keypad->widget,TRUE); | ||
120 | - g_object_set_data_full(G_OBJECT(keypad->widget),"script_text",text,g_free); | ||
121 | - } | ||
122 | - else | ||
123 | - { | ||
124 | - g_free(text); | ||
125 | - } | ||
126 | - | ||
127 | - } | ||
128 | - | ||
129 | } | 90 | } |
130 | 91 | ||
131 | GObject * ui_create_keypad(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) | 92 | GObject * ui_create_keypad(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) |
@@ -162,100 +123,33 @@ | @@ -162,100 +123,33 @@ | ||
162 | info->block_data = keypad = g_malloc0(sizeof(struct keypad)); | 123 | info->block_data = keypad = g_malloc0(sizeof(struct keypad)); |
163 | 124 | ||
164 | keypad->parser = info; | 125 | keypad->parser = info; |
165 | - keypad->handle = gtk_handle_box_new(); | ||
166 | keypad->pos = ui_get_position_attribute(names,values); | 126 | keypad->pos = ui_get_position_attribute(names,values); |
167 | keypad->relief = ui_get_relief(names, values, GTK_RELIEF_NORMAL); | 127 | keypad->relief = ui_get_relief(names, values, GTK_RELIEF_NORMAL); |
128 | + keypad->grid = GTK_GRID(gtk_grid_new()); | ||
168 | 129 | ||
169 | - switch(keypad->pos) | ||
170 | - { | ||
171 | - case UI_ATTR_UP: | ||
172 | -#if GTK_CHECK_VERSION(3,0,0) | ||
173 | - keypad->box = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); | ||
174 | -#else | ||
175 | - keypad->box = gtk_vbox_new(FALSE,0); | ||
176 | -#endif // GTK(3,0,0) | ||
177 | - gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(keypad->handle),GTK_POS_BOTTOM); | ||
178 | - break; | ||
179 | - | ||
180 | - case UI_ATTR_DOWN: | ||
181 | -#if GTK_CHECK_VERSION(3,0,0) | ||
182 | - keypad->box = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); | ||
183 | -#else | ||
184 | - keypad->box = gtk_vbox_new(FALSE,0); | ||
185 | -#endif // GTK(3,0,0) | ||
186 | - gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(keypad->handle),GTK_POS_TOP); | ||
187 | - break; | ||
188 | - | ||
189 | - case UI_ATTR_LEFT: | ||
190 | -#if GTK_CHECK_VERSION(3,0,0) | ||
191 | - keypad->box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); | ||
192 | -#else | ||
193 | - keypad->box = gtk_hbox_new(FALSE,0); | ||
194 | -#endif // GTK(3,0,0) | ||
195 | - gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(keypad->handle),GTK_POS_RIGHT); | ||
196 | - break; | ||
197 | - | ||
198 | - default: | ||
199 | -#if GTK_CHECK_VERSION(3,0,0) | ||
200 | - keypad->box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); | ||
201 | -#else | ||
202 | - keypad->box = gtk_hbox_new(FALSE,0); | ||
203 | -#endif // GTK(3,0,0) | ||
204 | - keypad->pos = UI_ATTR_RIGHT; | ||
205 | - gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(keypad->handle),GTK_POS_LEFT); | ||
206 | - | ||
207 | - } | 130 | + g_object_set_data(G_OBJECT(keypad->grid),"position",(gpointer) keypad->pos); |
208 | 131 | ||
209 | label = ui_get_attribute("label",names,values); | 132 | label = ui_get_attribute("label",names,values); |
210 | if(label) | 133 | if(label) |
211 | { | 134 | { |
212 | // Keypad has label, create and setup an action | 135 | // Keypad has label, create and setup an action |
213 | const gchar *name = ui_get_attribute("name",names,values); | 136 | const gchar *name = ui_get_attribute("name",names,values); |
137 | + | ||
138 | + trace("%s name=%s",__FUNCTION__,name); | ||
139 | + | ||
214 | if(name) | 140 | if(name) |
215 | { | 141 | { |
216 | GtkToggleAction *action = gtk_toggle_action_new(name,gettext(label),NULL,NULL); | 142 | GtkToggleAction *action = gtk_toggle_action_new(name,gettext(label),NULL,NULL); |
217 | ui_action_set_options(GTK_ACTION(action),info,names,values,error); | 143 | ui_action_set_options(GTK_ACTION(action),info,names,values,error); |
218 | - g_object_set_data_full(G_OBJECT(keypad->handle),"view_action",action,g_object_unref); | ||
219 | - g_signal_connect(action,"toggled",G_CALLBACK(toggled),keypad->handle); | 144 | + g_object_set_data_full(G_OBJECT(keypad->grid),"view_action",action,g_object_unref); |
145 | + g_signal_connect(action,"toggled",G_CALLBACK(toggled),keypad->grid); | ||
146 | + gtk_widget_set_name(GTK_WIDGET(keypad->grid),name); | ||
220 | } | 147 | } |
221 | } | 148 | } |
222 | 149 | ||
223 | - gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(keypad->handle),GTK_SHADOW_ETCHED_IN); | ||
224 | - gtk_container_add(GTK_CONTAINER(keypad->handle),keypad->box); | ||
225 | - | ||
226 | g_markup_parse_context_push(context,(GMarkupParser *) &parser,keypad); | 150 | g_markup_parse_context_push(context,(GMarkupParser *) &parser,keypad); |
227 | 151 | ||
228 | - return G_OBJECT(ui_insert_element(info, action, UI_ELEMENT_KEYPAD, names, values, G_OBJECT(keypad->handle), error)); | ||
229 | - } | ||
230 | - | ||
231 | - static void create_col(GtkWidget *widget, struct keypad *keypad) | ||
232 | - { | ||
233 | - if(widget) | ||
234 | - { | ||
235 | - gtk_table_attach( GTK_TABLE(keypad->table), | ||
236 | - widget, | ||
237 | - keypad->col,keypad->col+keypad->button_width, | ||
238 | - keypad->num_rows,keypad->num_rows+1, | ||
239 | - GTK_EXPAND|GTK_FILL,GTK_EXPAND|GTK_FILL,0,0 ); | ||
240 | - | ||
241 | - } | ||
242 | - keypad->col += keypad->button_width; | ||
243 | - | ||
244 | - } | ||
245 | - | ||
246 | - static void create_row(struct row *info, struct keypad *keypad) | ||
247 | - { | ||
248 | - if(info->cols) | ||
249 | - { | ||
250 | - keypad->col = 0; | ||
251 | - keypad->button_width = keypad->num_cols / info->num_cols; | ||
252 | - | ||
253 | -// trace("Max cols=%d row cols=%d width=%d",keypad->num_cols,info->num_cols,keypad->button_width); | ||
254 | - | ||
255 | - g_list_foreach(info->cols,(GFunc) create_col,keypad); | ||
256 | - g_list_free(info->cols); | ||
257 | - } | ||
258 | - keypad->num_rows++; | 152 | + return G_OBJECT(ui_insert_element(info, action, UI_ELEMENT_KEYPAD, names, values, G_OBJECT(keypad->grid), error)); |
259 | } | 153 | } |
260 | 154 | ||
261 | void ui_end_keypad(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error) | 155 | void ui_end_keypad(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error) |
@@ -263,33 +157,7 @@ | @@ -263,33 +157,7 @@ | ||
263 | struct keypad *keypad = (struct keypad *) info->block_data; | 157 | struct keypad *keypad = (struct keypad *) info->block_data; |
264 | info->block_data = NULL; | 158 | info->block_data = NULL; |
265 | 159 | ||
266 | - keypad->num_cols *= 2; | ||
267 | - | ||
268 | - if(keypad->rows) | ||
269 | - { | ||
270 | - // Create Widgets & Release memory | ||
271 | - keypad->table = gtk_table_new(keypad->num_rows,keypad->num_cols,FALSE); | ||
272 | - | ||
273 | -#if GTK_CHECK_VERSION(2,18,0) | ||
274 | - gtk_widget_set_can_focus(keypad->table,FALSE); | ||
275 | - gtk_widget_set_can_default(keypad->table,FALSE); | ||
276 | -#else | ||
277 | - GTK_WIDGET_UNSET_FLAGS(keypad->table,GTK_CAN_FOCUS); | ||
278 | - GTK_WIDGET_UNSET_FLAGS(keypad->table,GTK_CAN_DEFAULT); | ||
279 | -#endif // GTK(2,18) | ||
280 | - | ||
281 | - keypad->num_rows = 0; | ||
282 | - g_list_foreach(keypad->rows,(GFunc) create_row,keypad); | ||
283 | -#if GTK_CHECK_VERSION(2,28,0) | ||
284 | - g_list_free_full(keypad->rows,g_free); | ||
285 | -#else | ||
286 | - g_list_foreach(keypad->rows,(GFunc) g_free,NULL); | ||
287 | - g_list_free(keypad->rows); | ||
288 | -#endif // GTK(2,28) | ||
289 | - gtk_box_pack_start(GTK_BOX(keypad->box),keypad->table,FALSE,FALSE,0); | ||
290 | - | ||
291 | - gtk_widget_show_all(keypad->box); | ||
292 | - } | 160 | + gtk_widget_show_all(GTK_WIDGET(keypad->grid)); |
293 | 161 | ||
294 | g_free(keypad); | 162 | g_free(keypad); |
295 | g_markup_parse_context_pop(context); | 163 | g_markup_parse_context_pop(context); |
src/pw3270/uiparser/keypad.h
@@ -33,6 +33,16 @@ | @@ -33,6 +33,16 @@ | ||
33 | 33 | ||
34 | /*--[ Globals ]--------------------------------------------------------------------------------------*/ | 34 | /*--[ Globals ]--------------------------------------------------------------------------------------*/ |
35 | 35 | ||
36 | + struct keypad { | ||
37 | + struct parser * parser; | ||
38 | + unsigned short row; | ||
39 | + unsigned short col; | ||
40 | + GtkGrid * grid; | ||
41 | + GtkReliefStyle relief; | ||
42 | + UI_ATTR_DIRECTION pos; | ||
43 | + }; | ||
44 | + | ||
45 | +/* | ||
36 | struct row | 46 | struct row |
37 | { | 47 | { |
38 | unsigned short pos; | 48 | unsigned short pos; |
@@ -58,5 +68,6 @@ | @@ -58,5 +68,6 @@ | ||
58 | GtkWidget * widget; | 68 | GtkWidget * widget; |
59 | 69 | ||
60 | }; | 70 | }; |
71 | +*/ | ||
61 | 72 | ||
62 | G_GNUC_INTERNAL void keypad_button_start(GMarkupParseContext *context, const gchar **names,const gchar **values, GError **error, struct keypad *keypad); | 73 | G_GNUC_INTERNAL void keypad_button_start(GMarkupParseContext *context, const gchar **names,const gchar **values, GError **error, struct keypad *keypad); |
src/pw3270/uiparser/parser.c
@@ -73,6 +73,7 @@ static void pack_start(gpointer key, GtkWidget *widget, struct parser *p) | @@ -73,6 +73,7 @@ static void pack_start(gpointer key, GtkWidget *widget, struct parser *p) | ||
73 | gtk_box_pack_start(GTK_BOX(p->element),widget,FALSE,FALSE,0); | 73 | gtk_box_pack_start(GTK_BOX(p->element),widget,FALSE,FALSE,0); |
74 | } | 74 | } |
75 | 75 | ||
76 | + | ||
76 | struct keypad | 77 | struct keypad |
77 | { | 78 | { |
78 | GtkWidget * box; | 79 | GtkWidget * box; |
@@ -82,10 +83,13 @@ struct keypad | @@ -82,10 +83,13 @@ struct keypad | ||
82 | 83 | ||
83 | static void pack_keypad(gpointer key, GtkWidget *widget, struct keypad *k) | 84 | static void pack_keypad(gpointer key, GtkWidget *widget, struct keypad *k) |
84 | { | 85 | { |
85 | - if(gtk_handle_box_get_handle_position(GTK_HANDLE_BOX(widget)) != k->filter) | 86 | + if((GtkPositionType) g_object_get_data(G_OBJECT(widget),"position") != k->filter) { |
86 | return; | 87 | return; |
88 | + } | ||
87 | 89 | ||
90 | + trace("%s %s",__FUNCTION__,gtk_widget_get_name(widget)); | ||
88 | k->pack(GTK_BOX(k->box),widget,FALSE,FALSE,0); | 91 | k->pack(GTK_BOX(k->box),widget,FALSE,FALSE,0); |
92 | + | ||
89 | } | 93 | } |
90 | 94 | ||
91 | static void pack_view(gpointer key, GtkWidget *widget, GtkWidget *parent) | 95 | static void pack_view(gpointer key, GtkWidget *widget, GtkWidget *parent) |
@@ -231,15 +235,17 @@ void parser_build(struct parser *p, GtkWidget *widget) | @@ -231,15 +235,17 @@ void parser_build(struct parser *p, GtkWidget *widget) | ||
231 | ui_setup_keypads(p->element_list[UI_ELEMENT_KEYPAD], p->toplevel, p->center_widget); | 235 | ui_setup_keypads(p->element_list[UI_ELEMENT_KEYPAD], p->toplevel, p->center_widget); |
232 | 236 | ||
233 | // Pack top keypads | 237 | // Pack top keypads |
238 | + trace("Packing %s keypads","top"); | ||
234 | memset(&keypad,0,sizeof(keypad)); | 239 | memset(&keypad,0,sizeof(keypad)); |
235 | keypad.box = vbox; | 240 | keypad.box = vbox; |
236 | - keypad.filter = GTK_POS_BOTTOM; | 241 | + keypad.filter = GTK_POS_TOP; |
237 | keypad.pack = gtk_box_pack_start; | 242 | keypad.pack = gtk_box_pack_start; |
238 | g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad); | 243 | g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad); |
239 | 244 | ||
240 | // Pack left keypads | 245 | // Pack left keypads |
246 | + trace("Packing %s keypads","left"); | ||
241 | keypad.box = hbox; | 247 | keypad.box = hbox; |
242 | - keypad.filter = GTK_POS_RIGHT; | 248 | + keypad.filter = GTK_POS_LEFT; |
243 | g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad); | 249 | g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad); |
244 | 250 | ||
245 | // Pack & configure center widget | 251 | // Pack & configure center widget |
@@ -252,13 +258,15 @@ void parser_build(struct parser *p, GtkWidget *widget) | @@ -252,13 +258,15 @@ void parser_build(struct parser *p, GtkWidget *widget) | ||
252 | gtk_box_pack_start(GTK_BOX(hbox),vbox,TRUE,TRUE,0); | 258 | gtk_box_pack_start(GTK_BOX(hbox),vbox,TRUE,TRUE,0); |
253 | 259 | ||
254 | // Pack right keypads | 260 | // Pack right keypads |
255 | - keypad.filter = GTK_POS_LEFT; | 261 | + trace("Packing %s keypads","right"); |
262 | + keypad.filter = GTK_POS_RIGHT; | ||
256 | keypad.pack = gtk_box_pack_end; | 263 | keypad.pack = gtk_box_pack_end; |
257 | g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad); | 264 | g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad); |
258 | 265 | ||
259 | // Pack bottom keypads | 266 | // Pack bottom keypads |
267 | + trace("Packing %s keypads","bottom"); | ||
260 | keypad.box = vbox; | 268 | keypad.box = vbox; |
261 | - keypad.filter = GTK_POS_TOP; | 269 | + keypad.filter = GTK_POS_BOTTOM; |
262 | g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad); | 270 | g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad); |
263 | 271 | ||
264 | // Finish building | 272 | // Finish building |