Browse Source

Docking: Fixed IsItemHovered() and functions depending on it (e.g. BeginPopupContextItem()) when called after Begin() on a docked window (#3851)

Fix ee643b2a
ocornut 4 năm trước cách đây
mục cha
commit
ca097c2c68
2 tập tin đã thay đổi với 7 bổ sung0 xóa
  1. 2 0
      docs/CHANGELOG.txt
  2. 5 0
      imgui_widgets.cpp

+ 2 - 0
docs/CHANGELOG.txt

@@ -154,6 +154,8 @@ Docking+Viewports Branch:
   docking hierarchy. Added ImGuiHoveredFlags_DockHierarchy flag to consider docking hierarchy in the test.
   docking hierarchy. Added ImGuiHoveredFlags_DockHierarchy flag to consider docking hierarchy in the test.
 - Nav: Fixed an issue with losing focus on docked windows when pressing Alt while keyboard navigation
 - Nav: Fixed an issue with losing focus on docked windows when pressing Alt while keyboard navigation
   is disabled. (#4547, #4439) [@PathogenDavid]
   is disabled. (#4547, #4439) [@PathogenDavid]
+- Docking: Fixed IsItemHovered() and functions depending on it (e.g. BeginPopupContextItem()) when
+  called after Begin() on a docked window (broken 2021/03/04). (#3851)
 - Docking: Improved resizing system so that non-central zone are better at keeping their fixed size.
 - Docking: Improved resizing system so that non-central zone are better at keeping their fixed size.
   The algorithm is still not handling the repartition of size idealy for nested sibling, but it got better.
   The algorithm is still not handling the repartition of size idealy for nested sibling, but it got better.
 - Docking: Fixed settings load issue when mouse wheeling. (#4310)
 - Docking: Fixed settings load issue when mouse wheeling. (#4310)

+ 5 - 0
imgui_widgets.cpp

@@ -8158,6 +8158,11 @@ bool    ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open,
         TabBarCloseTab(tab_bar, tab);
         TabBarCloseTab(tab_bar, tab);
     }
     }
 
 
+    // Forward Hovered state so IsItemHovered() after Begin() can work (even though we are technically hovering our parent)
+    // That state is copied to window->DockTabItemStatusFlags by our caller.
+    if (docked_window && (hovered || g.HoveredId == close_button_id))
+        g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_HoveredWindow;
+
     // Restore main window position so user can draw there
     // Restore main window position so user can draw there
     if (want_clip_rect)
     if (want_clip_rect)
         PopClipRect();
         PopClipRect();