Skip to content

popup of the combo widget will NOT show if combo widget is followed by a InputText widget #3102

@z16166

Description

@z16166

Version: 1.76
Branch: master
Back-ends: imgui_impl_win32.cpp + imgui_impl_dx9.cpp
Compiler: VS2019
Operating System: win10 x64 10.0.18363.752

My Issue/Question:

If a combo widget is followed by a InputText Widget, the popup of the combo widget will NOT show when left mouse button is clicked.

Possible solution:

edit imgui_widgets.cpp, change the code of line 1470,
from:
bool pressed = ButtonBehavior(frame_bb, id, &hovered, &held);
to:
bool pressed = ButtonBehavior(frame_bb, id, &hovered, &held, ImGuiButtonFlags_PressedOnClick);

Code to reproduce it:

    MSG msg;
    ZeroMemory(&msg, sizeof(msg));
    while (msg.message != WM_QUIT)
    {
        if (::PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
        {
            ::TranslateMessage(&msg);
            ::DispatchMessage(&msg);
            continue;
        }

        ImGui_ImplDX9_NewFrame();
        ImGui_ImplWin32_NewFrame();
        ImGui::NewFrame();

        {           
            ImGui::SetNextWindowPos(ImVec2(0, 0));
            ImGui::SetNextWindowSize(ImGui::GetIO().DisplaySize);

            bool windowStatus = true;
            ImGui::Begin("window title", &windowStatus, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings);

            ImGuiWindowFlags window_flags = 0;
            ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, 1.0f);
            ImGui::BeginChild("ChildR", ImVec2(0, 65), true, window_flags);
          
            ImGui::Text("Product");
            int total_w = ImGui::GetContentRegionAvail().x;
            ImGui::SameLine();
            ImGui::SetNextItemWidth(total_w- 65);

            static ImGuiComboFlags flags = ImGuiComboFlags_PopupAlignLeft;

            const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO" };
            static const char* item_current = items[0];
            if (ImGui::BeginCombo("", item_current, flags))
            {
                for (int n = 0; n < IM_ARRAYSIZE(items); n++)
                {
                    bool is_selected = (item_current == items[n]);
                    if (ImGui::Selectable(items[n], is_selected))
                        item_current = items[n];
                    if (is_selected)
                        ImGui::SetItemDefaultFocus();
                }
                ImGui::EndCombo();
            }


            ImGui::Text("number ");
            ImGui::SameLine();
            
            char s[128] = { "KKKTESTTEST" };
            ImGui::InputText("", s, _countof(s), ImGuiInputTextFlags_ReadOnly);

            ImGui::SameLine();
            total_w = ImGui::GetContentRegionAvail().x;
            
            ImGui::SetNextItemWidth(total_w);
            if (ImGui::Button("Copy"))
            {

            }
            ImGui::EndChild();
            ImGui::PopStyleVar();

            ImGui::End();

            if (!windowStatus)
                ::PostQuitMessage(0);
        }

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions