[gitg] Added keybindings for switching activities



commit 5255a7fe5cd84ae8a33dab1aab9eac86876b85a4
Author: Jesse van den Kieboom <jessevdk gnome org>
Date:   Sun Jul 13 11:33:22 2014 +0200

    Added keybindings for switching activities
    
    For now, the keybindings are Alt+<N>, where <N> is the index of the
    activity as shown in stack switcher (much like in tab switching).
    
    https://bugzilla.gnome.org/show_bug.cgi?id=633706

 gitg/gitg-ui-elements.vala |   15 ++++++++++++++
 gitg/gitg-window.vala      |   46 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 61 insertions(+), 0 deletions(-)
---
diff --git a/gitg/gitg-ui-elements.vala b/gitg/gitg-ui-elements.vala
index ca18967..ba1a72c 100644
--- a/gitg/gitg-ui-elements.vala
+++ b/gitg/gitg-ui-elements.vala
@@ -52,6 +52,21 @@ public class UIElements<T> : Object
                }
        }
 
+       public T[] available_elements
+       {
+               owned get
+               {
+                       var ret = new T[0];
+
+                       foreach (var elem in d_available_elements)
+                       {
+                               ret += (T)elem;
+                       }
+
+                       return ret;
+               }
+       }
+
        public void update()
        {
                // Update active elements based on availability
diff --git a/gitg/gitg-window.vala b/gitg/gitg-window.vala
index 121327a..be1db33 100644
--- a/gitg/gitg-window.vala
+++ b/gitg/gitg-window.vala
@@ -84,6 +84,39 @@ public class Window : Gtk.ApplicationWindow, GitgExt.Application, Initable
 
        private Mode d_mode;
 
+       [Signal(action = true)]
+       public virtual signal bool change_to_activity(int i)
+       {
+               if (i == 0)
+               {
+                       if (d_mode == Mode.ACTIVITY)
+                       {
+                               repository = null;
+                               return true;
+                       }
+                       else
+                       {
+                               return false;
+                       }
+               }
+
+               if (d_mode != Mode.ACTIVITY)
+               {
+                       return false;
+               }
+
+               var elems = d_activities.available_elements;
+               i--;
+
+               if (i >= elems.length)
+               {
+                       return false;
+               }
+
+               d_activities.current = elems[i];
+               return true;
+       }
+
        private static const ActionEntry[] win_entries = {
                {"search", on_search_activated, null, "false", null},
                {"gear-menu", on_gear_menu_activated, null, "false", null},
@@ -188,6 +221,19 @@ public class Window : Gtk.ApplicationWindow, GitgExt.Application, Initable
                d_infobar.response.connect((w, r) => {
                        d_infobar.hide();
                });
+
+               unowned Gtk.BindingSet bset = Gtk.BindingSet.by_class(get_class());
+
+               for (int i = 0; i < 10; i++)
+               {
+                       Gtk.BindingEntry.add_signal(bset,
+                                                   (Gdk Key  0 + i),
+                                                   Gdk.ModifierType.MOD1_MASK,
+                                                   "change-to-activity",
+                                                   1,
+                                                   typeof(int),
+                                                   i);
+               }
        }
 
        private void on_close_activated()


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