diff --git a/WINGs/wpopupbutton.c b/WINGs/wpopupbutton.c index 0be4fa4..06f0841 100644 --- a/WINGs/wpopupbutton.c +++ b/WINGs/wpopupbutton.c @@ -655,13 +655,20 @@ static void handleActionEvents(WMEvent * event, void *data) } break; } - popUpMenu(bPtr); - if (!bPtr->flags.pullsDown) { - bPtr->highlightedItem = bPtr->selectedItemIndex; + /* Button press on the menu view: select item under pointer. + * Button press on the main button view: open the menu. */ + if (event->window == bPtr->menuView->window) { + bPtr->highlightedItem = event->u.button.y / bPtr->view->size.height; bPtr->flags.insideMenu = 1; } else { - bPtr->highlightedItem = -1; - bPtr->flags.insideMenu = 0; + popUpMenu(bPtr); + if (!bPtr->flags.pullsDown) { + bPtr->highlightedItem = bPtr->selectedItemIndex; + bPtr->flags.insideMenu = 1; + } else { + bPtr->highlightedItem = -1; + bPtr->flags.insideMenu = 0; + } } bPtr->view->screen->viewBackend->pointer_grab( bPtr->view->screen->viewBackendCtx, bPtr->menuView, False, WM_CURRENT_TIME); diff --git a/WINGs/wview_wl.c b/WINGs/wview_wl.c index 705564e..2881f07 100644 --- a/WINGs/wview_wl.c +++ b/WINGs/wview_wl.c @@ -305,6 +305,10 @@ static void wl_map(void *vctx, W_View *view) child = child->nextSister; } } + /* Re-enable scene node after unmap so the surface becomes visible again. */ + if (W_ViewSceneNodeSetEnabledFn) + W_ViewSceneNodeSetEnabledFn((unsigned long)view->window, 1); + if (view->flags.topLevel) { wl_redisplay(vctx, view); return;