mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-21 14:47:31 +09:00
parent
2ee3ce62fc
commit
6154d842b0
1 changed files with 23 additions and 10 deletions
|
|
@ -3484,6 +3484,12 @@ EventStateManager::PostHandleEvent(nsPresContext* aPresContext,
|
||||||
// make sure to fire the enter and exit_synth events after the
|
// make sure to fire the enter and exit_synth events after the
|
||||||
// eDragExit event, otherwise we'll clean up too early
|
// eDragExit event, otherwise we'll clean up too early
|
||||||
GenerateDragDropEnterExit(presContext, aEvent->AsDragEvent());
|
GenerateDragDropEnterExit(presContext, aEvent->AsDragEvent());
|
||||||
|
if (ContentChild* child = ContentChild::GetSingleton()) {
|
||||||
|
// SendUpdateDropEffect to prevent nsIDragService from waiting for
|
||||||
|
// response of forwarded dragexit event.
|
||||||
|
child->SendUpdateDropEffect(nsIDragService::DRAGDROP_ACTION_NONE,
|
||||||
|
nsIDragService::DRAGDROP_ACTION_NONE);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eBeforeKeyUp:
|
case eBeforeKeyUp:
|
||||||
|
|
@ -4446,6 +4452,19 @@ EventStateManager::GenerateDragDropEnterExit(nsPresContext* aPresContext,
|
||||||
FireDragEnterOrExit(sLastDragOverFrame->PresContext(),
|
FireDragEnterOrExit(sLastDragOverFrame->PresContext(),
|
||||||
aDragEvent, eDragExit,
|
aDragEvent, eDragExit,
|
||||||
targetContent, lastContent, sLastDragOverFrame);
|
targetContent, lastContent, sLastDragOverFrame);
|
||||||
|
nsIContent* target = sLastDragOverFrame ? sLastDragOverFrame.GetFrame()->GetContent() : nullptr;
|
||||||
|
if (IsRemoteTarget(target)) {
|
||||||
|
// Dragging something and moving from web content to chrome only
|
||||||
|
// fires dragexit and dragleave to xul:browser. We have to forward
|
||||||
|
// dragexit to sLastDragOverFrame when its content is a remote
|
||||||
|
// target. We don't forward dragleave since it's generated from
|
||||||
|
// dragexit.
|
||||||
|
WidgetDragEvent remoteEvent(aDragEvent->IsTrusted(), eDragExit,
|
||||||
|
aDragEvent->mWidget);
|
||||||
|
remoteEvent.AssignDragEventData(*aDragEvent, true);
|
||||||
|
nsEventStatus remoteStatus = nsEventStatus_eIgnore;
|
||||||
|
HandleCrossProcessEvent(&remoteEvent, &remoteStatus);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FireDragEnterOrExit(aPresContext, aDragEvent, eDragEnter,
|
FireDragEnterOrExit(aPresContext, aDragEvent, eDragEnter,
|
||||||
|
|
@ -4502,14 +4521,11 @@ EventStateManager::FireDragEnterOrExit(nsPresContext* aPresContext,
|
||||||
nsIContent* aTargetContent,
|
nsIContent* aTargetContent,
|
||||||
nsWeakFrame& aTargetFrame)
|
nsWeakFrame& aTargetFrame)
|
||||||
{
|
{
|
||||||
|
MOZ_ASSERT(aMessage == eDragLeave || aMessage == eDragExit ||
|
||||||
|
aMessage == eDragEnter);
|
||||||
nsEventStatus status = nsEventStatus_eIgnore;
|
nsEventStatus status = nsEventStatus_eIgnore;
|
||||||
WidgetDragEvent event(aDragEvent->IsTrusted(), aMessage, aDragEvent->mWidget);
|
WidgetDragEvent event(aDragEvent->IsTrusted(), aMessage, aDragEvent->mWidget);
|
||||||
event.mRefPoint = aDragEvent->mRefPoint;
|
event.AssignDragEventData(*aDragEvent, true);
|
||||||
event.mModifiers = aDragEvent->mModifiers;
|
|
||||||
event.buttons = aDragEvent->buttons;
|
|
||||||
event.relatedTarget = aRelatedTarget;
|
|
||||||
event.inputSource = aDragEvent->inputSource;
|
|
||||||
|
|
||||||
mCurrentTargetContent = aTargetContent;
|
mCurrentTargetContent = aTargetContent;
|
||||||
|
|
||||||
if (aTargetContent != aRelatedTarget) {
|
if (aTargetContent != aRelatedTarget) {
|
||||||
|
|
@ -4527,10 +4543,7 @@ EventStateManager::FireDragEnterOrExit(nsPresContext* aPresContext,
|
||||||
|
|
||||||
// collect any changes to moz cursor settings stored in the event's
|
// collect any changes to moz cursor settings stored in the event's
|
||||||
// data transfer.
|
// data transfer.
|
||||||
if (aMessage == eDragLeave || aMessage == eDragExit ||
|
UpdateDragDataTransfer(&event);
|
||||||
aMessage == eDragEnter) {
|
|
||||||
UpdateDragDataTransfer(&event);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finally dispatch the event to the frame
|
// Finally dispatch the event to the frame
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue