Nav: added io.ConfigNavEscapeClearFocusWindow to clear focused window on Escape. (#3200)
+ pressing escape to hide nav highlight doesn't clear location from when ctrl+tabbing back into same window later.
This commit is contained in:
parent
ba5161740e
commit
b001038901
@ -67,6 +67,9 @@ Other changes:
|
|||||||
state to draw callbacks. (#6969, #5834, #7468, #3590)
|
state to draw callbacks. (#6969, #5834, #7468, #3590)
|
||||||
- IO: WantCaptureKeyboard is never set when ImGuiConfigFlags_NoKeyboard is enabled. (#4921)
|
- IO: WantCaptureKeyboard is never set when ImGuiConfigFlags_NoKeyboard is enabled. (#4921)
|
||||||
- Error Handling: turned a few more functions into recoverable errors. (#1651)
|
- Error Handling: turned a few more functions into recoverable errors. (#1651)
|
||||||
|
- Nav: added io.ConfigNavEscapeClearFocusWindow to clear focused window on Escape. (#3200)
|
||||||
|
- Nav: pressing escape to hide nav highlight doesn't clear location from when ctrl+tabbing back
|
||||||
|
into same window later.
|
||||||
- DrawList: AddCallback() added an optional size parameter allowing to copy and
|
- DrawList: AddCallback() added an optional size parameter allowing to copy and
|
||||||
store any amount of user data for usage by callbacks: (#6969, #4770, #7665)
|
store any amount of user data for usage by callbacks: (#6969, #4770, #7665)
|
||||||
- If userdata_size == 0: we copy/store the 'userdata' argument as-is (existing behavior).
|
- If userdata_size == 0: we copy/store the 'userdata' argument as-is (existing behavior).
|
||||||
|
@ -1408,6 +1408,7 @@ ImGuiIO::ImGuiIO()
|
|||||||
ConfigNavSwapGamepadButtons = false;
|
ConfigNavSwapGamepadButtons = false;
|
||||||
ConfigNavMoveSetMousePos = false;
|
ConfigNavMoveSetMousePos = false;
|
||||||
ConfigNavCaptureKeyboard = true;
|
ConfigNavCaptureKeyboard = true;
|
||||||
|
ConfigNavEscapeClearFocusWindow = false;
|
||||||
ConfigInputTrickleEventQueue = true;
|
ConfigInputTrickleEventQueue = true;
|
||||||
ConfigInputTextCursorBlink = true;
|
ConfigInputTextCursorBlink = true;
|
||||||
ConfigInputTextEnterKeepActive = false;
|
ConfigInputTextEnterKeepActive = false;
|
||||||
@ -13316,7 +13317,7 @@ void ImGui::NavMoveRequestApplyResult()
|
|||||||
NavRestoreHighlightAfterMove();
|
NavRestoreHighlightAfterMove();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process NavCancel input (to close a popup, get back to parent, clear focus)
|
// Process Escape/NavCancel input (to close a popup, get back to parent, clear focus)
|
||||||
// FIXME: In order to support e.g. Escape to clear a selection we'll need:
|
// FIXME: In order to support e.g. Escape to clear a selection we'll need:
|
||||||
// - either to store the equivalent of ActiveIdUsingKeyInputMask for a FocusScope and test for it.
|
// - either to store the equivalent of ActiveIdUsingKeyInputMask for a FocusScope and test for it.
|
||||||
// - either to move most/all of those tests to the epilogue/end functions of the scope they are dealing with (e.g. exit child window in EndChild()) or in EndFrame(), to allow an earlier intercept
|
// - either to move most/all of those tests to the epilogue/end functions of the scope they are dealing with (e.g. exit child window in EndChild()) or in EndFrame(), to allow an earlier intercept
|
||||||
@ -13358,11 +13359,13 @@ static void ImGui::NavUpdateCancelRequest()
|
|||||||
{
|
{
|
||||||
// Clear NavLastId for popups but keep it for regular child window so we can leave one and come back where we were
|
// Clear NavLastId for popups but keep it for regular child window so we can leave one and come back where we were
|
||||||
// FIXME-NAV: This should happen on window appearing.
|
// FIXME-NAV: This should happen on window appearing.
|
||||||
if (g.NavWindow && ((g.NavWindow->Flags & ImGuiWindowFlags_Popup) || !(g.NavWindow->Flags & ImGuiWindowFlags_ChildWindow)))
|
if (g.NavWindow && ((g.NavWindow->Flags & ImGuiWindowFlags_Popup)))// || !(g.NavWindow->Flags & ImGuiWindowFlags_ChildWindow)))
|
||||||
g.NavWindow->NavLastIds[0] = 0;
|
g.NavWindow->NavLastIds[0] = 0;
|
||||||
|
|
||||||
// Clear nav focus
|
// Clear nav focus
|
||||||
g.NavId = 0;
|
g.NavId = 0;
|
||||||
|
if (g.IO.ConfigNavEscapeClearFocusWindow)
|
||||||
|
FocusWindow(NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
imgui.h
1
imgui.h
@ -2250,6 +2250,7 @@ struct ImGuiIO
|
|||||||
bool ConfigNavSwapGamepadButtons; // = false // Swap Activate<>Cancel (A<>B) buttons, matching typical "Nintendo/Japanese style" gamepad layout.
|
bool ConfigNavSwapGamepadButtons; // = false // Swap Activate<>Cancel (A<>B) buttons, matching typical "Nintendo/Japanese style" gamepad layout.
|
||||||
bool ConfigNavMoveSetMousePos; // = false // Directional/tabbing navigation teleports the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is difficult. Will update io.MousePos and set io.WantSetMousePos=true.
|
bool ConfigNavMoveSetMousePos; // = false // Directional/tabbing navigation teleports the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is difficult. Will update io.MousePos and set io.WantSetMousePos=true.
|
||||||
bool ConfigNavCaptureKeyboard; // = true // Sets io.WantCaptureKeyboard when io.NavActive is set.
|
bool ConfigNavCaptureKeyboard; // = true // Sets io.WantCaptureKeyboard when io.NavActive is set.
|
||||||
|
bool ConfigNavEscapeClearFocusWindow;// = false // Pressing Escape (when no item is active, no popup open etc.) clears focused window + navigation id/highlight.
|
||||||
bool ConfigInputTrickleEventQueue; // = true // Enable input queue trickling: some types of events submitted during the same frame (e.g. button down + up) will be spread over multiple frames, improving interactions with low framerates.
|
bool ConfigInputTrickleEventQueue; // = true // Enable input queue trickling: some types of events submitted during the same frame (e.g. button down + up) will be spread over multiple frames, improving interactions with low framerates.
|
||||||
bool ConfigInputTextCursorBlink; // = true // Enable blinking cursor (optional as some users consider it to be distracting).
|
bool ConfigInputTextCursorBlink; // = true // Enable blinking cursor (optional as some users consider it to be distracting).
|
||||||
bool ConfigInputTextEnterKeepActive; // = false // [BETA] Pressing Enter will keep item active and select contents (single-line only).
|
bool ConfigInputTextEnterKeepActive; // = false // [BETA] Pressing Enter will keep item active and select contents (single-line only).
|
||||||
|
@ -532,6 +532,8 @@ void ImGui::ShowDemoWindow(bool* p_open)
|
|||||||
ImGui::Checkbox("io.ConfigNavMoveSetMousePos", &io.ConfigNavMoveSetMousePos);
|
ImGui::Checkbox("io.ConfigNavMoveSetMousePos", &io.ConfigNavMoveSetMousePos);
|
||||||
ImGui::SameLine(); HelpMarker("Directional/tabbing navigation teleports the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is difficult");
|
ImGui::SameLine(); HelpMarker("Directional/tabbing navigation teleports the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is difficult");
|
||||||
ImGui::Checkbox("io.ConfigNavCaptureKeyboard", &io.ConfigNavCaptureKeyboard);
|
ImGui::Checkbox("io.ConfigNavCaptureKeyboard", &io.ConfigNavCaptureKeyboard);
|
||||||
|
ImGui::Checkbox("io.ConfigNavEscapeClearFocusWindow", &io.ConfigNavEscapeClearFocusWindow);
|
||||||
|
ImGui::SameLine(); HelpMarker("Pressing Escape clears focused window.");
|
||||||
|
|
||||||
ImGui::SeparatorText("Widgets");
|
ImGui::SeparatorText("Widgets");
|
||||||
ImGui::Checkbox("io.ConfigInputTextCursorBlink", &io.ConfigInputTextCursorBlink);
|
ImGui::Checkbox("io.ConfigInputTextCursorBlink", &io.ConfigInputTextCursorBlink);
|
||||||
|
Loading…
Reference in New Issue
Block a user