all repos — openbox @ b49b7c415c5b61910e7c2c28831c047f0e479ac5

openbox fork - make it a bit more like ryudo

free menuframes when they fail to show themselves
Dana Jansens danakj@orodu.net
commit

b49b7c415c5b61910e7c2c28831c047f0e479ac5

parent

4b0e4af80aaec5fed9ad0a369cd570fb3dee4cda

3 files changed, 21 insertions(+), 8 deletions(-)

jump to
M openbox/menu.copenbox/menu.c

@@ -287,6 +287,14 @@ ObMenuFrame *frame;

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 @@ client->frame->area.y + client->frame->size.top);

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)
M openbox/menuframe.copenbox/menuframe.c

@@ -584,20 +584,20 @@

menu_frame_render(self); } -void menu_frame_show(ObMenuFrame *self, ObMenuFrame *parent) +gboolean menu_frame_show(ObMenuFrame *self, ObMenuFrame *parent) { GList *it; if (g_list_find(menu_frame_visible, self)) - return; + return TRUE; if (menu_frame_visible == NULL) { /* no menus shown yet */ if (!grab_pointer(TRUE, OB_CURSOR_NONE)) - return; + return FALSE; if (!grab_keyboard(TRUE)) { grab_pointer(FALSE, OB_CURSOR_NONE); - return; + return FALSE; } }

@@ -626,6 +626,8 @@

menu_frame_move_on_screen(self); XMapWindow(ob_display, self->window); + + return TRUE; } void menu_frame_hide(ObMenuFrame *self)
M openbox/menuframe.hopenbox/menuframe.h

@@ -103,7 +103,7 @@

void menu_frame_move(ObMenuFrame *self, gint x, gint y); void menu_frame_move_on_screen(ObMenuFrame *self); -void menu_frame_show(ObMenuFrame *self, ObMenuFrame *parent); +gboolean menu_frame_show(ObMenuFrame *self, ObMenuFrame *parent); void menu_frame_hide(ObMenuFrame *self); void menu_frame_hide_all();