[gnome-builder/wip/chergert/perspective] terminal: port terminal to perspectives



commit f705e4c65cc3e44b7ccfeb3f4cf9ce2577588a5d
Author: Christian Hergert <chergert redhat com>
Date:   Thu Dec 3 23:16:25 2015 -0800

    terminal: port terminal to perspectives

 plugins/terminal/Makefile.am                     |    2 -
 plugins/terminal/gb-terminal-application-addin.c |   22 +---
 plugins/terminal/gb-terminal-document.c          |  161 ----------------------
 plugins/terminal/gb-terminal-document.h          |   36 -----
 plugins/terminal/gb-terminal-plugin.c            |    3 -
 plugins/terminal/gb-terminal-view-actions.c      |    3 -
 plugins/terminal/gb-terminal-view-private.h      |    8 +-
 plugins/terminal/gb-terminal-view.c              |   93 ++-----------
 plugins/terminal/gb-terminal-view.h              |    7 +-
 plugins/terminal/gb-terminal-view.ui             |    2 +-
 plugins/terminal/gb-terminal-workbench-addin.c   |   72 +++++------
 plugins/terminal/gb-terminal-workbench-addin.h   |    6 +-
 plugins/terminal/terminal.plugin                 |    1 +
 13 files changed, 55 insertions(+), 361 deletions(-)
---
diff --git a/plugins/terminal/Makefile.am b/plugins/terminal/Makefile.am
index b781e29..d35dfe0 100644
--- a/plugins/terminal/Makefile.am
+++ b/plugins/terminal/Makefile.am
@@ -12,8 +12,6 @@ dist_plugin_DATA = terminal.plugin
 libterminal_la_SOURCES = \
        gb-terminal-application-addin.c \
        gb-terminal-application-addin.h \
-       gb-terminal-document.c \
-       gb-terminal-document.h \
        gb-terminal-plugin.c \
        gb-terminal-private.h \
        gb-terminal-view.c \
diff --git a/plugins/terminal/gb-terminal-application-addin.c 
b/plugins/terminal/gb-terminal-application-addin.c
index 2a3304a..962207b 100644
--- a/plugins/terminal/gb-terminal-application-addin.c
+++ b/plugins/terminal/gb-terminal-application-addin.c
@@ -25,12 +25,11 @@ struct _GbTerminalApplicationAddin
 
 static void application_addin_iface_init (IdeApplicationAddinInterface *iface);
 
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (GbTerminalApplicationAddin,
-                                gb_terminal_application_addin,
-                                G_TYPE_OBJECT,
-                                0,
-                                G_IMPLEMENT_INTERFACE (IDE_TYPE_APPLICATION_ADDIN,
-                                                       application_addin_iface_init))
+G_DEFINE_TYPE_EXTENDED (GbTerminalApplicationAddin,
+                        gb_terminal_application_addin,
+                        G_TYPE_OBJECT,
+                        0,
+                        G_IMPLEMENT_INTERFACE (IDE_TYPE_APPLICATION_ADDIN, application_addin_iface_init))
 
 static void
 gb_terminal_application_addin_load (IdeApplicationAddin *addin,
@@ -61,11 +60,6 @@ gb_terminal_application_addin_class_init (GbTerminalApplicationAddinClass *klass
 }
 
 static void
-gb_terminal_application_addin_class_finalize (GbTerminalApplicationAddinClass *klass)
-{
-}
-
-static void
 gb_terminal_application_addin_init (GbTerminalApplicationAddin *self)
 {
 }
@@ -76,9 +70,3 @@ application_addin_iface_init (IdeApplicationAddinInterface *iface)
   iface->load = gb_terminal_application_addin_load;
   iface->unload = gb_terminal_application_addin_unload;
 }
-
-void
-_gb_terminal_application_addin_register_type (GTypeModule *module)
-{
-  gb_terminal_application_addin_register_type (module);
-}
diff --git a/plugins/terminal/gb-terminal-plugin.c b/plugins/terminal/gb-terminal-plugin.c
index 275bf41..8bb20fd 100644
--- a/plugins/terminal/gb-terminal-plugin.c
+++ b/plugins/terminal/gb-terminal-plugin.c
@@ -27,9 +27,6 @@
 void
 peas_register_types (PeasObjectModule *module)
 {
-  _gb_terminal_application_addin_register_type (G_TYPE_MODULE (module));
-  _gb_terminal_workbench_addin_register_type (G_TYPE_MODULE (module));
-
   peas_object_module_register_extension_type (module,
                                               IDE_TYPE_APPLICATION_ADDIN,
                                               GB_TYPE_TERMINAL_APPLICATION_ADDIN);
diff --git a/plugins/terminal/gb-terminal-view-actions.c b/plugins/terminal/gb-terminal-view-actions.c
index 16a8d3a..9ce16ef 100644
--- a/plugins/terminal/gb-terminal-view-actions.c
+++ b/plugins/terminal/gb-terminal-view-actions.c
@@ -24,9 +24,6 @@
 
 #include "gb-terminal-view-actions.h"
 #include "gb-terminal-view-private.h"
-#include "gb-view-grid.h"
-#include "gb-widget.h"
-#include "gb-workbench.h"
 
 typedef struct
 {
diff --git a/plugins/terminal/gb-terminal-view-private.h b/plugins/terminal/gb-terminal-view-private.h
index 5f83e0f..9d0ef63 100644
--- a/plugins/terminal/gb-terminal-view-private.h
+++ b/plugins/terminal/gb-terminal-view-private.h
@@ -19,18 +19,14 @@
 #ifndef GB_TERMINAL_VIEW_PRIVATE_H
 #define GB_TERMINAL_VIEW_PRIVATE_H
 
+#include <ide.h>
 #include <vte/vte.h>
 
-#include "gb-terminal-document.h"
-#include "gb-view.h"
-
 G_BEGIN_DECLS
 
 struct _GbTerminalView
 {
-  GbView               parent_instance;
-
-  GbTerminalDocument  *document;
+  IdeLayoutView        parent_instance;
 
   VteTerminal         *terminal_top;
   VteTerminal         *terminal_bottom;
diff --git a/plugins/terminal/gb-terminal-view.c b/plugins/terminal/gb-terminal-view.c
index 6bd085b..8a14125 100644
--- a/plugins/terminal/gb-terminal-view.c
+++ b/plugins/terminal/gb-terminal-view.c
@@ -20,19 +20,14 @@
 #include <ide.h>
 #include <vte/vte.h>
 
-#include "gb-terminal-document.h"
 #include "gb-terminal-view.h"
 #include "gb-terminal-view-private.h"
 #include "gb-terminal-view-actions.h"
-#include "gb-view.h"
-#include "gb-widget.h"
-#include "gb-workbench.h"
 
-G_DEFINE_TYPE (GbTerminalView, gb_terminal_view, GB_TYPE_VIEW)
+G_DEFINE_TYPE (GbTerminalView, gb_terminal_view, IDE_TYPE_LAYOUT_VIEW)
 
 enum {
   PROP_0,
-  PROP_DOCUMENT,
   PROP_FONT_NAME,
   LAST_PROP
 };
@@ -66,32 +61,6 @@ static const GdkRGBA solarized_palette[] =
 
 static void gb_terminal_view_connect_terminal    (GbTerminalView *self, VteTerminal *terminal);
 
-static GbDocument *
-gb_terminal_view_get_document (GbView *view)
-{
-  g_return_val_if_fail (GB_IS_TERMINAL_VIEW (view), NULL);
-
-  return GB_DOCUMENT (GB_TERMINAL_VIEW (view)->document);
-}
-
-static void
-gb_terminal_view_set_document (GbTerminalView     *view,
-                               GbTerminalDocument *document)
-{
-  g_return_if_fail (GB_IS_TERMINAL_VIEW (view));
-
-  if (view->document != document)
-    {
-      if (view->document)
-        g_clear_object (&view->document);
-
-      if (document)
-        view->document = g_object_ref (document);
-
-      g_object_notify (G_OBJECT (view), "document");
-    }
-}
-
 static void
 gb_terminal_respawn (GbTerminalView *self,
                      VteTerminal    *terminal)
@@ -111,7 +80,7 @@ gb_terminal_respawn (GbTerminalView *self,
   vte_terminal_reset (terminal, TRUE, TRUE);
 
   toplevel = gtk_widget_get_toplevel (GTK_WIDGET (self));
-  if (!GB_IS_WORKBENCH (toplevel))
+  if (!IDE_IS_WORKBENCH (toplevel))
     return;
 
   /* Prevent flapping */
@@ -120,7 +89,7 @@ gb_terminal_respawn (GbTerminalView *self,
     return;
   self->last_respawn = now;
 
-  context = gb_workbench_get_context (GB_WORKBENCH (toplevel));
+  context = ide_workbench_get_context (IDE_WORKBENCH (toplevel));
   vcs = ide_context_get_vcs (context);
   workdir = ide_vcs_get_working_directory (vcs);
   workpath = g_file_get_path (workdir);
@@ -159,7 +128,7 @@ child_exited_cb (VteTerminal    *terminal,
   g_assert (VTE_IS_TERMINAL (terminal));
   g_assert (GB_IS_TERMINAL_VIEW (self));
 
-  if (!gb_widget_activate_action (GTK_WIDGET (self), "view-stack", "close", NULL))
+  if (!ide_widget_action (GTK_WIDGET (self), "view-stack", "close", NULL))
     {
       if (!gtk_widget_in_destruction (GTK_WIDGET (terminal)))
         gb_terminal_respawn (self, terminal);
@@ -298,7 +267,7 @@ notification_received_cb (VteTerminal    *terminal,
 }
 
 static const gchar *
-gb_terminal_get_title (GbView *view)
+gb_terminal_get_title (IdeLayoutView *view)
 {
   const gchar *title;
   GbTerminalView *self = (GbTerminalView *)view;
@@ -318,17 +287,11 @@ focus_in_event_cb (VteTerminal    *terminal,
                    GdkEvent       *event,
                    GbTerminalView *self)
 {
-  const gchar *title;
-
   g_assert (VTE_IS_TERMINAL (terminal));
   g_assert (GB_IS_TERMINAL_VIEW (self));
 
   self->bottom_has_focus = (terminal != self->terminal_top);
 
-  title = gb_terminal_get_title (GB_VIEW (self));
-  if (self->document)
-    gb_terminal_document_set_title (self->document, title);
-
   if (terminal == self->terminal_top)
     {
       self->top_has_needs_attention = FALSE;
@@ -340,8 +303,6 @@ focus_in_event_cb (VteTerminal    *terminal,
       gb_terminal_set_needs_attention (self, FALSE, GTK_POS_BOTTOM);
     }
 
-  g_object_notify (G_OBJECT (self), "title");
-
   return GDK_EVENT_PROPAGATE;
 }
 
@@ -385,15 +346,14 @@ style_context_changed (GtkStyleContext *style_context,
                              G_N_ELEMENTS (solarized_palette));
 }
 
-static GbView *
-gb_terminal_create_split (GbView *view)
+static IdeLayoutView *
+gb_terminal_create_split (IdeLayoutView *view)
 {
-  GbView *new_view;
+  IdeLayoutView *new_view;
 
   g_assert (GB_IS_TERMINAL_VIEW (view));
 
   new_view = g_object_new (GB_TYPE_TERMINAL_VIEW,
-                          "document", gb_terminal_view_get_document (view),
                           "visible", TRUE,
                           NULL);
 
@@ -423,7 +383,7 @@ gb_terminal_view_set_font_name (GbTerminalView *self,
 }
 
 static void
-gb_terminal_set_split_view (GbView   *view,
+gb_terminal_set_split_view (IdeLayoutView   *view,
                             gboolean  split_view)
 {
   GbTerminalView *self = (GbTerminalView *)view;
@@ -539,7 +499,6 @@ gb_terminal_view_finalize (GObject *object)
 {
   GbTerminalView *self = GB_TERMINAL_VIEW (object);
 
-  g_clear_object (&self->document);
   g_clear_object (&self->save_as_file_top);
   g_clear_object (&self->save_as_file_bottom);
   g_clear_pointer (&self->selection_buffer, g_free);
@@ -548,25 +507,6 @@ gb_terminal_view_finalize (GObject *object)
 }
 
 static void
-gb_terminal_view_get_property (GObject    *object,
-                               guint       prop_id,
-                               GValue     *value,
-                               GParamSpec *pspec)
-{
-  GbTerminalView *self = GB_TERMINAL_VIEW (object);
-
-  switch (prop_id)
-    {
-    case PROP_DOCUMENT:
-      g_value_set_object (value, self->document);
-      break;
-
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-    }
-}
-
-static void
 gb_terminal_view_set_property (GObject      *object,
                                guint         prop_id,
                                const GValue *value,
@@ -580,10 +520,6 @@ gb_terminal_view_set_property (GObject      *object,
       gb_terminal_view_set_font_name (self, g_value_get_string (value));
       break;
 
-    case PROP_DOCUMENT:
-      gb_terminal_view_set_document (self, g_value_get_object (value));
-      break;
-
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -594,10 +530,9 @@ gb_terminal_view_class_init (GbTerminalViewClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-  GbViewClass *view_class = GB_VIEW_CLASS (klass);
+  IdeLayoutViewClass *view_class = IDE_LAYOUT_VIEW_CLASS (klass);
 
   object_class->finalize = gb_terminal_view_finalize;
-  object_class->get_property = gb_terminal_view_get_property;
   object_class->set_property = gb_terminal_view_set_property;
 
   widget_class->realize = gb_terminal_realize;
@@ -606,7 +541,6 @@ gb_terminal_view_class_init (GbTerminalViewClass *klass)
   widget_class->grab_focus = gb_terminal_grab_focus;
 
   view_class->get_title = gb_terminal_get_title;
-  view_class->get_document = gb_terminal_view_get_document;
   view_class->create_split = gb_terminal_create_split;
   view_class->set_split_view =  gb_terminal_set_split_view;
 
@@ -616,13 +550,6 @@ gb_terminal_view_class_init (GbTerminalViewClass *klass)
 
   g_type_ensure (VTE_TYPE_TERMINAL);
 
-  properties [PROP_DOCUMENT] =
-    g_param_spec_object ("document",
-                         "Document",
-                         "The document for the VTE terminal view.",
-                         GB_TYPE_TERMINAL_DOCUMENT,
-                         (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
   properties [PROP_FONT_NAME] =
     g_param_spec_string ("font-name",
                          "Font Name",
diff --git a/plugins/terminal/gb-terminal-view.h b/plugins/terminal/gb-terminal-view.h
index da25f74..5b8e7a3 100644
--- a/plugins/terminal/gb-terminal-view.h
+++ b/plugins/terminal/gb-terminal-view.h
@@ -19,16 +19,13 @@
 #ifndef GB_TERMINAL_VIEW_H
 #define GB_TERMINAL_VIEW_H
 
-#include "gb-terminal-document.h"
-#include "gb-view.h"
+#include <ide.h>
 
 G_BEGIN_DECLS
 
 #define GB_TYPE_TERMINAL_VIEW (gb_terminal_view_get_type())
 
-G_DECLARE_FINAL_TYPE (GbTerminalView, gb_terminal_view, GB, TERMINAL_VIEW, GbView)
-
-GbView *gb_terminal_view_new      (GbTerminalDocument *document);
+G_DECLARE_FINAL_TYPE (GbTerminalView, gb_terminal_view, GB, TERMINAL_VIEW, IdeLayoutView)
 
 G_END_DECLS
 
diff --git a/plugins/terminal/gb-terminal-view.ui b/plugins/terminal/gb-terminal-view.ui
index da1c1a3..c0bc699 100644
--- a/plugins/terminal/gb-terminal-view.ui
+++ b/plugins/terminal/gb-terminal-view.ui
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <!-- interface-requires gtk+ 3.16 -->
-  <template class="GbTerminalView" parent="GbView">
+  <template class="GbTerminalView" parent="IdeLayoutView">
     <property name="visible">true</property>
     <child>
       <object class="GtkPaned" id="paned">
diff --git a/plugins/terminal/gb-terminal-workbench-addin.c b/plugins/terminal/gb-terminal-workbench-addin.c
index 176aa34..1ed7855 100644
--- a/plugins/terminal/gb-terminal-workbench-addin.c
+++ b/plugins/terminal/gb-terminal-workbench-addin.c
@@ -17,58 +17,59 @@
  */
 
 #include <glib/gi18n.h>
+#include <ide.h>
 
 #include "gb-terminal-view.h"
-#include "gb-terminal-document.h"
 #include "gb-terminal-workbench-addin.h"
-#include "gb-view-grid.h"
-#include "gb-workspace.h"
 
 struct _GbTerminalWorkbenchAddin
 {
   GObject         parent_instance;
 
-  GbWorkbench    *workbench;
+  IdeWorkbench   *workbench;
   GbTerminalView *panel_terminal;
 };
 
-static void workbench_addin_iface_init (GbWorkbenchAddinInterface *iface);
+static void workbench_addin_iface_init (IdeWorkbenchAddinInterface *iface);
 
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (GbTerminalWorkbenchAddin,
-                                gb_terminal_workbench_addin,
-                                G_TYPE_OBJECT,
-                                0,
-                                G_IMPLEMENT_INTERFACE (GB_TYPE_WORKBENCH_ADDIN,
-                                                       workbench_addin_iface_init))
+G_DEFINE_TYPE_EXTENDED (GbTerminalWorkbenchAddin,
+                        gb_terminal_workbench_addin,
+                        G_TYPE_OBJECT,
+                        0,
+                        G_IMPLEMENT_INTERFACE (IDE_TYPE_WORKBENCH_ADDIN, workbench_addin_iface_init))
 
 static void
 new_terminal_activate_cb (GSimpleAction            *action,
                           GVariant                 *param,
                           GbTerminalWorkbenchAddin *self)
 {
-  GbTerminalDocument *document;
-  GbViewGrid *view_grid;
+  GbTerminalView *view;
+  IdePerspective *perspective;
 
   g_assert (G_IS_SIMPLE_ACTION (action));
   g_assert (GB_IS_TERMINAL_WORKBENCH_ADDIN (self));
 
-  view_grid = GB_VIEW_GRID (gb_workbench_get_view_grid (self->workbench));
+  perspective = ide_workbench_get_perspective_by_name (self->workbench, "editor");
+  g_assert (IDE_IS_LAYOUT (perspective));
 
-  document = g_object_new (GB_TYPE_TERMINAL_DOCUMENT, NULL);
-  gb_view_grid_focus_document (view_grid, GB_DOCUMENT (document));
+  view = g_object_new (GB_TYPE_TERMINAL_VIEW,
+                       "visible", TRUE,
+                       NULL);
+  gtk_container_add (GTK_CONTAINER (perspective), GTK_WIDGET (view));
+  gtk_widget_grab_focus (GTK_WIDGET (view));
 }
 
 static void
-gb_terminal_workbench_addin_load (GbWorkbenchAddin *addin,
-                                  GbWorkbench      *workbench)
+gb_terminal_workbench_addin_load (IdeWorkbenchAddin *addin,
+                                  IdeWorkbench      *workbench)
 {
   GbTerminalWorkbenchAddin *self = (GbTerminalWorkbenchAddin *)addin;
-  GbWorkspace *workspace;
+  IdePerspective *perspective;
   GtkWidget *bottom_pane;
   g_autoptr(GSimpleAction) action = NULL;
 
   g_assert (GB_IS_TERMINAL_WORKBENCH_ADDIN (self));
-  g_assert (GB_IS_WORKBENCH (workbench));
+  g_assert (IDE_IS_WORKBENCH (workbench));
 
   ide_set_weak_pointer (&self->workbench, workbench);
 
@@ -89,17 +90,19 @@ gb_terminal_workbench_addin_load (GbWorkbenchAddin *addin,
                                  (gpointer *)&self->panel_terminal);
     }
 
-  workspace = GB_WORKSPACE (gb_workbench_get_workspace (workbench));
-  bottom_pane = gb_workspace_get_bottom_pane (workspace);
-  gb_workspace_pane_add_page (GB_WORKSPACE_PANE (bottom_pane),
-                              GTK_WIDGET (self->panel_terminal),
-                              _("Terminal"),
-                              "utilities-terminal-symbolic");
+  perspective = ide_workbench_get_perspective_by_name (workbench, "editor");
+  g_assert (IDE_IS_LAYOUT (perspective));
+
+  bottom_pane = ide_layout_get_bottom_pane (IDE_LAYOUT (perspective));
+  ide_layout_pane_add_page (IDE_LAYOUT_PANE (bottom_pane),
+                            GTK_WIDGET (self->panel_terminal),
+                            _("Terminal"),
+                            "utilities-terminal-symbolic");
 }
 
 static void
-gb_terminal_workbench_addin_unload (GbWorkbenchAddin *addin,
-                                    GbWorkbench      *workbench)
+gb_terminal_workbench_addin_unload (IdeWorkbenchAddin *addin,
+                                    IdeWorkbench      *workbench)
 {
   GbTerminalWorkbenchAddin *self = (GbTerminalWorkbenchAddin *)addin;
 
@@ -122,24 +125,13 @@ gb_terminal_workbench_addin_class_init (GbTerminalWorkbenchAddinClass *klass)
 }
 
 static void
-gb_terminal_workbench_addin_class_finalize (GbTerminalWorkbenchAddinClass *klass)
-{
-}
-
-static void
 gb_terminal_workbench_addin_init (GbTerminalWorkbenchAddin *self)
 {
 }
 
 static void
-workbench_addin_iface_init (GbWorkbenchAddinInterface *iface)
+workbench_addin_iface_init (IdeWorkbenchAddinInterface *iface)
 {
   iface->load = gb_terminal_workbench_addin_load;
   iface->unload = gb_terminal_workbench_addin_unload;
 }
-
-void
-_gb_terminal_workbench_addin_register_type (GTypeModule *module)
-{
-  gb_terminal_workbench_addin_register_type (module);
-}
diff --git a/plugins/terminal/gb-terminal-workbench-addin.h b/plugins/terminal/gb-terminal-workbench-addin.h
index 8d719de..f045077 100644
--- a/plugins/terminal/gb-terminal-workbench-addin.h
+++ b/plugins/terminal/gb-terminal-workbench-addin.h
@@ -19,15 +19,13 @@
 #ifndef GB_TERMINAL_WORKBENCH_ADDIN_H
 #define GB_TERMINAL_WORKBENCH_ADDIN_H
 
-#include "gb-workbench-addin.h"
+#include <glib-object.h>
 
 G_BEGIN_DECLS
 
 #define GB_TYPE_TERMINAL_WORKBENCH_ADDIN (gb_terminal_workbench_addin_get_type())
 
-G_DECLARE_FINAL_TYPE (GbTerminalWorkbenchAddin, gb_terminal_workbench_addin,
-                      GB, TERMINAL_WORKBENCH_ADDIN,
-                      GObject)
+G_DECLARE_FINAL_TYPE (GbTerminalWorkbenchAddin, gb_terminal_workbench_addin, GB, TERMINAL_WORKBENCH_ADDIN, 
GObject)
 
 G_END_DECLS
 
diff --git a/plugins/terminal/terminal.plugin b/plugins/terminal/terminal.plugin
index f99920e..c735216 100644
--- a/plugins/terminal/terminal.plugin
+++ b/plugins/terminal/terminal.plugin
@@ -4,5 +4,6 @@ Name=Terminal
 Description=A terminal for Builder
 Authors=Christian Hergert <christian hergert me>
 Copyright=Copyright © 2015 Christian Hergert
+Depends=editor
 Builtin=true
 Hidden=true


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