From dcdc325f5c8c946df696d17a6da329aeac149586 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Fri, 29 Aug 2003 08:44:55 +0000 Subject: ultra-keyboard-controlled-menus --- openbox/menuframe.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'openbox/menuframe.c') diff --git a/openbox/menuframe.c b/openbox/menuframe.c index a1b06e10..0b90df6e 100644 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@ -627,3 +627,49 @@ void menu_entry_frame_execute(ObMenuEntryFrame *self, gboolean hide) } } } + +void menu_frame_select_previous(ObMenuFrame *self) +{ + GList *it = NULL, *start; + + if (self->entries) { + start = it = g_list_find(self->entries, self->selected); + while (TRUE) { + ObMenuEntryFrame *e; + + it = it ? g_list_previous(it) : g_list_last(self->entries); + if (it == start) + break; + + if (it) { + e = it->data; + if (e->entry->type != OB_MENU_ENTRY_TYPE_SEPARATOR) + break; + } + } + } + menu_frame_select(self, it ? it->data : NULL); +} + +void menu_frame_select_next(ObMenuFrame *self) +{ + GList *it = NULL, *start; + + if (self->entries) { + start = it = g_list_find(self->entries, self->selected); + while (TRUE) { + ObMenuEntryFrame *e; + + it = it ? g_list_next(it) : self->entries; + if (it == start) + break; + + if (it) { + e = it->data; + if (e->entry->type != OB_MENU_ENTRY_TYPE_SEPARATOR) + break; + } + } + } + menu_frame_select(self, it ? it->data : NULL); +} -- cgit v1.2.3