From 5cff852b07b83ddf330fcaffd0843eb3cad6d5ee Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Sat, 31 Jul 2010 05:48:46 -0400
Subject: [PATCH] Disable active spell check in tinyMCE before switching to plaintext mode (#1486870) + focus message field after mode switch

---
 CHANGELOG                     |    1 +
 program/js/editor.js          |   21 +++++++++------------
 skins/default/googiespell.css |    1 +
 program/js/app.js             |   11 ++++++-----
 4 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 7d7cc26..fe27ecd 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG RoundCube Webmail
 ===========================
 
+- Fix JS errors on compose mode switch (#1486870)
 - Fix message structure parsing when it lacks optional fields (#1486881)
 - Include all recipients in sendmail log
 - Support HTTP_X_FORWARDED_PROTO header for HTTPS detecting (#1486866)
diff --git a/program/js/app.js b/program/js/app.js
index a9da557..c4ddb21 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -2815,13 +2815,14 @@
       tinyMCE.execCommand('mceAddControl', false, props.id);
     }
     else {
-      var thisMCE = tinyMCE.get(props.id),
-        existingHtml = thisMCE.getContent();
-
-      if (existingHtml) {
+      var thisMCE = tinyMCE.get(props.id), existingHtml;
+      if (thisMCE.plugins.spellchecker && thisMCE.plugins.spellchecker.active)
+        thisMCE.execCommand('mceSpellCheck', false);
+      
+      if (existingHtml = thisMCE.getContent()) {
         if (!confirm(this.get_label('editorwarning'))) {
           return false;
-	    }
+        }
         this.html2plain(existingHtml, props.id);
       }
       tinyMCE.execCommand('mceRemoveControl', false, props.id);
diff --git a/program/js/editor.js b/program/js/editor.js
index fd128cb..c81ef25 100644
--- a/program/js/editor.js
+++ b/program/js/editor.js
@@ -67,19 +67,12 @@
   var editor, elem = rcube_find_object('_from');
   if (elem && elem.type=='select-one')
     rcmail.change_identity(elem);
-  // set tabIndex
-  rcmail_editor_tabindex();
-  // set focus to element that was focused before
-  if (elem = rcmail.env.compose_focus_elem) {
-    if (elem.id == rcmail.env.composebody && (editor = tinyMCE.get(rcmail.env.composebody)))
-      editor.getWin().focus();
-    else
-      elem.focus();
-  }
+  // set tabIndex and set focus to element that was focused before
+  rcmail_editor_tabindex(rcmail.env.compose_focus_elem && rcmail.env.compose_focus_elem.id == rcmail.env.composebody);
 }
 
 // set tabIndex on tinyMCE editor
-function rcmail_editor_tabindex()
+function rcmail_editor_tabindex(focus)
 {
   if (rcmail.env.task == 'mail') {
     var editor = tinyMCE.get(rcmail.env.composebody);
@@ -88,6 +81,8 @@
       var node = editor.getContentAreaContainer().childNodes[0];
       if (textarea && node)
         node.tabIndex = textarea.tabIndex;
+      if (focus)
+        editor.getWin().focus();
     }
   }
 }
@@ -106,14 +101,16 @@
 
   if (ishtml) {
     // #1486593
-    setTimeout("rcmail_editor_tabindex();", 500);
+    setTimeout("rcmail_editor_tabindex(true);", 500);
     if (flagElement && (flag = rcube_find_object(flagElement)))
       flag.value = '1';
   }
   else {
     if (!res && select.tagName == 'SELECT')
-	  select.value = 'html';
+      select.value = 'html';
     if (flagElement && (flag = rcube_find_object(flagElement)))
       flag.value = '0';
+
+    rcube_find_object(rcmail.env.composebody).focus();
   }
 }
diff --git a/skins/default/googiespell.css b/skins/default/googiespell.css
index c48ff5a..d73ec69 100644
--- a/skins/default/googiespell.css
+++ b/skins/default/googiespell.css
@@ -17,6 +17,7 @@
   padding: 0 4px;
   font-size: 9pt;
   font-family: monospace;
+  border: 1px solid #666;
 }
 
 .googie_edit_layer span {

--
Gitblit v1.9.1