Skip to content

Commit 6c0607d

Browse files
authored
Merge pull request gui-cs#3550 from BDisp/v1_3545_focused-view-sync-fix
Fixes gui-cs#3545. V1 Superview most focused view not sync with the overlapped view.
2 parents 2e1b1a8 + abdb7db commit 6c0607d

4 files changed

Lines changed: 15 additions & 10 deletions

File tree

‎Terminal.Gui/Core/Application.cs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1037,6 +1037,7 @@ public static RunState Begin (Toplevel toplevel)
10371037
toplevel.LayoutSubviews ();
10381038
toplevel.PositionToplevels ();
10391039
toplevel.WillPresent ();
1040+
EnsuresTopOnFront ();
10401041
if (refreshDriver) {
10411042
MdiTop?.OnChildLoaded (toplevel);
10421043
toplevel.OnLoaded ();

‎Terminal.Gui/Core/View.cs‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,10 @@ public override bool CanFocus {
394394
}
395395
}
396396
}
397+
398+
if (SuperView is Toplevel && Application.Current?.Focused != SuperView) {
399+
Application.EnsuresTopOnFront ();
400+
}
397401
}
398402
OnCanFocusChanged ();
399403
SetNeedsDisplay ();

‎Terminal.Gui/Core/Window.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ private void Initialize (Window instance)
104104

105105
public override void OnCanFocusChanged ()
106106
{
107-
if (MostFocused == null && CanFocus && Visible) {
107+
if (HasFocus && MostFocused == null && CanFocus && Visible) {
108108
EnsureFocus ();
109109
}
110110

‎UnitTests/Application/ApplicationTests.cs‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -771,28 +771,28 @@ public void EnsuresTopOnFront_CanFocus_True_By_Keyboard_And_Mouse ()
771771
Assert.True (win.HasFocus);
772772
Assert.True (win2.CanFocus);
773773
Assert.False (win2.HasFocus);
774-
Assert.Equal ("win2", ((Window)top.Subviews [top.Subviews.Count - 1]).Title);
774+
Assert.Equal ("win", ((Window)top.Subviews [^1]).Title);
775775

776776
top.ProcessKey (new KeyEvent (Key.CtrlMask | Key.Tab, new KeyModifiers ()));
777777
Assert.True (win.CanFocus);
778778
Assert.False (win.HasFocus);
779779
Assert.True (win2.CanFocus);
780780
Assert.True (win2.HasFocus);
781-
Assert.Equal ("win2", ((Window)top.Subviews [top.Subviews.Count - 1]).Title);
781+
Assert.Equal ("win2", ((Window)top.Subviews [^1]).Title);
782782

783783
top.ProcessKey (new KeyEvent (Key.CtrlMask | Key.Tab, new KeyModifiers ()));
784784
Assert.True (win.CanFocus);
785785
Assert.True (win.HasFocus);
786786
Assert.True (win2.CanFocus);
787787
Assert.False (win2.HasFocus);
788-
Assert.Equal ("win", ((Window)top.Subviews [top.Subviews.Count - 1]).Title);
788+
Assert.Equal ("win", ((Window)top.Subviews [^1]).Title);
789789

790790
win2.MouseEvent (new MouseEvent () { Flags = MouseFlags.Button1Pressed });
791791
Assert.True (win.CanFocus);
792792
Assert.False (win.HasFocus);
793793
Assert.True (win2.CanFocus);
794794
Assert.True (win2.HasFocus);
795-
Assert.Equal ("win2", ((Window)top.Subviews [top.Subviews.Count - 1]).Title);
795+
Assert.Equal ("win2", ((Window)top.Subviews [^1]).Title);
796796
win2.MouseEvent (new MouseEvent () { Flags = MouseFlags.Button1Released });
797797
Assert.Null (Toplevel.dragPosition);
798798
}
@@ -816,35 +816,35 @@ public void EnsuresTopOnFront_CanFocus_False_By_Keyboard_And_Mouse ()
816816
Assert.True (win.HasFocus);
817817
Assert.True (win2.CanFocus);
818818
Assert.False (win2.HasFocus);
819-
Assert.Equal ("win2", ((Window)top.Subviews [top.Subviews.Count - 1]).Title);
819+
Assert.Equal ("win", ((Window)top.Subviews [^1]).Title);
820820

821821
win.CanFocus = false;
822822
Assert.False (win.CanFocus);
823823
Assert.False (win.HasFocus);
824824
Assert.True (win2.CanFocus);
825825
Assert.True (win2.HasFocus);
826-
Assert.Equal ("win2", ((Window)top.Subviews [top.Subviews.Count - 1]).Title);
826+
Assert.Equal ("win2", ((Window)top.Subviews [^1]).Title);
827827

828828
top.ProcessKey (new KeyEvent (Key.CtrlMask | Key.Tab, new KeyModifiers ()));
829829
Assert.True (win2.CanFocus);
830830
Assert.False (win.HasFocus);
831831
Assert.True (win2.CanFocus);
832832
Assert.True (win2.HasFocus);
833-
Assert.Equal ("win2", ((Window)top.Subviews [top.Subviews.Count - 1]).Title);
833+
Assert.Equal ("win2", ((Window)top.Subviews [^1]).Title);
834834

835835
top.ProcessKey (new KeyEvent (Key.CtrlMask | Key.Tab, new KeyModifiers ()));
836836
Assert.False (win.CanFocus);
837837
Assert.False (win.HasFocus);
838838
Assert.True (win2.CanFocus);
839839
Assert.True (win2.HasFocus);
840-
Assert.Equal ("win2", ((Window)top.Subviews [top.Subviews.Count - 1]).Title);
840+
Assert.Equal ("win2", ((Window)top.Subviews [^1]).Title);
841841

842842
win.MouseEvent (new MouseEvent () { Flags = MouseFlags.Button1Pressed });
843843
Assert.False (win.CanFocus);
844844
Assert.False (win.HasFocus);
845845
Assert.True (win2.CanFocus);
846846
Assert.True (win2.HasFocus);
847-
Assert.Equal ("win2", ((Window)top.Subviews [top.Subviews.Count - 1]).Title);
847+
Assert.Equal ("win2", ((Window)top.Subviews [^1]).Title);
848848
win2.MouseEvent (new MouseEvent () { Flags = MouseFlags.Button1Released });
849849
Assert.Null (Toplevel.dragPosition);
850850
}

0 commit comments

Comments
 (0)