summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);