@ -787,6 +787,12 @@ ImGuiIO::ImGuiIO()
GetClipboardTextFn = GetClipboardTextFn_DefaultImpl ; // Platform dependent default implementations
SetClipboardTextFn = SetClipboardTextFn_DefaultImpl ;
ImeSetInputScreenPosFn = ImeSetInputScreenPosFn_DefaultImpl ;
// Set OS X style defaults based on __APPLE__ compile time flag
# ifdef __APPLE__
WordMovementUsesAltKey = true ; // Text editing cursor movement using Alt instead of Ctrl
ShortcutsUseSuperKey = true ; // Shortcuts using Cmd/Super instead of Ctrl
# endif
}
// Pass in translated ASCII characters for text input.
@ -7320,6 +7326,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
const bool is_ctrl_down = io . KeyCtrl ;
const bool is_shift_down = io . KeyShift ;
const bool is_alt_down = io . KeyAlt ;
const bool is_super_down = io . KeySuper ;
const bool focus_requested = FocusableItemRegister ( window , g . ActiveId = = id , ( flags & ( ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_AllowTabInput ) ) = = 0 ) ; // Using completion callback disable keyboard tabbing
const bool focus_requested_by_code = focus_requested & & ( window - > FocusIdxAllCounter = = window - > FocusIdxAllRequestCurrent ) ;
const bool focus_requested_by_tab = focus_requested & & ! focus_requested_by_code ;
@ -7449,9 +7456,11 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
// Handle various key-presses
bool cancel_edit = false ;
const int k_mask = ( is_shift_down ? STB_TEXTEDIT_K_SHIFT : 0 ) ;
const bool is_ctrl_only = is_ctrl_down & & ! is_alt_down & & ! is_shift_down ;
if ( IsKeyPressedMap ( ImGuiKey_LeftArrow ) ) { edit_state . OnKeyPressed ( is_ctrl_down ? STB_TEXTEDIT_K_WORDLEFT | k_mask : STB_TEXTEDIT_K_LEFT | k_mask ) ; }
else if ( IsKeyPressedMap ( ImGuiKey_RightArrow ) ) { edit_state . OnKeyPressed ( is_ctrl_down ? STB_TEXTEDIT_K_WORDRIGHT | k_mask : STB_TEXTEDIT_K_RIGHT | k_mask ) ; }
const bool is_shortcutkey_only = ( io . ShortcutsUseSuperKey ? ( is_super_down & & ! is_alt_down & & ! is_shift_down & & ! is_ctrl_down ) : ( is_ctrl_down & & ! is_alt_down & & ! is_shift_down & & ! is_super_down ) ) ;
const bool is_wordmove_key_down = ( io . WordMovementUsesAltKey ? io . KeyAlt : io . KeyCtrl ) ;
if ( IsKeyPressedMap ( ImGuiKey_LeftArrow ) ) { edit_state . OnKeyPressed ( is_wordmove_key_down ? STB_TEXTEDIT_K_WORDLEFT | k_mask : STB_TEXTEDIT_K_LEFT | k_mask ) ; }
else if ( IsKeyPressedMap ( ImGuiKey_RightArrow ) ) { edit_state . OnKeyPressed ( is_wordmove_key_down ? STB_TEXTEDIT_K_WORDRIGHT | k_mask : STB_TEXTEDIT_K_RIGHT | k_mask ) ; }
else if ( is_multiline & & IsKeyPressedMap ( ImGuiKey_UpArrow ) ) { if ( is_ctrl_down ) SetWindowScrollY ( draw_window , draw_window - > Scroll . y - g . FontSize ) ; else edit_state . OnKeyPressed ( STB_TEXTEDIT_K_UP | k_mask ) ; }
else if ( is_multiline & & IsKeyPressedMap ( ImGuiKey_DownArrow ) ) { if ( is_ctrl_down ) SetWindowScrollY ( draw_window , draw_window - > Scroll . y + g . FontSize ) ; else edit_state . OnKeyPressed ( STB_TEXTEDIT_K_DOWN | k_mask ) ; }
else if ( IsKeyPressedMap ( ImGuiKey_Home ) ) { edit_state . OnKeyPressed ( is_ctrl_down ? STB_TEXTEDIT_K_TEXTSTART | k_mask : STB_TEXTEDIT_K_LINESTART | k_mask ) ; }
@ -7479,11 +7488,11 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
if ( InputTextFilterCharacter ( & c , flags , callback , user_data ) )
edit_state . OnKeyPressed ( ( int ) c ) ;
}
else if ( IsKeyPressedMap ( ImGuiKey_Escape ) ) { SetActiveID ( 0 ) ; cancel_edit = true ; }
else if ( is_ ctrl _only & & IsKeyPressedMap ( ImGuiKey_Z ) & & is_editable ) { edit_state . OnKeyPressed ( STB_TEXTEDIT_K_UNDO ) ; edit_state . ClearSelection ( ) ; }
else if ( is_ ctrl _only & & IsKeyPressedMap ( ImGuiKey_Y ) & & is_editable ) { edit_state . OnKeyPressed ( STB_TEXTEDIT_K_REDO ) ; edit_state . ClearSelection ( ) ; }
else if ( is_ ctrl _only & & IsKeyPressedMap ( ImGuiKey_A ) ) { edit_state . SelectAll ( ) ; edit_state . CursorFollow = true ; }
else if ( is_ ctrl _only & & ! is_password & & ( ( IsKeyPressedMap ( ImGuiKey_X ) & & is_editable ) | | IsKeyPressedMap ( ImGuiKey_C ) ) & & ( ! is_multiline | | edit_state . HasSelection ( ) ) )
else if ( IsKeyPressedMap ( ImGuiKey_Escape ) ) { SetActiveID ( 0 ) ; cancel_edit = true ; }
else if ( is_ shortcutkey _only & & IsKeyPressedMap ( ImGuiKey_Z ) & & is_editable ) { edit_state . OnKeyPressed ( STB_TEXTEDIT_K_UNDO ) ; edit_state . ClearSelection ( ) ; }
else if ( is_ shortcutkey _only & & IsKeyPressedMap ( ImGuiKey_Y ) & & is_editable ) { edit_state . OnKeyPressed ( STB_TEXTEDIT_K_REDO ) ; edit_state . ClearSelection ( ) ; }
else if ( is_ shortcutkey _only & & IsKeyPressedMap ( ImGuiKey_A ) ) { edit_state . SelectAll ( ) ; edit_state . CursorFollow = true ; }
else if ( is_ shortcutkey _only & & ! is_password & & ( ( IsKeyPressedMap ( ImGuiKey_X ) & & is_editable ) | | IsKeyPressedMap ( ImGuiKey_C ) ) & & ( ! is_multiline | | edit_state . HasSelection ( ) ) )
{
// Cut, Copy
const bool cut = IsKeyPressedMap ( ImGuiKey_X ) ;
@ -7505,7 +7514,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
stb_textedit_cut ( & edit_state , & edit_state . StbState ) ;
}
}
else if ( is_ ctrl _only & & IsKeyPressedMap ( ImGuiKey_V ) & & is_editable )
else if ( is_ shortcutkey _only & & IsKeyPressedMap ( ImGuiKey_V ) & & is_editable )
{
// Paste
if ( g . IO . GetClipboardTextFn )