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.isShift = IsKeyDown(NS_VK_SHIFT);
|
||||
event.isControl = IsKeyDown(NS_VK_CONTROL);
|
||||
event.isMeta = false;
|
||||
event.isAlt = IsKeyDown(NS_VK_ALT);
|
||||
nsModifierKeyState modifierKeyState;
|
||||
modifierKeyState.InitInputEvent(event);
|
||||
|
||||
event.inputSource = static_cast<nsBaseDragService*>(mDragService)->GetInputSource();
|
||||
|
||||
mWindow->DispatchEvent(&event, status);
|
||||
|
@ -3795,10 +3795,8 @@ bool nsWindow::DispatchMouseEvent(PRUint32 aEventType, WPARAM wParam,
|
||||
InitEvent(event, &eventPoint);
|
||||
}
|
||||
|
||||
event.isShift = IS_VK_DOWN(NS_VK_SHIFT);
|
||||
event.isControl = IS_VK_DOWN(NS_VK_CONTROL);
|
||||
event.isMeta = false;
|
||||
event.isAlt = IS_VK_DOWN(NS_VK_ALT);
|
||||
nsModifierKeyState modifierKeyState;
|
||||
modifierKeyState.InitInputEvent(event);
|
||||
event.button = aButton;
|
||||
event.inputSource = aInputSource;
|
||||
|
||||
@ -5086,6 +5084,8 @@ bool nsWindow::ProcessMessage(UINT msg, WPARAM &wParam, LPARAM &lParam,
|
||||
nsMouseEvent event(true, NS_MOUSE_ACTIVATE, this,
|
||||
nsMouseEvent::eReal);
|
||||
InitEvent(event);
|
||||
nsModifierKeyState modifierKeyState;
|
||||
modifierKeyState.InitInputEvent(event);
|
||||
DispatchWindowEvent(&event);
|
||||
if (sSwitchKeyboardLayout && mLastKeyboardLayout)
|
||||
ActivateKeyboardLayout(mLastKeyboardLayout, 0);
|
||||
@ -6153,6 +6153,8 @@ bool nsWindow::OnTouch(WPARAM wParam, LPARAM lParam)
|
||||
touchPoint.ScreenToClient(mWnd);
|
||||
|
||||
nsMozTouchEvent touchEvent(true, msg, this, pInputs[i].dwID);
|
||||
nsModifierKeyState modifierKeyState;
|
||||
modifierKeyState.InitInputEvent(touchEvent);
|
||||
touchEvent.inputSource = nsIDOMMouseEvent::MOZ_SOURCE_TOUCH;
|
||||
touchEvent.refPoint = touchPoint;
|
||||
|
||||
@ -6219,10 +6221,8 @@ bool nsWindow::OnGesture(WPARAM wParam, LPARAM lParam)
|
||||
}
|
||||
|
||||
// Polish up and send off the new event
|
||||
event.isShift = IS_VK_DOWN(NS_VK_SHIFT);
|
||||
event.isControl = IS_VK_DOWN(NS_VK_CONTROL);
|
||||
event.isMeta = false;
|
||||
event.isAlt = IS_VK_DOWN(NS_VK_ALT);
|
||||
nsModifierKeyState modifierKeyState;
|
||||
modifierKeyState.InitInputEvent(event);
|
||||
event.button = 0;
|
||||
event.time = ::GetMessageTime();
|
||||
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::nsModifierKeyState()
|
||||
void
|
||||
nsModifierKeyState::Update()
|
||||
{
|
||||
mIsShiftDown = IS_VK_DOWN(NS_VK_SHIFT);
|
||||
mIsControlDown = IS_VK_DOWN(NS_VK_CONTROL);
|
||||
mIsAltDown = IS_VK_DOWN(NS_VK_ALT);
|
||||
mIsShiftDown = IS_VK_DOWN(VK_SHIFT);
|
||||
mIsControlDown = IS_VK_DOWN(VK_CONTROL);
|
||||
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
|
||||
@ -7941,6 +7947,65 @@ nsModifierKeyState::InitInputEvent(nsInputEvent& aInputEvent) const
|
||||
aInputEvent.isControl = mIsControlDown;
|
||||
aInputEvent.isMeta = false;
|
||||
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
|
||||
|
@ -261,14 +261,26 @@ struct nsModifierKeyState {
|
||||
bool mIsShiftDown;
|
||||
bool mIsControlDown;
|
||||
bool mIsAltDown;
|
||||
bool mIsWinDown;
|
||||
|
||||
nsModifierKeyState();
|
||||
nsModifierKeyState(bool aIsShiftDown, bool aIsControlDown,
|
||||
bool aIsAltDown) :
|
||||
mIsShiftDown(aIsShiftDown), mIsControlDown(aIsControlDown),
|
||||
mIsAltDown(aIsAltDown)
|
||||
bool mIsCapsLocked;
|
||||
bool mIsNumLocked;
|
||||
bool mIsScrollLocked;
|
||||
|
||||
nsModifierKeyState()
|
||||
{
|
||||
Update();
|
||||
}
|
||||
nsModifierKeyState(bool aIsShiftDown, bool aIsControlDown,
|
||||
bool aIsAltDown)
|
||||
{
|
||||
Update();
|
||||
mIsShiftDown = aIsShiftDown;
|
||||
mIsControlDown = aIsControlDown;
|
||||
mIsAltDown = aIsAltDown;
|
||||
}
|
||||
|
||||
void Update();
|
||||
|
||||
void InitInputEvent(nsInputEvent& aInputEvent) const;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user