aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde2016-05-18 08:21:16 +0200
committerRémi Verschelde2016-05-18 08:21:16 +0200
commit5d2a23d99cc58eaa0e33fe78ed3bbbbc2f0970fc (patch)
tree86ddd6d12574db7707eba954af628733f1631cc7
parent9ed2084b420ef39d1ed2330047def39224b8a3ce (diff)
downloadgodot-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.
-rw-r--r--scene/gui/item_list.cpp23
-rw-r--r--scene/gui/item_list.h2
-rw-r--r--tools/editor/editor_file_system.h2
-rw-r--r--tools/editor/editor_import_export.h2
4 files changed, 27 insertions, 2 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;
}
diff --git a/scene/gui/item_list.h b/scene/gui/item_list.h
index bd3cf6484..850bf335f 100644
--- a/scene/gui/item_list.h
+++ b/scene/gui/item_list.h
@@ -59,6 +59,8 @@ private:
int max_columns;
Size2 min_icon_size;
+ int defer_select_single;
+
void _scroll_changed(double);
void _input_event(const InputEvent& p_event);
protected:
diff --git a/tools/editor/editor_file_system.h b/tools/editor/editor_file_system.h
index d11fa0cfb..254dd68c1 100644
--- a/tools/editor/editor_file_system.h
+++ b/tools/editor/editor_file_system.h
@@ -36,7 +36,7 @@
#include "os/thread_safe.h"
class FileAccess;
-class EditorProgressBG;
+struct EditorProgressBG;
class EditorFileSystemDirectory : public Object {
OBJ_TYPE( EditorFileSystemDirectory,Object );
diff --git a/tools/editor/editor_import_export.h b/tools/editor/editor_import_export.h
index 6fc644acc..9170e3726 100644
--- a/tools/editor/editor_import_export.h
+++ b/tools/editor/editor_import_export.h
@@ -36,7 +36,7 @@
class EditorExportPlatform;
class FileAccess;
-class EditorProgress;
+struct EditorProgress;
class EditorImportPlugin : public Reference {