@ -84,7 +84,7 @@ namespace Avalonia.Win32
case WindowsMessage . WM_DESTROY :
{
UiaCoreProviderApi . UiaReturnRawElementProvider ( _ hwnd , IntPtr . Zero , IntPtr . Zero , null ) ;
// We need to release IMM context and state to avoid leaks.
if ( Imm32InputMethod . Current . HWND = = _ hwnd )
{
@ -110,9 +110,9 @@ namespace Avalonia.Win32
var newDisplayRect = Marshal . PtrToStructure < RECT > ( lParam ) ;
_ scaling = dpi / 9 6.0 ;
ScalingChanged ? . Invoke ( _ scaling ) ;
using ( SetResizeReason ( PlatformResizeReason . DpiChange ) )
{
{
SetWindowPos ( hWnd ,
IntPtr . Zero ,
newDisplayRect . left ,
@ -180,7 +180,7 @@ namespace Avalonia.Win32
case WindowsMessage . WM_MBUTTONDOWN :
case WindowsMessage . WM_XBUTTONDOWN :
{
if ( _ wm PointerEnabled)
if ( IsMouseIn PointerEnabled)
{
break ;
}
@ -213,7 +213,7 @@ namespace Avalonia.Win32
case WindowsMessage . WM_MBUTTONUP :
case WindowsMessage . WM_XBUTTONUP :
{
if ( _ wm PointerEnabled)
if ( IsMouseIn PointerEnabled)
{
break ;
}
@ -241,12 +241,16 @@ namespace Avalonia.Win32
}
// Mouse capture is lost
case WindowsMessage . WM_CANCELMODE :
_ mouseDevice . Capture ( null ) ;
if ( ! IsMouseInPointerEnabled )
{
_ mouseDevice . Capture ( null ) ;
}
break ;
case WindowsMessage . WM_MOUSEMOVE :
{
if ( _ wm PointerEnabled)
if ( IsMouseIn PointerEnabled)
{
break ;
}
@ -273,7 +277,7 @@ namespace Avalonia.Win32
timestamp ,
_ owner ,
RawPointerEventType . Move ,
DipFromLParam ( lParam ) ,
DipFromLParam ( lParam ) ,
GetMouseModifiers ( wParam ) ) ;
break ;
@ -281,7 +285,7 @@ namespace Avalonia.Win32
case WindowsMessage . WM_MOUSEWHEEL :
{
if ( _ wm PointerEnabled)
if ( IsMouseIn PointerEnabled)
{
break ;
}
@ -290,14 +294,14 @@ namespace Avalonia.Win32
timestamp ,
_ owner ,
PointToClient ( PointFromLParam ( lParam ) ) ,
new Vector ( 0 , ( ToInt32 ( wParam ) > > 1 6 ) / wheelDelta ) ,
new Vector ( 0 , ( ToInt32 ( wParam ) > > 1 6 ) / wheelDelta ) ,
GetMouseModifiers ( wParam ) ) ;
break ;
}
case WindowsMessage . WM_MOUSEHWHEEL :
{
if ( _ wm PointerEnabled)
if ( IsMouseIn PointerEnabled)
{
break ;
}
@ -306,14 +310,14 @@ namespace Avalonia.Win32
timestamp ,
_ owner ,
PointToClient ( PointFromLParam ( lParam ) ) ,
new Vector ( - ( ToInt32 ( wParam ) > > 1 6 ) / wheelDelta , 0 ) ,
new Vector ( - ( ToInt32 ( wParam ) > > 1 6 ) / wheelDelta , 0 ) ,
GetMouseModifiers ( wParam ) ) ;
break ;
}
case WindowsMessage . WM_MOUSELEAVE :
{
if ( _ wm PointerEnabled)
if ( IsMouseIn PointerEnabled)
{
break ;
}
@ -323,7 +327,7 @@ namespace Avalonia.Win32
timestamp ,
_ owner ,
RawPointerEventType . LeaveWindow ,
new Point ( - 1 , - 1 ) ,
new Point ( - 1 , - 1 ) ,
WindowsKeyboardDevice . Instance . Modifiers ) ;
break ;
}
@ -333,7 +337,7 @@ namespace Avalonia.Win32
case WindowsMessage . WM_NCMBUTTONDOWN :
case WindowsMessage . WM_NCXBUTTONDOWN :
{
if ( _ wm PointerEnabled)
if ( IsMouseIn PointerEnabled)
{
break ;
}
@ -598,7 +602,7 @@ namespace Avalonia.Win32
case WindowsMessage . WM_GETMINMAXINFO :
{
MINMAXINFO mmi = Marshal . PtrToStructure < MINMAXINFO > ( lParam ) ;
_ maxTrackSize = mmi . ptMaxTrackSize ;
if ( _ minSize . Width > 0 )
@ -682,7 +686,7 @@ namespace Avalonia.Win32
if ( _ managedDrag . PreprocessInputEvent ( ref e ) )
return UnmanagedMethods . DefWindowProc ( hWnd , msg , wParam , lParam ) ;
#endif
if ( shouldTakeFocus )
{
SetFocus ( _ hwnd ) ;
@ -915,11 +919,11 @@ namespace Avalonia.Win32
if ( langid = = _l angid & & Imm32InputMethod . Current . HWND = = Hwnd )
{
return ;
}
}
_l angid = langid ;
Imm32InputMethod . Current . SetLanguageAndWindow ( this , Hwnd , hkl ) ;
}
private static int ToInt32 ( IntPtr ptr )