Browse Source

Do not enable MouseInPointerEnabled automatically and remove EnableWmPointerEvents option

pull/7412/head
Max Katz 4 years ago
parent
commit
5000a4ffe3
  1. 2
      .editorconfig
  2. 1
      samples/ControlCatalog.NetCore/Program.cs
  3. 10
      src/Windows/Avalonia.Win32/Win32Platform.cs
  4. 42
      src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs
  5. 20
      src/Windows/Avalonia.Win32/WindowImpl.cs

2
.editorconfig

@ -21,7 +21,7 @@ csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true
trim_trailing_whitespace = true
# trim_trailing_whitespace = true
# Indentation preferences
csharp_indent_block_contents = true

1
samples/ControlCatalog.NetCore/Program.cs

@ -115,7 +115,6 @@ namespace ControlCatalog.NetCore
})
.With(new Win32PlatformOptions
{
EnableWmPointerEvents = true
})
.UseSkia()
.AfterSetup(builder =>

10
src/Windows/Avalonia.Win32/Win32Platform.cs

@ -68,17 +68,9 @@ namespace Avalonia
/// <remarks>
/// Multitouch allows a surface (a touchpad or touchscreen) to recognize the presence of more than one point of contact with the surface at the same time.
/// </remarks>
[Obsolete("Multitouch is always enabled")]
[Obsolete("Multitouch is always enabled on supported Windows versions")]
public bool? EnableMultitouch { get; set; } = true;
/// <summary>
/// Enables Win8+ WM_POINTER events support. The default value is false.
/// </summary>
/// <remarks>
/// Required for extended Pen and Touch support.
/// </remarks>
public bool? EnableWmPointerEvents { get; set; } = false;
/// <summary>
/// Embeds popups to the window when set to true. The default value is false.
/// </summary>

42
src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs

@ -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 / 96.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 (_wmPointerEnabled)
if (IsMouseInPointerEnabled)
{
break;
}
@ -213,7 +213,7 @@ namespace Avalonia.Win32
case WindowsMessage.WM_MBUTTONUP:
case WindowsMessage.WM_XBUTTONUP:
{
if (_wmPointerEnabled)
if (IsMouseInPointerEnabled)
{
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 (_wmPointerEnabled)
if (IsMouseInPointerEnabled)
{
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 (_wmPointerEnabled)
if (IsMouseInPointerEnabled)
{
break;
}
@ -290,14 +294,14 @@ namespace Avalonia.Win32
timestamp,
_owner,
PointToClient(PointFromLParam(lParam)),
new Vector(0, (ToInt32(wParam) >> 16) / wheelDelta),
new Vector(0, (ToInt32(wParam) >> 16) / wheelDelta),
GetMouseModifiers(wParam));
break;
}
case WindowsMessage.WM_MOUSEHWHEEL:
{
if (_wmPointerEnabled)
if (IsMouseInPointerEnabled)
{
break;
}
@ -306,14 +310,14 @@ namespace Avalonia.Win32
timestamp,
_owner,
PointToClient(PointFromLParam(lParam)),
new Vector(-(ToInt32(wParam) >> 16) / wheelDelta, 0),
new Vector(-(ToInt32(wParam) >> 16) / wheelDelta, 0),
GetMouseModifiers(wParam));
break;
}
case WindowsMessage.WM_MOUSELEAVE:
{
if (_wmPointerEnabled)
if (IsMouseInPointerEnabled)
{
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 (_wmPointerEnabled)
if (IsMouseInPointerEnabled)
{
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 == _langid && Imm32InputMethod.Current.HWND == Hwnd)
{
return;
}
}
_langid = langid;
Imm32InputMethod.Current.SetLanguageAndWindow(this, Hwnd, hkl);
}
private static int ToInt32(IntPtr ptr)

20
src/Windows/Avalonia.Win32/WindowImpl.cs

@ -74,12 +74,12 @@ namespace Avalonia.Win32
private readonly ManagedDeferredRendererLock _rendererLock;
private readonly FramebufferManager _framebuffer;
private readonly IGlPlatformSurface _gl;
private readonly bool _wmPointerEnabled;
private Win32NativeControlHost _nativeControlHost;
private WndProc _wndProcDelegate;
private string _className;
private IntPtr _hwnd;
private bool _wmPointerEnabled;
private IInputRoot _owner;
private WindowProperties _windowProperties;
private bool _trackingMouse;//ToDo - there is something missed. Needs investigation @Steven Kirk
@ -100,10 +100,10 @@ namespace Avalonia.Win32
private bool _ignoreWmChar;
private const int MaxPointerHistorySize = 512;
private readonly static PooledList<RawPointerPoint> s_intermediatePointsPooledList = new();
private readonly static POINTER_TOUCH_INFO[] s_historyTouchInfos = new POINTER_TOUCH_INFO[MaxPointerHistorySize];
private readonly static POINTER_PEN_INFO[] s_historyPenInfos = new POINTER_PEN_INFO[MaxPointerHistorySize];
private readonly static POINTER_INFO[] s_historyInfos = new POINTER_INFO[MaxPointerHistorySize];
private static readonly PooledList<RawPointerPoint> s_intermediatePointsPooledList = new();
private static readonly POINTER_TOUCH_INFO[] s_historyTouchInfos = new POINTER_TOUCH_INFO[MaxPointerHistorySize];
private static readonly POINTER_PEN_INFO[] s_historyPenInfos = new POINTER_PEN_INFO[MaxPointerHistorySize];
private static readonly POINTER_INFO[] s_historyInfos = new POINTER_INFO[MaxPointerHistorySize];
public WindowImpl()
{
@ -138,13 +138,7 @@ namespace Avalonia.Win32
egl.Display is AngleWin32EglDisplay angleDisplay &&
angleDisplay.PlatformApi == AngleOptions.PlatformApi.DirectX11;
_wmPointerEnabled = Win32Platform.Options.EnableWmPointerEvents
?? Win32Platform.WindowsVersion >= PlatformConstants.Windows8;
if (_wmPointerEnabled && !IsMouseInPointerEnabled())
{
EnableMouseInPointer(true);
}
_wmPointerEnabled = Win32Platform.WindowsVersion >= PlatformConstants.Windows8;
CreateWindow();
_framebuffer = new FramebufferManager(_hwnd);
@ -300,6 +294,8 @@ namespace Avalonia.Win32
protected IntPtr Hwnd => _hwnd;
private bool IsMouseInPointerEnabled => _wmPointerEnabled && IsMouseInPointerEnabled();
public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel)
{
TransparencyLevel = EnableBlur(transparencyLevel);

Loading…
Cancel
Save