[geary/wip/update-shortcuts: 5/6] Make J/K work globally, add Ctrl+] and Ctrl+[ as aliases



commit c25415ea022105445f3c4328f936f46a9c5d49c5
Author: Michael Gratton <mike vee net>
Date:   Mon Jul 22 01:24:42 2019 +1000

    Make J/K work globally, add Ctrl+] and Ctrl+[ as aliases
    
    See #505

 src/client/application/application-controller.vala | 14 +++++++++
 .../conversation-list/conversation-list-view.vala  | 33 ++++++++++++++++++++++
 src/client/folder-list/folder-list-tree.vala       | 16 -----------
 ui/gtk/help-overlay.ui                             |  8 +++---
 4 files changed, 51 insertions(+), 20 deletions(-)
---
diff --git a/src/client/application/application-controller.vala 
b/src/client/application/application-controller.vala
index e3a2204f..0bb01681 100644
--- a/src/client/application/application-controller.vala
+++ b/src/client/application/application-controller.vala
@@ -38,6 +38,8 @@ public class Application.Controller : Geary.BaseObject {
     public const string ACTION_CONVERSATION_LIST = "focus-conv-list";
     public const string ACTION_TOGGLE_SEARCH = "toggle-search";
     public const string ACTION_TOGGLE_FIND = "toggle-find";
+    public const string ACTION_CONVERSATION_UP = "up-conversation";
+    public const string ACTION_CONVERSATION_DOWN = "down-conversation";
 
     // Properties
     public const string PROP_SELECTED_CONVERSATIONS ="selected-conversations";
@@ -197,6 +199,8 @@ public class Application.Controller : Geary.BaseObject {
         {ACTION_DELETE_CONVERSATION,   on_delete_conversation       },
         {ACTION_COPY_MENU,             on_show_copy_menu            },
         {ACTION_MOVE_MENU,             on_show_move_menu            },
+        {ACTION_CONVERSATION_UP,       on_conversation_up           },
+        {ACTION_CONVERSATION_DOWN,     on_conversation_down         },
         // Message marking actions
         {ACTION_SHOW_MARK_MENU,     on_show_mark_menu           },
         {ACTION_MARK_AS_READ,       on_mark_as_read             },
@@ -606,6 +610,8 @@ public class Application.Controller : Geary.BaseObject {
         add_window_accelerators(ACTION_ZOOM+("('normal')"), { "<Ctrl>0" });
         add_window_accelerators(ACTION_SEARCH, { "<Ctrl>S" });
         add_window_accelerators(ACTION_CONVERSATION_LIST, { "<Ctrl>B" });
+        add_window_accelerators(ACTION_CONVERSATION_UP, { "<Ctrl>bracketleft", "K" });
+        add_window_accelerators(ACTION_CONVERSATION_DOWN, { "<Ctrl>bracketright", "J" });
     }
 
     private void add_window_accelerators(string action, string[] accelerators, Variant? param = null) {
@@ -2909,6 +2915,14 @@ public class Application.Controller : Geary.BaseObject {
         );
     }
 
+    private void on_conversation_up() {
+        this.main_window.conversation_list_view.scroll(Gtk.ScrollType.STEP_UP);
+    }
+
+    private void on_conversation_down() {
+        this.main_window.conversation_list_view.scroll(Gtk.ScrollType.STEP_DOWN);
+    }
+
     private void on_save_attachments(Gee.Collection<Geary.Attachment> attachments) {
         GLib.Cancellable? cancellable = null;
         if (this.current_account != null) {
diff --git a/src/client/conversation-list/conversation-list-view.vala 
b/src/client/conversation-list/conversation-list-view.vala
index a4400248..9a18ee7f 100644
--- a/src/client/conversation-list/conversation-list-view.vala
+++ b/src/client/conversation-list/conversation-list-view.vala
@@ -122,6 +122,39 @@ public class ConversationListView : Gtk.TreeView, Geary.BaseInterface {
         selection.changed.connect(on_selection_changed);
     }
 
+    public void scroll(Gtk.ScrollType where) {
+        Gtk.TreeSelection selection = get_selection();
+        weak Gtk.TreeModel model;
+        GLib.List<Gtk.TreePath> selected = selection.get_selected_rows(out model);
+        Gtk.TreePath? target_path = null;
+        Gtk.TreeIter? target_iter = null;
+        if (selected.length() > 0) {
+            switch (where) {
+            case STEP_UP:
+                target_path = selected.first().data;
+                model.get_iter(out target_iter, target_path);
+                if (model.iter_previous(ref target_iter)) {
+                    target_path = model.get_path(target_iter);
+                } else {
+                    this.get_window().beep();
+                }
+                break;
+
+            case STEP_DOWN:
+                target_path = selected.last().data;
+                model.get_iter(out target_iter, target_path);
+                if (model.iter_next(ref target_iter)) {
+                    target_path = model.get_path(target_iter);
+                } else {
+                    this.get_window().beep();
+                }
+                break;
+            }
+
+            set_cursor(target_path, null, false);
+        }
+    }
+
     /**
      * Specifies an action is currently changing the view's selection.
      */
diff --git a/src/client/folder-list/folder-list-tree.vala b/src/client/folder-list/folder-list-tree.vala
index 8fabcc0b..0fac3770 100644
--- a/src/client/folder-list/folder-list-tree.vala
+++ b/src/client/folder-list/folder-list-tree.vala
@@ -36,22 +36,6 @@ public class FolderList.Tree : Sidebar.Tree, Geary.BaseInterface {
         unowned Gtk.BindingSet? binding_set = Gtk.BindingSet.find("GtkTreeView");
         assert(binding_set != null);
         Gtk.BindingEntry.remove(binding_set, Gdk.Key.N, Gdk.ModifierType.CONTROL_MASK);
-        // add j/k bindings for gmail or vim users
-        // The add_signal API is hard to use (need to pass variable arguments with
-        // type identifiers), so we might as well use this version that parses a
-        // string.
-        Gtk.BindingEntry.add_signal_from_string(
-            binding_set,
-            """
-                bind "j" { "move-cursor" (display-lines,  1) }
-            """
-        );
-        Gtk.BindingEntry.add_signal_from_string(
-            binding_set,
-            """
-                bind "k" { "move-cursor" (display-lines, -1) }
-            """
-        );
     }
 
     ~Tree() {
diff --git a/ui/gtk/help-overlay.ui b/ui/gtk/help-overlay.ui
index 08f5e01a..db4b099d 100644
--- a/ui/gtk/help-overlay.ui
+++ b/ui/gtk/help-overlay.ui
@@ -244,15 +244,15 @@
                         <child>
                             <object class="GtkShortcutsShortcut">
                                 <property name="visible">True</property>
-                                <property name="title" translatable="yes" context="shortcut window">Select 
next conversation down</property>
-                                <property name="accelerator">J</property>
+                                <property name="title" translatable="yes" context="shortcut window">Select 
the conversation down</property>
+                                <property name="accelerator">&lt;primary&gt;bracketright J</property>
                             </object>
                         </child>
                         <child>
                             <object class="GtkShortcutsShortcut">
                                 <property name="visible">True</property>
-                                <property name="title" translatable="yes" context="shortcut window">Select 
previous conversation up</property>
-                                <property name="accelerator">K</property>
+                                <property name="title" translatable="yes" context="shortcut window">Select 
the conversation up</property>
+                                <property name="accelerator">&lt;primary&gt;bracketleft K</property>
                             </object>
                         </child>
                         <child>


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