summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVictor Kareh <[email protected]>2026-01-13 11:49:29 -0500
committerLuke from DC <[email protected]>2026-01-20 20:36:30 +0000
commit72e82009ab236c2edb16827905b0aeb5bfc61a11 (patch)
tree2cc4062f91e685e7bc8143239a8ff69b96086a69 /src
parent94734444297bc6ba359fdb480dfa1c7be9561944 (diff)
downloadmate-terminal-master.tar.bz2
mate-terminal-master.tar.xz
window: Add icon session persistenceHEADmaster
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.c7
-rw-r--r--src/terminal-window.c36
-rw-r--r--src/terminal-window.h3
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);