[evolution/wip/webkit2] Bug 745899 - Shift+Tab in message body doesn't move focus to headers



commit d8ad0d125fcb74551f263abbe98334f4760d58ca
Author: Tomas Popela <tpopela redhat com>
Date:   Mon Mar 30 13:43:11 2015 +0200

    Bug 745899 - Shift+Tab in message body doesn't move focus to headers
    
    The behavior right now is. When tabulator is pressed in view (outside
    of table) tabulator is inserted. When tab is pressed inside a table,
    caret is moved to next cell in the table. If we are in the last cell of
    table, caret is moved to the block after table. When Shift+Tab is pressed
    inside the view (outside of table) caret jumps to headers. When
    Shift+Tab is pressed in table the caret is moved to previous cell. If
    the caret is in first cell of table it is moved to the block that is
    before the table. If there is no block before the table, focus is moved
    to headers.

 composer/e-msg-composer.c                         |   11 +++++++++++
 web-extensions/e-html-editor-view-dom-functions.c |   14 ++++++--------
 2 files changed, 17 insertions(+), 8 deletions(-)
---
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 42fe447..49424d9 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -2538,6 +2538,17 @@ msg_composer_key_press_event (GtkWidget *widget,
        }
 
        if (gtk_widget_is_focus (GTK_WIDGET (view))) {
+               if (event->keyval == GDK_KEY_ISO_Left_Tab) {
+                       gboolean view_processed = FALSE;
+
+                       g_signal_emit_by_name (view, "key-press-event", event, &view_processed);
+
+                       if (!view_processed)
+                               gtk_widget_grab_focus (input_widget);
+
+                       return TRUE;
+               }
+
                if ((((event)->state & GDK_SHIFT_MASK) &&
                    ((event)->keyval == GDK_KEY_Insert)) ||
                    (((event)->state & GDK_CONTROL_MASK) &&
diff --git a/web-extensions/e-html-editor-view-dom-functions.c 
b/web-extensions/e-html-editor-view-dom-functions.c
index 7fe9102..d6f28db 100644
--- a/web-extensions/e-html-editor-view-dom-functions.c
+++ b/web-extensions/e-html-editor-view-dom-functions.c
@@ -6437,12 +6437,11 @@ jump_to_next_table_cell (WebKitDOMDocument *document,
        WebKitDOMNode *node, *cell;
        WebKitDOMRange *range;
 
-       window = webkit_dom_document_get_default_view (document);
-       selection = webkit_dom_dom_window_get_selection (window);
-
-       if (webkit_dom_dom_selection_get_range_count (selection) < 1)
+       if (!selection_is_in_table (document, NULL, NULL))
                return FALSE;
 
+       window = webkit_dom_document_get_default_view (document);
+       selection = webkit_dom_dom_window_get_selection (window);
        range = webkit_dom_dom_selection_get_range_at (selection, 0, NULL);
        node = webkit_dom_range_get_start_container (range, NULL);
 
@@ -6569,15 +6568,14 @@ dom_process_on_key_press (WebKitDOMDocument *document,
                           guint key_val)
 {
        if (key_val == GDK_KEY_Tab || key_val == GDK_KEY_ISO_Left_Tab) {
-               if (selection_is_in_table (document, NULL, NULL))
-                       if (jump_to_next_table_cell (document, key_val == GDK_KEY_ISO_Left_Tab))
-                               return TRUE;
+               if (jump_to_next_table_cell (document, key_val == GDK_KEY_ISO_Left_Tab))
+                       return TRUE;
 
                if (key_val == GDK_KEY_Tab)
                        return dom_exec_command (
                                document, E_HTML_EDITOR_VIEW_COMMAND_INSERT_TEXT, "\t");
                else
-                       return TRUE;
+                       return FALSE;
        }
 
        if (is_return_key (key_val)) {


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