Commit d0bf1b0de1c8827b320582e5a6804ba4a0d7345b
1 parent
52e0d15a
Exists in
master
and in
5 other branches
Implementando associação de ids com os popups definidos no .xml
Showing
3 changed files
with
39 additions
and
4 deletions
Show diff stats
src/gtk/uiparser/parser.c
... | ... | @@ -255,6 +255,7 @@ GtkWidget * ui_parse_xml_folder(const gchar *path, const gchar ** groupname, con |
255 | 255 | p.toplevel = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
256 | 256 | p.center_widget = widget; |
257 | 257 | p.group = groupname; |
258 | + p.popup = popupname; | |
258 | 259 | p.strings = g_string_chunk_new(0); |
259 | 260 | |
260 | 261 | for(current = g_list_first(file);current;current = g_list_next(current)) | ... | ... |
src/gtk/uiparser/popup.c
... | ... | @@ -35,7 +35,10 @@ |
35 | 35 | |
36 | 36 | GObject * ui_create_popup(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) |
37 | 37 | { |
38 | - GtkWidget *widget = NULL; | |
38 | + GtkWidget * widget = NULL; | |
39 | + const gchar * id; | |
40 | + int pos = -1; | |
41 | + int f; | |
39 | 42 | |
40 | 43 | if(info->element) |
41 | 44 | { |
... | ... | @@ -44,9 +47,39 @@ |
44 | 47 | } |
45 | 48 | |
46 | 49 | if(action) |
47 | - widget = gtk_action_create_menu(action); | |
48 | - else | |
49 | - widget = gtk_menu_new(); | |
50 | + { | |
51 | + *error = g_error_new(ERROR_DOMAIN,EINVAL,"%s", _( "Unexpected action attribute in <popup>")); | |
52 | + return NULL; | |
53 | + } | |
54 | + | |
55 | + id = ui_get_attribute("group",names,values); | |
56 | + if(!id) | |
57 | + id = ui_get_attribute("type",names,values); | |
58 | + | |
59 | + if(!id) | |
60 | + { | |
61 | + *error = g_error_new(ERROR_DOMAIN,ENOENT,"%s", _( "<popup> needs a type or group attribute")); | |
62 | + return NULL; | |
63 | + } | |
64 | + | |
65 | + for(f=0;info->popup[f] && pos < 0;pos++) | |
66 | + { | |
67 | + if(!g_strcasecmp(info->popup[f],id)) | |
68 | + { | |
69 | + pos = f; | |
70 | + break; | |
71 | + } | |
72 | + } | |
73 | + | |
74 | + if(pos < 0) | |
75 | + { | |
76 | + *error = g_error_new(ERROR_DOMAIN,EINVAL,_( "Unknown popup type \"%s\""),id); | |
77 | + return NULL; | |
78 | + } | |
79 | + | |
80 | + widget = gtk_menu_new(); | |
81 | + | |
82 | + g_object_set_data(G_OBJECT(widget),"popup_id",(gpointer) pos); | |
50 | 83 | |
51 | 84 | return G_OBJECT(ui_insert_element(info, action, UI_ELEMENT_POPUP, names, values, G_OBJECT(widget), error)); |
52 | 85 | } | ... | ... |
src/gtk/uiparser/private.h
... | ... | @@ -58,6 +58,7 @@ |
58 | 58 | GtkWidget * center_widget; |
59 | 59 | GStringChunk * strings; |
60 | 60 | const gchar ** group; /**< Action group list */ |
61 | + const gchar ** popup; /**< Popup names */ | |
61 | 62 | GHashTable * actions; /**< List of actions */ |
62 | 63 | GHashTable * element_list[UI_ELEMENT_COUNT]; |
63 | 64 | }; | ... | ... |