[evolution] I#908 - Focus body in message window when caret mode is enabled



commit 485a33882bc4cbe9c1863d5880455349354b98f5
Author: Milan Crha <mcrha redhat com>
Date:   Wed Sep 2 15:47:24 2020 +0200

    I#908 - Focus body in message window when caret mode is enabled
    
    Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/908

 data/webkit/e-web-view.js | 16 ++++++++++++++++
 src/mail/e-mail-browser.c |  4 +++-
 src/mail/e-mail-display.c | 13 +++++++++++++
 3 files changed, 32 insertions(+), 1 deletion(-)
---
diff --git a/data/webkit/e-web-view.js b/data/webkit/e-web-view.js
index 4cc0f90c31..0b3034ff0e 100644
--- a/data/webkit/e-web-view.js
+++ b/data/webkit/e-web-view.js
@@ -630,6 +630,22 @@ Evo.initialize = function(elem)
                        Evo.initializeAndPostContentLoaded(iframe);
        }
 
+       /* Ensure selection, used for the caret mode */
+       if (!doc.getSelection().anchorNode && doc.body.firstChild) {
+               if (doc.body) {
+                       doc.getSelection().setPosition(doc.body.firstChild, 0);
+               }
+
+               if (doc.defaultView && !doc.defaultView.frameElement) {
+                       var iframe = doc.getElementsByTagName('IFRAME')[0];
+
+                       if (iframe && iframe.contentDocument && iframe.contentDocument.body && 
iframe.contentDocument.body.firstChild) {
+                               iframe.focus();
+                               
iframe.contentDocument.getSelection().setPosition(iframe.contentDocument.body.firstChild, 0);
+                       }
+               }
+       }
+
        if (doc.defaultView && !doc.defaultView.frameElement && !doc.body.hasAttribute("class"))
                doc.body.className = "-e-web-view-background-color -e-web-view-text-color";
 
diff --git a/src/mail/e-mail-browser.c b/src/mail/e-mail-browser.c
index 29b370a0ff..144026df55 100644
--- a/src/mail/e-mail-browser.c
+++ b/src/mail/e-mail-browser.c
@@ -353,7 +353,9 @@ mail_browser_message_selected_cb (EMailBrowser *browser,
                        title = _("(No Subject)");
 
                gtk_window_set_title (GTK_WINDOW (browser), title);
-               gtk_widget_grab_focus (GTK_WIDGET (display));
+
+               if (gtk_widget_get_mapped (GTK_WIDGET (browser)))
+                       gtk_widget_grab_focus (GTK_WIDGET (display));
 
                if (e_mail_reader_utils_get_mark_seen_setting (reader, NULL))
                        camel_message_info_set_flags (info, CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN);
diff --git a/src/mail/e-mail-display.c b/src/mail/e-mail-display.c
index 859f5dacb5..20a0fb35a5 100644
--- a/src/mail/e-mail-display.c
+++ b/src/mail/e-mail-display.c
@@ -1340,6 +1340,19 @@ mail_display_content_loaded_cb (EWebView *web_view,
                        "", "__evo-remote-content-img-large", FALSE,
                        e_web_view_get_cancellable (web_view));
        }
+
+       /* Re-grab the focus, which is needed for the caret mode to show the cursor */
+       if (e_web_view_get_caret_mode (web_view) &&
+           gtk_widget_has_focus (GTK_WIDGET (web_view))) {
+               GtkWidget *toplevel, *widget = GTK_WIDGET (web_view);
+
+               toplevel = gtk_widget_get_toplevel (widget);
+
+               if (GTK_IS_WINDOW (toplevel)) {
+                       gtk_window_set_focus (GTK_WINDOW (toplevel), NULL);
+                       gtk_widget_grab_focus (widget);
+               }
+       }
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]