diff --git a/WINGs/wpopupbutton.c b/WINGs/wpopupbutton.c index 8140131..01e210f 100644 --- a/WINGs/wpopupbutton.c +++ b/WINGs/wpopupbutton.c @@ -685,8 +685,20 @@ static void handleActionEvents(WMEvent * event, void *data) } else { popUpMenu(bPtr); if (!bPtr->flags.pullsDown) { - bPtr->highlightedItem = bPtr->selectedItemIndex; + /* Compute highlighted item from pointer position relative + * to the menu view, matching upstream WINGs semantics: + * the item under the pointer is highlighted on open. */ + int rel_y = event->u.button.y_root - bPtr->menuView->pos.y; + int item = rel_y / bPtr->view->size.height; + int count = WMGetArrayItemCount(bPtr->items); + if (item >= count) item = count - 1; + if (item < 0) item = 0; + bPtr->highlightedItem = item; bPtr->flags.insideMenu = 1; + if (bPtr->highlightedItem < count) { + WMMenuItem *mi = WMGetPopUpButtonMenuItem(bPtr, item); + paintMenuEntry(bPtr, item, WMGetMenuItemEnabled(mi)); + } } else { bPtr->highlightedItem = -1; bPtr->flags.insideMenu = 0;