Przeglądaj źródła

InputText: Fixed an edge case crash that would happen if another widget sharing the same ID is being swapped with an InputText that has yet to be activated.

omar 6 lat temu
rodzic
commit
cc3be5d428
2 zmienionych plików z 6 dodań i 0 usunięć
  1. 2 0
      docs/CHANGELOG.txt
  2. 4 0
      imgui_widgets.cpp

+ 2 - 0
docs/CHANGELOG.txt

@@ -38,6 +38,8 @@ Other Changes:
 - InputInt, InputFloat, InputScalar: Fix to keep the label of the +/- buttons centered when
 - InputInt, InputFloat, InputScalar: Fix to keep the label of the +/- buttons centered when
   style.FramePadding.x is abnormally larger than style.FramePadding.y. Since the buttons are
   style.FramePadding.x is abnormally larger than style.FramePadding.y. Since the buttons are
   meant to be square (to align with e.g. color button) we always use FramePadding.y. (#2367)
   meant to be square (to align with e.g. color button) we always use FramePadding.y. (#2367)
+- InputText: Fixed an edge case crash that would happen if another widget sharing the same ID
+  is being swapped with an InputText that has yet to be activated.
 - Examples: OpenGL: Fix for OSX not supporting OpenGL 4.5, we don't try to read GL_CLIP_ORIGIN
 - Examples: OpenGL: Fix for OSX not supporting OpenGL 4.5, we don't try to read GL_CLIP_ORIGIN
   even if the OpenGL headers/loader happens to define the value. (#2366, #2186)
   even if the OpenGL headers/loader happens to define the value. (#2366, #2186)
 
 

+ 4 - 0
imgui_widgets.cpp

@@ -3278,6 +3278,10 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
         clear_active_id = true;
         clear_active_id = true;
     }
     }
 
 
+    // We have an edge case if ActiveId was set through another widget (e.g. widget being swapped)
+    if (g.ActiveId == id && state == NULL)
+        ClearActiveID();
+
     bool value_changed = false;
     bool value_changed = false;
     bool enter_pressed = false;
     bool enter_pressed = false;
     int backup_current_text_length = 0;
     int backup_current_text_length = 0;