Commit 72bdaf3378d0d3a708634b05fd0c7947e8e407ac

Authored by Perry Werneck
1 parent 0326d968

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.
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