2018-09-13 23:04:55 +03:00
|
|
|
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
2013-03-14 19:30:47 +04:00
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*
|
|
|
|
* For more information on this interface please see
|
|
|
|
* http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html
|
2019-07-04 04:50:22 +03:00
|
|
|
* https://drafts.csswg.org/cssom-view/#extensions-to-the-mouseevent-interface
|
2013-03-14 19:30:47 +04:00
|
|
|
*
|
|
|
|
* Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C
|
|
|
|
* liability, trademark and document use rules apply.
|
|
|
|
*/
|
|
|
|
|
2022-02-17 19:22:58 +03:00
|
|
|
interface nsIScreen;
|
|
|
|
|
2019-09-27 18:26:14 +03:00
|
|
|
[Exposed=Window]
|
2013-03-14 19:30:47 +04:00
|
|
|
interface MouseEvent : UIEvent {
|
2019-09-11 17:35:28 +03:00
|
|
|
constructor(DOMString typeArg,
|
|
|
|
optional MouseEventInit mouseEventInitDict = {});
|
|
|
|
|
2016-11-16 22:10:22 +03:00
|
|
|
[NeedsCallerType]
|
2013-03-14 19:30:47 +04:00
|
|
|
readonly attribute long screenX;
|
2016-11-16 22:10:22 +03:00
|
|
|
[NeedsCallerType]
|
2013-03-14 19:30:47 +04:00
|
|
|
readonly attribute long screenY;
|
2022-02-17 19:22:58 +03:00
|
|
|
|
|
|
|
[ChromeOnly]
|
|
|
|
readonly attribute nsIScreen? screen;
|
|
|
|
|
2019-07-04 04:50:22 +03:00
|
|
|
readonly attribute long pageX;
|
|
|
|
readonly attribute long pageY;
|
2013-03-14 19:30:47 +04:00
|
|
|
readonly attribute long clientX;
|
|
|
|
readonly attribute long clientY;
|
2016-11-02 22:49:18 +03:00
|
|
|
[BinaryName="clientX"]
|
|
|
|
readonly attribute long x;
|
|
|
|
[BinaryName="clientY"]
|
|
|
|
readonly attribute long y;
|
2015-03-13 14:50:10 +03:00
|
|
|
readonly attribute long offsetX;
|
|
|
|
readonly attribute long offsetY;
|
2013-03-14 19:30:47 +04:00
|
|
|
readonly attribute boolean ctrlKey;
|
|
|
|
readonly attribute boolean shiftKey;
|
|
|
|
readonly attribute boolean altKey;
|
|
|
|
readonly attribute boolean metaKey;
|
2014-02-20 22:38:13 +04:00
|
|
|
readonly attribute short button;
|
2013-03-14 19:30:47 +04:00
|
|
|
readonly attribute unsigned short buttons;
|
|
|
|
readonly attribute EventTarget? relatedTarget;
|
2015-05-19 23:26:02 +03:00
|
|
|
|
|
|
|
// Pointer Lock
|
|
|
|
readonly attribute long movementX;
|
|
|
|
readonly attribute long movementY;
|
|
|
|
|
2013-03-14 19:30:47 +04:00
|
|
|
// Deprecated in DOM Level 3:
|
2023-07-26 12:27:46 +03:00
|
|
|
[Deprecated="InitMouseEvent"]
|
|
|
|
undefined initMouseEvent(DOMString typeArg,
|
2022-09-21 10:44:58 +03:00
|
|
|
optional boolean canBubbleArg = false,
|
|
|
|
optional boolean cancelableArg = false,
|
|
|
|
optional Window? viewArg = null,
|
|
|
|
optional long detailArg = 0,
|
|
|
|
optional long screenXArg = 0,
|
|
|
|
optional long screenYArg = 0,
|
|
|
|
optional long clientXArg = 0,
|
|
|
|
optional long clientYArg = 0,
|
|
|
|
optional boolean ctrlKeyArg = false,
|
|
|
|
optional boolean altKeyArg = false,
|
|
|
|
optional boolean shiftKeyArg = false,
|
|
|
|
optional boolean metaKeyArg = false,
|
|
|
|
optional short buttonArg = 0,
|
|
|
|
optional EventTarget? relatedTargetArg = null);
|
2013-03-14 19:30:47 +04:00
|
|
|
// Introduced in DOM Level 3:
|
|
|
|
boolean getModifierState(DOMString keyArg);
|
|
|
|
};
|
|
|
|
|
|
|
|
// Suggested initMouseEvent replacement initializer:
|
2015-04-13 10:16:13 +03:00
|
|
|
dictionary MouseEventInit : EventModifierInit {
|
2013-03-14 19:30:47 +04:00
|
|
|
// Attributes for MouseEvent:
|
|
|
|
long screenX = 0;
|
|
|
|
long screenY = 0;
|
|
|
|
long clientX = 0;
|
|
|
|
long clientY = 0;
|
2014-02-20 22:38:13 +04:00
|
|
|
short button = 0;
|
2013-03-14 19:30:47 +04:00
|
|
|
// Note: "buttons" was not previously initializable through initMouseEvent!
|
|
|
|
unsigned short buttons = 0;
|
|
|
|
EventTarget? relatedTarget = null;
|
2015-05-19 23:26:02 +03:00
|
|
|
|
|
|
|
// Pointer Lock
|
|
|
|
long movementX = 0;
|
|
|
|
long movementY = 0;
|
2013-03-14 19:30:47 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
// Mozilla extensions
|
|
|
|
partial interface MouseEvent
|
|
|
|
{
|
|
|
|
// Finger or touch pressure event value
|
|
|
|
// ranges between 0.0 and 1.0
|
2023-07-26 12:27:46 +03:00
|
|
|
// TODO: Remove mozPressure. (bug 1534199)
|
2024-05-16 22:43:12 +03:00
|
|
|
[NeedsCallerType, Deprecated="MouseEvent_MozPressure"]
|
2013-03-14 19:30:47 +04:00
|
|
|
readonly attribute float mozPressure;
|
|
|
|
|
|
|
|
const unsigned short MOZ_SOURCE_UNKNOWN = 0;
|
|
|
|
const unsigned short MOZ_SOURCE_MOUSE = 1;
|
|
|
|
const unsigned short MOZ_SOURCE_PEN = 2;
|
|
|
|
const unsigned short MOZ_SOURCE_ERASER = 3;
|
|
|
|
const unsigned short MOZ_SOURCE_CURSOR = 4;
|
|
|
|
const unsigned short MOZ_SOURCE_TOUCH = 5;
|
|
|
|
const unsigned short MOZ_SOURCE_KEYBOARD = 6;
|
|
|
|
|
2024-05-16 22:43:12 +03:00
|
|
|
[NeedsCallerType, ChromeOnly]
|
2023-07-26 12:27:45 +03:00
|
|
|
readonly attribute unsigned short inputSource;
|
|
|
|
|
2024-05-16 22:43:12 +03:00
|
|
|
[NeedsCallerType, Deprecated="MozInputSource", BinaryName="inputSource"]
|
2013-03-14 19:30:47 +04:00
|
|
|
readonly attribute unsigned short mozInputSource;
|
|
|
|
|
2023-07-26 12:27:46 +03:00
|
|
|
// TODO: Remove initNSMouseEvent. (bug 1165213)
|
|
|
|
[Deprecated="InitNSMouseEvent"]
|
2022-09-21 10:44:58 +03:00
|
|
|
undefined initNSMouseEvent(DOMString typeArg,
|
|
|
|
optional boolean canBubbleArg = false,
|
|
|
|
optional boolean cancelableArg = false,
|
|
|
|
optional Window? viewArg = null,
|
|
|
|
optional long detailArg = 0,
|
|
|
|
optional long screenXArg = 0,
|
|
|
|
optional long screenYArg = 0,
|
|
|
|
optional long clientXArg = 0,
|
|
|
|
optional long clientYArg = 0,
|
|
|
|
optional boolean ctrlKeyArg = false,
|
|
|
|
optional boolean altKeyArg = false,
|
|
|
|
optional boolean shiftKeyArg = false,
|
|
|
|
optional boolean metaKeyArg = false,
|
|
|
|
optional short buttonArg = 0,
|
|
|
|
optional EventTarget? relatedTargetArg = null,
|
|
|
|
optional float pressure = 0,
|
|
|
|
optional unsigned short inputSourceArg = 0);
|
2013-03-14 19:30:47 +04:00
|
|
|
|
Bug 1528289 - part 2: Dispatch same events on the web contents when autoscroll is canceled with a click r=Gijs,edgar
Chrome behaves like this:
1. When user starts autoscroll with a middle click, `mousedown` and `mouseup`
are fired, but `auxclick` nor `paste` event is not fired.
2. When user ends autoscroll with a left click, only `mouseup` event is fired.
I.e, `mousedown` nor `click` event is not fired.
3. When user ends autoscroll with a middle click, only `mouseup` event is fired.
I.e., `mousedown`, `auxclick` nor `paste` events is not fired.
4. When user ends autoscroll with a right click, `mouseup` and `contextmenu`
events are fired, but `mousedown` and `auxclick` events are not fired.
This patch emulates these Chrome's behavior as far as possible. However,
unfortunately, we cannot do exactly same behavior without some big patches
because each widget (`nsWindow` or `nsChildView`) discards a mouse event
which rolled up a widget before dispatching it into the DOM. Therefore,
for now, this patch does not fix the following issues:
1. `mousedown` event is not fired in content when clicking outside the
autoscroller to close it except when pressing the secondary button or on any
buttons on Linux.
2. `mouseup` event is not fired in content when clicking outside the
autoscroller to close it except when pressing the primary button macOS.
3. `click` event and `auxclick` events are fired when clicking outside the
autoscroller with the secondary button.
So, the middle button `click`/`auxclick` events and `paste` event which is
reported to the bug won't be fired with this patch. I'll file follow up bugs.
Differential Revision: https://phabricator.services.mozilla.com/D104652
2021-03-23 22:22:48 +03:00
|
|
|
/**
|
|
|
|
* preventClickEvent() prevents the following "click", "auxclick" and
|
|
|
|
* "dblclick" events of "mousedown" and "mouseup" events.
|
|
|
|
*/
|
|
|
|
[ChromeOnly]
|
2022-09-21 10:44:58 +03:00
|
|
|
undefined preventClickEvent();
|
2021-04-14 22:56:44 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns true if the following "click", "auxclick" and "dblclick"
|
|
|
|
* events of "mousedown" and "mouseup" events are prevented.
|
|
|
|
*/
|
|
|
|
[ChromeOnly]
|
|
|
|
boolean clickEventPrevented();
|
2013-03-14 19:30:47 +04:00
|
|
|
};
|