[gnome-builder] greeter: make greeter insensitive while loading



commit 509e86629fc16fd1a0a374e80c72f3e9eeb5482d
Author: Christian Hergert <chergert redhat com>
Date:   Fri Nov 10 00:26:32 2017 -0800

    greeter: make greeter insensitive while loading
    
    Give the user some indication that we are loading the project when they
    click on the newcomer project.

 src/libide/greeter/ide-greeter-perspective.c |   49 ++++++++++++++++++++-----
 1 files changed, 39 insertions(+), 10 deletions(-)
---
diff --git a/src/libide/greeter/ide-greeter-perspective.c b/src/libide/greeter/ide-greeter-perspective.c
index f516484..daa7f82 100644
--- a/src/libide/greeter/ide-greeter-perspective.c
+++ b/src/libide/greeter/ide-greeter-perspective.c
@@ -1121,6 +1121,43 @@ get_project_directory (const gchar *name)
     return g_build_filename (projects, name, NULL);
 }
 
+static void
+ide_greeter_perspective_open_cb (GObject      *object,
+                                 GAsyncResult *result,
+                                 gpointer      user_data)
+{
+  IdeWorkbench *workbench = (IdeWorkbench *)object;
+  g_autoptr(IdeGreeterPerspective) self = user_data;
+
+  g_assert (IDE_IS_GREETER_PERSPECTIVE (self));
+  g_assert (G_IS_ASYNC_RESULT (result));
+
+  if (!ide_workbench_open_project_finish (workbench, result, NULL))
+    gtk_widget_set_sensitive (GTK_WIDGET (self), TRUE);
+}
+
+static void
+ide_greeter_perspective_do_open (IdeGreeterPerspective *self,
+                                 const gchar           *path)
+{
+  g_autoptr(GFile) file = NULL;
+  IdeWorkbench *workbench;
+
+  g_assert (IDE_IS_GREETER_PERSPECTIVE (self));
+  g_assert (path != NULL);
+
+  file = g_file_new_for_path (path);
+  workbench = ide_widget_get_workbench (GTK_WIDGET (self));
+
+  gtk_widget_set_sensitive (GTK_WIDGET (self), FALSE);
+
+  ide_workbench_open_project_async (workbench,
+                                    file,
+                                    NULL,
+                                    ide_greeter_perspective_open_cb,
+                                    g_object_ref (self));
+}
+
 static gboolean
 ide_greeter_perspective_load_project (IdeGreeterPerspective *self,
                                       IdeNewcomerProject    *project)
@@ -1150,11 +1187,7 @@ ide_greeter_perspective_load_project (IdeGreeterPerspective *self,
 
   if (relocated != NULL)
     {
-      g_autoptr(GFile) file = g_file_new_for_path (relocated);
-      IdeWorkbench *workbench = ide_widget_get_workbench (GTK_WIDGET (self));
-
-      ide_workbench_open_project_async (workbench, file, NULL, NULL, NULL);
-
+      ide_greeter_perspective_do_open (self, relocated);
       return TRUE;
     }
 
@@ -1164,11 +1197,7 @@ ide_greeter_perspective_load_project (IdeGreeterPerspective *self,
    */
   if (g_file_test (maybe_project, G_FILE_TEST_IS_DIR))
     {
-      g_autoptr(GFile) file = g_file_new_for_path (maybe_project);
-      IdeWorkbench *workbench = ide_widget_get_workbench (GTK_WIDGET (self));
-
-      ide_workbench_open_project_async (workbench, file, NULL, NULL, NULL);
-
+      ide_greeter_perspective_do_open (self, maybe_project);
       return TRUE;
     }
 


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