-make sure single select after multi select works better

-fixed some warnings for OSX

(cherry picked from commit f909634832)
This commit is contained in:
Juan Linietsky 2016-05-04 17:41:58 -03:00 committed by Rémi Verschelde
parent 4832731477
commit 23c659fc47
4 changed files with 27 additions and 2 deletions

View File

@ -278,6 +278,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;
} }
@ -288,6 +289,7 @@ void ItemList::clear(){
current=-1; current=-1;
ensure_selected_visible=false; ensure_selected_visible=false;
update(); update();
defer_select_single=-1;
} }
@ -365,6 +367,20 @@ Size2 ItemList::get_min_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;
@ -418,7 +434,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) {
@ -1142,6 +1164,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;
} }

View File

@ -59,6 +59,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:

View File

@ -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 );

View File

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