- 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);
- self->parent->open_submenu->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?*/
- self->submenu->update(self->submenu);
-
- a = screen_physical_area_monitor(self->parent->xin_area);
-
- if (self->submenu->size.width + x >= a->x + a->width) {
- int newparentx = a->x + a->width
- - self->submenu->size.width
- - self->parent->size.width
- - ob_rr_theme->bwidth
- - ob_rr_theme->menu_overlap;
-
- x = a->x + a->width - self->submenu->size.width
- - ob_rr_theme->menu_overlap;
- XWarpPointer(ob_display, None, None, 0, 0, 0, 0,
- newparentx - self->parent->location.x, 0);
-
- menu_show_full(self->parent, newparentx,
- self->parent->location.y, self->parent->client);
- }
-
- 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);