[gnome-builder] workbench: propagate focus to perspectives



commit 3abaf0c60f9473dbbb817818ed61ed54abd4aa16
Author: Christian Hergert <chergert redhat com>
Date:   Sun Jun 18 19:27:48 2017 -0700

    workbench: propagate focus to perspectives
    
    This can be handy to ensure we land our focus back on the perspective.

 libide/editor/ide-editor-perspective.c |   12 ++++++++++++
 libide/workbench/ide-workbench.c       |   14 ++++++++++++++
 2 files changed, 26 insertions(+), 0 deletions(-)
---
diff --git a/libide/editor/ide-editor-perspective.c b/libide/editor/ide-editor-perspective.c
index 99381c8..650da92 100644
--- a/libide/editor/ide-editor-perspective.c
+++ b/libide/editor/ide-editor-perspective.c
@@ -389,6 +389,16 @@ ide_editor_perspective_grid_empty (IdeEditorPerspective *self,
 }
 
 static void
+ide_editor_perspective_grab_focus (GtkWidget *widget)
+{
+  IdeEditorPerspective *self = (IdeEditorPerspective *)widget;
+
+  g_assert (IDE_IS_EDITOR_PERSPECTIVE (self));
+
+  gtk_widget_grab_focus (GTK_WIDGET (self->grid));
+}
+
+static void
 ide_editor_perspective_get_property (GObject    *object,
                                      guint       prop_id,
                                      GValue     *value,
@@ -417,6 +427,8 @@ ide_editor_perspective_class_init (IdeEditorPerspectiveClass *klass)
   object_class->get_property = ide_editor_perspective_get_property;
   object_class->finalize = ide_editor_perspective_finalize;
 
+  widget_class->grab_focus = ide_editor_perspective_grab_focus;
+
   container_class->add = ide_editor_perspective_add;
 
   gtk_widget_class_set_template_from_resource (widget_class, 
"/org/gnome/builder/ui/ide-editor-perspective.ui");
diff --git a/libide/workbench/ide-workbench.c b/libide/workbench/ide-workbench.c
index a264cdb..8d4063a 100644
--- a/libide/workbench/ide-workbench.c
+++ b/libide/workbench/ide-workbench.c
@@ -192,6 +192,19 @@ ide_workbench_delete_event (GtkWidget   *widget,
 }
 
 static void
+ide_workbench_grab_focus (GtkWidget *widget)
+{
+  IdeWorkbench *self = (IdeWorkbench *)widget;
+  GtkWidget *child;
+
+  g_assert (IDE_IS_WORKBENCH (self));
+
+  child = gtk_stack_get_visible_child (self->perspectives_stack);
+  if (child != NULL)
+    gtk_widget_grab_focus (child);
+}
+
+static void
 ide_workbench_constructed (GObject *object)
 {
   IdeWorkbench *self = (IdeWorkbench *)object;
@@ -299,6 +312,7 @@ ide_workbench_class_init (IdeWorkbenchClass *klass)
   object_class->get_property = ide_workbench_get_property;
   object_class->set_property = ide_workbench_set_property;
 
+  widget_class->grab_focus = ide_workbench_grab_focus;
   widget_class->delete_event = ide_workbench_delete_event;
 
   /**


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