Merge pull request #176 from toasted-nutbread/selection-touch-scan-disable

Don't scan when touching the current selection
This commit is contained in:
Alex Yatskov 2019-08-17 14:12:11 -07:00 committed by GitHub
commit 9ec711b780
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 8 deletions

View File

@ -172,7 +172,12 @@ class Frontend {
return;
}
this.setPrimaryTouch(this.getPrimaryTouch(e.changedTouches));
let touch = this.getPrimaryTouch(e.changedTouches);
if (this.selectionContainsPoint(window.getSelection(), touch.clientX, touch.clientY)) {
touch = null;
}
this.setPrimaryTouch(touch);
}
onTouchEnd(e) {
@ -289,7 +294,8 @@ class Frontend {
if (!hideResults && (!this.textSourceLast || !this.textSourceLast.equals(textSource))) {
searched = true;
this.pendingLookup = true;
hideResults = !await this.searchTerms(textSource) && !await this.searchKanji(textSource);
const focus = (type === 'mouse');
hideResults = !await this.searchTerms(textSource, focus) && !await this.searchKanji(textSource, focus);
success = true;
}
} catch (e) {
@ -312,7 +318,7 @@ class Frontend {
}
}
async searchTerms(textSource) {
async searchTerms(textSource, focus) {
textSource.setEndOffset(this.options.scanning.length);
const {definitions, length} = await apiTermsFind(textSource.text());
@ -328,7 +334,7 @@ class Frontend {
textSource.getRect(),
definitions,
this.options,
{sentence, url}
{sentence, url, focus}
);
this.textSourceLast = textSource;
@ -339,7 +345,7 @@ class Frontend {
return true;
}
async searchKanji(textSource) {
async searchKanji(textSource, focus) {
textSource.setEndOffset(1);
const definitions = await apiKanjiFind(textSource.text());
@ -353,7 +359,7 @@ class Frontend {
textSource.getRect(),
definitions,
this.options,
{sentence, url}
{sentence, url, focus}
);
this.textSourceLast = textSource;
@ -456,6 +462,18 @@ class Frontend {
search();
}
selectionContainsPoint(selection, x, y) {
for (let i = 0; i < selection.rangeCount; ++i) {
const range = selection.getRangeAt(i);
for (const rect of range.getClientRects()) {
if (x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom) {
return true;
}
}
}
return false;
}
}
window.yomichan_frontend = new Frontend();

View File

@ -272,7 +272,9 @@ class Display {
async termsShow(definitions, options, context) {
try {
if (!context || context.focus !== false) {
window.focus();
}
this.definitions = definitions;
this.options = options;
@ -324,7 +326,9 @@ class Display {
async kanjiShow(definitions, options, context) {
try {
if (!context || context.focus !== false) {
window.focus();
}
this.definitions = definitions;
this.options = options;