Commit d0bf1b0de1c8827b320582e5a6804ba4a0d7345b

Authored by perry.werneck@gmail.com
1 parent 52e0d15a

Implementando associação de ids com os popups definidos no .xml

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