浏览代码

-make sure single select after multi select works better
-fixed some warnings for OSX

Juan Linietsky 9 年之前
父节点
当前提交
f909634832
共有 4 个文件被更改,包括 27 次插入2 次删除
  1. 23 0
      scene/gui/item_list.cpp
  2. 2 0
      scene/gui/item_list.h
  3. 1 1
      tools/editor/editor_file_system.h
  4. 1 1
      tools/editor/editor_import_export.h

+ 23 - 0
scene/gui/item_list.cpp

@@ -297,6 +297,7 @@ void ItemList::remove_item(int p_idx){
 	items.remove(p_idx);
 	items.remove(p_idx);
 	update();
 	update();
 	shape_changed=true;
 	shape_changed=true;
+	defer_select_single=-1;
 
 
 
 
 }
 }
@@ -307,6 +308,7 @@ void ItemList::clear(){
 	current=-1;
 	current=-1;
 	ensure_selected_visible=false;
 	ensure_selected_visible=false;
 	update();
 	update();
+	defer_select_single=-1;
 
 
 }
 }
 
 
@@ -392,6 +394,20 @@ Size2 ItemList::Item::get_icon_size() const {
 }
 }
 
 
 void ItemList::_input_event(const InputEvent& p_event) {
 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) {
 	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;
 		const InputEventMouseButton &mb = p_event.mouse_button;
@@ -445,7 +461,13 @@ void ItemList::_input_event(const InputEvent& p_event) {
 						emit_signal("multi_selected",i,true);
 						emit_signal("multi_selected",i,true);
 				}
 				}
 			} else {
 			} 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;
 				bool selected = !items[i].selected;
+
 				select(i,select_mode==SELECT_SINGLE || !mb.mod.command);
 				select(i,select_mode==SELECT_SINGLE || !mb.mod.command);
 				if (selected) {
 				if (selected) {
 					if (select_mode==SELECT_SINGLE) {
 					if (select_mode==SELECT_SINGLE) {
@@ -1186,6 +1208,7 @@ ItemList::ItemList() {
 	current_columns=1;
 	current_columns=1;
 	search_time_msec=0;
 	search_time_msec=0;
 	ensure_selected_visible=false;
 	ensure_selected_visible=false;
+	defer_select_single=-1;
 
 
 }
 }
 
 

+ 2 - 0
scene/gui/item_list.h

@@ -61,6 +61,8 @@ private:
 	int max_columns;
 	int max_columns;
 	Size2 min_icon_size;
 	Size2 min_icon_size;
 
 
+	int defer_select_single;
+
 	void _scroll_changed(double);
 	void _scroll_changed(double);
 	void _input_event(const InputEvent& p_event);
 	void _input_event(const InputEvent& p_event);
 protected:
 protected:

+ 1 - 1
tools/editor/editor_file_system.h

@@ -36,7 +36,7 @@
 #include "os/thread_safe.h"
 #include "os/thread_safe.h"
 class FileAccess;
 class FileAccess;
 
 
-class EditorProgressBG;
+struct EditorProgressBG;
 class EditorFileSystemDirectory : public Object {
 class EditorFileSystemDirectory : public Object {
 
 
 	OBJ_TYPE( EditorFileSystemDirectory,Object );
 	OBJ_TYPE( EditorFileSystemDirectory,Object );

+ 1 - 1
tools/editor/editor_import_export.h

@@ -36,7 +36,7 @@
 
 
 class EditorExportPlatform;
 class EditorExportPlatform;
 class FileAccess;
 class FileAccess;
-class EditorProgress;
+struct EditorProgress;
 
 
 class EditorImportPlugin : public Reference {
 class EditorImportPlugin : public Reference {