@@ -23,6 +23,7 @@ public class Application
2323 private static DragDropRenderHandler dragRender ;
2424 private static MouseEvents mouseEvent = 0 ;
2525 private static MouseButtons mouseButton = 0 ;
26+ private static MouseButtons mouseButtonLastPressed ;
2627 private static Control mouseLastClickControl ;
2728 private static float mouseWheelDelta ;
2829 private static bool mousePositionChanged ;
@@ -154,12 +155,24 @@ public void ProccessMouse(MouseEvents mE, float mX, float mY, MouseButtons mButt
154155
155156 mousePositionX = mX ;
156157 mousePositionY = mY ;
157-
158- //if (_mouseLastClickControl != null && _mouseEvent == MouseEvents.None && _mouseMovePosition != mousePosition)
159- // _ProcessControl(mousePosition, _mouseLastClickControl, true);
160158
161- if ( mE == MouseEvents . None && ! mousePositionChanged )
162- return ;
159+ switch ( mE )
160+ {
161+ case MouseEvents . None :
162+ if ( mousePositionChanged == false )
163+ return ;
164+ break ;
165+
166+ case MouseEvents . Down :
167+ mouseButtonLastPressed = mButton ;
168+ break ;
169+
170+ case MouseEvents . Up :
171+ if ( mouseButtonLastPressed == mButton )
172+ mouseButtonLastPressed = MouseButtons . None ;
173+ break ;
174+ }
175+
163176
164177 // Dispose context first.
165178 for ( int i = Contexts . Count - 1 ; i >= 0 ; i -- ) // We want to dispose child context first.
@@ -250,10 +263,10 @@ public void Run(Control control)
250263 public void Update ( )
251264 {
252265 // Update hovered control.
253- if ( hoveredControl != null && dragndrop == false )
266+ if ( hoveredControl != null /* && dragndrop == false*/ )
254267 {
255268 var mclient = hoveredControl . PointToClient ( Control . MousePosition ) ;
256- var hargs = new MouseEventArgs ( MouseButtons . None , 0 , mclient . X , mclient . Y , 0 ) ;
269+ var hargs = new MouseEventArgs ( mouseButtonLastPressed , 0 , mclient . X , mclient . Y , 0 ) ;
257270 hoveredControl . RaiseOnMouseHover ( hargs ) ;
258271 if ( updateHoveredControl )
259272 hoveredControl . RaiseOnMouseMove ( hargs ) ;
@@ -266,7 +279,7 @@ public void Update()
266279 {
267280 hoveredControl . hovered = false ;
268281 hoveredControl . mouseEntered = false ;
269- hoveredControl . RaiseOnMouseLeave ( new MouseEventArgs ( MouseButtons . None , 0 , 0 , 0 , 0 ) ) ;
282+ hoveredControl . RaiseOnMouseLeave ( new MouseEventArgs ( mouseButtonLastPressed , 0 , 0 , 0 , 0 ) ) ;
270283 if ( dragndrop )
271284 hoveredControl . RaiseOnDragLeave ( EventArgs . Empty ) ;
272285 }
@@ -281,7 +294,7 @@ public void Update()
281294
282295 controlAtMouse . hovered = true ;
283296 controlAtMouse . mouseEntered = true ;
284- controlAtMouse . RaiseOnMouseEnter ( new MouseEventArgs ( MouseButtons . None , 0 , mclient . X , mclient . Y , 0 ) ) ;
297+ controlAtMouse . RaiseOnMouseEnter ( new MouseEventArgs ( mouseButtonLastPressed , 0 , mclient . X , mclient . Y , 0 ) ) ;
285298 if ( dragndrop )
286299 controlAtMouse . RaiseOnDragEnter ( new DragEventArgs ( new DataObject ( dragData ) , 0 , mclient . X , mclient . Y , DragDropEffects . None , dragControlEffects ) ) ;
287300 }
0 commit comments