Skip to content

Commit

Permalink
codemirror#3261 Selection problem in IE11, when leaving an iframe whi…
Browse files Browse the repository at this point in the history
…le selecting

Make sure, that we're not starting a second selection.
  • Loading branch information
Philip Stadermann committed May 20, 2015
1 parent 9e4e844 commit 8d76211
Showing 1 changed file with 22 additions and 12 deletions.
34 changes: 22 additions & 12 deletions lib/codemirror.js
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@
focused: false,
suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll
selectingText: false,
draggingText: false,
highlight: new Delayed(), // stores highlight worker timeout
keySeq: null, // Unfinished key sequence
Expand Down Expand Up @@ -1116,28 +1117,28 @@
}

function triggerElectric(cm, inserted) {
// When an 'electric' character is inserted, immediately trigger a reindent
// When an 'electric' character is inserted, immediately trigger a reindent
if (!cm.options.electricChars || !cm.options.smartIndent) return;
var sel = cm.doc.sel;

for (var i = sel.ranges.length - 1; i >= 0; i--) {
var range = sel.ranges[i];
if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) continue;
var mode = cm.getModeAt(range.head);
var indented = false;
if (mode.electricChars) {
for (var j = 0; j < mode.electricChars.length; j++)
if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {
var mode = cm.getModeAt(range.head);
var indented = false;
if (mode.electricChars) {
for (var j = 0; j < mode.electricChars.length; j++)
if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {
indented = indentLine(cm, range.head.line, "smart");
break;
}
} else if (mode.electricInput) {
break;
}
} else if (mode.electricInput) {
if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))
indented = indentLine(cm, range.head.line, "smart");
}
}
if (indented) signalLater(cm, "electricInput", cm, range.head.line);
}
}
}

function copyableRanges(cm) {
var text = [], ranges = [];
Expand Down Expand Up @@ -3567,7 +3568,8 @@
var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained;
if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) &&
type == "single" && (contained = sel.contains(start)) > -1 &&
!sel.ranges[contained].empty())
!sel.ranges[contained].empty() &&
!cm.state.selectingText)
leftButtonStartDrag(cm, e, start, modifier);
else
leftButtonSelect(cm, e, start, type, modifier);
Expand Down Expand Up @@ -3607,6 +3609,12 @@
var display = cm.display, doc = cm.doc;
e_preventDefault(e);

// #3261: make sure, that we're not starting a second selection
if (cm.state.selectingText) {
cm.state.selectingText(e);
return;
}

var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;
if (addNew && !e.shiftKey) {
ourIndex = doc.sel.contains(start);
Expand Down Expand Up @@ -3727,6 +3735,7 @@
}

function done(e) {
cm.state.selectingText = false;
counter = Infinity;
e_preventDefault(e);
display.input.focus();
Expand All @@ -3740,6 +3749,7 @@
else extend(e);
});
var up = operation(cm, done);
cm.state.selectingText = up;
on(document, "mousemove", move);
on(document, "mouseup", up);
}
Expand Down

0 comments on commit 8d76211

Please sign in to comment.