- if (which_sub != -1 && which_sub != index) {
- BasemenuItem *itmp = menuitems->find(which_sub);
-
- if (! itmp->submenu()->isTorn())
- itmp->submenu()->internal_hide();
- }
-
- if (index >= 0 && index < menuitems->count()) {
- BasemenuItem *item = menuitems->find(index);
- if (item->submenu() && visible && (! item->submenu()->isTorn()) &&
- item->isEnabled()) {
- if (item->submenu()->parent != this) item->submenu()->parent = this;
- int sbl = index / menu.persub, i = index - (sbl * menu.persub),
- x = menu.x +
- ((menu.item_w * (sbl + 1)) + screen.getBorderWidth()), y;
-
- if (alignment == AlignTop)
- y = (((shifted) ? menu.y_shift : menu.y) +
- ((title_vis) ? menu.title_h + screen.getBorderWidth() : 0) -
- ((item->submenu()->title_vis) ?
- item->submenu()->menu.title_h + screen.getBorderWidth() : 0));
- else
- y = (((shifted) ? menu.y_shift : menu.y) +
- (menu.item_h * i) +
- ((title_vis) ? menu.title_h + screen.getBorderWidth() : 0) -
- ((item->submenu()->title_vis) ?
- item->submenu()->menu.title_h + screen.getBorderWidth() : 0));
-
- if (alignment == AlignBottom &&
- (y + item->submenu()->menu.height) > ((shifted) ? menu.y_shift :
- menu.y) + menu.height)
- y = (((shifted) ? menu.y_shift : menu.y) +
- menu.height - item->submenu()->menu.height);
-
- if ((x + item->submenu()->getWidth()) > screen.getWidth()) {
- x = ((shifted) ? menu.x_shift : menu.x) -
- item->submenu()->getWidth() - screen.getBorderWidth();
- }
-
- if (x < 0) x = 0;
-
- if ((y + item->submenu()->getHeight()) > screen.getHeight())
- y = screen.getHeight() - item->submenu()->getHeight() -
- (screen.getBorderWidth() * 2);
- if (y < 0) y = 0;
-
- item->submenu()->move(x, y);
- if (! moving) drawItem(index, True);
-
- if (! item->submenu()->isVisible())
- item->submenu()->show();
- item->submenu()->moving = moving;
- which_sub = index;
+ BasemenuItem *item = find(which_sub);
+ if (item && item->submenu() && ! item->submenu()->isTorn() &&
+ which_sub != index)
+ item->submenu()->internal_hide();
+
+ item = find(index);
+ if (! item)
+ return;
+ Basemenu *submenu = item->submenu();
+
+ if (submenu && visible && ! submenu->isTorn() && item->isEnabled()) {
+ if (submenu->parent != this) submenu->parent = this;
+ int sbl = index / menu.persub, i = index - (sbl * menu.persub),
+ x = menu.x + ((menu.item_w * (sbl + 1)) + screen->getBorderWidth()), y;
+
+ if (alignment == AlignTop) {
+ y = (((shifted) ? menu.y_shift : menu.y) +
+ ((title_vis) ? menu.title_h + screen->getBorderWidth() : 0) -
+ ((submenu->title_vis) ?
+ submenu->menu.title_h + screen->getBorderWidth() : 0));