diff options
| author | Victor Kareh <[email protected]> | 2026-01-13 11:49:29 -0500 |
|---|---|---|
| committer | Luke from DC <[email protected]> | 2026-01-20 20:36:30 +0000 |
| commit | 72e82009ab236c2edb16827905b0aeb5bfc61a11 (patch) | |
| tree | 2cc4062f91e685e7bc8143239a8ff69b96086a69 /src | |
| parent | 94734444297bc6ba359fdb480dfa1c7be9561944 (diff) | |
| download | mate-terminal-master.tar.bz2 mate-terminal-master.tar.xz | |
Store and persist window icons in session config files. Icons set via
the command line are now saved during session management and restored
when loading config files.
Also adds error reporting for invalid icon file paths.
Diffstat (limited to 'src')
| -rw-r--r-- | src/terminal-app.c | 7 | ||||
| -rw-r--r-- | src/terminal-window.c | 36 | ||||
| -rw-r--r-- | src/terminal-window.h | 3 |
3 files changed, 40 insertions, 6 deletions
diff --git a/src/terminal-app.c b/src/terminal-app.c index 48f8b0b..831f42f 100644 --- a/src/terminal-app.c +++ b/src/terminal-app.c @@ -1798,12 +1798,7 @@ terminal_app_handle_options (TerminalApp *app, gtk_window_set_role (GTK_WINDOW (window), iw->role); if (iw->icon) - { - if (g_path_is_absolute (iw->icon)) - gtk_window_set_icon_from_file (GTK_WINDOW (window), iw->icon, NULL); - else - gtk_window_set_icon_name (GTK_WINDOW (window), iw->icon); - } + terminal_window_set_icon (window, iw->icon); if (iw->force_menubar_state) terminal_window_set_menubar_visible (window, iw->menubar_state); diff --git a/src/terminal-window.c b/src/terminal-window.c index 92ea108..75e5fd8 100644 --- a/src/terminal-window.c +++ b/src/terminal-window.c @@ -109,6 +109,8 @@ struct _TerminalWindowPrivate /* Workaround until gtk+ bug #535557 is fixed */ guint icon_title_set : 1; + char *icon; + gint64 focus_time; /* should we copy selection to clibpoard */ @@ -2489,6 +2491,8 @@ terminal_window_finalize (GObject *object) gtk_dialog_response (GTK_DIALOG (priv->search_find_dialog), GTK_RESPONSE_DELETE_EVENT); + g_free (priv->icon); + G_OBJECT_CLASS (terminal_window_parent_class)->finalize (object); } @@ -2836,6 +2840,34 @@ terminal_window_get_menubar_visible (TerminalWindow *window) return priv->menubar_visible; } +void +terminal_window_set_icon (TerminalWindow *window, + const char *icon) +{ + TerminalWindowPrivate *priv = window->priv; + + g_free (priv->icon); + priv->icon = g_strdup (icon); + + if (icon == NULL || icon[0] == '\0') + return; + + if (g_path_is_absolute (icon)) + { + GError *error = NULL; + if (!gtk_window_set_icon_from_file (GTK_WINDOW (window), icon, &error)) + { + g_printerr (_("Could not load icon from \"%s\": %s\n"), + icon, error->message); + g_error_free (error); + } + } + else + { + gtk_window_set_icon_name (GTK_WINDOW (window), icon); + } +} + GtkWidget * terminal_window_get_notebook (TerminalWindow *window) { @@ -4610,6 +4642,10 @@ terminal_window_save_state (TerminalWindow *window, g_key_file_set_string (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_ROLE, gtk_window_get_role (GTK_WINDOW (window))); + if (priv->icon) + g_key_file_set_string (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_ICON, + priv->icon); + state = gdk_window_get_state (gtk_widget_get_window (GTK_WIDGET (window))); if (state & GDK_WINDOW_STATE_MAXIMIZED) g_key_file_set_boolean (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_MAXIMIZED, TRUE); diff --git a/src/terminal-window.h b/src/terminal-window.h index b96afab..86b8e28 100644 --- a/src/terminal-window.h +++ b/src/terminal-window.h @@ -78,6 +78,9 @@ void terminal_window_set_menubar_visible (TerminalWindow *window, gboolean setting); gboolean terminal_window_get_menubar_visible (TerminalWindow *window); +void terminal_window_set_icon (TerminalWindow *window, + const char *icon); + void terminal_window_switch_screen (TerminalWindow *window, TerminalScreen *screen); TerminalScreen* terminal_window_get_active (TerminalWindow *window); |
