- g_assert(self != NULL);
-
- if (enter) {
- /* TODO: we prolly don't need open_submenu */
- if (self->parent->open_submenu && self->submenu
- != self->parent->open_submenu)
- {
- e = (ObMenuEntry *) self->parent->over->data;
- e->hilite = FALSE;
- menu_entry_render(e);
- menu_hide(self->parent->open_submenu);
- }
-
- if (self->submenu && self->parent->open_submenu != self->submenu) {
- self->parent->open_submenu = self->submenu;
-
- /* shouldn't be invalid since it must be displayed */
- g_assert(!self->parent->invalid);
- /* TODO: I don't understand why these bevels should be here.
- Something must be wrong in the width calculation */
- x = self->parent->location.x + self->parent->size.width +
- ob_rr_theme->bwidth - ob_rr_theme->menu_overlap;
-
- /* need to get the width. is this bad?*/
- menu_render(self->submenu);
-
- a = screen_physical_area_monitor(self->parent->xin_area);
-
- if (self->submenu->size.width + x >= a->x + a->width)
- x = self->parent->location.x - self->submenu->size.width -
- ob_rr_theme->bwidth + ob_rr_theme->menu_overlap;
-
- menu_show_full(self->submenu, x,
- self->parent->location.y + self->y,
- self->parent->client);
- }
- self->hilite = TRUE;
- self->parent->over = g_list_find(self->parent->entries, self);
-
- } else
- self->hilite = FALSE;
-
- menu_entry_render(self);
-}
-
-void menu_control_keyboard_nav(unsigned int key)
-{
- static ObMenu *current_menu = NULL;
-
- ObKey obkey = OB_NUM_KEYS;
-
- /* hrmm. could be fixed */
- if (key == ob_keycode(OB_KEY_DOWN))
- obkey = OB_KEY_DOWN;
- else if (key == ob_keycode(OB_KEY_UP))
- obkey = OB_KEY_UP;
- else if (key == ob_keycode(OB_KEY_RIGHT)) /* fuck */
- obkey = OB_KEY_RIGHT;
- else if (key == ob_keycode(OB_KEY_LEFT)) /* users */
- obkey = OB_KEY_LEFT;
-
- if (current_menu == NULL)
- current_menu = menu_visible->data;
-
- switch (obkey) {
- case OB_KEY_DOWN: {
- if (current_menu->over) {
- current_menu->mouseover(current_menu->over->data, FALSE);
- current_menu->over = (current_menu->over->next != NULL ?
- current_menu->over->next :
- current_menu->entries);
- }
- else
- current_menu->over = current_menu->entries;