RangeSelect/MultiSelect: Added IMGUI_HAS_MULTI_SELECT define. Fixed right-click toggling selection without clearing active id, could lead to MarkItemEdited() asserting. Fixed demo.

features/range_select
omar ago%!(EXTRA string=6 years) committed by ocornut
parent 1480619c41
commit 4e5d65bc07
  1. 2
      imgui.h
  2. 1
      imgui_internal.h
  3. 4
      imgui_widgets.cpp

@ -2659,6 +2659,8 @@ struct ImColor
// [SECTION] Multi-Select API flags and structures (ImGuiMultiSelectFlags, ImGuiMultiSelectData)
//-----------------------------------------------------------------------------
#define IMGUI_HAS_MULTI_SELECT // Multi-Select/Range-Select WIP branch // <-- This is currently _not_ in the top of imgui.h to prevent merge conflicts.
// Flags for BeginMultiSelect().
// This system is designed to allow mouse/keyboard multi-selection, including support for range-selection (SHIFT + click) which is difficult to re-implement manually.
// If you disable multi-selection with ImGuiMultiSelectFlags_NoMultiSelect (which is provided for consistency and flexibility), the whole BeginMultiSelect() system

@ -1710,7 +1710,6 @@ struct ImGuiOldColumns
// We always assume that -1 is an invalid value (which works for indices and pointers)
#define ImGuiSelectionUserData_Invalid ((ImGuiSelectionUserData)-1)
#define IMGUI_HAS_MULTI_SELECT 1
#ifdef IMGUI_HAS_MULTI_SELECT
struct IMGUI_API ImGuiMultiSelectState

@ -7141,7 +7141,9 @@ void ImGui::MultiSelectItemFooter(ImGuiID id, bool* p_selected, bool* p_pressed)
bool hovered = IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup);
if (hovered && IsMouseClicked(1))
{
SetFocusID(g.LastItemData.ID, window);
if (g.ActiveId != 0 && g.ActiveId != id)
ClearActiveID();
SetFocusID(id, window);
if (!pressed && !selected)
{
pressed = true;

Loading…
Cancel
Save