Browse Source

Ignore XI2 items when blocked by child dialog

0.8-work
Nikita Tsukanov 7 years ago
parent
commit
0d6ed10800
  1. 17
      src/Avalonia.X11/X11Window.cs
  2. 8
      src/Avalonia.X11/XI2Manager.cs

17
src/Avalonia.X11/X11Window.cs

@ -590,7 +590,22 @@ namespace Avalonia.X11
ScheduleInput(args); ScheduleInput(args);
} }
public void ScheduleInput(RawInputEventArgs args) public void ScheduleXI2Input(RawInputEventArgs args)
{
if (args is RawMouseEventArgs pargs)
{
if ((pargs.Type == RawMouseEventType.LeftButtonDown
|| pargs.Type == RawMouseEventType.RightButtonDown
|| pargs.Type == RawMouseEventType.MiddleButtonDown
|| pargs.Type == RawMouseEventType.NonClientLeftButtonDown)
&& ActivateTransientChildIfNeeded())
return;
}
ScheduleInput(args);
}
private void ScheduleInput(RawInputEventArgs args)
{ {
if (args is RawMouseEventArgs mouse) if (args is RawMouseEventArgs mouse)
mouse.Position = mouse.Position / Scaling; mouse.Position = mouse.Position / Scaling;

8
src/Avalonia.X11/XI2Manager.cs

@ -191,10 +191,10 @@ namespace Avalonia.X11
} }
if (scrollDelta != default) if (scrollDelta != default)
client.ScheduleInput(new RawMouseWheelEventArgs(_platform.MouseDevice, ev.Timestamp, client.ScheduleXI2Input(new RawMouseWheelEventArgs(_platform.MouseDevice, ev.Timestamp,
client.InputRoot, ev.Position, scrollDelta, ev.Modifiers)); client.InputRoot, ev.Position, scrollDelta, ev.Modifiers));
if (_pointerDevice.HasMotion(ev)) if (_pointerDevice.HasMotion(ev))
client.ScheduleInput(new RawMouseEventArgs(_platform.MouseDevice, ev.Timestamp, client.InputRoot, client.ScheduleXI2Input(new RawMouseEventArgs(_platform.MouseDevice, ev.Timestamp, client.InputRoot,
RawMouseEventType.Move, ev.Position, ev.Modifiers)); RawMouseEventType.Move, ev.Position, ev.Modifiers));
} }
@ -207,7 +207,7 @@ namespace Avalonia.X11
: ev.Button == 3 ? (down ? RawMouseEventType.RightButtonDown : RawMouseEventType.RightButtonUp) : ev.Button == 3 ? (down ? RawMouseEventType.RightButtonDown : RawMouseEventType.RightButtonUp)
: (RawMouseEventType?)null; : (RawMouseEventType?)null;
if (type.HasValue) if (type.HasValue)
client.ScheduleInput(new RawMouseEventArgs(_platform.MouseDevice, ev.Timestamp, client.InputRoot, client.ScheduleXI2Input(new RawMouseEventArgs(_platform.MouseDevice, ev.Timestamp, client.InputRoot,
type.Value, ev.Position, ev.Modifiers)); type.Value, ev.Position, ev.Modifiers));
} }
@ -264,6 +264,6 @@ namespace Avalonia.X11
interface IXI2Client interface IXI2Client
{ {
IInputRoot InputRoot { get; } IInputRoot InputRoot { get; }
void ScheduleInput(RawInputEventArgs args); void ScheduleXI2Input(RawInputEventArgs args);
} }
} }

Loading…
Cancel
Save