[gnome-builder] focus movements
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] focus movements
- Date: Tue, 24 Mar 2015 00:24:59 +0000 (UTC)
commit 1db1c9833386dc76e6113b07edb0f620241878d2
Author: Christian Hergert <christian hergert me>
Date: Wed Mar 18 23:52:24 2015 -0700
focus movements
data/keybindings/vim.css | 5 +++++
src/views/gb-view-grid.c | 24 ++++++++++++++++++++++++
src/views/gb-view-stack.c | 16 ++++++++++++++++
3 files changed, 45 insertions(+), 0 deletions(-)
---
diff --git a/data/keybindings/vim.css b/data/keybindings/vim.css
index 4f96c30..8ec911f 100644
--- a/data/keybindings/vim.css
+++ b/data/keybindings/vim.css
@@ -903,6 +903,11 @@
bind "<ctrl>c" { "action" ("view", "close", "") };
bind "s" { "action" ("view", "toggle-split", "") };
+
+ bind "l" { "action" ("view-grid", "focus-neighbor", "5") };
+ bind "h" { "action" ("view-grid", "focus-neighbor", "4") };
+ bind "j" { "action" ("view-grid", "focus-neighbor", "3") };
+ bind "k" { "action" ("view-grid", "focus-neighbor", "2") };
}
@binding-set builder-vim-source-view-visual-line-g
diff --git a/src/views/gb-view-grid.c b/src/views/gb-view-grid.c
index fc659d5..ff3204e 100644
--- a/src/views/gb-view-grid.c
+++ b/src/views/gb-view-grid.c
@@ -209,6 +209,22 @@ gb_view_grid_focus_neighbor (GbViewGrid *self,
}
static void
+gb_view_grid_focus_neighbor_action (GSimpleAction *action,
+ GVariant *param,
+ gpointer user_data)
+{
+ GbViewGrid *self = user_data;
+ GtkDirectionType dir;
+
+ g_assert (GB_IS_VIEW_GRID (self));
+
+ dir = g_variant_get_int32 (param);
+
+ if (self->last_focus)
+ gb_view_grid_focus_neighbor (self, dir, self->last_focus);
+}
+
+static void
gb_view_grid_stack_empty (GbViewGrid *self,
GbViewStack *stack)
{
@@ -734,6 +750,10 @@ gb_view_grid_class_init (GbViewGridClass *klass)
static void
gb_view_grid_init (GbViewGrid *self)
{
+ g_autoptr(GSimpleActionGroup) actions = NULL;
+ static const GActionEntry entries[] = {
+ { "focus-neighbor", gb_view_grid_focus_neighbor_action, "i" },
+ };
GbViewStack *stack;
GtkPaned *paned;
@@ -746,6 +766,10 @@ gb_view_grid_init (GbViewGrid *self)
NULL);
gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (paned));
+
+ actions = g_simple_action_group_new ();
+ g_action_map_add_action_entries (G_ACTION_MAP (actions), entries, G_N_ELEMENTS (entries), self);
+ gtk_widget_insert_action_group (GTK_WIDGET (self), "view-grid", G_ACTION_GROUP (actions));
}
GType
diff --git a/src/views/gb-view-stack.c b/src/views/gb-view-stack.c
index 3e70b9d..dd7f3a6 100644
--- a/src/views/gb-view-stack.c
+++ b/src/views/gb-view-stack.c
@@ -118,6 +118,19 @@ gb_view_stack__notify_visible_child (GbViewStack *self,
}
static void
+gb_view_stack_grab_focus (GtkWidget *widget)
+{
+ GbViewStack *self = (GbViewStack *)widget;
+ GtkWidget *visible_child;
+
+ g_assert (GB_IS_VIEW_STACK (self));
+
+ visible_child = gtk_stack_get_visible_child (self->stack);
+ if (visible_child)
+ gtk_widget_grab_focus (visible_child);
+}
+
+static void
gb_view_stack_constructed (GObject *object)
{
GbViewStack *self = (GbViewStack *)object;
@@ -181,6 +194,7 @@ static void
gb_view_stack_class_init (GbViewStackClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
object_class->constructed = gb_view_stack_constructed;
@@ -188,6 +202,8 @@ gb_view_stack_class_init (GbViewStackClass *klass)
object_class->get_property = gb_view_stack_get_property;
object_class->set_property = gb_view_stack_set_property;
+ widget_class->grab_focus = gb_view_stack_grab_focus;
+
container_class->add = gb_view_stack_add;
container_class->remove = gb_view_stack_real_remove;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]