29
29
#include "profile-editor.h"
30
30
#include "terminal-util.h"
32
/* Behdad estimates this to about 1 byte/cell, approx. */
33
#define BYTES_PER_LINE ((goffset) 80)
35
32
typedef struct _TerminalColorScheme TerminalColorScheme;
37
34
struct _TerminalColorScheme
113
110
GtkWidget *editor)
115
112
TerminalBackgroundType bg_type;
116
gboolean use_custom_locked, palette_locked, bg_type_locked, scrollback_lines_locked;
113
gboolean use_custom_locked, palette_locked, bg_type_locked;
117
114
const char *prop_name;
176
173
if (!prop_name ||
177
174
prop_name == I_(TERMINAL_PROFILE_FOREGROUND_COLOR) ||
178
175
prop_name == I_(TERMINAL_PROFILE_BACKGROUND_COLOR) ||
176
prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR) ||
177
prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG) ||
179
178
prop_name == I_(TERMINAL_PROFILE_USE_THEME_COLORS))
181
gboolean fg_locked, bg_locked, use_theme_colors;
180
gboolean bg_locked, use_theme_colors, fg_locked;
182
use_theme_colors = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_THEME_COLORS);
183
183
fg_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_FOREGROUND_COLOR);
184
184
bg_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKGROUND_COLOR);
185
use_theme_colors = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_THEME_COLORS);
187
186
SET_SENSITIVE ("foreground-colorpicker", !use_theme_colors && !fg_locked);
188
187
SET_SENSITIVE ("foreground-colorpicker-label", !use_theme_colors && !fg_locked);
192
191
SET_SENSITIVE ("color-scheme-combobox-label", !use_theme_colors && !fg_locked && !bg_locked);
195
prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR) ||
196
prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG) ||
197
prop_name == I_(TERMINAL_PROFILE_USE_THEME_COLORS))
199
gboolean bold_locked, bold_same_as_fg_locked, bold_same_as_fg, use_theme_colors;
201
use_theme_colors = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_THEME_COLORS);
202
bold_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_BOLD_COLOR);
203
bold_same_as_fg_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG);
204
bold_same_as_fg = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG);
206
SET_SENSITIVE ("bold-color-same-as-fg-checkbox", !use_theme_colors && !bold_same_as_fg_locked);
207
SET_SENSITIVE ("bold-colorpicker", !use_theme_colors && !bold_locked && !bold_same_as_fg);
208
SET_SENSITIVE ("bold-colorpicker-label", !use_theme_colors && ((!bold_same_as_fg && !bold_locked) || !bold_same_as_fg_locked));
195
211
if (!prop_name || prop_name == I_(TERMINAL_PROFILE_VISIBLE_NAME))
196
212
SET_SENSITIVE ("profile-name-entry",
197
213
!terminal_profile_property_locked (profile, TERMINAL_PROFILE_VISIBLE_NAME));
220
236
SET_SENSITIVE ("word-chars-entry",
221
237
!terminal_profile_property_locked (profile, TERMINAL_PROFILE_WORD_CHARS));
240
prop_name == I_(TERMINAL_PROFILE_DEFAULT_SIZE_COLUMNS) ||
241
prop_name == I_(TERMINAL_PROFILE_DEFAULT_SIZE_ROWS))
243
gboolean columns_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_DEFAULT_SIZE_COLUMNS);
244
gboolean rows_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_DEFAULT_SIZE_ROWS);
246
SET_SENSITIVE ("default-size-label", !columns_locked || !rows_locked);
247
SET_SENSITIVE ("default-size-columns-label", !columns_locked);
248
SET_SENSITIVE ("default-size-columns-spinbutton", !columns_locked);
249
SET_SENSITIVE ("default-size-rows-label", !rows_locked);
250
SET_SENSITIVE ("default-size-rows-spinbutton", !rows_locked);
223
253
if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLLBAR_POSITION))
224
254
SET_SENSITIVE ("scrollbar-position-combobox",
225
255
!terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLLBAR_POSITION));
227
if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_LINES))
258
prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_LINES) ||
259
prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_UNLIMITED))
229
scrollback_lines_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLLBACK_LINES);
261
gboolean scrollback_lines_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLLBACK_LINES);
262
gboolean scrollback_unlimited_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLLBACK_UNLIMITED);
263
gboolean scrollback_unlimited = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLLBACK_UNLIMITED);
231
265
SET_SENSITIVE ("scrollback-label", !scrollback_lines_locked);
232
SET_SENSITIVE ("scrollback-box", !scrollback_lines_locked);
266
SET_SENSITIVE ("scrollback-box", !scrollback_lines_locked && !scrollback_unlimited);
267
SET_SENSITIVE ("scrollback-unlimited-checkbutton", !scrollback_lines_locked && !scrollback_unlimited_locked);
235
270
if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE))
280
315
TerminalProfile *profile)
284
319
i = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
286
321
if (i < G_N_ELEMENTS (color_schemes))
288
323
g_signal_handlers_block_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo);
309
344
fg = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_FOREGROUND_COLOR);
310
345
bg = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_BACKGROUND_COLOR);
312
for (i = 0; i < G_N_ELEMENTS (color_schemes); ++i)
314
if (fg && gdk_color_equal (fg, &color_schemes[i].foreground) &&
315
bg && gdk_color_equal (bg, &color_schemes[i].background))
349
for (i = 0; i < G_N_ELEMENTS (color_schemes); ++i)
351
if (gdk_color_equal (fg, &color_schemes[i].foreground) &&
352
gdk_color_equal (bg, &color_schemes[i].background))
358
i = G_N_ELEMENTS (color_schemes);
318
360
/* If we didn't find a match, then we get the last combo box item which is "custom" */
412
custom_command_entry_changed_cb (GtkWidget *entry)
454
custom_command_entry_changed_cb (GtkEntry *entry)
456
#if GTK_CHECK_VERSION (2, 16, 0)
414
457
const char *command;
415
458
GError *error = NULL;
417
command = gtk_entry_get_text (GTK_ENTRY (entry));
460
command = gtk_entry_get_text (entry);
419
462
if (g_shell_parse_argv (command, NULL, NULL, &error))
423
gtk_widget_set_tooltip_text (entry, NULL);
425
mod = gtk_widget_get_modifier_style (entry);
427
mod->color_flags[GTK_STATE_NORMAL] &= ~GTK_RC_TEXT;
429
gtk_widget_modify_style (entry, mod);
430
/* caution, mod is potentially destroyed at this point */
464
gtk_entry_set_icon_from_stock (entry, GTK_PACK_END, NULL);
470
gtk_entry_set_icon_from_stock (entry, GTK_PACK_END, GTK_STOCK_DIALOG_WARNING);
437
472
tooltip = g_strdup_printf (_("Error parsing command: %s"), error->message);
473
gtk_entry_set_icon_tooltip_text (entry, GTK_PACK_END, tooltip);
438
476
g_error_free (error);
440
gtk_widget_set_tooltip_text (entry, tooltip);
443
gdk_color_parse ("red", &color);
444
gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &color);
478
#endif /* GTK+ >= 2.16.0 */
463
scrollback_lines_spin_button_changed_cb (GtkSpinButton *button,
470
lines = gtk_spin_button_get_value (button);
471
kbtext = g_format_size_for_display (((goffset) (lines + 0.5)) * BYTES_PER_LINE);
472
/* Translators: %s will be a data size, e.g. "(about 500kB)" */
473
text = g_strdup_printf (_("(about %s)"), kbtext);
474
gtk_label_set_text (label, text);
480
496
reset_compat_defaults_cb (GtkWidget *button,
481
497
TerminalProfile *profile)
496
512
i = G_N_ELEMENTS (color_schemes);
499
gtk_combo_box_prepend_text (GTK_COMBO_BOX (combo_box),
515
gtk_combo_box_prepend_text (GTK_COMBO_BOX (combo_box),
500
516
_(color_schemes[--i].name));
781
797
#define CONNECT(name, prop) CONNECT_WITH_FLAGS (name, prop, 0)
782
798
#define SET_ENUM_VALUE(name, value) g_object_set_data (gtk_builder_get_object (builder, name), "enum-value", GINT_TO_POINTER (value))
784
g_signal_connect (GTK_WIDGET (gtk_builder_get_object (builder, "profile-name-entry")),
800
g_signal_connect (GTK_WIDGET (gtk_builder_get_object (builder, "custom-command-entry")),
786
802
G_CALLBACK (custom_command_entry_changed_cb), NULL);
787
803
g_signal_connect (GTK_WIDGET (gtk_builder_get_object (builder, "profile-name-entry")),
789
805
G_CALLBACK (visible_name_entry_changed_cb), editor);
790
g_signal_connect (GTK_WIDGET (gtk_builder_get_object (builder, "scrollback-lines-spinbutton")),
792
G_CALLBACK (scrollback_lines_spin_button_changed_cb),
793
GTK_WIDGET (gtk_builder_get_object (builder, "scrollback-kb-label")));
795
807
g_signal_connect (gtk_builder_get_object (builder, "reset-compat-defaults-button"),
804
816
CONNECT ("background-colorpicker", TERMINAL_PROFILE_BACKGROUND_COLOR);
805
817
CONNECT ("background-image-filechooser", TERMINAL_PROFILE_BACKGROUND_IMAGE_FILE);
806
818
CONNECT ("backspace-binding-combobox", TERMINAL_PROFILE_BACKSPACE_BINDING);
819
CONNECT ("bold-color-same-as-fg-checkbox", TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG);
820
CONNECT ("bold-colorpicker", TERMINAL_PROFILE_BOLD_COLOR);
807
821
CONNECT ("cursor-shape-combobox", TERMINAL_PROFILE_CURSOR_SHAPE);
808
822
CONNECT ("custom-command-entry", TERMINAL_PROFILE_CUSTOM_COMMAND);
809
823
CONNECT ("darken-background-scale", TERMINAL_PROFILE_BACKGROUND_DARKNESS);
824
CONNECT ("default-size-columns-spinbutton", TERMINAL_PROFILE_DEFAULT_SIZE_COLUMNS);
825
CONNECT ("default-size-rows-spinbutton", TERMINAL_PROFILE_DEFAULT_SIZE_ROWS);
810
826
CONNECT ("delete-binding-combobox", TERMINAL_PROFILE_DELETE_BINDING);
811
827
CONNECT ("exit-action-combobox", TERMINAL_PROFILE_EXIT_ACTION);
812
828
CONNECT ("font-selector", TERMINAL_PROFILE_FONT);
814
830
CONNECT ("image-radiobutton", TERMINAL_PROFILE_BACKGROUND_TYPE);
815
831
CONNECT ("login-shell-checkbutton", TERMINAL_PROFILE_LOGIN_SHELL);
816
832
CONNECT ("profile-name-entry", TERMINAL_PROFILE_VISIBLE_NAME);
833
CONNECT ("scrollback-lines-spinbutton", TERMINAL_PROFILE_SCROLLBACK_LINES);
834
CONNECT ("scrollback-unlimited-checkbutton", TERMINAL_PROFILE_SCROLLBACK_UNLIMITED);
817
835
CONNECT ("scroll-background-checkbutton", TERMINAL_PROFILE_SCROLL_BACKGROUND);
818
836
CONNECT ("scrollbar-position-combobox", TERMINAL_PROFILE_SCROLLBAR_POSITION);
819
837
CONNECT ("scroll-on-keystroke-checkbutton", TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE);
829
847
CONNECT ("use-theme-colors-checkbutton", TERMINAL_PROFILE_USE_THEME_COLORS);
830
848
CONNECT ("word-chars-entry", TERMINAL_PROFILE_WORD_CHARS);
831
849
CONNECT_WITH_FLAGS ("bell-checkbutton", TERMINAL_PROFILE_SILENT_BELL, FLAG_INVERT_BOOL);
832
CONNECT_WITH_FLAGS ("scrollback-lines-spinbutton", TERMINAL_PROFILE_SCROLLBACK_LINES, 0);
835
852
#undef CONNECT_WITH_FLAGS