From 13172570c01245018385bb450a658b6a0a070e56 Mon Sep 17 00:00:00 2001 From: Yuya Ochiai Date: Tue, 2 May 2017 23:00:40 +0900 Subject: [PATCH] Reset misspelled state after changing spelling language --- src/browser/webview/mattermost.js | 12 ++++++++++++ src/main.js | 9 +++++++++ src/main/SpellChecker.js | 6 +++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/browser/webview/mattermost.js b/src/browser/webview/mattermost.js index 24e7c4a0..ef4d59ce 100644 --- a/src/browser/webview/mattermost.js +++ b/src/browser/webview/mattermost.js @@ -148,6 +148,17 @@ notification.override({ } }); +function resetMisspelledState() { + ipc.once('spellchecker-is-ready', () => { + const element = document.activeElement; + if (element) { + element.blur(); + element.focus(); + } + }); + ipc.send('reply-on-spellchecker-is-ready'); +} + function setSpellChecker() { const spellCheckerLocale = ipc.sendSync('get-spellchecker-locale'); webFrame.setSpellCheckProvider(spellCheckerLocale, false, { @@ -156,6 +167,7 @@ function setSpellChecker() { return res === null ? true : res; } }); + resetMisspelledState(); } setSpellChecker(); ipc.on('set-spellcheker', setSpellChecker); diff --git a/src/main.js b/src/main.js index 90a0da1c..b83b44d3 100644 --- a/src/main.js +++ b/src/main.js @@ -542,6 +542,15 @@ app.on('ready', () => { ipcMain.on('get-spellchecker-locale', (event) => { event.returnValue = config.spellCheckerLocale; }); + ipcMain.on('reply-on-spellchecker-is-ready', (event) => { + if (spellChecker.isReady()) { + event.sender.send('spellchecker-is-ready'); + return; + } + spellChecker.once('ready', () => { + event.sender.send('spellchecker-is-ready'); + }); + }); ipcMain.emit('update-dict'); // Open the DevTools. diff --git a/src/main/SpellChecker.js b/src/main/SpellChecker.js index cea93d4b..a35451f4 100644 --- a/src/main/SpellChecker.js +++ b/src/main/SpellChecker.js @@ -1,5 +1,6 @@ 'use strict'; +const EventEmitter = require('events'); const simpleSpellChecker = require('simple-spellchecker'); /// Following approach for contractions is derived from electron-spellchecker. @@ -26,17 +27,20 @@ const contractionMap = contractions.reduce((acc, word) => { /// End: derived from electron-spellchecker. -class SpellChecker { +class SpellChecker extends EventEmitter { constructor(locale, dictDir, callback) { + super(); this.dict = null; this.locale = locale; simpleSpellChecker.getDictionary(locale, dictDir, (err, dict) => { if (err) { + this.emit('error', err); if (callback) { callback(err); } } else { this.dict = dict; + this.emit('ready'); if (callback) { callback(null, this); }