- menu_hash = g_hash_table_new_full(g_str_hash, g_str_equal,
- menu_destroy_hash_key,
- (GDestroyNotify)menu_destroy_hash_value);
- menu_map = g_hash_table_new(g_int_hash, g_int_equal);
-
- m = menu_new(NULL, "root", NULL);
-
- a = action_from_string("execute");
- a->data.execute.path = g_strdup("xterm");
- menu_add_entry(m, menu_entry_new("xterm", a));
- a = action_from_string("restart");
- menu_add_entry(m, menu_entry_new("restart", a));
- menu_add_entry(m, menu_entry_new_separator("--"));
- a = action_from_string("exit");
- menu_add_entry(m, menu_entry_new("exit", a));
- s = menu_new("subsex menu", "submenu", m);
- a = action_from_string("execute");
- a->data.execute.path = g_strdup("xclock");
- menu_add_entry(s, menu_entry_new("xclock", a));
-
- menu_add_entry(m, menu_entry_new_submenu("subz", s));
-
- /*
- t = (Menu *)plugin_create("timed_menu");
- a = action_from_string("execute");
- a->data.execute.path = g_strdup("xeyes");
- menu_add_entry(t, menu_entry_new("xeyes", a));*/
-
- s = menu_new("empty", "chub", m);
- menu_add_entry(m, menu_entry_new_submenu("empty", s));
-
- s = menu_new("", "s-club", m);
- menu_add_entry(m, menu_entry_new_submenu("empty", s));
-
- s = menu_new(NULL, "h-club", m);
- menu_add_entry(m, menu_entry_new_submenu("empty", s));
-
- s = menu_new(NULL, "g-club", m);
-
- a = action_from_string("execute");
- a->data.execute.path = g_strdup("xterm");
- menu_add_entry(s, menu_entry_new("xterm", a));
- a = action_from_string("restart");
- menu_add_entry(s, menu_entry_new("restart", a));
- menu_add_entry(s, menu_entry_new_separator("--"));
- a = action_from_string("exit");
- menu_add_entry(s, menu_entry_new("exit", a));
-
- menu_add_entry(m, menu_entry_new_submenu("long", s));
-
- m = menu_new("client menu", "client", NULL);
- a = action_from_string("iconify");
- menu_add_entry(m, menu_entry_new("iconify", a));
- a = action_from_string("toggleshade");
- menu_add_entry(m, menu_entry_new("(un)shade", a));
- a = action_from_string("togglemaximizefull");
- menu_add_entry(m, menu_entry_new("(un)maximize", a));
- a = action_from_string("close");
- menu_add_entry(m, menu_entry_new("close", a));
+ if (!self->execute)
+ return;
+
+ if (!g_spawn_command_line_sync(self->execute, &output, NULL, NULL, &err))
+ {
+ g_warning("Failed to execute command for pipe-menu: %s", err->message);
+ g_error_free(err);
+ return;
+ }
+
+ if (parse_load_mem(output, strlen(output),
+ "openbox_pipe_menu", &doc, &node))
+ {
+ menu_clear_entries(self);
+
+ menu_parse_state.menus = g_slist_prepend(NULL, self);
+ parse_tree(menu_parse_inst, doc, node->xmlChildrenNode);
+ menu_parse_state.menus = g_slist_remove(menu_parse_state.menus, self);
+ xmlFreeDoc(doc);