diff --git a/arc-core/src/arc/scene/Scene.java b/arc-core/src/arc/scene/Scene.java index fa27eed2..f63613c0 100644 --- a/arc-core/src/arc/scene/Scene.java +++ b/arc-core/src/arc/scene/Scene.java @@ -654,6 +654,7 @@ public void unfocus(Element actor){ */ public boolean setKeyboardFocus(Element actor){ if(keyboardFocus == actor) return true; + FocusEvent event = Pools.obtain(FocusEvent.class, FocusEvent::new); event.type = (FocusEvent.Type.keyboard); Element oldKeyboardFocus = keyboardFocus; diff --git a/arc-core/src/arc/scene/ui/Dialog.java b/arc-core/src/arc/scene/ui/Dialog.java index c2960e4f..5571c2a8 100644 --- a/arc-core/src/arc/scene/ui/Dialog.java +++ b/arc-core/src/arc/scene/ui/Dialog.java @@ -13,6 +13,7 @@ import arc.scene.style.*; import arc.scene.ui.Label.*; import arc.scene.ui.layout.*; +import arc.struct.*; import arc.util.*; import arc.util.pooling.*; @@ -286,7 +287,19 @@ public void act(float delta){ @Override public void draw(){ Scene stage = getScene(); - if(stage.getKeyboardFocus() == null) stage.setKeyboardFocus(this); + + if(stage.getKeyboardFocus() == null){ + //get top dialog in the scene and focus keyboard on that + int highestDialog = -1; + Seq children = scene.root.getChildren(); + for(int i = children.size - 1; i >= 0; i--){ + if(children.get(i) instanceof Dialog){ + highestDialog = i; + break; + } + } + stage.setKeyboardFocus(highestDialog == -1 ? this : children.get(highestDialog)); + } if(style.stageBackground != null){ stageToLocalCoordinates(tmpPosition.set(translation.x, translation.y));