< prev index next >

src/java.desktop/windows/native/libawt/windows/awt_Component.cpp

Print this page

        

@@ -1196,10 +1196,11 @@
         WIN_MSG(WM_MBUTTONUP)
         WIN_MSG(WM_MBUTTONDBLCLK)
         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)
         WIN_MSG(WM_EXITMENULOOP)
         WIN_MSG(WM_NEXTMENU)

@@ -1627,18 +1628,21 @@
       case WM_MBUTTONUP:
       case WM_XBUTTONDBLCLK:
       case WM_XBUTTONDOWN:
       case WM_XBUTTONUP:
       case WM_MOUSEMOVE:
+      case WM_MOUSEHWHEEL:
       case WM_MOUSEWHEEL:
       case WM_AWT_MOUSEENTER:
       case WM_AWT_MOUSEEXIT:
           curPos = ::GetMessagePos();
           POINT myPos;
           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<UINT>(wParam), myPos.x, myPos.y);
               break;
           case WM_LBUTTONDOWN:

@@ -1697,14 +1701,16 @@
                              MIDDLE_BUTTON);
               break;
           case WM_AWT_MOUSEEXIT:
               mr = WmMouseExit(static_cast<UINT>(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;
       case WM_SETCURSOR:
           mr = mrDoDefault;

@@ -2447,11 +2453,11 @@
     sm_cursorOn = NULL;
     return mrConsume;   /* Don't pass our synthetic event on! */
 }
 
 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
     // coordinates during a drag
     POINT eventPt;

@@ -2492,12 +2498,16 @@
         }
     }
 
     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;
     // this message could be propagated up to the parent chain
     // by the mouse message post processors
< prev index next >