[gnome-builder] terminal: add close-on-exit property



commit e2174aa3b9c10e4b63255c0efad1f234d5123f69
Author: Christian Hergert <chergert redhat com>
Date:   Thu May 2 11:22:21 2019 -0700

    terminal: add close-on-exit property
    
    We can plumb this into a GSetting later on.

 src/libide/terminal/ide-terminal-page-private.h |  1 +
 src/libide/terminal/ide-terminal-page.c         | 25 +++++++++++++++++++++++--
 2 files changed, 24 insertions(+), 2 deletions(-)
---
diff --git a/src/libide/terminal/ide-terminal-page-private.h b/src/libide/terminal/ide-terminal-page-private.h
index 1176f87a0..11be8da3e 100644
--- a/src/libide/terminal/ide-terminal-page-private.h
+++ b/src/libide/terminal/ide-terminal-page-private.h
@@ -47,6 +47,7 @@ struct _IdeTerminalPage
   guint                did_defered_setup_in_realize : 1;
   guint                manage_spawn : 1;
   guint                respawn_on_exit : 1;
+  guint                close_on_exit : 1;
   guint                needs_attention : 1;
 };
 
diff --git a/src/libide/terminal/ide-terminal-page.c b/src/libide/terminal/ide-terminal-page.c
index 9b73fedcd..f1b783a38 100644
--- a/src/libide/terminal/ide-terminal-page.c
+++ b/src/libide/terminal/ide-terminal-page.c
@@ -44,6 +44,7 @@ G_DEFINE_TYPE (IdeTerminalPage, ide_terminal_page, IDE_TYPE_PAGE)
 
 enum {
   PROP_0,
+  PROP_CLOSE_ON_EXIT,
   PROP_LAUNCHER,
   PROP_MANAGE_SPAWN,
   PROP_RESPAWN_ON_EXIT,
@@ -104,7 +105,8 @@ ide_terminal_page_spawn_cb (GObject      *object,
 
   if (!self->respawn_on_exit)
     {
-      gtk_widget_destroy (GTK_WIDGET (self));
+      if (self->close_on_exit)
+        gtk_widget_destroy (GTK_WIDGET (self));
       return;
     }
 
@@ -288,9 +290,12 @@ style_context_changed (GtkStyleContext *style_context,
 static IdePage *
 gbp_terminal_page_create_split (IdePage *page)
 {
-  g_assert (IDE_IS_TERMINAL_PAGE (page));
+  IdeTerminalPage *self = (IdeTerminalPage *)page;
+
+  g_assert (IDE_IS_TERMINAL_PAGE (self));
 
   return g_object_new (IDE_TYPE_TERMINAL_PAGE,
+                       "launcher", self->launcher,
                        "visible", TRUE,
                        NULL);
 }
@@ -373,6 +378,10 @@ ide_terminal_page_get_property (GObject    *object,
 
   switch (prop_id)
     {
+    case PROP_CLOSE_ON_EXIT:
+      g_value_set_boolean (value, self->close_on_exit);
+      break;
+
     case PROP_LAUNCHER:
       g_value_set_object (value, self->launcher);
       break;
@@ -404,6 +413,10 @@ ide_terminal_page_set_property (GObject      *object,
 
   switch (prop_id)
     {
+    case PROP_CLOSE_ON_EXIT:
+      self->close_on_exit = g_value_get_boolean (value);
+      break;
+
     case PROP_MANAGE_SPAWN:
       self->manage_spawn = g_value_get_boolean (value);
       break;
@@ -448,6 +461,13 @@ ide_terminal_page_class_init (IdeTerminalPageClass *klass)
   gtk_widget_class_bind_template_child (widget_class, IdeTerminalPage, top_scrollbar);
   gtk_widget_class_bind_template_child (widget_class, IdeTerminalPage, terminal_overlay_top);
 
+  properties [PROP_CLOSE_ON_EXIT] =
+    g_param_spec_boolean ("close-on-exit",
+                          "Close on Exit",
+                          "Close on Exit",
+                          TRUE,
+                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
   properties [PROP_MANAGE_SPAWN] =
     g_param_spec_boolean ("manage-spawn",
                           "Manage Spawn",
@@ -484,6 +504,7 @@ ide_terminal_page_init (IdeTerminalPage *self)
 {
   GtkStyleContext *style_context;
 
+  self->close_on_exit = TRUE;
   self->respawn_on_exit = TRUE;
   self->manage_spawn = TRUE;
 


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