@ -143,7 +143,7 @@ CODE
- CTRL + X , CTRL + C , CTRL + V : Use OS clipboard .
- CTRL + X , CTRL + C , CTRL + V : Use OS clipboard .
- CTRL + Z , CTRL + Y : Undo , Redo .
- CTRL + Z , CTRL + Y : Undo , Redo .
- ESCAPE : Revert text to its original value .
- ESCAPE : Revert text to its original value .
- On OSX , controls are automatically adjusted to match standard OSX text editing shortcu ts and behaviors .
- On OSX , controls are automatically adjusted to match standard OSX text editing 2 ts and behaviors .
- KEYBOARD CONTROLS
- KEYBOARD CONTROLS
- Basic :
- Basic :
@ -430,7 +430,12 @@ CODE
When you are not sure about an old symbol or function name , try using the Search / Find function of your IDE to look for comments or references in all imgui files .
When you are not sure about an old symbol or function name , try using the Search / Find function of your IDE to look for comments or references in all imgui files .
You can read releases logs https : //github.com/ocornut/imgui/releases for more details.
You can read releases logs https : //github.com/ocornut/imgui/releases for more details.
- 2024 / 05 / 22 ( 1.90 .7 ) - inputs internals : renamed ImGuiKeyOwner_None to ImGuiKeyOwner_NoOwner , to make use more explicit and reduce confusion with the default it is a non - zero value and cannot be the default value ( never made public , but disclosing as I expect a few users caught on owner - aware inputs ) .
- 2024 / 05 / 22 ( 1.90 .7 ) - inputs ( internals ) : renamed ImGuiKeyOwner_None to ImGuiKeyOwner_NoOwner , to make use more explicit and reduce confusion with the default it is a non - zero value and cannot be the default value ( never made public , but disclosing as I expect a few users caught on owner - aware inputs ) .
- inputs ( internals ) : Shortcut ( ) , SetShortcutRouting ( ) : swapped last two parameters order in function signatures :
- old : Shortcut ( ImGuiKeyChord key_chord , ImGuiID owner_id = 0 , ImGuiInputFlags flags = 0 ) ;
- new : Shortcut ( ImGuiKeyChord key_chord , ImGuiInputFlags flags = 0 , ImGuiID owner_id = 0 ) ;
for various reasons those changes makes sense . They are being made because making some of those API public .
only past users of imgui_internal . h with the extra parameters will be affected . Added asserts for valid flags in various functions to detect _some_ misuses , BUT NOT ALL .
- 2024 / 05 / 16 ( 1.90 .7 ) - inputs : on macOS X , Cmd and Ctrl keys are now automatically swapped by io . AddKeyEvent ( ) as this naturally align with how macOS X uses those keys .
- 2024 / 05 / 16 ( 1.90 .7 ) - inputs : on macOS X , Cmd and Ctrl keys are now automatically swapped by io . AddKeyEvent ( ) as this naturally align with how macOS X uses those keys .
- it shouldn ' t really affect you unless you had custom shortcut swapping in place for macOS X apps .
- it shouldn ' t really affect you unless you had custom shortcut swapping in place for macOS X apps .
- removed ImGuiMod_Shortcut which was previously dynamically remapping to Ctrl or Cmd / Super . It is now unnecessary to specific cross - platform idiomatic shortcuts . ( # 2343 , # 4084 , # 5923 , # 456 )
- removed ImGuiMod_Shortcut which was previously dynamically remapping to Ctrl or Cmd / Super . It is now unnecessary to specific cross - platform idiomatic shortcuts . ( # 2343 , # 4084 , # 5923 , # 456 )
@ -8641,7 +8646,7 @@ static bool IsKeyChordPotentiallyCharInput(ImGuiKeyChord key_chord)
// - Routes and key ownership are attributed at the beginning of next frame based on best score and mod state.
// - Routes and key ownership are attributed at the beginning of next frame based on best score and mod state.
// (Conceptually this does a "Submit for next frame" + "Test for current frame".
// (Conceptually this does a "Submit for next frame" + "Test for current frame".
// As such, it could be called TrySetXXX or SubmitXXX, or the Submit and Test operations should be separate.)
// As such, it could be called TrySetXXX or SubmitXXX, or the Submit and Test operations should be separate.)
bool ImGui : : SetShortcutRouting ( ImGuiKeyChord key_chord , ImGuiID owner_id , ImGuiInputFlags flags )
bool ImGui : : SetShortcutRouting ( ImGuiKeyChord key_chord , ImGuiInputFlags flags , ImGuiID owner_id )
{
{
ImGuiContext & g = * GImGui ;
ImGuiContext & g = * GImGui ;
if ( ( flags & ImGuiInputFlags_RouteTypeMask_ ) = = 0 )
if ( ( flags & ImGuiInputFlags_RouteTypeMask_ ) = = 0 )
@ -8664,7 +8669,7 @@ bool ImGui::SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiI
// Note how ImGuiInputFlags_RouteAlways won't set routing and thus won't set owner. May want to rework this?
// Note how ImGuiInputFlags_RouteAlways won't set routing and thus won't set owner. May want to rework this?
if ( flags & ImGuiInputFlags_RouteAlways )
if ( flags & ImGuiInputFlags_RouteAlways )
{
{
IMGUI_DEBUG_LOG_INPUTROUTING ( " SetShortcutRouting(%s, owner_id=0x%08X, flags=%04 X) -> always, no register \n " , GetKeyChordName ( key_chord ) , owner_id , flags ) ;
IMGUI_DEBUG_LOG_INPUTROUTING ( " SetShortcutRouting(%s, flags=%04X, owner_id=0x%08X) -> always, no register \n " , GetKeyChordName ( key_chord ) , flags , owner_id ) ;
return true ;
return true ;
}
}
@ -8678,7 +8683,7 @@ bool ImGui::SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiI
// (We cannot filter based on io.InputQueueCharacters[] contents because of trickling and key<>chars submission order are undefined)
// (We cannot filter based on io.InputQueueCharacters[] contents because of trickling and key<>chars submission order are undefined)
if ( ( flags & ImGuiInputFlags_RouteFocused ) & & g . IO . WantTextInput & & IsKeyChordPotentiallyCharInput ( key_chord ) )
if ( ( flags & ImGuiInputFlags_RouteFocused ) & & g . IO . WantTextInput & & IsKeyChordPotentiallyCharInput ( key_chord ) )
{
{
IMGUI_DEBUG_LOG_INPUTROUTING ( " SetShortcutRouting(%s, owner_id=0x%08X, flags=%04 X) -> filtered as potential char input \n " , GetKeyChordName ( key_chord ) , owner_id , flags ) ;
IMGUI_DEBUG_LOG_INPUTROUTING ( " SetShortcutRouting(%s, flags=%04X, owner_id=0x%08X) -> filtered as potential char input \n " , GetKeyChordName ( key_chord ) , flags , owner_id ) ;
return false ;
return false ;
}
}
@ -8695,7 +8700,7 @@ bool ImGui::SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiI
// FIXME-SHORTCUT: A way to configure the location/focus-scope to test would render this more flexible.
// FIXME-SHORTCUT: A way to configure the location/focus-scope to test would render this more flexible.
const int score = CalcRoutingScore ( g . CurrentFocusScopeId , owner_id , flags ) ;
const int score = CalcRoutingScore ( g . CurrentFocusScopeId , owner_id , flags ) ;
IMGUI_DEBUG_LOG_INPUTROUTING ( " SetShortcutRouting(%s, owner_id=0x%08X, flags=%04 X) -> score %d \n " , GetKeyChordName ( key_chord ) , owner_id , flags , score ) ;
IMGUI_DEBUG_LOG_INPUTROUTING ( " SetShortcutRouting(%s, flags=%04X, owner_id=0x%08X) -> score %d \n " , GetKeyChordName ( key_chord ) , flags , owner_id , score ) ;
if ( score = = 255 )
if ( score = = 255 )
return false ;
return false ;
@ -9671,10 +9676,10 @@ void ImGui::SetNextItemShortcut(ImGuiKeyChord key_chord)
g . NextItemData . Shortcut = key_chord ;
g . NextItemData . Shortcut = key_chord ;
}
}
bool ImGui : : Shortcut ( ImGuiKeyChord key_chord , ImGuiID owner_id , ImGuiInputFlags flags )
bool ImGui : : Shortcut ( ImGuiKeyChord key_chord , ImGuiInputFlags flags , ImGuiID owner_id )
{
{
//ImGuiContext& g = *GImGui;
//ImGuiContext& g = *GImGui;
//IMGUI_DEBUG_LOG("Shortcut(%s, owner_id=0x%08X, flags=% X)\n", GetKeyChordName(key_chord, g.TempBuffer.Data, g.TempBuffer.Size), owner_id, flags );
//IMGUI_DEBUG_LOG("Shortcut(%s, flags=%X, owner_id=0x%08X)\n", GetKeyChordName(key_chord, g.TempBuffer.Data, g.TempBuffer.Size), flags, owner_id);
// When using (owner_id == 0/Any): SetShortcutRouting() will use CurrentFocusScopeId and filter with this, so IsKeyPressed() is fine with he 0/Any.
// When using (owner_id == 0/Any): SetShortcutRouting() will use CurrentFocusScopeId and filter with this, so IsKeyPressed() is fine with he 0/Any.
if ( ( flags & ImGuiInputFlags_RouteTypeMask_ ) = = 0 )
if ( ( flags & ImGuiInputFlags_RouteTypeMask_ ) = = 0 )
@ -9686,7 +9691,7 @@ bool ImGui::Shortcut(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiInputFlags
owner_id = GetRoutingIdFromOwnerId ( owner_id ) ;
owner_id = GetRoutingIdFromOwnerId ( owner_id ) ;
// Submit route
// Submit route
if ( ! SetShortcutRouting ( key_chord , owner_id , flags ) )
if ( ! SetShortcutRouting ( key_chord , flags , owner_id ) )
return false ;
return false ;
// Default repeat behavior for Shortcut()
// Default repeat behavior for Shortcut()
@ -10001,7 +10006,7 @@ static void ItemHandleShortcut(ImGuiID id)
{
{
// FIXME: Generalize Activation queue?
// FIXME: Generalize Activation queue?
ImGuiContext & g = * GImGui ;
ImGuiContext & g = * GImGui ;
if ( ImGui : : Shortcut ( g . NextItemData . Shortcut , id , ImGuiInputFlags_None ) & & g . NavActivateId = = 0 )
if ( ImGui : : Shortcut ( g . NextItemData . Shortcut , ImGuiInputFlags_None , id ) & & g . NavActivateId = = 0 )
{
{
g . NavActivateId = id ; // Will effectively disable clipping.
g . NavActivateId = id ; // Will effectively disable clipping.
g . NavActivateFlags = ImGuiActivateFlags_PreferInput | ImGuiActivateFlags_FromShortcut ;
g . NavActivateFlags = ImGuiActivateFlags_PreferInput | ImGuiActivateFlags_FromShortcut ;
@ -12795,8 +12800,8 @@ static void ImGui::NavUpdateWindowing()
const ImGuiID owner_id = ImHashStr ( " ###NavUpdateWindowing " ) ;
const ImGuiID owner_id = ImHashStr ( " ###NavUpdateWindowing " ) ;
const bool nav_gamepad_active = ( io . ConfigFlags & ImGuiConfigFlags_NavEnableGamepad ) ! = 0 & & ( io . BackendFlags & ImGuiBackendFlags_HasGamepad ) ! = 0 ;
const bool nav_gamepad_active = ( io . ConfigFlags & ImGuiConfigFlags_NavEnableGamepad ) ! = 0 & & ( io . BackendFlags & ImGuiBackendFlags_HasGamepad ) ! = 0 ;
const bool nav_keyboard_active = ( io . ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard ) ! = 0 ;
const bool nav_keyboard_active = ( io . ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard ) ! = 0 ;
const bool keyboard_next_window = allow_windowing & & g . ConfigNavWindowingKeyNext & & Shortcut ( g . ConfigNavWindowingKeyNext , owner_id , ImGuiInputFlags_Repeat | ImGuiInputFlags_RouteAlways ) ;
const bool keyboard_next_window = allow_windowing & & g . ConfigNavWindowingKeyNext & & Shortcut ( g . ConfigNavWindowingKeyNext , ImGuiInputFlags_Repeat | ImGuiInputFlags_RouteAlways , owner_id ) ;
const bool keyboard_prev_window = allow_windowing & & g . ConfigNavWindowingKeyPrev & & Shortcut ( g . ConfigNavWindowingKeyPrev , owner_id , ImGuiInputFlags_Repeat | ImGuiInputFlags_RouteAlways ) ;
const bool keyboard_prev_window = allow_windowing & & g . ConfigNavWindowingKeyPrev & & Shortcut ( g . ConfigNavWindowingKeyPrev , ImGuiInputFlags_Repeat | ImGuiInputFlags_RouteAlways , owner_id ) ;
const bool start_windowing_with_gamepad = allow_windowing & & nav_gamepad_active & & ! g . NavWindowingTarget & & IsKeyPressed ( ImGuiKey_NavGamepadMenu , 0 , ImGuiInputFlags_None ) ;
const bool start_windowing_with_gamepad = allow_windowing & & nav_gamepad_active & & ! g . NavWindowingTarget & & IsKeyPressed ( ImGuiKey_NavGamepadMenu , 0 , ImGuiInputFlags_None ) ;
const bool start_windowing_with_keyboard = allow_windowing & & ! g . NavWindowingTarget & & ( keyboard_next_window | | keyboard_prev_window ) ; // Note: enabled even without NavEnableKeyboard!
const bool start_windowing_with_keyboard = allow_windowing & & ! g . NavWindowingTarget & & ( keyboard_next_window | | keyboard_prev_window ) ; // Note: enabled even without NavEnableKeyboard!
if ( start_windowing_with_gamepad | | start_windowing_with_keyboard )
if ( start_windowing_with_gamepad | | start_windowing_with_keyboard )
@ -15844,7 +15849,7 @@ void ImGui::ShowIDStackToolWindow(bool* p_open)
Checkbox ( " Ctrl+C: copy path to clipboard " , & tool - > CopyToClipboardOnCtrlC ) ;
Checkbox ( " Ctrl+C: copy path to clipboard " , & tool - > CopyToClipboardOnCtrlC ) ;
SameLine ( ) ;
SameLine ( ) ;
TextColored ( ( time_since_copy > = 0.0f & & time_since_copy < 0.75f & & ImFmod ( time_since_copy , 0.25f ) < 0.25f * 0.5f ) ? ImVec4 ( 1.f , 1.f , 0.3f , 1.f ) : ImVec4 ( ) , " *COPIED* " ) ;
TextColored ( ( time_since_copy > = 0.0f & & time_since_copy < 0.75f & & ImFmod ( time_since_copy , 0.25f ) < 0.25f * 0.5f ) ? ImVec4 ( 1.f , 1.f , 0.3f , 1.f ) : ImVec4 ( ) , " *COPIED* " ) ;
if ( tool - > CopyToClipboardOnCtrlC & & Shortcut ( ImGuiMod_Ctrl | ImGuiKey_C , 0 , ImGuiInputFlags_RouteGlobalOverFocused ) )
if ( tool - > CopyToClipboardOnCtrlC & & Shortcut ( ImGuiMod_Ctrl | ImGuiKey_C , ImGuiInputFlags_RouteGlobalOverFocused ) )
{
{
tool - > CopyToClipboardLastTime = ( float ) g . Time ;
tool - > CopyToClipboardLastTime = ( float ) g . Time ;
char * p = g . TempBuffer . Data ;
char * p = g . TempBuffer . Data ;