--- old/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp 2015-04-24 17:32:10.559361300 +0400 +++ new/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp 2015-04-24 17:32:09.791317400 +0400 @@ -1198,6 +1198,7 @@ WIN_MSG(WM_XBUTTONDBLCLK) WIN_MSG(WM_XBUTTONDOWN) WIN_MSG(WM_XBUTTONUP) + WIN_MSG(WM_MOUSEHWHEEL) WIN_MSG(WM_MOUSEWHEEL) WIN_MSG(WM_PARENTNOTIFY) WIN_MSG(WM_ENTERMENULOOP) @@ -1629,6 +1630,7 @@ case WM_XBUTTONDOWN: case WM_XBUTTONUP: case WM_MOUSEMOVE: + case WM_MOUSEHWHEEL: case WM_MOUSEWHEEL: case WM_AWT_MOUSEENTER: case WM_AWT_MOUSEEXIT: @@ -1637,6 +1639,8 @@ myPos.x = GET_X_LPARAM(curPos); myPos.y = GET_Y_LPARAM(curPos); ::ScreenToClient(GetHWnd(), &myPos); + BOOL hMouseWheel; + hMouseWheel = FALSE; switch(switchMessage) { case WM_AWT_MOUSEENTER: mr = WmMouseEnter(static_cast(wParam), myPos.x, myPos.y); @@ -1699,10 +1703,12 @@ case WM_AWT_MOUSEEXIT: mr = WmMouseExit(static_cast(wParam), myPos.x, myPos.y); break; + case WM_MOUSEHWHEEL: + hMouseWheel = TRUE; case WM_MOUSEWHEEL: mr = WmMouseWheel(GET_KEYSTATE_WPARAM(wParam), GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), - GET_WHEEL_DELTA_WPARAM(wParam)); + GET_WHEEL_DELTA_WPARAM(wParam), hMouseWheel); break; } break; @@ -2449,7 +2455,7 @@ } MsgRouting AwtComponent::WmMouseWheel(UINT flags, int x, int y, - int wheelRotation) + int wheelRotation, BOOL hMouseWheel) { // convert coordinates to be Component-relative, not screen relative // for wheeling when outside the window, this works similar to @@ -2494,8 +2500,12 @@ DTRACE_PRINTLN("calling SendMouseWheelEvent"); + jint modifiers = GetJavaModifiers(); + if (hMouseWheel) { + modifiers |= java_awt_event_InputEvent_SHIFT_DOWN_MASK; + } SendMouseWheelEvent(java_awt_event_MouseEvent_MOUSE_WHEEL, ::JVM_CurrentTimeMillis(NULL, 0), - eventPt.x, eventPt.y, GetJavaModifiers(), 0, 0, scrollType, + eventPt.x, eventPt.y, modifiers, 0, 0, scrollType, scrollLines, roundedWheelRotation, preciseWheelRotation, &msg); m_wheelRotationAmount %= WHEEL_DELTA;