diff options
| author | Dana Jansens <danakj@orodu.net> | 2007-06-10 18:48:58 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2007-06-10 18:48:58 +0000 |
| commit | 6a79805b7c4116ee6ced87e78fb488f3274098ef (patch) | |
| tree | 1713ec1aeb10774208083807d78e9edeb3dd4aa2 /openbox/menu.c | |
| parent | e437dff20ca687a67b7ef3e9328b4045c25d0eb5 (diff) | |
cache pipe menus until the menus close
Diffstat (limited to 'openbox/menu.c')
| -rw-r--r-- | openbox/menu.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/openbox/menu.c b/openbox/menu.c index 21c00a31..344e1a5a 100644 --- a/openbox/menu.c +++ b/openbox/menu.c @@ -134,7 +134,22 @@ void menu_shutdown(gboolean reconfig) static gboolean menu_pipe_submenu(gpointer key, gpointer val, gpointer data) { ObMenu *menu = val; - return menu->pipe_creator == data; + return menu->pipe_creator != NULL; +} + +static void clear_cache(gpointer key, gpointer val, gpointer data) +{ + ObMenu *menu = val; + if (menu->execute) + menu_clear_entries(menu); +} + +void menu_clear_pipe_caches() +{ + /* delete any pipe menus' submenus */ + g_hash_table_foreach_remove(menu_hash, menu_pipe_submenu, NULL); + /* empty the top level pipe menus */ + g_hash_table_foreach(menu_hash, clear_cache, NULL); } void menu_pipe_execute(ObMenu *self) @@ -146,6 +161,8 @@ void menu_pipe_execute(ObMenu *self) if (!self->execute) return; + if (self->entries) /* the entries are already created and cached */ + return; if (!g_spawn_command_line_sync(self->execute, &output, NULL, NULL, &err)) { g_message(_("Failed to execute command for pipe-menu '%s': %s"), @@ -157,9 +174,6 @@ void menu_pipe_execute(ObMenu *self) if (parse_load_mem(output, strlen(output), "openbox_pipe_menu", &doc, &node)) { - g_hash_table_foreach_remove(menu_hash, menu_pipe_submenu, self); - menu_clear_entries(self); - menu_parse_state.pipe_creator = self; menu_parse_state.parent = self; parse_tree(menu_parse_inst, doc, node->children); |
