diff --git a/src/menu.c b/src/menu.c index 2e75b7fb..e6eff2ab 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1078,8 +1078,8 @@ void wMenuMapAt(WMenu * menu, int x, int y, int keyboard) } XMoveWindow(dpy, menu->frame->core->window, x, y); - menu->frame_x = (x < 0) ? 0 : x; - menu->frame_y = (y < 0) ? 0 : y; + menu->frame_x = x; + menu->frame_y = y; XMapWindow(dpy, menu->frame->core->window); wRaiseFrame(menu->frame->core); menu->flags.mapped = 1; diff --git a/src/winmenu.c b/src/winmenu.c index 45d3593e..4ad0fa8b 100644 --- a/src/winmenu.c +++ b/src/winmenu.c @@ -44,6 +44,7 @@ #include "dialog.h" #include "stacking.h" #include "icon.h" +#include "xinerama.h" #define MC_MAXIMIZE 0 #define MC_MINIATURIZE 1 @@ -589,6 +590,7 @@ void OpenWindowMenu(WWindow * wwin, int x, int y, int keyboard) { WMenu *menu; WScreen *scr = wwin->screen_ptr; + WMRect rect; wwin->flags.menu_open_for_me = 1; @@ -619,6 +621,13 @@ void OpenWindowMenu(WWindow * wwin, int x, int y, int keyboard) if (x < wwin->frame_x) x = wwin->frame_x; + rect = wGetRectForHead(menu->frame->screen_ptr, + wGetHeadForPointerLocation(menu->frame->screen_ptr)); + if (x < rect.pos.x - menu->frame->core->width / 2) + x = rect.pos.x - menu->frame->core->width / 2; + if (y < rect.pos.y) + y = rect.pos.y; + if (!wwin->flags.internal_window) wMenuMapAt(menu, x, y, keyboard); }