diff --git a/CHANGES b/CHANGES index 0a551cd5..5823a237 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,5 @@ [1.8.2-SNAPSHOT] +- Fixed UI hotkeys triggering actions while elements are disabled [1.8.1] - [BREAKING] TileMergeMode modes renamed to Y_THEN_X, X_THEN_X and SQUARE diff --git a/ui/src/main/java/org/mini2Dx/ui/UiContainer.java b/ui/src/main/java/org/mini2Dx/ui/UiContainer.java index ae1a8aa5..413c6d67 100644 --- a/ui/src/main/java/org/mini2Dx/ui/UiContainer.java +++ b/ui/src/main/java/org/mini2Dx/ui/UiContainer.java @@ -504,6 +504,9 @@ public boolean buttonDown(ControllerUiInput controllerUiInput, ControllerButt receivedButtonDowns.add(button.getAbsoluteValue()); ActionableRenderNode hotkeyAction = activeNavigation.hotkey(button); if (hotkeyAction != null) { + if(!hotkeyAction.isEnabled()) { + return true; + } ControllerEventTriggerParams params = EventTriggerParamsPool.allocateControllerParams(); params.setControllerButton(button); hotkeyAction.setState(NodeState.ACTION); @@ -541,6 +544,9 @@ public boolean buttonUp(ControllerUiInput controllerUiInput, ControllerButton } ActionableRenderNode hotkeyAction = activeNavigation.hotkey(button); if (hotkeyAction != null) { + if(!hotkeyAction.isEnabled()) { + return true; + } ControllerEventTriggerParams params = EventTriggerParamsPool.allocateControllerParams(); params.setControllerButton(button); hotkeyAction.setState(NodeState.ACTION); @@ -580,6 +586,9 @@ private boolean handleModalKeyDown(int keycode) { } } } else { + if(!hotkeyAction.isEnabled()) { + return true; + } KeyboardEventTriggerParams params = EventTriggerParamsPool.allocateKeyboardParams(); params.setKey(keycode); hotkeyAction.setState(NodeState.ACTION); @@ -595,6 +604,9 @@ private boolean handleModalKeyUp(int keycode) { } ActionableRenderNode hotkeyAction = activeNavigation.hotkey(keycode); if (hotkeyAction != null) { + if(!hotkeyAction.isEnabled()) { + return true; + } KeyboardEventTriggerParams params = EventTriggerParamsPool.allocateKeyboardParams(); params.setKey(keycode); hotkeyAction.setState(NodeState.NORMAL); diff --git a/ui/src/main/java/org/mini2Dx/ui/render/ActionableRenderNode.java b/ui/src/main/java/org/mini2Dx/ui/render/ActionableRenderNode.java index 1308accb..60ddc739 100644 --- a/ui/src/main/java/org/mini2Dx/ui/render/ActionableRenderNode.java +++ b/ui/src/main/java/org/mini2Dx/ui/render/ActionableRenderNode.java @@ -29,4 +29,6 @@ public interface ActionableRenderNode extends HoverableRenderNode { public NodeState getState(); public void setState(NodeState state); + + public boolean isEnabled(); } diff --git a/ui/src/main/java/org/mini2Dx/ui/render/ButtonRenderNode.java b/ui/src/main/java/org/mini2Dx/ui/render/ButtonRenderNode.java index 994f0d67..b6fab404 100644 --- a/ui/src/main/java/org/mini2Dx/ui/render/ButtonRenderNode.java +++ b/ui/src/main/java/org/mini2Dx/ui/render/ButtonRenderNode.java @@ -115,4 +115,9 @@ public void beginAction(EventTrigger eventTrigger, EventTriggerParams eventTrigg public void endAction(EventTrigger eventTrigger, EventTriggerParams eventTriggerParams) { element.notifyActionListenersOfEndEvent(eventTrigger, eventTriggerParams); } + + @Override + public boolean isEnabled() { + return element.isEnabled(); + } } diff --git a/ui/src/main/java/org/mini2Dx/ui/render/CheckboxRenderNode.java b/ui/src/main/java/org/mini2Dx/ui/render/CheckboxRenderNode.java index 57028e33..a3894211 100644 --- a/ui/src/main/java/org/mini2Dx/ui/render/CheckboxRenderNode.java +++ b/ui/src/main/java/org/mini2Dx/ui/render/CheckboxRenderNode.java @@ -201,4 +201,9 @@ protected float determineYOffset(LayoutState layoutState) { } } + @Override + public boolean isEnabled() { + return element.isEnabled(); + } + } diff --git a/ui/src/main/java/org/mini2Dx/ui/render/CustomUiElementRenderNode.java b/ui/src/main/java/org/mini2Dx/ui/render/CustomUiElementRenderNode.java index d9cbb0f5..ccd27b88 100644 --- a/ui/src/main/java/org/mini2Dx/ui/render/CustomUiElementRenderNode.java +++ b/ui/src/main/java/org/mini2Dx/ui/render/CustomUiElementRenderNode.java @@ -125,4 +125,9 @@ public boolean mouseMoved(int screenX, int screenY) { } return super.mouseMoved(screenX, screenY); } + + @Override + public boolean isEnabled() { + return element.isEnabled(); + } } diff --git a/ui/src/main/java/org/mini2Dx/ui/render/RadioButtonRenderNode.java b/ui/src/main/java/org/mini2Dx/ui/render/RadioButtonRenderNode.java index 532c8df9..de7072d2 100644 --- a/ui/src/main/java/org/mini2Dx/ui/render/RadioButtonRenderNode.java +++ b/ui/src/main/java/org/mini2Dx/ui/render/RadioButtonRenderNode.java @@ -418,4 +418,9 @@ protected float determineYOffset(LayoutState layoutState) { return element.getY(); } } + + @Override + public boolean isEnabled() { + return element.isEnabled(); + } } diff --git a/ui/src/main/java/org/mini2Dx/ui/render/ScrollBoxRenderNode.java b/ui/src/main/java/org/mini2Dx/ui/render/ScrollBoxRenderNode.java index e4fbd46e..d0378c44 100644 --- a/ui/src/main/java/org/mini2Dx/ui/render/ScrollBoxRenderNode.java +++ b/ui/src/main/java/org/mini2Dx/ui/render/ScrollBoxRenderNode.java @@ -509,4 +509,9 @@ public float getBoxHeight() { public float getScrollContentHeight() { return contentHeight; } + + @Override + public boolean isEnabled() { + return true; + } } diff --git a/ui/src/main/java/org/mini2Dx/ui/render/SelectRenderNode.java b/ui/src/main/java/org/mini2Dx/ui/render/SelectRenderNode.java index 2bf5b239..c31d3fc2 100644 --- a/ui/src/main/java/org/mini2Dx/ui/render/SelectRenderNode.java +++ b/ui/src/main/java/org/mini2Dx/ui/render/SelectRenderNode.java @@ -424,4 +424,9 @@ protected SelectStyleRule determineStyleRule(LayoutState layoutState) { } return selectStyleRule; } + + @Override + public boolean isEnabled() { + return element.isEnabled(); + } } diff --git a/ui/src/main/java/org/mini2Dx/ui/render/SliderRenderNode.java b/ui/src/main/java/org/mini2Dx/ui/render/SliderRenderNode.java index fe33ebac..e1d81bb8 100644 --- a/ui/src/main/java/org/mini2Dx/ui/render/SliderRenderNode.java +++ b/ui/src/main/java/org/mini2Dx/ui/render/SliderRenderNode.java @@ -308,4 +308,9 @@ protected float determineYOffset(LayoutState layoutState) { return element.getY(); } } + + @Override + public boolean isEnabled() { + return element.isEnabled(); + } } diff --git a/ui/src/main/java/org/mini2Dx/ui/render/TextBoxRenderNode.java b/ui/src/main/java/org/mini2Dx/ui/render/TextBoxRenderNode.java index fe02c268..1150a60f 100644 --- a/ui/src/main/java/org/mini2Dx/ui/render/TextBoxRenderNode.java +++ b/ui/src/main/java/org/mini2Dx/ui/render/TextBoxRenderNode.java @@ -474,4 +474,9 @@ public void setState(NodeState state) { public LayoutRuleset getLayoutRuleset() { return layoutRuleset; } + + @Override + public boolean isEnabled() { + return element.isEnabled(); + } }