mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-07 16:28:38 +09:00
Implement auxclick
Bug(s): https://bugzilla.mozilla.org/show_bug.cgi?id=1304044 (native in moebius)
This commit is contained in:
parent
a0aca802af
commit
ea3430429d
15 changed files with 201 additions and 27 deletions
|
|
@ -492,6 +492,7 @@ IsMessageMouseUserActivity(EventMessage aMessage)
|
|||
return aMessage == eMouseMove ||
|
||||
aMessage == eMouseUp ||
|
||||
aMessage == eMouseDown ||
|
||||
aMessage == eMouseAuxClick ||
|
||||
aMessage == eMouseDoubleClick ||
|
||||
aMessage == eMouseClick ||
|
||||
aMessage == eMouseActivate ||
|
||||
|
|
@ -4632,6 +4633,32 @@ EventStateManager::SetClickCount(WidgetMouseEvent* aEvent,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
EventStateManager::InitAndDispatchClickEvent(WidgetMouseEvent* aEvent,
|
||||
nsEventStatus* aStatus,
|
||||
EventMessage aMessage,
|
||||
nsIPresShell* aPresShell,
|
||||
nsIContent* aMouseTarget,
|
||||
nsWeakFrame aCurrentTarget,
|
||||
bool aNoContentDispatch)
|
||||
{
|
||||
WidgetMouseEvent event(aEvent->IsTrusted(), aMessage,
|
||||
aEvent->mWidget, WidgetMouseEvent::eReal);
|
||||
|
||||
event.mRefPoint = aEvent->mRefPoint;
|
||||
event.mClickCount = aEvent->mClickCount;
|
||||
event.mModifiers = aEvent->mModifiers;
|
||||
event.buttons = aEvent->buttons;
|
||||
event.mTime = aEvent->mTime;
|
||||
event.mTimeStamp = aEvent->mTimeStamp;
|
||||
event.mFlags.mNoContentDispatch = aNoContentDispatch;
|
||||
event.button = aEvent->button;
|
||||
event.inputSource = aEvent->inputSource;
|
||||
|
||||
return aPresShell->HandleEventWithTarget(&event, aCurrentTarget,
|
||||
aMouseTarget, aStatus);
|
||||
}
|
||||
|
||||
nsresult
|
||||
EventStateManager::CheckForAndDispatchClick(WidgetMouseEvent* aEvent,
|
||||
nsEventStatus* aStatus)
|
||||
|
|
@ -4651,17 +4678,7 @@ EventStateManager::CheckForAndDispatchClick(WidgetMouseEvent* aEvent,
|
|||
(aEvent->button == WidgetMouseEvent::eMiddleButton ||
|
||||
aEvent->button == WidgetMouseEvent::eRightButton);
|
||||
|
||||
WidgetMouseEvent event(aEvent->IsTrusted(), eMouseClick,
|
||||
aEvent->mWidget, WidgetMouseEvent::eReal);
|
||||
event.mRefPoint = aEvent->mRefPoint;
|
||||
event.mClickCount = aEvent->mClickCount;
|
||||
event.mModifiers = aEvent->mModifiers;
|
||||
event.buttons = aEvent->buttons;
|
||||
event.mTime = aEvent->mTime;
|
||||
event.mTimeStamp = aEvent->mTimeStamp;
|
||||
event.mFlags.mNoContentDispatch = notDispatchToContents;
|
||||
event.button = aEvent->button;
|
||||
event.inputSource = aEvent->inputSource;
|
||||
bool fireAuxClick = notDispatchToContents;
|
||||
|
||||
nsCOMPtr<nsIPresShell> presShell = mPresContext->GetPresShell();
|
||||
if (presShell) {
|
||||
|
|
@ -4680,23 +4697,22 @@ EventStateManager::CheckForAndDispatchClick(WidgetMouseEvent* aEvent,
|
|||
|
||||
// HandleEvent clears out mCurrentTarget which we might need again
|
||||
nsWeakFrame currentTarget = mCurrentTarget;
|
||||
ret = presShell->HandleEventWithTarget(&event, currentTarget,
|
||||
mouseContent, aStatus);
|
||||
ret = InitAndDispatchClickEvent(aEvent, aStatus, eMouseClick,
|
||||
presShell, mouseContent, currentTarget,
|
||||
notDispatchToContents);
|
||||
|
||||
if (NS_SUCCEEDED(ret) && aEvent->mClickCount == 2 &&
|
||||
mouseContent && mouseContent->IsInComposedDoc()) {
|
||||
//fire double click
|
||||
WidgetMouseEvent event2(aEvent->IsTrusted(), eMouseDoubleClick,
|
||||
aEvent->mWidget, WidgetMouseEvent::eReal);
|
||||
event2.mRefPoint = aEvent->mRefPoint;
|
||||
event2.mClickCount = aEvent->mClickCount;
|
||||
event2.mModifiers = aEvent->mModifiers;
|
||||
event2.buttons = aEvent->buttons;
|
||||
event2.mFlags.mNoContentDispatch = notDispatchToContents;
|
||||
event2.button = aEvent->button;
|
||||
event2.inputSource = aEvent->inputSource;
|
||||
|
||||
ret = presShell->HandleEventWithTarget(&event2, currentTarget,
|
||||
mouseContent, aStatus);
|
||||
ret = InitAndDispatchClickEvent(aEvent, aStatus, eMouseDoubleClick,
|
||||
presShell, mouseContent, currentTarget,
|
||||
notDispatchToContents);
|
||||
}
|
||||
if (NS_SUCCEEDED(ret) && mouseContent && fireAuxClick &&
|
||||
mouseContent->IsInComposedDoc()) {
|
||||
ret = InitAndDispatchClickEvent(aEvent, aStatus, eMouseAuxClick,
|
||||
presShell, mouseContent, currentTarget,
|
||||
false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue