Giter Club home page Giter Club logo

Comments (2)

ocornut avatar ocornut commented on May 24, 2024

The problem is caused by the fact that on a Begin() call to append, we don't call this block:

// We fill last item data based on Title Bar/Tab, in order for IsItemHovered() and IsItemActive() to be usable after Begin().
// This is useful to allow creating context menus on title bar only, etc.
SetLastItemData(window->MoveId, g.CurrentItemFlags, IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max, false) ? ImGuiItemStatusFlags_HoveredRect : 0, title_bar_rect);

Therefore we inherit last value of g.LastItemData.ID & co.

There is special handling in IsItemHovered() to handle situation where a window is collapsed, leading all widgets (e.g. Button("123") to early out and therefore never write to this identifier.

We could perfectly compute title_bar_rect and copy the whole block in the else/appending case:

// When reusing window again multiple times a frame, just append content (don't need to setup again)
if (first_begin_of_the_frame)
{
    ....
}
else
{
   // Append
   SetCurrentWindow(window);

   ImRect title_bar_rect = window->TitleBarRect();
   SetLastItemData(window->MoveId, g.CurrentItemFlags, IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max, false) ? ImGuiItemStatusFlags_HoveredRect : 0, title_bar_rect);
}

That technically also fixes using e.g. IsItemHovered() right after an append-Begin():

ImGui::Begin("Another #7506 issue");
ImGui::End();
ImGui::Begin("Another #7506 issue");
if (ImGui::IsItemHovered())
    ImGui::SetTooltip("Hovering title bar!");
ImGui::End();

This is now fixed as well.

Actual fix goes through a function as the logic is longer in docking.
Pushed fa0120e

from imgui.

ocornut avatar ocornut commented on May 24, 2024

Added a regression test: ocornut/imgui_test_engine@fc5105f

from imgui.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.