[geary/wip/713739-inline: 6/37] Hook up composer accelerators only when focus is in composer editor



commit dce27735c1d2f5861d65d2cfdbdbcb306804cfb7
Author: Robert Schroll <rschroll gmail com>
Date:   Sat May 25 18:57:48 2013 -0400

    Hook up composer accelerators only when focus is in composer editor
    
    It would be nice to only activate these accelerators when the composer
    has focus generally, but that doesn't seem to be easy to detect.

 src/client/composer/composer-embed.vala  |   17 +++++++++++++++++
 src/client/composer/composer-widget.vala |    2 +-
 2 files changed, 18 insertions(+), 1 deletions(-)
---
diff --git a/src/client/composer/composer-embed.vala b/src/client/composer/composer-embed.vala
index f7d63e7..52ae712 100644
--- a/src/client/composer/composer-embed.vala
+++ b/src/client/composer/composer-embed.vala
@@ -69,6 +69,8 @@ public class ComposerEmbed : Gtk.Box, ComposerContainer {
             conversation_viewer.web_view.settings.enable_plugins = false;
         }
         pack_start(new_composer, true, true);
+        new_composer.editor.focus_in_event.connect(on_focus_in);
+        new_composer.editor.focus_out_event.connect(on_focus_out);
         show_all();
         present();
         this.composer = new_composer;
@@ -111,6 +113,9 @@ public class ComposerEmbed : Gtk.Box, ComposerContainer {
     }
     
     private void on_detach() {
+        on_focus_out();
+        composer.editor.focus_in_event.disconnect(on_focus_in);
+        composer.editor.focus_out_event.disconnect(on_focus_out);
         remove(composer);
         new ComposerWindow(composer);
         composer = null;
@@ -121,6 +126,16 @@ public class ComposerEmbed : Gtk.Box, ComposerContainer {
         return this;
     }
     
+    private bool on_focus_in() {
+        top_window.add_accel_group(composer.ui.get_accel_group());
+        return false;
+    }
+    
+    private bool on_focus_out() {
+        top_window.remove_accel_group(composer.ui.get_accel_group());
+        return false;
+    }
+    
     public void present() {
         conversation_viewer.web_view.get_dom_document().get_element_by_id(embed_id).scroll_into_view(true);
     }
@@ -131,6 +146,8 @@ public class ComposerEmbed : Gtk.Box, ComposerContainer {
     
     private void close() {
         if (composer != null) {
+            composer.editor.focus_in_event.disconnect(on_focus_in);
+            composer.editor.focus_out_event.disconnect(on_focus_out);
             remove(composer);
             composer.destroy();
             composer = null;
diff --git a/src/client/composer/composer-widget.vala b/src/client/composer/composer-widget.vala
index d493956..f5ba805 100644
--- a/src/client/composer/composer-widget.vala
+++ b/src/client/composer/composer-widget.vala
@@ -184,7 +184,7 @@ public class ComposerWidget : Gtk.EventBox {
     private Cancellable cancellable_save_draft = new Cancellable();
     private bool in_draft_save = false;
     
-    private WebKit.WebView editor;
+    public WebKit.WebView editor;
     // We need to keep a reference to the edit-fixer in composer-window, so it doesn't get
     // garbage-collected.
     private WebViewEditFixer edit_fixer;


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