[Xfce4-commits] [apps/xfce4-terminal] 01/01: Create terminal of desired size instead of default size of 80x24

noreply at xfce.org noreply at xfce.org
Thu May 4 01:23:31 CEST 2017


This is an automated email from the git hooks/post-receive script.

f2404 pushed a commit to branch master
in repository apps/xfce4-terminal.

commit 159676d89c24d4b61c972da28db73645525cf051
Author: Igor <f2404 at yandex.ru>
Date:   Wed May 3 19:20:41 2017 -0400

    Create terminal of desired size instead of default size of 80x24
    
    This allows to avoid resizing the terminal right after creation which fixes
    https://bugzilla.xfce.org/show_bug.cgi?id=13522
---
 terminal/terminal-app.c    | 142 +++++++++++++++++++++------------------------
 terminal/terminal-screen.c |  94 +++++++++++++++++-------------
 terminal/terminal-screen.h |  76 ++++++++++++------------
 terminal/terminal-window.c |   6 --
 4 files changed, 160 insertions(+), 158 deletions(-)

diff --git a/terminal/terminal-app.c b/terminal/terminal-app.c
index a39db03..a177893 100644
--- a/terminal/terminal-app.c
+++ b/terminal/terminal-app.c
@@ -678,18 +678,17 @@ terminal_app_open_window (TerminalApp        *app,
 {
   TerminalTabAttr *tab_attr = NULL;
   GtkWidget       *window;
-  GtkWidget       *terminal;
+  TerminalScreen  *terminal;
   GdkScreen       *screen;
   gchar           *geometry;
   GSList          *lp;
   gboolean         reuse_window = FALSE;
   GdkDisplay      *attr_display;
   gint             attr_screen_num;
-#if GTK_CHECK_VERSION (3, 20, 0) && defined (GDK_WINDOWING_X11)
-  TerminalScreen  *active_terminal;
+#ifdef GDK_WINDOWING_X11
   GdkGravity       gravity = GDK_GRAVITY_NORTH_WEST;
-  gint             mask = NoValue, x, y;
-  guint            width, height;
+  gint             mask = NoValue, x, y, new_x, new_y;
+  guint            width = 1, height = 1, new_width, new_height;
   gint             screen_width = 0, screen_height = 0;
   gint             window_width, window_height;
 #endif
@@ -797,25 +796,6 @@ terminal_app_open_window (TerminalApp        *app,
       TERMINAL_WINDOW (window)->zoom = attr->zoom;
     }
 
-  /* add the tabs */
-  for (lp = attr->tabs; lp != NULL; lp = lp->next)
-    {
-      terminal = g_object_new (TERMINAL_TYPE_SCREEN, NULL);
-
-      tab_attr = lp->data;
-      if (tab_attr->command != NULL)
-        terminal_screen_set_custom_command (TERMINAL_SCREEN (terminal), tab_attr->command);
-      if (tab_attr->directory != NULL)
-        terminal_screen_set_working_directory (TERMINAL_SCREEN (terminal), tab_attr->directory);
-      if (tab_attr->title != NULL)
-        terminal_screen_set_custom_title (TERMINAL_SCREEN (terminal), tab_attr->title);
-      terminal_screen_set_hold (TERMINAL_SCREEN (terminal), tab_attr->hold);
-
-      terminal_window_add (TERMINAL_WINDOW (window), TERMINAL_SCREEN (terminal));
-
-      terminal_screen_launch_child (TERMINAL_SCREEN (terminal));
-    }
-
   if (!attr->drop_down)
     {
       /* don't apply other attributes to the window when reusing, just present it to user */
@@ -825,63 +805,54 @@ terminal_app_open_window (TerminalApp        *app,
           return;
         }
 
-      /* set the window geometry, this can only be set after one of the tabs
-       * has been added, because vte is the geometry widget, so atleast one
-       * call should have been made to terminal_screen_set_window_geometry_hints */
-      if (G_LIKELY (attr->geometry == NULL))
-        g_object_get (G_OBJECT (app->preferences), "misc-default-geometry", &geometry, NULL);
-      else
-        geometry = g_strdup (attr->geometry);
-
       /* try to apply the geometry to the window */
-#if GTK_CHECK_VERSION (3, 20, 0) && defined (GDK_WINDOWING_X11)
+      g_object_get (G_OBJECT (app->preferences), "misc-default-geometry", &geometry, NULL);
+#ifdef GDK_WINDOWING_X11
+      /* defaults */
       mask = XParseGeometry (geometry, &x, &y, &width, &height);
-      if (((mask & WidthValue) && (mask & HeightValue)) || ((mask & XValue) && (mask & YValue)))
-        {
-          /* use geometry from settings if command line parameter doesn't provide it */
-          if (!(mask & WidthValue) || !(mask & HeightValue))
-            {
-              g_free (geometry);
-              g_object_get (G_OBJECT (app->preferences), "misc-default-geometry", &geometry, NULL);
-              XParseGeometry (geometry, NULL, NULL, &width, &height);
-            }
 
-          active_terminal = terminal_window_get_active (TERMINAL_WINDOW (window));
-          if (G_LIKELY (active_terminal != NULL))
-            {
-              /* save window geometry to prevent overriding */
-              terminal_window_set_grid_size (TERMINAL_WINDOW (window), width, height);
-
-              terminal_screen_force_resize_window (active_terminal, GTK_WINDOW (window),
-                                                   width, height);
-            }
+      /* geometry provided via command line parameter */
+      if (G_UNLIKELY (attr->geometry != NULL))
+        {
+          g_free (geometry);
+          geometry = g_strdup (attr->geometry);
+          mask = XParseGeometry (geometry, &new_x, &new_y, &new_width, &new_height);
+
+          if (mask & WidthValue)
+            width = new_width;
+          if (mask & HeightValue)
+            height = new_height;
+          if (mask & XValue)
+            x = new_x;
+          if (mask & YValue)
+            y = new_y;
+        }
 
-          if ((mask & XValue) && (mask & YValue))
-            {
-              screen = gtk_window_get_screen (GTK_WINDOW (window));
+        if ((mask & XValue) || (mask & YValue))
+          {
+            screen = gtk_window_get_screen (GTK_WINDOW (window));
   #if GTK_CHECK_VERSION (3, 22, 0)
-              gdk_window_get_geometry (gdk_screen_get_root_window (screen), NULL, NULL,
-                                       &screen_width, &screen_height);
+            gdk_window_get_geometry (gdk_screen_get_root_window (screen), NULL, NULL,
+                                     &screen_width, &screen_height);
   #else
-              screen_width = gdk_screen_get_width (screen);
-              screen_height = gdk_screen_get_height (screen);
+            screen_width = gdk_screen_get_width (screen);
+            screen_height = gdk_screen_get_height (screen);
   #endif
-              gtk_window_get_default_size (GTK_WINDOW (window), &window_width, &window_height);
-              if (mask & XNegative)
-                {
-                  x = screen_width - window_width + x;
-                  gravity = GDK_GRAVITY_NORTH_EAST;
-                }
-              if (mask & YNegative)
-                {
-                  y = screen_height - window_height + y;
-                  gravity = (mask & XNegative) ? GDK_GRAVITY_SOUTH_EAST : GDK_GRAVITY_SOUTH_WEST;
-                }
-              gtk_window_set_gravity (GTK_WINDOW (window), gravity);
-              gtk_window_move (GTK_WINDOW (window), x, y);
-            }
-        }
-      else
+            gtk_window_get_default_size (GTK_WINDOW (window), &window_width, &window_height);
+            if (mask & XNegative)
+              {
+                x = screen_width - window_width + x;
+                gravity = GDK_GRAVITY_NORTH_EAST;
+              }
+            if (mask & YNegative)
+              {
+                y = screen_height - window_height + y;
+                gravity = (mask & XNegative) ? GDK_GRAVITY_SOUTH_EAST : GDK_GRAVITY_SOUTH_WEST;
+              }
+            gtk_window_set_gravity (GTK_WINDOW (window), gravity);
+            gtk_window_move (GTK_WINDOW (window), x, y);
+          }
+      else if (!(mask & WidthValue) && !(mask & XValue))
 #else
       if (!gtk_window_parse_geometry (GTK_WINDOW (window), geometry))
 #endif
@@ -891,11 +862,32 @@ terminal_app_open_window (TerminalApp        *app,
       g_free (geometry);
     }
 
+  /* add the tabs */
+  for (lp = attr->tabs; lp != NULL; lp = lp->next)
+    {
+      tab_attr = lp->data;
+      terminal = terminal_screen_new (tab_attr->command,
+                                      tab_attr->directory,
+                                      tab_attr->title,
+                                      tab_attr->hold,
+                                      width,
+                                      height);
+
+      terminal_window_add (TERMINAL_WINDOW (window), terminal);
+      terminal_screen_launch_child (terminal);
+    }
+
   /* show the window */
   if (attr->drop_down)
     terminal_window_dropdown_toggle (TERMINAL_WINDOW_DROPDOWN (window), attr->startup_id, reuse_window);
   else
-    gtk_widget_show (window);
+    {
+      /* save window geometry to prevent overriding */
+      terminal_window_set_grid_size (TERMINAL_WINDOW (window), width, height);
+      terminal_screen_force_resize_window (terminal_window_get_active (TERMINAL_WINDOW (window)),
+                                           GTK_WINDOW (window), width, height);
+      gtk_widget_show (window);
+    }
 }
 
 
diff --git a/terminal/terminal-screen.c b/terminal/terminal-screen.c
index b1fee95..d1c6078 100644
--- a/terminal/terminal-screen.c
+++ b/terminal/terminal-screen.c
@@ -144,6 +144,8 @@ static gchar     *terminal_screen_zoom_font                     (TerminalScreen
                                                                  TerminalZoomLevel      zoom);
 static void       terminal_screen_urgent_bell                   (TerminalWidget        *widget,
                                                                  TerminalScreen        *screen);
+static void       terminal_screen_set_custom_command            (TerminalScreen        *screen,
+                                                                 gchar                **command);
 
 
 
@@ -1519,6 +1521,58 @@ terminal_screen_urgent_bell (TerminalWidget *widget,
 
 
 
+static void
+terminal_screen_set_custom_command (TerminalScreen *screen,
+                                    gchar         **command)
+{
+  terminal_return_if_fail (TERMINAL_IS_SCREEN (screen));
+
+  if (G_UNLIKELY (screen->custom_command != NULL))
+    g_strfreev (screen->custom_command);
+
+  if (G_LIKELY (command != NULL && *command != NULL))
+    screen->custom_command = g_strdupv (command);
+  else
+    screen->custom_command = NULL;
+}
+
+
+
+/**
+ * terminal_screen_new:
+ * @command   : Command.
+ * @directory : Working directory.
+ * @title     : Terminal title.
+ * @hold      : Whether to hold the terminal after child exits.
+ * @columns   : Columns (width).
+ * @rows      : Rows (height).
+ *
+ * Creates a terminal screen object.
+ **/
+TerminalScreen *
+terminal_screen_new (gchar    **command,
+                     gchar     *directory,
+                     gchar     *title,
+                     gboolean   hold,
+                     glong      columns,
+                     glong      rows)
+{
+  TerminalScreen *screen = g_object_new (TERMINAL_TYPE_SCREEN, NULL);
+
+  if (command != NULL)
+    terminal_screen_set_custom_command (screen, command);
+  if (directory != NULL)
+    terminal_screen_set_working_directory (screen, directory);
+  if (title != NULL)
+    terminal_screen_set_custom_title (screen, title);
+  screen->hold = hold;
+  vte_terminal_set_size (VTE_TERMINAL (screen->terminal), columns, rows);
+
+  return screen;
+}
+
+
+
 /**
  * terminal_screen_launch_child:
  * @screen  : A #TerminalScreen.
@@ -1589,28 +1643,6 @@ terminal_screen_launch_child (TerminalScreen *screen)
 
 
 /**
- * terminal_screen_set_custom_command:
- * @screen  : A #TerminalScreen.
- * @command :
- **/
-void
-terminal_screen_set_custom_command (TerminalScreen *screen,
-                                    gchar         **command)
-{
-  terminal_return_if_fail (TERMINAL_IS_SCREEN (screen));
-
-  if (G_UNLIKELY (screen->custom_command != NULL))
-    g_strfreev (screen->custom_command);
-
-  if (G_LIKELY (command != NULL && *command != NULL))
-    screen->custom_command = g_strdupv (command);
-  else
-    screen->custom_command = NULL;
-}
-
-
-
-/**
  * terminal_screen_get_custom_title:
  * @screen  : A #TerminalScreen.
  **/
@@ -1990,24 +2022,6 @@ terminal_screen_set_working_directory (TerminalScreen *screen,
 
 
 /**
- * terminal_screen_set_hold:
- * @screen : A #TerminalScreen.
- * @hold   : %TRUE to keep @screen around when the child exits.
- *
- * Sets  whether the terminal screen will be destroyed when
- * the child exits.
- **/
-void
-terminal_screen_set_hold (TerminalScreen *screen,
-                          gboolean        hold)
-{
-  terminal_return_if_fail (TERMINAL_IS_SCREEN (screen));
-  screen->hold = hold;
-}
-
-
-
-/**
  * terminal_screen_has_selection:
  * @screen      : A #TerminalScreen.
  *
diff --git a/terminal/terminal-screen.h b/terminal/terminal-screen.h
index a67ab7c..6e68dfc 100644
--- a/terminal/terminal-screen.h
+++ b/terminal/terminal-screen.h
@@ -35,88 +35,90 @@ G_BEGIN_DECLS
 typedef struct _TerminalScreenClass TerminalScreenClass;
 typedef struct _TerminalScreen      TerminalScreen;
 
-GType        terminal_screen_get_type                     (void) G_GNUC_CONST;
+GType           terminal_screen_get_type                  (void) G_GNUC_CONST;
 
-void         terminal_screen_launch_child                 (TerminalScreen *screen);
+TerminalScreen *terminal_screen_new                       (gchar         **command,
+                                                           gchar          *directory,
+                                                           gchar           *title,
+                                                           gboolean         hold,
+                                                           glong            columns,
+                                                           glong            rows);
 
-void         terminal_screen_set_custom_command           (TerminalScreen *screen,
-                                                           gchar         **command);
-const gchar *terminal_screen_get_custom_title             (TerminalScreen *screen);
-void         terminal_screen_set_custom_title             (TerminalScreen *screen,
+void            terminal_screen_launch_child              (TerminalScreen *screen);
+
+const gchar    *terminal_screen_get_custom_title          (TerminalScreen *screen);
+void            terminal_screen_set_custom_title          (TerminalScreen *screen,
                                                            const gchar    *title);
 
-void         terminal_screen_get_size                     (TerminalScreen *screen,
+void            terminal_screen_get_size                  (TerminalScreen *screen,
                                                            glong          *width_chars,
                                                            glong          *height_chars);
-void         terminal_screen_set_size                     (TerminalScreen *screen,
+void            terminal_screen_set_size                  (TerminalScreen *screen,
                                                            glong           width_chars,
                                                            glong           height_chars);
 
-void         terminal_screen_get_geometry                 (TerminalScreen *screen,
+void            terminal_screen_get_geometry              (TerminalScreen *screen,
                                                            glong          *char_width,
                                                            glong          *char_height,
                                                            gint           *xpad,
                                                            gint           *ypad);
 
-void         terminal_screen_set_window_geometry_hints    (TerminalScreen *screen,
+void            terminal_screen_set_window_geometry_hints (TerminalScreen *screen,
                                                            GtkWindow      *window);
 
-void         terminal_screen_force_resize_window          (TerminalScreen *screen,
+void            terminal_screen_force_resize_window       (TerminalScreen *screen,
                                                            GtkWindow      *window,
                                                            glong           force_columns,
                                                            glong           force_rows);
 
-gchar       *terminal_screen_get_title                    (TerminalScreen *screen);
+gchar          *terminal_screen_get_title                 (TerminalScreen *screen);
 
-const gchar *terminal_screen_get_working_directory        (TerminalScreen *screen);
-void         terminal_screen_set_working_directory        (TerminalScreen *screen,
+const gchar    *terminal_screen_get_working_directory     (TerminalScreen *screen);
+void            terminal_screen_set_working_directory     (TerminalScreen *screen,
                                                            const gchar    *directory);
 
-void         terminal_screen_set_hold                     (TerminalScreen *screen,
-                                                           gboolean        hold);
-
-gboolean     terminal_screen_has_selection                (TerminalScreen *screen);
+gboolean        terminal_screen_has_selection             (TerminalScreen *screen);
 
-void         terminal_screen_copy_clipboard               (TerminalScreen *screen);
-void         terminal_screen_paste_clipboard              (TerminalScreen *screen);
-void         terminal_screen_paste_primary                (TerminalScreen *screen);
+void            terminal_screen_copy_clipboard            (TerminalScreen *screen);
+void            terminal_screen_paste_clipboard           (TerminalScreen *screen);
+void            terminal_screen_paste_primary             (TerminalScreen *screen);
 
-void         terminal_screen_select_all                   (TerminalScreen *screen);
+void            terminal_screen_select_all                (TerminalScreen *screen);
 
-void         terminal_screen_reset                        (TerminalScreen *screen,
+void            terminal_screen_reset                     (TerminalScreen *screen,
                                                            gboolean        clear);
 
-GSList      *terminal_screen_get_restart_command          (TerminalScreen *screen);
+GSList         *terminal_screen_get_restart_command       (TerminalScreen *screen);
 
-void         terminal_screen_reset_activity               (TerminalScreen *screen);
+void            terminal_screen_reset_activity            (TerminalScreen *screen);
 
-GtkWidget   *terminal_screen_get_tab_label                (TerminalScreen *screen);
+GtkWidget      *terminal_screen_get_tab_label             (TerminalScreen *screen);
 
-void         terminal_screen_focus                        (TerminalScreen *screen);
+void            terminal_screen_focus                     (TerminalScreen *screen);
 
-const gchar *terminal_screen_get_encoding                 (TerminalScreen *screen);
+const gchar    *terminal_screen_get_encoding              (TerminalScreen *screen);
 
-void         terminal_screen_set_encoding                 (TerminalScreen *screen,
+void            terminal_screen_set_encoding              (TerminalScreen *screen,
                                                            const gchar    *charset);
 
-void         terminal_screen_search_set_gregex            (TerminalScreen *screen,
+void            terminal_screen_search_set_gregex         (TerminalScreen *screen,
                                                            GRegex         *regex,
                                                            gboolean        wrap_around);
 
-gboolean     terminal_screen_search_has_gregex            (TerminalScreen *screen);
+gboolean        terminal_screen_search_has_gregex         (TerminalScreen *screen);
 
-void         terminal_screen_search_find_next             (TerminalScreen *screen);
+void            terminal_screen_search_find_next          (TerminalScreen *screen);
 
-void         terminal_screen_search_find_previous         (TerminalScreen *screen);
+void            terminal_screen_search_find_previous      (TerminalScreen *screen);
 
-void         terminal_screen_update_scrolling_bar         (TerminalScreen *screen);
+void            terminal_screen_update_scrolling_bar      (TerminalScreen *screen);
 
-void         terminal_screen_update_font                  (TerminalScreen *screen);
+void            terminal_screen_update_font               (TerminalScreen *screen);
 
-void         terminal_screen_set_input_enabled            (TerminalScreen *screen,
+void            terminal_screen_set_input_enabled         (TerminalScreen *screen,
                                                            gboolean        enabled);
 
-void         terminal_screen_save_contents                (TerminalScreen *screen,
+void            terminal_screen_save_contents             (TerminalScreen *screen,
                                                            GOutputStream  *stream,
                                                            GError         *error);
 
diff --git a/terminal/terminal-window.c b/terminal/terminal-window.c
index 639c808..d0b7f33 100644
--- a/terminal/terminal-window.c
+++ b/terminal/terminal-window.c
@@ -1063,12 +1063,6 @@ terminal_window_notebook_page_added (GtkNotebook    *notebook,
       terminal_window_dropdown_get_size (TERMINAL_WINDOW_DROPDOWN (window), screen, &w, &h);
       terminal_screen_set_size (screen, w, h);
     }
-  else
-    {
-      /* force a screen size, needed for misc-default-geometry */
-      terminal_screen_get_size (screen, &w, &h);
-      terminal_window_set_size_force_grid (window, screen, w, h);
-    }
 
   /* regenerate the "Go" menu */
   terminal_window_rebuild_tabs_menu (window);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list