mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 731878 part.3 Set modifiers and buttons of nsMouseEvent on Windows r=jimm
This commit is contained in:
parent
a3a57bb16c
commit
423cee2da1
@ -201,10 +201,9 @@ nsNativeDragTarget::DispatchDragDropEvent(PRUint32 aEventType, POINTL aPT)
|
|||||||
event.refPoint.y = 0;
|
event.refPoint.y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
event.isShift = IsKeyDown(NS_VK_SHIFT);
|
nsModifierKeyState modifierKeyState;
|
||||||
event.isControl = IsKeyDown(NS_VK_CONTROL);
|
modifierKeyState.InitInputEvent(event);
|
||||||
event.isMeta = false;
|
|
||||||
event.isAlt = IsKeyDown(NS_VK_ALT);
|
|
||||||
event.inputSource = static_cast<nsBaseDragService*>(mDragService)->GetInputSource();
|
event.inputSource = static_cast<nsBaseDragService*>(mDragService)->GetInputSource();
|
||||||
|
|
||||||
mWindow->DispatchEvent(&event, status);
|
mWindow->DispatchEvent(&event, status);
|
||||||
|
@ -3795,10 +3795,8 @@ bool nsWindow::DispatchMouseEvent(PRUint32 aEventType, WPARAM wParam,
|
|||||||
InitEvent(event, &eventPoint);
|
InitEvent(event, &eventPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
event.isShift = IS_VK_DOWN(NS_VK_SHIFT);
|
nsModifierKeyState modifierKeyState;
|
||||||
event.isControl = IS_VK_DOWN(NS_VK_CONTROL);
|
modifierKeyState.InitInputEvent(event);
|
||||||
event.isMeta = false;
|
|
||||||
event.isAlt = IS_VK_DOWN(NS_VK_ALT);
|
|
||||||
event.button = aButton;
|
event.button = aButton;
|
||||||
event.inputSource = aInputSource;
|
event.inputSource = aInputSource;
|
||||||
|
|
||||||
@ -5086,6 +5084,8 @@ bool nsWindow::ProcessMessage(UINT msg, WPARAM &wParam, LPARAM &lParam,
|
|||||||
nsMouseEvent event(true, NS_MOUSE_ACTIVATE, this,
|
nsMouseEvent event(true, NS_MOUSE_ACTIVATE, this,
|
||||||
nsMouseEvent::eReal);
|
nsMouseEvent::eReal);
|
||||||
InitEvent(event);
|
InitEvent(event);
|
||||||
|
nsModifierKeyState modifierKeyState;
|
||||||
|
modifierKeyState.InitInputEvent(event);
|
||||||
DispatchWindowEvent(&event);
|
DispatchWindowEvent(&event);
|
||||||
if (sSwitchKeyboardLayout && mLastKeyboardLayout)
|
if (sSwitchKeyboardLayout && mLastKeyboardLayout)
|
||||||
ActivateKeyboardLayout(mLastKeyboardLayout, 0);
|
ActivateKeyboardLayout(mLastKeyboardLayout, 0);
|
||||||
@ -6153,6 +6153,8 @@ bool nsWindow::OnTouch(WPARAM wParam, LPARAM lParam)
|
|||||||
touchPoint.ScreenToClient(mWnd);
|
touchPoint.ScreenToClient(mWnd);
|
||||||
|
|
||||||
nsMozTouchEvent touchEvent(true, msg, this, pInputs[i].dwID);
|
nsMozTouchEvent touchEvent(true, msg, this, pInputs[i].dwID);
|
||||||
|
nsModifierKeyState modifierKeyState;
|
||||||
|
modifierKeyState.InitInputEvent(touchEvent);
|
||||||
touchEvent.inputSource = nsIDOMMouseEvent::MOZ_SOURCE_TOUCH;
|
touchEvent.inputSource = nsIDOMMouseEvent::MOZ_SOURCE_TOUCH;
|
||||||
touchEvent.refPoint = touchPoint;
|
touchEvent.refPoint = touchPoint;
|
||||||
|
|
||||||
@ -6219,10 +6221,8 @@ bool nsWindow::OnGesture(WPARAM wParam, LPARAM lParam)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Polish up and send off the new event
|
// Polish up and send off the new event
|
||||||
event.isShift = IS_VK_DOWN(NS_VK_SHIFT);
|
nsModifierKeyState modifierKeyState;
|
||||||
event.isControl = IS_VK_DOWN(NS_VK_CONTROL);
|
modifierKeyState.InitInputEvent(event);
|
||||||
event.isMeta = false;
|
|
||||||
event.isAlt = IS_VK_DOWN(NS_VK_ALT);
|
|
||||||
event.button = 0;
|
event.button = 0;
|
||||||
event.time = ::GetMessageTime();
|
event.time = ::GetMessageTime();
|
||||||
event.inputSource = nsIDOMMouseEvent::MOZ_SOURCE_TOUCH;
|
event.inputSource = nsIDOMMouseEvent::MOZ_SOURCE_TOUCH;
|
||||||
@ -7927,11 +7927,17 @@ nsWindow::DealWithPopups(HWND inWnd, UINT inMsg, WPARAM inWParam, LPARAM inLPara
|
|||||||
**************************************************************/
|
**************************************************************/
|
||||||
|
|
||||||
// nsModifierKeyState used in various character processing.
|
// nsModifierKeyState used in various character processing.
|
||||||
nsModifierKeyState::nsModifierKeyState()
|
void
|
||||||
|
nsModifierKeyState::Update()
|
||||||
{
|
{
|
||||||
mIsShiftDown = IS_VK_DOWN(NS_VK_SHIFT);
|
mIsShiftDown = IS_VK_DOWN(VK_SHIFT);
|
||||||
mIsControlDown = IS_VK_DOWN(NS_VK_CONTROL);
|
mIsControlDown = IS_VK_DOWN(VK_CONTROL);
|
||||||
mIsAltDown = IS_VK_DOWN(NS_VK_ALT);
|
mIsAltDown = IS_VK_DOWN(VK_MENU);
|
||||||
|
mIsWinDown = IS_VK_DOWN(VK_LWIN) || IS_VK_DOWN(VK_RWIN);
|
||||||
|
|
||||||
|
mIsCapsLocked = (::GetKeyState(VK_CAPITAL) & 1);
|
||||||
|
mIsNumLocked = (::GetKeyState(VK_NUMLOCK) & 1);
|
||||||
|
mIsScrollLocked = (::GetKeyState(VK_SCROLL) & 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -7941,6 +7947,65 @@ nsModifierKeyState::InitInputEvent(nsInputEvent& aInputEvent) const
|
|||||||
aInputEvent.isControl = mIsControlDown;
|
aInputEvent.isControl = mIsControlDown;
|
||||||
aInputEvent.isMeta = false;
|
aInputEvent.isMeta = false;
|
||||||
aInputEvent.isAlt = mIsAltDown;
|
aInputEvent.isAlt = mIsAltDown;
|
||||||
|
|
||||||
|
switch(aInputEvent.eventStructType) {
|
||||||
|
case NS_MOUSE_EVENT:
|
||||||
|
case NS_MOUSE_SCROLL_EVENT:
|
||||||
|
case NS_DRAG_EVENT:
|
||||||
|
case NS_SIMPLE_GESTURE_EVENT:
|
||||||
|
case NS_MOZTOUCH_EVENT:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsMouseEvent_base& mouseEvent = static_cast<nsMouseEvent_base&>(aInputEvent);
|
||||||
|
mouseEvent.modifiers = 0;
|
||||||
|
if (mIsShiftDown) {
|
||||||
|
mouseEvent.modifiers |= MODIFIER_SHIFT;
|
||||||
|
}
|
||||||
|
if (mIsControlDown) {
|
||||||
|
mouseEvent.modifiers |= MODIFIER_CONTROL;
|
||||||
|
}
|
||||||
|
if (mIsAltDown) {
|
||||||
|
mouseEvent.modifiers |= MODIFIER_ALT;
|
||||||
|
}
|
||||||
|
if (mIsWinDown) {
|
||||||
|
mouseEvent.modifiers |= MODIFIER_WIN;
|
||||||
|
}
|
||||||
|
if (mIsCapsLocked) {
|
||||||
|
mouseEvent.modifiers |= MODIFIER_CAPSLOCK;
|
||||||
|
}
|
||||||
|
if (mIsNumLocked) {
|
||||||
|
mouseEvent.modifiers |= MODIFIER_NUMLOCK;
|
||||||
|
}
|
||||||
|
if (mIsScrollLocked) {
|
||||||
|
mouseEvent.modifiers |= MODIFIER_SCROLL;
|
||||||
|
}
|
||||||
|
// If both Control key and Alt key are pressed, it means AltGr is pressed.
|
||||||
|
// Ideally, we should check whether the current keyboard layout has AltGr
|
||||||
|
// or not. However, setting AltGr flags for keyboard which doesn't have
|
||||||
|
// AltGr must not be serious bug. So, it should be OK for now.
|
||||||
|
if (mIsControlDown && mIsAltDown) {
|
||||||
|
mouseEvent.modifiers |= MODIFIER_ALTGRAPH;
|
||||||
|
}
|
||||||
|
|
||||||
|
mouseEvent.buttons = 0;
|
||||||
|
if (::GetKeyState(VK_LBUTTON) < 0) {
|
||||||
|
mouseEvent.buttons |= nsMouseEvent::eLeftButtonFlag;
|
||||||
|
}
|
||||||
|
if (::GetKeyState(VK_RBUTTON) < 0) {
|
||||||
|
mouseEvent.buttons |= nsMouseEvent::eRightButtonFlag;
|
||||||
|
}
|
||||||
|
if (::GetKeyState(VK_MBUTTON) < 0) {
|
||||||
|
mouseEvent.buttons |= nsMouseEvent::eMiddleButtonFlag;
|
||||||
|
}
|
||||||
|
if (::GetKeyState(VK_XBUTTON1) < 0) {
|
||||||
|
mouseEvent.buttons |= nsMouseEvent::e4thButtonFlag;
|
||||||
|
}
|
||||||
|
if (::GetKeyState(VK_XBUTTON2) < 0) {
|
||||||
|
mouseEvent.buttons |= nsMouseEvent::e5thButtonFlag;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note that the result of GetTopLevelWindow method can be different from the
|
// Note that the result of GetTopLevelWindow method can be different from the
|
||||||
|
@ -261,14 +261,26 @@ struct nsModifierKeyState {
|
|||||||
bool mIsShiftDown;
|
bool mIsShiftDown;
|
||||||
bool mIsControlDown;
|
bool mIsControlDown;
|
||||||
bool mIsAltDown;
|
bool mIsAltDown;
|
||||||
|
bool mIsWinDown;
|
||||||
|
|
||||||
nsModifierKeyState();
|
bool mIsCapsLocked;
|
||||||
nsModifierKeyState(bool aIsShiftDown, bool aIsControlDown,
|
bool mIsNumLocked;
|
||||||
bool aIsAltDown) :
|
bool mIsScrollLocked;
|
||||||
mIsShiftDown(aIsShiftDown), mIsControlDown(aIsControlDown),
|
|
||||||
mIsAltDown(aIsAltDown)
|
nsModifierKeyState()
|
||||||
{
|
{
|
||||||
|
Update();
|
||||||
}
|
}
|
||||||
|
nsModifierKeyState(bool aIsShiftDown, bool aIsControlDown,
|
||||||
|
bool aIsAltDown)
|
||||||
|
{
|
||||||
|
Update();
|
||||||
|
mIsShiftDown = aIsShiftDown;
|
||||||
|
mIsControlDown = aIsControlDown;
|
||||||
|
mIsAltDown = aIsAltDown;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Update();
|
||||||
|
|
||||||
void InitInputEvent(nsInputEvent& aInputEvent) const;
|
void InitInputEvent(nsInputEvent& aInputEvent) const;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user