diff --git a/apps/terminal.c b/apps/terminal.c index c725d4c5..53beb780 100644 --- a/apps/terminal.c +++ b/apps/terminal.c @@ -1760,7 +1760,11 @@ void * handle_incoming(void) { } else if (me->buttons & YUTANI_MOUSE_BUTTON_RIGHT) { if (!menu_right_click->window) { menu_show(menu_right_click, yctx); - yutani_window_move(yctx, menu_right_click->window, window->x + me->new_x, window->y + me->new_y); + if (window->x + me->new_x + menu_right_click->window->width > yctx->display_width) { + yutani_window_move(yctx, menu_right_click->window, window->x + me->new_x - menu_right_click->window->width, window->y + me->new_y); + } else { + yutani_window_move(yctx, menu_right_click->window, window->x + me->new_x, window->y + me->new_y); + } } } } diff --git a/lib/decorations.c b/lib/decorations.c index 8b525cd3..77733d1c 100644 --- a/lib/decorations.c +++ b/lib/decorations.c @@ -142,11 +142,15 @@ static void _decor_close(struct MenuEntry * self) { yutani_special_request(_decor_menu_owner_window->ctx, _decor_menu_owner_window, YUTANI_SPECIAL_REQUEST_PLEASE_CLOSE); } -yutani_window_t * decor_show_default_menu(yutani_window_t * window, int y, int x) { +yutani_window_t * decor_show_default_menu(yutani_window_t * window, int x, int y) { if (_decor_menu->window) return NULL; _decor_menu_owner_window = window; menu_show(_decor_menu, window->ctx); - yutani_window_move(window->ctx, _decor_menu->window, y, x); + if (x + _decor_menu->window->width > window->ctx->display_width) { + yutani_window_move(window->ctx, _decor_menu->window, x - _decor_menu->window->width, y); + } else { + yutani_window_move(window->ctx, _decor_menu->window, x, y); + } return _decor_menu->window; }