diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-10-11 06:47:11 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-10-11 06:47:11 +0000 |
| commit | b49b7c415c5b61910e7c2c28831c047f0e479ac5 (patch) | |
| tree | 8e6a78c817e05886690f577280cf30eeda16f68e /openbox/menu.c | |
| parent | 4b0e4af80aaec5fed9ad0a369cd570fb3dee4cda (diff) | |
free menuframes when they fail to show themselves
Diffstat (limited to 'openbox/menu.c')
| -rw-r--r-- | openbox/menu.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/openbox/menu.c b/openbox/menu.c index 1585a56d..e4ac2f57 100644 --- a/openbox/menu.c +++ b/openbox/menu.c @@ -287,6 +287,14 @@ void menu_show(gchar *name, gint x, gint y, ObClient *client) if (!(self = menu_from_name(name))) return; + /* if the requested menu is already the top visible menu, then don't + bother */ + if (menu_frame_visible) { + frame = menu_frame_visible->data; + if (frame->menu == self) + return; + } + menu_frame_hide_all(); frame = menu_frame_new(self, client); @@ -297,9 +305,12 @@ void menu_show(gchar *name, gint x, gint y, ObClient *client) else menu_frame_move(frame, x - ob_rr_theme->bwidth, y - ob_rr_theme->bwidth); - menu_frame_show(frame, NULL); - if (frame->entries) - menu_frame_select_next(frame); + if (!menu_frame_show(frame, NULL)) { + menu_frame_free(frame); + } else { + if (frame->entries) + menu_frame_select_next(frame); + } } static ObMenuEntry* menu_entry_new(ObMenu *menu, ObMenuEntryType type, gint id) |
