mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20:51:06 +01:00 
			
		
		
		
	Merged from Navigation branch. TAB/Alt-TAB processing now deactivate if holding Ctrl.
This commit is contained in:
		
							
								
								
									
										19
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -1977,7 +1977,7 @@ bool ImGui::IsHovered(const ImRect& bb, ImGuiID id, bool flatten_childs) | |||||||
|     return false; |     return false; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::FocusableItemRegister(ImGuiWindow* window, bool is_active, bool tab_stop) | bool ImGui::FocusableItemRegister(ImGuiWindow* window, ImGuiID id, bool tab_stop) | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|  |  | ||||||
| @@ -1986,13 +1986,10 @@ bool ImGui::FocusableItemRegister(ImGuiWindow* window, bool is_active, bool tab_ | |||||||
|     if (allow_keyboard_focus) |     if (allow_keyboard_focus) | ||||||
|         window->FocusIdxTabCounter++; |         window->FocusIdxTabCounter++; | ||||||
|  |  | ||||||
|     // Process keyboard input at this point: TAB, Shift-TAB switch focus |     // Process keyboard input at this point: TAB/Shift-TAB to tab out of the currently focused item. | ||||||
|     // We can always TAB out of a widget that doesn't allow tabbing in. |     // Note that we can always TAB out of a widget that doesn't allow tabbing in. | ||||||
|     if (tab_stop && window->FocusIdxAllRequestNext == INT_MAX && window->FocusIdxTabRequestNext == INT_MAX && is_active && IsKeyPressedMap(ImGuiKey_Tab)) |     if (tab_stop && (g.ActiveId == id) && window->FocusIdxAllRequestNext == INT_MAX && window->FocusIdxTabRequestNext == INT_MAX && !g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab)) | ||||||
|     { |         window->FocusIdxTabRequestNext = window->FocusIdxTabCounter + (g.IO.KeyShift ? (allow_keyboard_focus ? -1 : 0) : +1); // Modulo on index will be applied at the end of frame once we've got the total counter of items. | ||||||
|         // Modulo on index will be applied at the end of frame once we've got the total counter of items. |  | ||||||
|         window->FocusIdxTabRequestNext = window->FocusIdxTabCounter + (g.IO.KeyShift ? (allow_keyboard_focus ? -1 : 0) : +1); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if (window->FocusIdxAllCounter == window->FocusIdxAllRequestCurrent) |     if (window->FocusIdxAllCounter == window->FocusIdxAllRequestCurrent) | ||||||
|         return true; |         return true; | ||||||
| @@ -6715,7 +6712,7 @@ bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, c | |||||||
|  |  | ||||||
|     // Tabbing or CTRL-clicking on Slider turns it into an input box |     // Tabbing or CTRL-clicking on Slider turns it into an input box | ||||||
|     bool start_text_input = false; |     bool start_text_input = false; | ||||||
|     const bool tab_focus_requested = FocusableItemRegister(window, g.ActiveId == id); |     const bool tab_focus_requested = FocusableItemRegister(window, id); | ||||||
|     if (tab_focus_requested || (hovered && g.IO.MouseClicked[0])) |     if (tab_focus_requested || (hovered && g.IO.MouseClicked[0])) | ||||||
|     { |     { | ||||||
|         SetActiveID(id, window); |         SetActiveID(id, window); | ||||||
| @@ -7013,7 +7010,7 @@ bool ImGui::DragFloat(const char* label, float* v, float v_speed, float v_min, f | |||||||
|  |  | ||||||
|     // Tabbing or CTRL-clicking on Drag turns it into an input box |     // Tabbing or CTRL-clicking on Drag turns it into an input box | ||||||
|     bool start_text_input = false; |     bool start_text_input = false; | ||||||
|     const bool tab_focus_requested = FocusableItemRegister(window, g.ActiveId == id); |     const bool tab_focus_requested = FocusableItemRegister(window, id); | ||||||
|     if (tab_focus_requested || (hovered && (g.IO.MouseClicked[0] | g.IO.MouseDoubleClicked[0]))) |     if (tab_focus_requested || (hovered && (g.IO.MouseClicked[0] | g.IO.MouseDoubleClicked[0]))) | ||||||
|     { |     { | ||||||
|         SetActiveID(id, window); |         SetActiveID(id, window); | ||||||
| @@ -7818,7 +7815,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2 | |||||||
|     // NB: we are only allowed to access 'edit_state' if we are the active widget. |     // NB: we are only allowed to access 'edit_state' if we are the active widget. | ||||||
|     ImGuiTextEditState& edit_state = g.InputTextState; |     ImGuiTextEditState& edit_state = g.InputTextState; | ||||||
|  |  | ||||||
|     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 = FocusableItemRegister(window, 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_code = focus_requested && (window->FocusIdxAllCounter == window->FocusIdxAllRequestCurrent); | ||||||
|     const bool focus_requested_by_tab = focus_requested && !focus_requested_by_code; |     const bool focus_requested_by_tab = focus_requested && !focus_requested_by_code; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -756,7 +756,7 @@ namespace ImGui | |||||||
|     IMGUI_API bool          ItemAdd(const ImRect& bb, const ImGuiID* id); |     IMGUI_API bool          ItemAdd(const ImRect& bb, const ImGuiID* id); | ||||||
|     IMGUI_API bool          IsClippedEx(const ImRect& bb, const ImGuiID* id, bool clip_even_when_logged); |     IMGUI_API bool          IsClippedEx(const ImRect& bb, const ImGuiID* id, bool clip_even_when_logged); | ||||||
|     IMGUI_API bool          IsHovered(const ImRect& bb, ImGuiID id, bool flatten_childs = false); |     IMGUI_API bool          IsHovered(const ImRect& bb, ImGuiID id, bool flatten_childs = false); | ||||||
|     IMGUI_API bool          FocusableItemRegister(ImGuiWindow* window, bool is_active, bool tab_stop = true);      // Return true if focus is requested |     IMGUI_API bool          FocusableItemRegister(ImGuiWindow* window, ImGuiID id, bool tab_stop = true);      // Return true if focus is requested | ||||||
|     IMGUI_API void          FocusableItemUnregister(ImGuiWindow* window); |     IMGUI_API void          FocusableItemUnregister(ImGuiWindow* window); | ||||||
|     IMGUI_API ImVec2        CalcItemSize(ImVec2 size, float default_x, float default_y); |     IMGUI_API ImVec2        CalcItemSize(ImVec2 size, float default_x, float default_y); | ||||||
|     IMGUI_API float         CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x); |     IMGUI_API float         CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user