[geary/wip/713739-inline: 9/37] Fix Tab focus for embedded composer



commit 6e89dff83509c2b858eecf4a22cc51af774153dd
Author: Robert Schroll <rschroll gmail com>
Date:   Mon Jul 8 00:56:01 2013 -0400

    Fix Tab focus for embedded composer
    
    There are two things that needed to be fixed: The tab key doesn't
    usually advance focus for embedded widgets (huh?), so we handle tab
    presses by hand for ComposerWidgets.  Also, the EmailEntrys do their own
    tab handling, which needs to know about the composer widget, not the
    toplevel widget in the embedded case.

 src/client/composer/composer-widget.vala |   12 +++++++++---
 src/client/composer/email-entry.vala     |    7 +++++--
 2 files changed, 14 insertions(+), 5 deletions(-)
---
diff --git a/src/client/composer/composer-widget.vala b/src/client/composer/composer-widget.vala
index f5ba805..29b301a 100644
--- a/src/client/composer/composer-widget.vala
+++ b/src/client/composer/composer-widget.vala
@@ -226,11 +226,11 @@ public class ComposerWidget : Gtk.EventBox {
         from_label = (Gtk.Label) builder.get_object("from label");
         from_single = (Gtk.Label) builder.get_object("from_single");
         from_multiple = (Gtk.ComboBoxText) builder.get_object("from_multiple");
-        to_entry = new EmailEntry();
+        to_entry = new EmailEntry(this);
         (builder.get_object("to") as Gtk.EventBox).add(to_entry);
-        cc_entry = new EmailEntry();
+        cc_entry = new EmailEntry(this);
         (builder.get_object("cc") as Gtk.EventBox).add(cc_entry);
-        bcc_entry = new EmailEntry();
+        bcc_entry = new EmailEntry(this);
         (builder.get_object("bcc") as Gtk.EventBox).add(bcc_entry);
         
         Gtk.Label to_label = (Gtk.Label) builder.get_object("to label");
@@ -1438,6 +1438,12 @@ public class ComposerWidget : Gtk.EventBox {
                     return true;
                 }
             break;
+            
+            case "Tab":
+                return child_focus(Gtk.DirectionType.TAB_FORWARD);
+            
+            case "ISO_Left_Tab":
+                return child_focus(Gtk.DirectionType.TAB_BACKWARD);
         }
         
         return base.key_press_event(event);
diff --git a/src/client/composer/email-entry.vala b/src/client/composer/email-entry.vala
index cd617d2..c6287b0 100644
--- a/src/client/composer/email-entry.vala
+++ b/src/client/composer/email-entry.vala
@@ -11,10 +11,13 @@ public class EmailEntry : Gtk.Entry {
 
     // null or valid addresses
     public Geary.RFC822.MailboxAddresses? addresses { get; private set; default = null; }
+    
+    private weak ComposerWidget composer;
 
-    public EmailEntry() {
+    public EmailEntry(ComposerWidget composer) {
         changed.connect(on_changed);
         key_press_event.connect(on_key_press);
+        this.composer = composer;
     }
 
     private void on_changed() {
@@ -45,7 +48,7 @@ public class EmailEntry : Gtk.Entry {
     private bool on_key_press(Gtk.Widget widget, Gdk.EventKey event) {
         if (event.keyval == Gdk.Key.Tab) {
             ((ContactEntryCompletion) get_completion()).trigger_selection();
-            get_toplevel().child_focus(Gtk.DirectionType.TAB_FORWARD);
+            composer.child_focus(Gtk.DirectionType.TAB_FORWARD);
             return true;
         }
         


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