From 33ec75122bb3c903fa867ef696ec256f62b08458 Mon Sep 17 00:00:00 2001 From: rlx <0x0073@0x2620.org> Date: Tue, 8 Nov 2011 11:06:00 +0000 Subject: [PATCH] make sure you can drag a text list item by an editable cell --- source/Ox.UI/js/List/Ox.List.js | 35 +++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/source/Ox.UI/js/List/Ox.List.js b/source/Ox.UI/js/List/Ox.List.js index a38cdb1d..a7cbb1bb 100644 --- a/source/Ox.UI/js/List/Ox.List.js +++ b/source/Ox.UI/js/List/Ox.List.js @@ -805,10 +805,9 @@ Ox.List = function(options, self) { } function mousedown(data) { - var pos = findItemPosition(data), - $cell, clickable, editable; - //self.hadFocus = that.hasFocus(); + var pos = findItemPosition(data); that.gainFocus(); + self.mousedownOnSelectedCell = false; if (pos > -1) { if (data.metaKey) { if (!isSelected(pos) && (self.options.max == -1 || self.options.max > self.selected.length)) { @@ -827,20 +826,16 @@ Ox.List = function(options, self) { // click on unselected item select(pos); } else if (self.options.type == 'text') { - $cell = findCell(data); - if ($cell) { - clickable = $cell.is('.OxClickable'); - editable = $cell.is('.OxEditable') && !$cell.is('.OxEdit'); - if (clickable || editable) { - // click on a clickable or editable cell - triggerClickEvent(clickable ? 'click' : 'edit', self.$items[pos], $cell); - } - } + // click on a selected text list cell + self.mousedownOnSelectedCell = true; } } else if (!$(data.target).is('.OxToggle') && self.options.min == 0) { // click on empty area selectNone(); } + // note: we have to save if the mousedown was on a selected cell + // since otherwise, mousedown would select a previously unselected item, + // and the subsequent singleclick might trigger an unwanted edit event. } function movestart(data) { @@ -892,10 +887,10 @@ Ox.List = function(options, self) { } function singleclick(data) { - // this can't trigger on mousedown, - // since it could be a doubleclick + // these can't trigger on mousedown, since the mousedown + // could still be the start of a doubleclick or drag var pos = findItemPosition(data), - clickable, editable; + $cell, clickable, editable; if (pos > -1) { if ( !data.metaKey && !data.shiftKey @@ -903,6 +898,16 @@ Ox.List = function(options, self) { ) { // click on one of multiple selected items select(pos); + } else if (self.mousedownOnSelectedCell) { + $cell = findCell(data); + if ($cell) { + clickable = $cell.is('.OxClickable'); + editable = $cell.is('.OxEditable') && !$cell.is('.OxEdit'); + if (clickable || editable) { + // click on a clickable or editable cell + triggerClickEvent(clickable ? 'click' : 'edit', self.$items[pos], $cell); + } + } } } }