[gnome-builder] command-bar: close workbench cleanly when command bar focused



commit ac80fef091b5a6ecd89ad47cd8a873bcd0f84ad3
Author: Christian Hergert <christian hergert me>
Date:   Mon Apr 27 16:20:05 2015 -0700

    command-bar: close workbench cleanly when command bar focused
    
    We got into a weird state trying to restore focus when leaving the command
    bar and the workbench was closing.

 src/commands/gb-command-bar.c |    8 +++++++-
 src/workbench/gb-workbench.c  |    8 ++++++++
 src/workbench/gb-workbench.h  |    1 +
 3 files changed, 16 insertions(+), 1 deletions(-)
---
diff --git a/src/commands/gb-command-bar.c b/src/commands/gb-command-bar.c
index d07ae28..049b835 100644
--- a/src/commands/gb-command-bar.c
+++ b/src/commands/gb-command-bar.c
@@ -117,11 +117,17 @@ gb_command_bar_hide (GbCommandBar *bar)
   gtk_revealer_set_reveal_child (GTK_REVEALER (bar), FALSE);
 
   workbench = gb_widget_get_workbench (GTK_WIDGET (bar));
+  if ((workbench == NULL) || gb_workbench_get_closing (workbench))
+    return;
+
   workspace = gb_workbench_get_active_workspace (workbench);
-  focus = GTK_WIDGET (workspace);
+  if (workspace == NULL)
+    return;
 
   if (bar->priv->last_focus)
     focus = find_alternate_focus (bar->priv->last_focus);
+  else
+    focus = GTK_WIDGET (workspace);
 
   gtk_widget_grab_focus (focus);
 }
diff --git a/src/workbench/gb-workbench.c b/src/workbench/gb-workbench.c
index fe6d735..2a90fb2 100644
--- a/src/workbench/gb-workbench.c
+++ b/src/workbench/gb-workbench.c
@@ -884,3 +884,11 @@ gb_workbench_add_temporary_buffer (GbWorkbench *self)
   buffer_manager = ide_context_get_buffer_manager (context);
   buffer = ide_buffer_manager_create_buffer (buffer_manager);
 }
+
+gboolean
+gb_workbench_get_closing (GbWorkbench *self)
+{
+  g_return_val_if_fail (GB_IS_WORKBENCH (self), FALSE);
+
+  return (self->unloading || (self->disposing > 0));
+}
diff --git a/src/workbench/gb-workbench.h b/src/workbench/gb-workbench.h
index ddc86e9..c7490f3 100644
--- a/src/workbench/gb-workbench.h
+++ b/src/workbench/gb-workbench.h
@@ -53,6 +53,7 @@ void              gb_workbench_open_uri_list        (GbWorkbench         *self,
 GbCommandManager *gb_workbench_get_command_manager  (GbWorkbench         *self);
 gpointer          gb_workbench_get_workspace_typed  (GbWorkbench         *self,
                                                      GType                workspace_type);
+gboolean          gb_workbench_get_closing          (GbWorkbench         *self);
 
 G_END_DECLS
 


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