Bug 701760, merge <select> and popup manager rollup handling, so that select elements don't cancel out any popup rollup listeners, r=mats

This commit is contained in:
Neil Deakin
2012-10-26 09:15:22 -04:00
parent d4cdc6e02a
commit 26ade209e9
26 changed files with 286 additions and 334 deletions

View File

@@ -21,9 +21,6 @@
//-----------------------------------------------------------------------------
// External Variables (in nsWindow.cpp)
extern nsIRollupListener* gRollupListener;
extern nsIWidget* gRollupWidget;
extern bool gRollupConsumeRollupEvent;
extern uint32_t gOS2Flags;
#ifdef DEBUG_FOCUS
@@ -591,13 +588,15 @@ nsresult os2FrameWindow::ConstrainPosition(bool aAllowSlop,
MRESULT EXPENTRY fnwpFrame(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{
// check to see if we have a rollup listener registered
if (gRollupListener && gRollupWidget) {
nsIRollupListener* rollupListener = nsBaseWidget::GetActiveRollupListener();
nsCOMPtr<nsIWidget> rollupWidget = rollupListener->GetRollupWidget();
if (rollupListener) {
if (msg == WM_TRACKFRAME || msg == WM_MINMAXFRAME ||
msg == WM_BUTTON1DOWN || msg == WM_BUTTON2DOWN ||
msg == WM_BUTTON3DOWN) {
// Rollup if the event is outside the popup
if (!nsWindow::EventIsInsideWindow((nsWindow*)gRollupWidget)) {
gRollupListener->Rollup(UINT32_MAX);
if (!nsWindow::EventIsInsideWindow((nsWindow*)rollupWidget)) {
rollupListener->Rollup(UINT32_MAX);
}
}
}