diff options
| author | Rémi Verschelde | 2016-05-18 08:21:16 +0200 |
|---|---|---|
| committer | Rémi Verschelde | 2016-05-18 08:21:16 +0200 |
| commit | 5d2a23d99cc58eaa0e33fe78ed3bbbbc2f0970fc (patch) | |
| tree | 86ddd6d12574db7707eba954af628733f1631cc7 /scene/gui/item_list.cpp | |
| parent | 9ed2084b420ef39d1ed2330047def39224b8a3ce (diff) | |
| download | godot-5d2a23d99cc58eaa0e33fe78ed3bbbbc2f0970fc.tar.gz godot-5d2a23d99cc58eaa0e33fe78ed3bbbbc2f0970fc.tar.zst godot-5d2a23d99cc58eaa0e33fe78ed3bbbbc2f0970fc.zip | |
Revert "Revert "-make sure single select after multi select works better""
This reverts commit 9ed2084b420ef39d1ed2330047def39224b8a3ce.
Will then add the proper fix.
Diffstat (limited to 'scene/gui/item_list.cpp')
| -rw-r--r-- | scene/gui/item_list.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp index 462423d30..51d89e3da 100644 --- a/scene/gui/item_list.cpp +++ b/scene/gui/item_list.cpp @@ -278,6 +278,7 @@ void ItemList::remove_item(int p_idx){ items.remove(p_idx); update(); shape_changed=true; + defer_select_single=-1; } @@ -288,6 +289,7 @@ void ItemList::clear(){ current=-1; ensure_selected_visible=false; update(); + defer_select_single=-1; } @@ -365,6 +367,20 @@ Size2 ItemList::get_min_icon_size() const { void ItemList::_input_event(const InputEvent& p_event) { + + if (defer_select_single>=0 && p_event.type==InputEvent::MOUSE_MOTION) { + defer_select_single=-1; + return; + } + if (defer_select_single>=0 && p_event.type==InputEvent::MOUSE_BUTTON && p_event.mouse_button.button_index==BUTTON_LEFT && !p_event.mouse_button.pressed) { + + select(defer_select_single,true); + + emit_signal("multi_selected",defer_select_single,true); + defer_select_single=-1; + return; + } + if (p_event.type==InputEvent::MOUSE_BUTTON && p_event.mouse_button.button_index==BUTTON_LEFT && p_event.mouse_button.pressed) { const InputEventMouseButton &mb = p_event.mouse_button; @@ -418,7 +434,13 @@ void ItemList::_input_event(const InputEvent& p_event) { emit_signal("multi_selected",i,true); } } else { + + if (!mb.mod.command && select_mode==SELECT_MULTI && items[i].selectable && items[i].selected) { + defer_select_single=i; + return; + } bool selected = !items[i].selected; + select(i,select_mode==SELECT_SINGLE || !mb.mod.command); if (selected) { if (select_mode==SELECT_SINGLE) { @@ -1142,6 +1164,7 @@ ItemList::ItemList() { current_columns=1; search_time_msec=0; ensure_selected_visible=false; + defer_select_single=-1; } |
