[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