Skip to content

Commit a1e422a

Browse files
authored
Merge pull request #2234 from cwensley/curtis/mac-accept-first-mouse-on-floating-form
Mac: Accept first mouse events on FloatingForm when active
2 parents 9479113 + 83dd7c3 commit a1e422a

File tree

3 files changed

+20
-9
lines changed

3 files changed

+20
-9
lines changed

src/Eto.Mac/Forms/Controls/DrawableHandler.cs

+7-2
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ public override void DrawRect(CGRect dirtyRect)
3737

3838
public override bool AcceptsFirstResponder() => CanFocus;
3939

40-
public override bool AcceptsFirstMouse(NSEvent theEvent) => CanFocus || base.AcceptsFirstMouse(theEvent);
41-
4240
public override NSView HitTest(CGPoint aPoint)
4341
{
4442
var view = base.HitTest(aPoint);
@@ -130,5 +128,12 @@ public void Update(Rectangle rect)
130128
{
131129
Control.DisplayRect(rect.ToNS());
132130
}
131+
132+
protected override bool OnAcceptsFirstMouse(NSEvent theEvent)
133+
{
134+
if (CanFocus)
135+
return true;
136+
return base.OnAcceptsFirstMouse(theEvent);
137+
}
133138
}
134139
}

src/Eto.Mac/Forms/Controls/SplitterHandler.cs

+5
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,11 @@ public override void Layout()
343343
if (!MacView.NewLayout)
344344
base.Layout();
345345
}
346+
347+
public override bool AcceptsFirstMouse(NSEvent theEvent)
348+
{
349+
return Handler != null ? Handler.OnAcceptsFirstMouse(theEvent) : base.AcceptsFirstMouse(theEvent);
350+
}
346351
}
347352

348353
bool changeStarted;

src/Eto.Mac/Forms/MacView.cs

+8-7
Original file line numberDiff line numberDiff line change
@@ -1419,21 +1419,22 @@ public event EventHandler<MouseEventArgs> AcceptsFirstMouse
14191419
remove => Widget.Properties.RemoveEvent(MacView.AcceptsFirstMouse_Key, value);
14201420
}
14211421

1422-
protected virtual void OnAcceptsFirstMouse(MouseEventArgs e)
1423-
{
1424-
Widget?.Properties.TriggerEvent(MacView.AcceptsFirstMouse_Key, this, e);
1425-
}
1426-
1427-
bool IMacViewHandler.OnAcceptsFirstMouse(NSEvent theEvent)
1422+
protected virtual bool OnAcceptsFirstMouse(NSEvent theEvent)
14281423
{
14291424
if (!Widget.Properties.ContainsKey(MacView.AcceptsFirstMouse_Key))
1425+
{
1426+
if (ContainerControl.Window is NSPanel)
1427+
return Application.Instance.IsActive;
14301428
return false;
1429+
}
14311430

14321431
var args = MacConversions.GetMouseEvent(this, theEvent, false);
1433-
OnAcceptsFirstMouse(args);
1432+
Widget.Properties.TriggerEvent(MacView.AcceptsFirstMouse_Key, this, args);
14341433
return args.Handled;
14351434
}
14361435

1436+
bool IMacViewHandler.OnAcceptsFirstMouse(NSEvent theEvent) => OnAcceptsFirstMouse(theEvent);
1437+
14371438
public virtual MouseEventArgs TriggerMouseDown(NSObject obj, IntPtr sel, NSEvent theEvent)
14381439
{
14391440
// Flag that we are going to use a mouse tracking loop

0 commit comments

Comments
 (0)