diff --git a/dom/events/EventStateManager.cpp b/dom/events/EventStateManager.cpp index b07ea85f87e7..8e2a7ce9a5ef 100644 --- a/dom/events/EventStateManager.cpp +++ b/dom/events/EventStateManager.cpp @@ -4348,23 +4348,9 @@ void EventStateManager::UpdateCursor(nsPresContext* aPresContext, // If not locked, look for correct cursor nsPoint pt = nsLayoutUtils::GetEventCoordinatesRelativeTo( aEvent, RelativeTo{aTargetFrame}); - Maybe framecursor = aTargetFrame->GetCursor(pt); - // Avoid setting cursor when the mouse is over a windowless plugin. - if (!framecursor) { - if (XRE_IsContentProcess()) { - mLastFrameConsumedSetCursor = true; - } - return; - } - // Make sure cursors get reset after the mouse leaves a - // windowless plugin frame. - if (mLastFrameConsumedSetCursor) { - ClearCachedWidgetCursor(aTargetFrame); - mLastFrameConsumedSetCursor = false; - } - + const nsIFrame::Cursor framecursor = aTargetFrame->GetCursor(pt); const CursorImage customCursor = - ComputeCustomCursor(aPresContext, aEvent, *aTargetFrame, *framecursor); + ComputeCustomCursor(aPresContext, aEvent, *aTargetFrame, framecursor); // If the current cursor is from the same frame, and it is now // loading some new image for the cursor, we should wait for a @@ -4375,7 +4361,7 @@ void EventStateManager::UpdateCursor(nsPresContext* aPresContext, TimeDuration::FromMilliseconds(kCursorLoadingTimeout)) { return; } - cursor = framecursor->mCursor; + cursor = framecursor.mCursor; container = std::move(customCursor.mContainer); resolution = customCursor.mResolution; hotspot = Some(customCursor.mHotspot); diff --git a/dom/events/EventStateManager.h b/dom/events/EventStateManager.h index 8ba6cbf88334..b3bb3b517091 100644 --- a/dom/events/EventStateManager.h +++ b/dom/events/EventStateManager.h @@ -1233,7 +1233,6 @@ class EventStateManager : public nsSupportsWeakReference, public nsIObserver { // These variables are only relevant if we're the cursor-setting manager. StyleCursorKind mLockCursor; - bool mLastFrameConsumedSetCursor = false; bool mHidingCursorWhileTyping = false; // Last mouse event screen point (in device pixel) when mouse was locked, used diff --git a/layout/forms/nsImageControlFrame.cpp b/layout/forms/nsImageControlFrame.cpp index 898d890e04c1..17e3893a2f4f 100644 --- a/layout/forms/nsImageControlFrame.cpp +++ b/layout/forms/nsImageControlFrame.cpp @@ -45,7 +45,7 @@ class nsImageControlFrame final : public nsImageFrame, } #endif - Maybe GetCursor(const nsPoint&) final; + Cursor GetCursor(const nsPoint&) final; // nsIFormContromFrame void SetFocus(bool aOn, bool aRepaint) final; @@ -137,12 +137,12 @@ nsresult nsImageControlFrame::HandleEvent(nsPresContext* aPresContext, void nsImageControlFrame::SetFocus(bool aOn, bool aRepaint) {} -Maybe nsImageControlFrame::GetCursor(const nsPoint&) { +nsIFrame::Cursor nsImageControlFrame::GetCursor(const nsPoint&) { StyleCursorKind kind = StyleUI()->Cursor().keyword; if (kind == StyleCursorKind::Auto) { kind = StyleCursorKind::Pointer; } - return Some(Cursor{kind, AllowCustomCursorImage::Yes}); + return Cursor{kind, AllowCustomCursorImage::Yes}; } nsresult nsImageControlFrame::SetFormProperty(nsAtom* aName, diff --git a/layout/generic/nsFrameSetFrame.cpp b/layout/generic/nsFrameSetFrame.cpp index 0323ff251c11..f292988c55a1 100644 --- a/layout/generic/nsFrameSetFrame.cpp +++ b/layout/generic/nsFrameSetFrame.cpp @@ -89,7 +89,7 @@ class nsHTMLFramesetBorderFrame final : public nsLeafFrame { WidgetGUIEvent* aEvent, nsEventStatus* aEventStatus) override; - Maybe GetCursor(const nsPoint&) override; + Cursor GetCursor(const nsPoint&) override; virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsDisplayListSet& aLists) override; @@ -630,13 +630,13 @@ nsresult nsHTMLFramesetFrame::HandleEvent(nsPresContext* aPresContext, return NS_OK; } -Maybe nsHTMLFramesetFrame::GetCursor(const nsPoint&) { +nsIFrame::Cursor nsHTMLFramesetFrame::GetCursor(const nsPoint&) { auto kind = StyleCursorKind::Default; if (mDragger) { kind = mDragger->mVertical ? StyleCursorKind::EwResize : StyleCursorKind::NsResize; } - return Some(Cursor{kind, AllowCustomCursorImage::No}); + return Cursor{kind, AllowCustomCursorImage::No}; } void nsHTMLFramesetFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, @@ -1454,12 +1454,12 @@ nsresult nsHTMLFramesetBorderFrame::HandleEvent(nsPresContext* aPresContext, return NS_OK; } -Maybe nsHTMLFramesetBorderFrame::GetCursor(const nsPoint&) { +nsIFrame::Cursor nsHTMLFramesetBorderFrame::GetCursor(const nsPoint&) { auto kind = StyleCursorKind::Default; if (mCanResize) { kind = mVertical ? StyleCursorKind::EwResize : StyleCursorKind::NsResize; } - return Some(Cursor{kind, AllowCustomCursorImage::No}); + return Cursor{kind, AllowCustomCursorImage::No}; } #ifdef DEBUG_FRAME_DUMP diff --git a/layout/generic/nsFrameSetFrame.h b/layout/generic/nsFrameSetFrame.h index 982ce6da200e..e836e6ea0a69 100644 --- a/layout/generic/nsFrameSetFrame.h +++ b/layout/generic/nsFrameSetFrame.h @@ -88,7 +88,7 @@ class nsHTMLFramesetFrame final : public nsContainerFrame { mozilla::WidgetGUIEvent* aEvent, nsEventStatus* aEventStatus) override; - mozilla::Maybe GetCursor(const nsPoint&) override; + Cursor GetCursor(const nsPoint&) override; virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsDisplayListSet& aLists) override; diff --git a/layout/generic/nsIFrame.cpp b/layout/generic/nsIFrame.cpp index 7ddca2abb2a8..e538da6ed0eb 100644 --- a/layout/generic/nsIFrame.cpp +++ b/layout/generic/nsIFrame.cpp @@ -5890,7 +5890,7 @@ StyleTouchAction nsIFrame::UsedTouchAction() const { return disp.mTouchAction; } -Maybe nsIFrame::GetCursor(const nsPoint&) { +nsIFrame::Cursor nsIFrame::GetCursor(const nsPoint&) { StyleCursorKind kind = StyleUI()->Cursor().keyword; if (kind == StyleCursorKind::Auto) { // If this is editable, I-beam cursor is better for most elements. @@ -5903,7 +5903,7 @@ Maybe nsIFrame::GetCursor(const nsPoint&) { kind = StyleCursorKind::VerticalText; } - return Some(Cursor{kind, AllowCustomCursorImage::Yes}); + return Cursor{kind, AllowCustomCursorImage::Yes}; } // Resize and incremental reflow diff --git a/layout/generic/nsIFrame.h b/layout/generic/nsIFrame.h index 3655c2da1527..d5011f70ffb6 100644 --- a/layout/generic/nsIFrame.h +++ b/layout/generic/nsIFrame.h @@ -2338,7 +2338,7 @@ class nsIFrame : public nsQueryFrame { /** * Get the cursor for a given frame. */ - virtual Maybe GetCursor(const nsPoint&); + virtual Cursor GetCursor(const nsPoint&); /** * Get a point (in the frame's coordinate space) given an offset into diff --git a/layout/generic/nsImageFrame.cpp b/layout/generic/nsImageFrame.cpp index 58bcdc08b836..e0a6243ed2ad 100644 --- a/layout/generic/nsImageFrame.cpp +++ b/layout/generic/nsImageFrame.cpp @@ -2773,7 +2773,7 @@ nsresult nsImageFrame::HandleEvent(nsPresContext* aPresContext, aEventStatus); } -Maybe nsImageFrame::GetCursor(const nsPoint& aPoint) { +nsIFrame::Cursor nsImageFrame::GetCursor(const nsPoint& aPoint) { nsImageMap* map = GetImageMap(); if (!map) { return nsIFrame::GetCursor(aPoint); @@ -2796,7 +2796,7 @@ Maybe nsImageFrame::GetCursor(const nsPoint& aPoint) { if (kind == StyleCursorKind::Auto) { kind = StyleCursorKind::Default; } - return Some(Cursor{kind, AllowCustomCursorImage::Yes, std::move(areaStyle)}); + return Cursor{kind, AllowCustomCursorImage::Yes, std::move(areaStyle)}; } nsresult nsImageFrame::AttributeChanged(int32_t aNameSpaceID, diff --git a/layout/generic/nsImageFrame.h b/layout/generic/nsImageFrame.h index dce3b93c7020..d9e2610e8158 100644 --- a/layout/generic/nsImageFrame.h +++ b/layout/generic/nsImageFrame.h @@ -90,7 +90,7 @@ class nsImageFrame : public nsAtomicContainerFrame, public nsIReflowCallback { nsIContent** aContent) final; nsresult HandleEvent(nsPresContext*, mozilla::WidgetGUIEvent*, nsEventStatus*) override; - mozilla::Maybe GetCursor(const nsPoint&) override; + Cursor GetCursor(const nsPoint&) override; nsresult AttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute, int32_t aModType) final; diff --git a/layout/generic/nsTextFrame.cpp b/layout/generic/nsTextFrame.cpp index d35bb287a742..369722fe8dc7 100644 --- a/layout/generic/nsTextFrame.cpp +++ b/layout/generic/nsTextFrame.cpp @@ -4368,7 +4368,7 @@ NS_IMPL_FRAMEARENA_HELPERS(nsContinuingTextFrame) nsTextFrame::~nsTextFrame() = default; -Maybe nsTextFrame::GetCursor(const nsPoint& aPoint) { +nsIFrame::Cursor nsTextFrame::GetCursor(const nsPoint& aPoint) { StyleCursorKind kind = StyleUI()->Cursor().keyword; if (kind == StyleCursorKind::Auto) { if (!IsSelectable(nullptr)) { @@ -4378,7 +4378,7 @@ Maybe nsTextFrame::GetCursor(const nsPoint& aPoint) { : StyleCursorKind::Text; } } - return Some(Cursor{kind, AllowCustomCursorImage::Yes}); + return Cursor{kind, AllowCustomCursorImage::Yes}; } nsTextFrame* nsTextFrame::LastInFlow() const { diff --git a/layout/generic/nsTextFrame.h b/layout/generic/nsTextFrame.h index 8569c712792c..568d3333c248 100644 --- a/layout/generic/nsTextFrame.h +++ b/layout/generic/nsTextFrame.h @@ -219,7 +219,7 @@ class nsTextFrame : public nsIFrame { void Destroy(DestroyContext&) override; - mozilla::Maybe GetCursor(const nsPoint&) final; + Cursor GetCursor(const nsPoint&) final; nsresult CharacterDataChanged(const CharacterDataChangeInfo&) final; diff --git a/layout/xul/tree/nsTreeBodyFrame.cpp b/layout/xul/tree/nsTreeBodyFrame.cpp index f2fb944c3bc5..5ccc1468cc66 100644 --- a/layout/xul/tree/nsTreeBodyFrame.cpp +++ b/layout/xul/tree/nsTreeBodyFrame.cpp @@ -2220,7 +2220,7 @@ nscoord nsTreeBodyFrame::CalcHorzWidth(const ScrollParts& aParts) { return width; } -Maybe nsTreeBodyFrame::GetCursor(const nsPoint& aPoint) { +nsIFrame::Cursor nsTreeBodyFrame::GetCursor(const nsPoint& aPoint) { // Check the GetScriptHandlingObject so we don't end up running code when // the document is a zombie. bool dummy; @@ -2237,8 +2237,7 @@ Maybe nsTreeBodyFrame::GetCursor(const nsPoint& aPoint) { if (kind == StyleCursorKind::Auto) { kind = StyleCursorKind::Default; } - return Some( - Cursor{kind, AllowCustomCursorImage::Yes, std::move(childContext)}); + return Cursor{kind, AllowCustomCursorImage::Yes, std::move(childContext)}; } } return SimpleXULLeafFrame::GetCursor(aPoint); diff --git a/layout/xul/tree/nsTreeBodyFrame.h b/layout/xul/tree/nsTreeBodyFrame.h index 35fa7eb1f03d..dd38644ad9a8 100644 --- a/layout/xul/tree/nsTreeBodyFrame.h +++ b/layout/xul/tree/nsTreeBodyFrame.h @@ -159,7 +159,7 @@ class nsTreeBodyFrame final : public mozilla::SimpleXULLeafFrame, nsIFrame* aPrevInFlow) override; void Destroy(DestroyContext&) override; - mozilla::Maybe GetCursor(const nsPoint&) override; + Cursor GetCursor(const nsPoint&) override; nsresult HandleEvent(nsPresContext* aPresContext, mozilla::WidgetGUIEvent* aEvent,