diff --git a/gnome-terminal-session.patch b/gnome-terminal-session.patch new file mode 100644 index 0000000..7e143ac --- /dev/null +++ b/gnome-terminal-session.patch @@ -0,0 +1,196 @@ +Index: src/terminal-app.h +=================================================================== +--- src/terminal-app.h (revision 3380) ++++ src/terminal-app.h (working copy) +@@ -93,6 +93,7 @@ + + gboolean terminal_app_handle_options (TerminalApp *app, + TerminalOptions *options, ++ gboolean allow_resume, + GError **error); + + void terminal_app_edit_profile (TerminalApp *app, +Index: src/terminal-options.c +=================================================================== +--- src/terminal-options.c (revision 3380) ++++ src/terminal-options.c (working copy) +@@ -636,10 +636,6 @@ + TerminalOptions *options = data; + InitialTab *it; + +- /* make sure we have some window in case no options were given */ +- if (options->initial_windows == NULL) +- it = ensure_top_tab (options); +- + if (options->execute) + { + if (options->exec_argv == NULL) +@@ -662,6 +658,25 @@ + return TRUE; + } + ++/** ++ * terminal_options_parse: ++ * @working_directory: the default working directory ++ * @display_name: the default X display name ++ * @startup_id: the startup notification ID ++ * @env: the environment as variable=value pairs ++ * @ignore_unknown_options: whether to ignore unknown options when parsing ++ * the arguments ++ * @argcp: (inout) address of the argument count. Changed if any arguments were handled ++ * @argvp: (inout) address of the argument vector. Any parameters understood by ++ * the terminal #GOptionContext are removed ++ * @error: a #GError to fill in ++ * @...: a %NULL terminated list of extra #GOptionGroups ++ * ++ * Parses the argument vector *@argvp. ++ * ++ * Returns: a new #TerminalOptions containing the windows and tabs to open, ++ * or %NULL on error. ++ */ + TerminalOptions * + terminal_options_parse (const char *working_directory, + const char *display_name, +@@ -758,6 +773,17 @@ + return NULL; + } + ++/** ++ * terminal_options_merge_config: ++ * @options: ++ * @key_file: a #GKeyFile containing to merge the options from ++ * @error: a #GError to fill in ++ * ++ * Merges the saved options from @key_file into @options. ++ * ++ * Returns: %TRUE if @key_file was a valid key file containing a stored ++ * terminal configuration, or %FALSE on error ++ */ + gboolean + terminal_options_merge_config (TerminalOptions *options, + GKeyFile *key_file, +@@ -864,7 +890,25 @@ + return TRUE; + } + ++/** ++ * terminal_options_ensure_window: ++ * @options: ++ * ++ * Ensure that @options will contain at least one window to open. ++ */ + void ++terminal_options_ensure_window (TerminalOptions *options) ++{ ++ ensure_top_window (options); ++} ++ ++/** ++ * terminal_options_free: ++ * @options: ++ * ++ * Frees @options. ++ */ ++void + terminal_options_free (TerminalOptions *options) + { + g_list_foreach (options->initial_windows, (GFunc) initial_window_free, NULL); +Index: src/terminal-options.h +=================================================================== +--- src/terminal-options.h (revision 3380) ++++ src/terminal-options.h (working copy) +@@ -97,12 +97,14 @@ + int *argcp, + char ***argvp, + GError **error, +- ...); ++ ...) G_GNUC_NULL_TERMINATED; + + gboolean terminal_options_merge_config (TerminalOptions *options, + GKeyFile *key_file, + GError **error); + ++void terminal_options_ensure_window (TerminalOptions *options); ++ + void terminal_options_free (TerminalOptions *options); + + G_END_DECLS +Index: src/terminal.c +=================================================================== +--- src/terminal.c (revision 3380) ++++ src/terminal.c (working copy) +@@ -475,7 +475,7 @@ + terminal_app_initialize (options->use_factory); + g_signal_connect (terminal_app_get (), "quit", G_CALLBACK (gtk_main_quit), NULL); + +- terminal_app_handle_options (terminal_app_get (), options, NULL); ++ terminal_app_handle_options (terminal_app_get (), options, TRUE /* allow resume */, NULL); + terminal_options_free (options); + + /* Now change directory to $HOME so we don't prevent unmounting, e.g. if the +@@ -499,7 +499,7 @@ + static gboolean + handle_new_terminal_event (TerminalOptions *options) + { +- terminal_app_handle_options (terminal_app_get (), options, NULL); ++ terminal_app_handle_options (terminal_app_get (), options, FALSE /* no resume */, NULL); + + return FALSE; + } +Index: src/terminal-app.c +=================================================================== +--- src/terminal-app.c (revision 3380) ++++ src/terminal-app.c (working copy) +@@ -1643,9 +1643,24 @@ + return global_app; + } + ++/** ++ * terminal_app_handle_options: ++ * @app: ++ * @options: a #TerminalOptions ++ * @allow_resume: whether to merge the terminal configuration from the ++ * saved session on resume ++ * @error: a #GError to fill in ++ * ++ * Processes @options. It loads or saves the terminal configuration, or ++ * opens the specified windows and tabs. ++ * ++ * Returns: %TRUE if @options could be successfully handled, or %FALSE on ++ * error ++ */ + gboolean + terminal_app_handle_options (TerminalApp *app, + TerminalOptions *options, ++ gboolean allow_resume, + GError **error) + { + GList *lw; +@@ -1673,6 +1688,27 @@ + /* fall-through on success */ + } + ++#ifdef WITH_SMCLIENT ++{ ++ EggSMClient *sm_client; ++ ++ sm_client = egg_sm_client_get (); ++ ++ if (allow_resume && egg_sm_client_is_resumed (sm_client)) ++ { ++ GKeyFile *key_file; ++ ++ key_file = egg_sm_client_get_state_file (sm_client); ++ if (key_file != NULL && ++ !terminal_options_merge_config (options, key_file, error)) ++ return FALSE; ++ } ++} ++#endif ++ ++ /* Make sure we option at least one window */ ++ terminal_options_ensure_window (options); ++ + for (lw = options->initial_windows; lw != NULL; lw = lw->next) + { + InitialWindow *iw = lw->data; diff --git a/gnome-terminal.spec b/gnome-terminal.spec index cb1e789..c5d43e8 100644 --- a/gnome-terminal.spec +++ b/gnome-terminal.spec @@ -11,15 +11,17 @@ Summary: Terminal emulator for GNOME Name: gnome-terminal Version: 2.26.0 -Release: 1%{?dist} +Release: 2%{?dist} +License: GPLv2+ and GFDL +Group: User Interface/Desktops URL: http://www.gnome.org/ -Source0: http://download.gnome.org/sources/gnome-terminal/2.25/gnome-terminal-%{version}.tar.bz2 +Source0: http://download.gnome.org/sources/gnome-terminal/2.26/gnome-terminal-%{version}.tar.bz2 # Fix gnome.org Bug 338913 – Terminal resized when switching tabs Patch2: gnome-terminal-2.15.0-338913-revert-336325.patch # From upstream trunk Patch3: tab-switching.patch -License: GPLv2+ and GFDL -Group: User Interface/Desktops +# from upstream +Patch4: gnome-terminal-session.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -54,6 +56,7 @@ clickable URLs. %setup -q %patch2 -p1 -b .338913-revert-336325 %patch3 -p1 -b .tab-switching +%patch4 -p0 -b .session %build @@ -132,6 +135,9 @@ scrollkeeper-update -q %{_sysconfdir}/gconf/schemas/gnome-terminal.schemas %changelog +* Wed Apr 8 2009 Matthias Clasen - 2.26.0-2 +- Incorporate upstream patch to make session saving work better + * Mon Mar 16 2009 Matthias Clasen - 2.26.0-1 - Update to 2.26.0