[gnome-builder] libide: implement preferences action for workbench



commit d628f2ac6ab3245f7cf950a7859b97ff7142d908
Author: Christian Hergert <chergert redhat com>
Date:   Sun Nov 15 21:31:29 2015 -0800

    libide: implement preferences action for workbench

 libide/greeter/ide-greeter-perspective.c         |    7 +++++
 libide/ide-application-actions.c                 |   31 ++++++++++++++--------
 libide/ide-workbench.c                           |    7 ++---
 libide/preferences/ide-preferences-perspective.c |    7 +++++
 4 files changed, 37 insertions(+), 15 deletions(-)
---
diff --git a/libide/greeter/ide-greeter-perspective.c b/libide/greeter/ide-greeter-perspective.c
index 71b06e7..fc9d577 100644
--- a/libide/greeter/ide-greeter-perspective.c
+++ b/libide/greeter/ide-greeter-perspective.c
@@ -82,9 +82,16 @@ ide_greeter_perspective_get_actions (IdePerspective *perspective)
   return g_object_ref (IDE_GREETER_PERSPECTIVE (perspective)->actions);
 }
 
+static gchar *
+ide_greeter_perspective_get_id (IdePerspective *perspective)
+{
+  return g_strdup ("greeter");
+}
+
 static void
 ide_perspective_iface_init (IdePerspectiveInterface *iface)
 {
+  iface->get_id = ide_greeter_perspective_get_id;
   iface->get_actions = ide_greeter_perspective_get_actions;
   iface->get_titlebar = ide_greeter_perspective_get_titlebar;
 }
diff --git a/libide/ide-application-actions.c b/libide/ide-application-actions.c
index 0bd0970..ff61d79 100644
--- a/libide/ide-application-actions.c
+++ b/libide/ide-application-actions.c
@@ -34,28 +34,37 @@ ide_application_actions_preferences (GSimpleAction *action,
                                      GVariant      *parameter,
                                      gpointer       user_data)
 {
-#if 0
   IdeApplication *self = user_data;
+  GList *windows;
 
   IDE_ENTRY;
 
   g_assert (IDE_IS_APPLICATION (self));
 
-  if (self->preferences_window == NULL)
+  /*
+   * TODO: Make this work at the greeter screen too.
+   */
+
+  windows = gtk_application_get_windows (GTK_APPLICATION (self));
+
+  for (; windows; windows = windows->next)
     {
-      IdePreferencesWindow *window;
+      GtkWindow *window = windows->data;
+      const gchar *name;
 
-      window = g_object_new (IDE_TYPE_PREFERENCES_WINDOW,
-                             "type-hint", GDK_WINDOW_TYPE_HINT_DIALOG,
-                             "window-position", GTK_WIN_POS_CENTER,
-                             NULL);
-      ide_set_weak_pointer (&self->preferences_window, window);
-    }
+      if (!IDE_IS_WORKBENCH (window))
+        continue;
 
-  gtk_window_present (GTK_WINDOW (self->preferences_window));
+      name = ide_workbench_get_visible_perspective_name (IDE_WORKBENCH (window));
+
+      if (!ide_str_equal0 (name, "greeter"))
+        {
+          ide_workbench_set_visible_perspective_name (IDE_WORKBENCH (window), "preferences");
+          IDE_EXIT;
+        }
+    }
 
   IDE_EXIT;
-#endif
 }
 
 #if 0
diff --git a/libide/ide-workbench.c b/libide/ide-workbench.c
index 42bf745..5f00424 100644
--- a/libide/ide-workbench.c
+++ b/libide/ide-workbench.c
@@ -458,13 +458,12 @@ ide_workbench_get_perspective_by_name (IdeWorkbench *self,
 IdePerspective *
 ide_workbench_get_visible_perspective (IdeWorkbench *self)
 {
-  GtkWidget *visible_child;
-
   g_return_val_if_fail (IDE_IS_WORKBENCH (self), NULL);
 
-  visible_child = gtk_stack_get_visible_child (self->perspectives_stack);
+  if (gtk_stack_get_visible_child (self->top_stack) == GTK_WIDGET (self->greeter_perspective))
+    return IDE_PERSPECTIVE (self->greeter_perspective);
 
-  return IDE_PERSPECTIVE (visible_child);
+  return IDE_PERSPECTIVE (gtk_stack_get_visible_child (self->perspectives_stack));
 }
 
 void
diff --git a/libide/preferences/ide-preferences-perspective.c 
b/libide/preferences/ide-preferences-perspective.c
index bba8529..d734de1 100644
--- a/libide/preferences/ide-preferences-perspective.c
+++ b/libide/preferences/ide-preferences-perspective.c
@@ -784,6 +784,12 @@ ide_preferences_iface_init (IdePreferencesInterface *iface)
 }
 
 static gchar *
+ide_preferences_perspective_get_id (IdePerspective *perspective)
+{
+  return g_strdup ("preferences");
+}
+
+static gchar *
 ide_preferences_perspective_get_title (IdePerspective *perspective)
 {
   return g_strdup (_("Preferences"));
@@ -814,6 +820,7 @@ ide_preferences_perspective_get_actions (IdePerspective *perspective)
 static void
 ide_perspective_iface_init (IdePerspectiveInterface *iface)
 {
+  iface->get_id = ide_preferences_perspective_get_id;
   iface->get_icon_name = ide_preferences_perspective_get_icon_name;
   iface->get_title = ide_preferences_perspective_get_title;
   iface->get_titlebar = ide_preferences_perspective_get_titlebar;


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