mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1177000, only consider popups of the same type when determining whether a popup shouldn't reopen, this allows dropdown buttons in popup to reopen properly, r=neil
This commit is contained in:
parent
596882cc85
commit
7ebe7c99a2
@ -188,17 +188,26 @@ nsXULPopupManager::Rollup(uint32_t aCount, bool aFlush,
|
||||
nsMenuChainItem* item = GetTopVisibleMenu();
|
||||
if (item) {
|
||||
if (aLastRolledUp) {
|
||||
// we need to get the popup that will be closed last, so that
|
||||
// widget can keep track of it so it doesn't reopen if a mouse
|
||||
// down event is going to processed.
|
||||
// Keep going up the menu chain to get the first level menu. This will
|
||||
// be the one that closes up last. It's possible that this menu doesn't
|
||||
// end up closing because the popuphiding event was cancelled, but in
|
||||
// that case we don't need to deal with the menu reopening as it will
|
||||
// already still be open.
|
||||
// We need to get the popup that will be closed last, so that widget can
|
||||
// keep track of it so it doesn't reopen if a mousedown event is going to
|
||||
// processed. Keep going up the menu chain to get the first level menu of
|
||||
// the same type. If a different type is encountered it means we have,
|
||||
// for example, a menulist or context menu inside a panel, and we want to
|
||||
// treat these as distinct. It's possible that this menu doesn't end up
|
||||
// closing because the popuphiding event was cancelled, but in that case
|
||||
// we don't need to deal with the menu reopening as it will already still
|
||||
// be open.
|
||||
nsMenuChainItem* first = item;
|
||||
while (first->GetParent())
|
||||
first = first->GetParent();
|
||||
while (first->GetParent()) {
|
||||
nsMenuChainItem* parent = first->GetParent();
|
||||
if (first->Frame()->PopupType() != parent->Frame()->PopupType() ||
|
||||
first->IsContextMenu() != parent->IsContextMenu()) {
|
||||
break;
|
||||
}
|
||||
first = parent;
|
||||
}
|
||||
|
||||
|
||||
*aLastRolledUp = first->Content();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user