Removed leftover KeepAliveID() call in GetIDWithSeed() variant. (#5181) + doc tweaks.
diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt
index 1ae3b08..99b8906 100644
--- a/docs/CHANGELOG.txt
+++ b/docs/CHANGELOG.txt
@@ -43,6 +43,8 @@
   automatically handling event capture. Examples that are using the OSX backend have removed
   all the now-unnecessary calls to ImGui_ImplOSX_HandleEvent(), applications can do as well.
   [@stuartcarnie] (#4821)
+- Internals: calling ButtonBehavior() without calling ItemAdd() now requires a KeepAliveID().
+  This is because the KeepAliveID() call was moved from GetID() to ItemAdd()). (#5181)
 
 Other Changes:
 
diff --git a/docs/EXAMPLES.md b/docs/EXAMPLES.md
index 94f78dc..b50595c 100644
--- a/docs/EXAMPLES.md
+++ b/docs/EXAMPLES.md
@@ -17,56 +17,60 @@
 
 Integration in a typical existing application, should take <20 lines when using standard backends.
 
-    At initialization:
-      call ImGui::CreateContext()
-      call ImGui_ImplXXXX_Init() for each backend.
+```cpp
+At initialization:
+  call ImGui::CreateContext()
+  call ImGui_ImplXXXX_Init() for each backend.
 
-    At the beginning of your frame:
-      call ImGui_ImplXXXX_NewFrame() for each backend.
-      call ImGui::NewFrame()
+At the beginning of your frame:
+  call ImGui_ImplXXXX_NewFrame() for each backend.
+  call ImGui::NewFrame()
 
-    At the end of your frame:
-      call ImGui::Render()
-      call ImGui_ImplXXXX_RenderDrawData() for your Renderer backend.
+At the end of your frame:
+  call ImGui::Render()
+  call ImGui_ImplXXXX_RenderDrawData() for your Renderer backend.
 
-    At shutdown:
-      call ImGui_ImplXXXX_Shutdown() for each backend.
-      call ImGui::DestroyContext()
+At shutdown:
+  call ImGui_ImplXXXX_Shutdown() for each backend.
+  call ImGui::DestroyContext()
+```
 
 Example (using [backends/imgui_impl_win32.cpp](https://github.com/ocornut/imgui/blob/master/backends/imgui_impl_win32.cpp) + [backends/imgui_impl_dx11.cpp](https://github.com/ocornut/imgui/blob/master/backends/imgui_impl_dx11.cpp)):
 
-    // Create a Dear ImGui context, setup some options
-    ImGui::CreateContext();
-    ImGuiIO& io = ImGui::GetIO();
-    io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable some options
+```cpp
+// Create a Dear ImGui context, setup some options
+ImGui::CreateContext();
+ImGuiIO& io = ImGui::GetIO();
+io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable some options
 
-    // Initialize Platform + Renderer backends (here: using imgui_impl_win32.cpp + imgui_impl_dx11.cpp)
-    ImGui_ImplWin32_Init(my_hwnd);
-    ImGui_ImplDX11_Init(my_d3d_device, my_d3d_device_context);
+// Initialize Platform + Renderer backends (here: using imgui_impl_win32.cpp + imgui_impl_dx11.cpp)
+ImGui_ImplWin32_Init(my_hwnd);
+ImGui_ImplDX11_Init(my_d3d_device, my_d3d_device_context);
 
-    // Application main loop
-    while (true)
-    {
-        // Beginning of frame: update Renderer + Platform backend, start Dear ImGui frame
-        ImGui_ImplDX11_NewFrame();
-        ImGui_ImplWin32_NewFrame();
-        ImGui::NewFrame();
+// Application main loop
+while (true)
+{
+    // Beginning of frame: update Renderer + Platform backend, start Dear ImGui frame
+    ImGui_ImplDX11_NewFrame();
+    ImGui_ImplWin32_NewFrame();
+    ImGui::NewFrame();
 
-        // Any application code here
-        ImGui::Text("Hello, world!");
+    // Any application code here
+    ImGui::Text("Hello, world!");
 
-        // End of frame: render Dear ImGui
-        ImGui::Render();
-        ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
+    // End of frame: render Dear ImGui
+    ImGui::Render();
+    ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
 
-        // Swap
-        g_pSwapChain->Present(1, 0);
-    }
+    // Swap
+    g_pSwapChain->Present(1, 0);
+}
 
-    // Shutdown
-    ImGui_ImplDX11_Shutdown();
-    ImGui_ImplWin32_Shutdown();
-    ImGui::DestroyContext();
+// Shutdown
+ImGui_ImplDX11_Shutdown();
+ImGui_ImplWin32_Shutdown();
+ImGui::DestroyContext();
+```
 
 Please read 'PROGRAMMER GUIDE' in imgui.cpp for notes on how to setup Dear ImGui in your codebase.
 Please read the comments and instruction at the top of each file.
diff --git a/imgui.cpp b/imgui.cpp
index f8a2375..f5408fa 100644
--- a/imgui.cpp
+++ b/imgui.cpp
@@ -400,7 +400,7 @@
  - 2022/01/10 (1.87) - inputs: reworked keyboard IO. Removed io.KeyMap[], io.KeysDown[] in favor of calling io.AddKeyEvent(). Removed GetKeyIndex(), now unecessary. All IsKeyXXX() functions now take ImGuiKey values. All features are still functional until IMGUI_DISABLE_OBSOLETE_KEYIO is defined. Read Changelog and Release Notes for details.
                         - IsKeyPressed(MY_NATIVE_KEY_XXX)              -> use IsKeyPressed(ImGuiKey_XXX)
                         - IsKeyPressed(GetKeyIndex(ImGuiKey_XXX))      -> use IsKeyPressed(ImGuiKey_XXX)
-                        - Backend writing to io.KeyMap[],io.KeysDown[] -> backend should call io.AddKeyEvent()
+                        - Backend writing to io.KeyMap[],io.KeysDown[] -> backend should call io.AddKeyEvent() (+ call io.SetKeyEventNativeData() if you want legacy user code to stil function with legacy key codes).
                         - Backend writing to io.KeyCtrl, io.KeyShift.. -> backend should call io.AddKeyEvent() with ImGuiKey_ModXXX values. *IF YOU PULLED CODE BETWEEN 2021/01/10 and 2021/01/27: We used to have a io.AddKeyModsEvent() function which was now replaced by io.AddKeyEvent() with ImGuiKey_ModXXX values.*
                      - one case won't work with backward compatibility: if your custom backend used ImGuiKey as mock native indices (e.g. "io.KeyMap[ImGuiKey_A] = ImGuiKey_A") because those values are now larger than the legacy KeyDown[] array. Will assert.
                      - inputs: added ImGuiKey_ModCtrl/ImGuiKey_ModShift/ImGuiKey_ModAlt/ImGuiKey_ModSuper values to submit keyboard modifiers using io.AddKeyEvent(), instead of writing directly to io.KeyCtrl, io.KeyShift, io.KeyAlt, io.KeySuper.
@@ -7439,7 +7439,6 @@
 ImGuiID ImGui::GetIDWithSeed(const char* str, const char* str_end, ImGuiID seed)
 {
     ImGuiID id = ImHashStr(str, str_end ? (str_end - str) : 0, seed);
-    KeepAliveID(id);
     ImGuiContext& g = *GImGui;
     if (g.DebugHookIdInfo == id)
         DebugHookIdInfo(id, ImGuiDataType_String, str, str_end);