From 30f2987b0a2d4a0586ed8893a43d97274bd29500 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 9 Sep 2010 17:17:44 -0700
Subject: [PATCH] Backed out changeset: 28f52b3d2e3d

---
 indra/llui/llbutton.cpp          | 12 +++++-------
 indra/llui/llbutton.h            |  1 -
 indra/newview/llviewerwindow.cpp | 11 +++++++++++
 3 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 5a4f0515fc3..aeedf623791 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -120,7 +120,6 @@ LLButton::LLButton(const LLButton::Params& p)
 	mFlashing( FALSE ),
 	mCurGlowStrength(0.f),
 	mNeedsHighlight(FALSE),
-	mMouseOver(false),
 	mUnselectedLabel(p.label()),
 	mSelectedLabel(p.label_selected()),
 	mGLFont(p.font),
@@ -505,11 +504,7 @@ void LLButton::onMouseEnter(S32 x, S32 y, MASK mask)
 	LLUICtrl::onMouseEnter(x, y, mask);
 
 	if (isInEnabledChain())
-	{
 		mNeedsHighlight = TRUE;
-	}
-
-	mMouseOver = true;
 }
 
 void LLButton::onMouseLeave(S32 x, S32 y, MASK mask)
@@ -517,7 +512,6 @@ void LLButton::onMouseLeave(S32 x, S32 y, MASK mask)
 	LLUICtrl::onMouseLeave(x, y, mask);
 
 	mNeedsHighlight = FALSE;
-	mMouseOver = true;
 }
 
 void LLButton::setHighlight(bool b)
@@ -571,10 +565,14 @@ void LLButton::draw()
 	}
 
 	// Unselected image assignments
+	S32 local_mouse_x;
+	S32 local_mouse_y;
+	LLUI::getMousePositionLocal(this, &local_mouse_x, &local_mouse_y);
+
 	bool enabled = isInEnabledChain();
 
 	bool pressed = pressed_by_keyboard 
-					|| (hasMouseCapture() && mMouseOver)
+					|| (hasMouseCapture() && pointInView(local_mouse_x, local_mouse_y))
 					|| mForcePressedState;
 	bool selected = getToggleState();
 	
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index 5f25084b356..f4af19b696e 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -356,7 +356,6 @@ class LLButton
 	BOOL						mCommitOnReturn;
 	BOOL						mFadeWhenDisabled;
 	bool						mForcePressedState;
-	bool						mMouseOver;
 
 	LLFrameTimer				mFlashingTimer;
 };
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index b36af7d95b0..00873a797cb 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -2482,6 +2482,17 @@ void LLViewerWindow::updateUI()
 	// only update mouse hover set when UI is visible (since we shouldn't send hover events to invisible UI
 	if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
 	{
+		// include all ancestors of captor_view as automatically having mouse
+		if (captor_view)
+		{
+			LLView* captor_parent_view = captor_view->getParent();
+			while(captor_parent_view)
+			{
+				mouse_hover_set.insert(captor_parent_view->getHandle());
+				captor_parent_view = captor_parent_view->getParent();
+			}
+		}
+
 		// aggregate visible views that contain mouse cursor in display order
 		LLPopupView::popup_list_t popups = mPopupView->getCurrentPopups();
 
-- 
GitLab