- } else if (windowmenu && be->button == 3 &&
- (frame.title == be->window || frame.label == be->window ||
- frame.handle == be->window || frame.window == be->window)) {
- if (windowmenu->isVisible()) {
- windowmenu->hide();
- } else {
- int mx = be->x_root - windowmenu->getWidth() / 2,
- my = be->y_root - windowmenu->getHeight() / 2;
-
- // snap the window menu into a corner/side if necessary
- int left_edge, right_edge, top_edge, bottom_edge;
-
- /*
- the " + (frame.border_w * 2) - 1" bits are to get the proper width
- and height of the menu, as the sizes returned by it do not include
- the borders.
- */
- left_edge = frame.rect.x();
- right_edge = frame.rect.right() -
- (windowmenu->getWidth() + (frame.border_w * 2) - 1);
- top_edge = client.rect.top() - (frame.border_w + frame.mwm_border_w);
- bottom_edge = client.rect.bottom() -
- (windowmenu->getHeight() + (frame.border_w * 2) - 1) +
- (frame.border_w + frame.mwm_border_w);
-
- if (mx < left_edge)
- mx = left_edge;
- else if (mx > right_edge)
- mx = right_edge;
- if (my < top_edge)
- my = top_edge;
- else if (my > bottom_edge)
- my = bottom_edge;
-
- if (my + windowmenu->getHeight() > screen->getHeight())
- my = screen->getHeight() - windowmenu->getHeight() -
- (screen->getBorderWidth() * 2);
-
- windowmenu->move(mx, my);
- windowmenu->show();
- XRaiseWindow(blackbox->getXDisplay(), windowmenu->getWindowID());
- XRaiseWindow(blackbox->getXDisplay(),
- windowmenu->getSendToMenu()->getWindowID());
- }