aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomas Popela <tpopela@redhat.com>2014-08-27 21:53:30 +0800
committerTomas Popela <tpopela@redhat.com>2014-08-27 22:12:02 +0800
commit94ac03022048a12b6a43c970ab6a95eef865e7b6 (patch)
tree4f97ca43a513d498f19f03a945ef77b4041edbb2
parentf382078b3478585c628cb6493214c9b57f32b66c (diff)
downloadgsoc2013-evolution-94ac03022048a12b6a43c970ab6a95eef865e7b6.tar
gsoc2013-evolution-94ac03022048a12b6a43c970ab6a95eef865e7b6.tar.gz
gsoc2013-evolution-94ac03022048a12b6a43c970ab6a95eef865e7b6.tar.bz2
gsoc2013-evolution-94ac03022048a12b6a43c970ab6a95eef865e7b6.tar.lz
gsoc2013-evolution-94ac03022048a12b6a43c970ab6a95eef865e7b6.tar.xz
gsoc2013-evolution-94ac03022048a12b6a43c970ab6a95eef865e7b6.tar.zst
gsoc2013-evolution-94ac03022048a12b6a43c970ab6a95eef865e7b6.zip
When changing the composer mode from HTML to Plain Text avoid reloading of the web view
Also preserve the selection (if it is possible) when changing the mode.
-rw-r--r--composer/e-composer-private.c12
-rw-r--r--e-util/e-html-editor-view.c63
2 files changed, 35 insertions, 40 deletions
diff --git a/composer/e-composer-private.c b/composer/e-composer-private.c
index 569cc4d6ae..79bba3dfe6 100644
--- a/composer/e-composer-private.c
+++ b/composer/e-composer-private.c
@@ -859,18 +859,6 @@ composer_move_caret (EMsgComposer *composer)
WEBKIT_DOM_ELEMENT (body), "data-message", "", NULL);
new_range = webkit_dom_document_create_range (document);
- element = webkit_dom_document_get_element_by_id (document, "-x-evo-caret-position");
- /* Caret position found => composer mode changed */
- if (element) {
- e_html_editor_selection_restore_caret_position (editor_selection);
- /* We want to force spellcheck just in case that we switched to plain
- * text mode (when switching to html mode, the underlined words are
- * preserved */
- if (!html_mode)
- e_html_editor_view_force_spell_check (view);
- return;
- }
-
/* If editing message as new don't handle with caret */
if (composer->priv->is_from_message || composer->priv->is_from_draft) {
if (composer->priv->is_from_message)
diff --git a/e-util/e-html-editor-view.c b/e-util/e-html-editor-view.c
index d5fcdc9b6a..90a75de3ff 100644
--- a/e-util/e-html-editor-view.c
+++ b/e-util/e-html-editor-view.c
@@ -5846,33 +5846,35 @@ process_elements (EHTMLEditorView *view,
}
/* Signature */
- if (WEBKIT_DOM_IS_HTML_DIV_ELEMENT (child)) {
+ if (WEBKIT_DOM_IS_HTML_DIV_ELEMENT (child) &&
+ element_has_class (WEBKIT_DOM_ELEMENT (child), "-x-evo-signature-wrapper")) {
WebKitDOMNode *first_child;
first_child = webkit_dom_node_get_first_child (child);
- if (WEBKIT_DOM_IS_ELEMENT (first_child)) {
- if (element_has_class (
- WEBKIT_DOM_ELEMENT (first_child),
- "-x-evo-signature")) {
-
- if (to_html) {
- remove_base_attributes (
- WEBKIT_DOM_ELEMENT (first_child));
- remove_evolution_attributes (
- WEBKIT_DOM_ELEMENT (first_child));
- }
- if (to_plain_text && !changing_mode) {
- g_string_append (buffer, "\n");
- content = webkit_dom_html_element_get_inner_text (
- WEBKIT_DOM_HTML_ELEMENT (first_child));
- g_string_append (buffer, content);
- g_free (content);
- skip_nl = TRUE;
- }
- skip_node = TRUE;
- goto next;
- }
+
+ if (to_html) {
+ remove_base_attributes (
+ WEBKIT_DOM_ELEMENT (first_child));
+ remove_evolution_attributes (
+ WEBKIT_DOM_ELEMENT (first_child));
+ }
+ if (to_plain_text && !changing_mode) {
+ g_string_append (buffer, "\n");
+ content = webkit_dom_html_element_get_inner_text (
+ WEBKIT_DOM_HTML_ELEMENT (first_child));
+ g_string_append (buffer, content);
+ g_free (content);
+ skip_nl = TRUE;
}
+ if (to_plain_text && changing_mode) {
+ content = webkit_dom_html_element_get_outer_html (
+ WEBKIT_DOM_HTML_ELEMENT (child));
+ g_string_append (buffer, content);
+ g_free (content);
+ skip_node = TRUE;
+ }
+ skip_node = TRUE;
+ goto next;
}
/* Replace smileys with their text representation */
@@ -6724,8 +6726,7 @@ e_html_editor_view_set_html_mode (EHTMLEditorView *view,
} else {
gchar *plain;
- /* Save caret position -> it will be restored in e-composer-private.c */
- e_html_editor_selection_save_caret_position (selection);
+ e_html_editor_selection_save (selection);
if (blockquote) {
e_html_editor_selection_wrap_paragraphs_in_document (
@@ -6739,9 +6740,15 @@ e_html_editor_view_set_html_mode (EHTMLEditorView *view,
plain = process_content_for_mode_change (view);
- if (*plain)
- webkit_web_view_load_string (
- WEBKIT_WEB_VIEW (view), plain, NULL, NULL, "file://");
+ if (*plain) {
+ webkit_dom_html_element_set_outer_html (
+ WEBKIT_DOM_HTML_ELEMENT (
+ webkit_dom_document_get_document_element (document)),
+ plain,
+ NULL);
+ e_html_editor_selection_restore (selection);
+ e_html_editor_view_force_spell_check (view);
+ }
g_free (plain);
}