diff options
Diffstat (limited to 'src/profile-editor.c')
| -rw-r--r-- | src/profile-editor.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/profile-editor.c b/src/profile-editor.c index f4959db..188ccdb 100644 --- a/src/profile-editor.c +++ b/src/profile-editor.c @@ -585,6 +585,77 @@ editor_response_cb (GtkWidget *editor, } static void +icon_browse_button_clicked_cb (GtkWidget *button, + GtkWidget *entry) +{ + GtkWidget *dialog; + GtkFileFilter *filter; + + dialog = gtk_file_chooser_dialog_new (_("Choose A Profile Icon"), + GTK_WINDOW (gtk_widget_get_toplevel (button)), + GTK_FILE_CHOOSER_ACTION_OPEN, + _("_Cancel"), GTK_RESPONSE_CANCEL, + _("_Open"), GTK_RESPONSE_ACCEPT, + NULL); + + filter = gtk_file_filter_new (); + gtk_file_filter_add_pixbuf_formats (filter); + gtk_file_filter_set_name (filter, _("Images")); + gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), filter); + + gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (dialog), TRUE); + + /* Add standard icon folders as shortcots. + * This resolves to something like /usr/share/icons in the file chooser sidebar. */ + gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog), + TERM_DATADIR "/icons", NULL); + gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog), + TERM_DATADIR "/pixmaps", NULL); + + /* Pre-select the current icon file, resolving theme names via the icon theme */ + const char *current = gtk_entry_get_text (GTK_ENTRY (entry)); + if (current && current[0] != '\0') + { + if (g_path_is_absolute (current)) + { + gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), current); + } + else + { + GtkIconTheme *icon_theme; + GtkIconInfo *info; + + icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (button)); + info = gtk_icon_theme_lookup_icon (icon_theme, current, 48, 0); + if (info) + { + gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), + gtk_icon_info_get_filename (info)); + g_object_unref (info); + } + } + } + else + { + /* Use /usr/share/icons as the initial folder */ + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), + TERM_DATADIR "/icons"); + } + + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + { + char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + if (filename) + { + gtk_entry_set_text (GTK_ENTRY (entry), filename); + g_free (filename); + } + } + + gtk_widget_destroy (dialog); +} + +static void setup_background_filechooser (GtkWidget *filechooser, TerminalProfile *profile) { @@ -842,6 +913,11 @@ terminal_profile_edit (TerminalProfile *profile, g_signal_connect (w, "changed", G_CALLBACK (visible_name_entry_changed_cb), editor); + w = GTK_WIDGET (gtk_builder_get_object (builder, "profile-icon-browse-button")); + g_signal_connect (w, "clicked", + G_CALLBACK (icon_browse_button_clicked_cb), + gtk_builder_get_object (builder, "profile-icon-entry")); + g_signal_connect (gtk_builder_get_object (builder, "reset-compat-defaults-button"), "clicked", G_CALLBACK (reset_compat_defaults_cb), @@ -868,6 +944,7 @@ terminal_profile_edit (TerminalProfile *profile, CONNECT ("foreground-colorpicker", TERMINAL_PROFILE_FOREGROUND_COLOR); CONNECT ("image-radiobutton", TERMINAL_PROFILE_BACKGROUND_TYPE); CONNECT ("login-shell-checkbutton", TERMINAL_PROFILE_LOGIN_SHELL); + CONNECT ("profile-icon-entry", TERMINAL_PROFILE_ICON); CONNECT ("profile-name-entry", TERMINAL_PROFILE_VISIBLE_NAME); CONNECT ("scrollback-lines-spinbutton", TERMINAL_PROFILE_SCROLLBACK_LINES); CONNECT ("scrollback-unlimited-checkbutton", TERMINAL_PROFILE_SCROLLBACK_UNLIMITED); |
