- Action *act;
- xmlNodePtr nact;
- gchar *id = NULL, *title = NULL, *label = NULL;
- Menu *menu, *parent;
-
- if (!parse_attr_string("id", node->parent, &id))
- goto parse_menu_fail;
- if (!parse_attr_string("label", node->parent, &title))
- goto parse_menu_fail;
+ ObMenu *parent;
+ ObMenu *pipe_creator;
+};
+
+static GHashTable *menu_hash = NULL;
+static ObParseInst *menu_parse_inst;
+static ObMenuParseState menu_parse_state;
+static gboolean menu_can_hide = FALSE;
+
+static void menu_destroy_hash_value(ObMenu *self);
+static void parse_menu_item(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
+ gpointer data);
+static void parse_menu_separator(ObParseInst *i,
+ xmlDocPtr doc, xmlNodePtr node,
+ gpointer data);
+static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
+ gpointer data);
+static gunichar parse_shortcut(const gchar *label, gboolean allow_shortcut,
+ gchar **strippedlabel, guint *position);
+
+
+static void client_dest(ObClient *client, gpointer data)
+{
+ /* menus can be associated with a client, so close any that are since
+ we are disappearing now */
+ menu_frame_hide_all_client(client);
+}