icsharpcode / WpfDesigner

The WPF Designer from SharpDevelop
MIT License
949 stars 251 forks source link

Crash when you use mouse & keyboard arrow keys together. #92

Open CorrieMeyer opened 1 year ago

CorrieMeyer commented 1 year ago

I found a bug you use your mouse and keyboard up/down/left/right arrow keys together.

To Reproduce:

  1. Start Sample application on Windows.
  2. Maximize Main Window.
  3. Drop a Button on Design Service in Center of Screen.
  4. Move to Center of button with mouse pointer.
  5. Press primary mouse button to start moving/dragging button.
  6. While still holding primary mouse button move left or right with your mouse so that the button moves to a new location (do not release primary mouse button).
  7. Then Either Press and hold Left, Right, Up or Down Arrow key on Keyboard, while still holding the primary mouse button down
  8. Depress/Release primary mouse button.
  9. App Crashes. See below stack trace.

StackTrace:

`PlacementOperation is committed. at ICSharpCode.WpfDesign.PlacementOperation.Abort() at ICSharpCode.WpfDesign.Designer.Services.MoveLogic.Cancel() at ICSharpCode.WpfDesign.Designer.Services.DragMoveMouseGesture.OnStopped() at ICSharpCode.WpfDesign.Designer.Services.MouseGestureBase.Stop() at ICSharpCode.WpfDesign.Designer.Services.MouseGestureBase.OnLostMouseCapture(Object sender, MouseEventArgs e) at System.Windows.Input.MouseEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget) at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target) at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs) at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised) at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args) at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args) at System.Windows.Input.InputManager.ProcessStagingArea() at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input) at System.Windows.Input.MouseDevice.ChangeMouseCapture(IInputElement mouseCapture, IMouseInputProvider providerCapture, CaptureMode captureMode, Int32 timestamp) at System.Windows.Input.MouseDevice.PreNotifyInput(Object sender, NotifyInputEventArgs e) at System.Windows.Input.InputManager.ProcessStagingArea() at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input) at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport) at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel) at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

[ICSharpCode.WpfDesign.PlacementOperation+PlacementOperationException] - PlacementOperation is committed. `

I have also done my own fix: here: https://github.com/CorrieMeyer/WpfDesigner/commit/469f6a36c4806d8a8f3d2c6f7af1551b8a1da43d

Not sure if it is the correct way, but if your happy with it I will do a pull request for the fix.