Updating branch refs/heads/master to cfd38dba452380c76ddfc3b73724e05a9b1d2b9a (commit) from 1db926495fb9020ec01f28fd6eb32a8e24e07dbc (commit)
commit cfd38dba452380c76ddfc3b73724e05a9b1d2b9a Author: Nick Schermer <n...@xfce.org> Date: Tue Dec 25 16:12:51 2012 +0100 Allow re-using of last window with --tab. doc/xfce4-terminal.1.xml | 1 + terminal/terminal-app.c | 64 +++++++++++++++++++++++++++---------------- terminal/terminal-options.c | 19 +++++++++++- terminal/terminal-options.h | 8 +++-- 4 files changed, 63 insertions(+), 29 deletions(-) diff --git a/doc/xfce4-terminal.1.xml b/doc/xfce4-terminal.1.xml index 16d711c..bc82d5b 100644 --- a/doc/xfce4-terminal.1.xml +++ b/doc/xfce4-terminal.1.xml @@ -209,6 +209,7 @@ </term> <listitem> <para>Open a new tab in the last-specified window; more than one of these options can be provided.</para> + <para>If you use this as the first option, without --window separators, the last window will be re-used.</para> </listitem> </varlistentry> diff --git a/terminal/terminal-app.c b/terminal/terminal-app.c index c14b7c7..f3e72cc 100644 --- a/terminal/terminal-app.c +++ b/terminal/terminal-app.c @@ -527,36 +527,48 @@ terminal_app_open_window (TerminalApp *app, GdkScreen *screen; gchar *geometry; GSList *lp; + gboolean reuse_window = FALSE; terminal_return_if_fail (TERMINAL_IS_APP (app)); terminal_return_if_fail (attr != NULL); - window = terminal_app_create_window (app, - attr->fullscreen, - attr->menubar, - attr->borders, - attr->toolbars); - - if (attr->role != NULL) - gtk_window_set_role (GTK_WINDOW (window), attr->role); - if (attr->startup_id != NULL) - gtk_window_set_startup_id (GTK_WINDOW (window), attr->startup_id); - if (attr->maximize) - gtk_window_maximize (GTK_WINDOW (window)); - - if (attr->icon != NULL) + if (attr->reuse_last_window + && app->windows != NULL) { - if (g_path_is_absolute (attr->icon)) - gtk_window_set_icon_from_file (GTK_WINDOW (window), attr->icon, NULL); - else - gtk_window_set_icon_name (GTK_WINDOW (window), attr->icon); + /* open the tabs in an existing window */ + window = app->windows->data; + reuse_window = TRUE; } - - screen = terminal_app_find_screen (attr->display); - if (G_LIKELY (screen != NULL)) + else { - gtk_window_set_screen (GTK_WINDOW (window), screen); - g_object_unref (G_OBJECT (screen)); + /* create new window */ + window = terminal_app_create_window (app, + attr->fullscreen, + attr->menubar, + attr->borders, + attr->toolbars); + + if (attr->role != NULL) + gtk_window_set_role (GTK_WINDOW (window), attr->role); + if (attr->startup_id != NULL) + gtk_window_set_startup_id (GTK_WINDOW (window), attr->startup_id); + if (attr->maximize) + gtk_window_maximize (GTK_WINDOW (window)); + + if (attr->icon != NULL) + { + if (g_path_is_absolute (attr->icon)) + gtk_window_set_icon_from_file (GTK_WINDOW (window), attr->icon, NULL); + else + gtk_window_set_icon_name (GTK_WINDOW (window), attr->icon); + } + + screen = terminal_app_find_screen (attr->display); + if (G_LIKELY (screen != NULL)) + { + gtk_window_set_screen (GTK_WINDOW (window), screen); + g_object_unref (G_OBJECT (screen)); + } } for (lp = attr->tabs; lp != NULL; lp = lp->next) @@ -577,6 +589,10 @@ terminal_app_open_window (TerminalApp *app, terminal_screen_launch_child (TERMINAL_SCREEN (terminal)); } + /* don't apply other attributes to teh window when reusing */ + if (reuse_window) + 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 */ @@ -627,7 +643,7 @@ terminal_app_process (TerminalApp *app, { GSList *attrs, *lp; - attrs = terminal_window_attr_parse (argc, argv, error); + attrs = terminal_window_attr_parse (argc, argv, app->windows != NULL, error); if (G_UNLIKELY (attrs == NULL)) return FALSE; diff --git a/terminal/terminal-options.c b/terminal/terminal-options.c index 91fd9e0..332d22b 100644 --- a/terminal/terminal-options.c +++ b/terminal/terminal-options.c @@ -183,6 +183,7 @@ terminal_options_parse (gint argc, GSList * terminal_window_attr_parse (gint argc, gchar **argv, + gboolean can_reuse_tab, GError **error) { TerminalWindowAttr *win_attr; @@ -401,11 +402,24 @@ terminal_window_attr_parse (gint argc, } else if (terminal_option_cmp ("tab", 0, argc, argv, &n, NULL)) { - tab_attr = g_slice_new0 (TerminalTabAttr); - win_attr->tabs = g_slist_append (win_attr->tabs, tab_attr); + if (n == 4 && can_reuse_tab) + { + /* tab is the first user option, reuse existing window */ + win_attr->reuse_last_window = TRUE; + } + else + { + /* add new tab */ + tab_attr = g_slice_new0 (TerminalTabAttr); + win_attr->tabs = g_slist_append (win_attr->tabs, tab_attr); + } } else if (terminal_option_cmp ("window", 0, argc, argv, &n, NULL)) { + /* multiple windows, don't reuse */ + win_attr->reuse_last_window = FALSE; + + /* setup new window */ win_attr = terminal_window_attr_new (); tab_attr = win_attr->tabs->data; attrs = g_slist_append (attrs, win_attr); @@ -445,6 +459,7 @@ unknown_option: win_attr->display = g_strdup (default_display); } } + g_free (default_directory); g_free (default_display); diff --git a/terminal/terminal-options.h b/terminal/terminal-options.h index 98d06ca..b8d4074 100644 --- a/terminal/terminal-options.h +++ b/terminal/terminal-options.h @@ -41,7 +41,7 @@ struct _TerminalTabAttr gchar **command; gchar *directory; gchar *title; - gboolean hold; + guint hold : 1; }; struct _TerminalWindowAttr @@ -52,11 +52,12 @@ struct _TerminalWindowAttr gchar *role; gchar *startup_id; gchar *icon; - gboolean fullscreen; + guint fullscreen : 1; TerminalVisibility menubar; TerminalVisibility borders; TerminalVisibility toolbars; - gboolean maximize; + guint maximize : 1; + guint reuse_last_window : 1; }; void terminal_options_parse (gint argc, @@ -68,6 +69,7 @@ void terminal_options_parse (gint argc, GSList *terminal_window_attr_parse (gint argc, gchar **argv, + gboolean can_reuse_tab, GError **error); TerminalWindowAttr *terminal_window_attr_new (void); _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits