~ubuntu-branches/debian/sid/gnome-terminal/sid

« back to all changes in this revision

Viewing changes to src/profile-editor.c

  • Committer: Bazaar Package Importer
  • Author(s): Sebastian Dröge
  • Date: 2010-05-04 09:37:18 UTC
  • mfrom: (1.5.1 upstream) (10.2.1 sid)
  • Revision ID: james.westby@ubuntu.com-20100504093718-u14jqygc9o15vmmg
Tags: 2.30.1-1
New upstream bugfix release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
#include "profile-editor.h"
30
30
#include "terminal-util.h"
31
31
 
32
 
/* Behdad estimates this to about 1 byte/cell, approx. */
33
 
#define BYTES_PER_LINE ((goffset) 80)
34
 
 
35
32
typedef struct _TerminalColorScheme TerminalColorScheme;
36
33
 
37
34
struct _TerminalColorScheme
113
110
                               GtkWidget *editor)
114
111
{
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;
118
115
 
119
116
  if (pspec)
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))
180
179
    {
181
 
      gboolean fg_locked, bg_locked, use_theme_colors;
 
180
      gboolean bg_locked, use_theme_colors, fg_locked;
182
181
 
 
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);
186
185
 
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);
193
192
    }
194
193
 
 
194
  if (!prop_name ||
 
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))
 
198
    {
 
199
      gboolean bold_locked, bold_same_as_fg_locked, bold_same_as_fg, use_theme_colors;
 
200
 
 
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);
 
205
 
 
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));
 
209
    }
 
210
 
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));
222
238
 
 
239
  if (!prop_name ||
 
240
      prop_name == I_(TERMINAL_PROFILE_DEFAULT_SIZE_COLUMNS) ||
 
241
      prop_name == I_(TERMINAL_PROFILE_DEFAULT_SIZE_ROWS))
 
242
    {
 
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);
 
245
 
 
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);
 
251
    }
 
252
 
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));
226
256
 
227
 
  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_LINES))
 
257
  if (!prop_name ||
 
258
      prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_LINES) ||
 
259
      prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_UNLIMITED))
228
260
    {
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);
230
264
 
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);
233
268
    }
234
269
  
235
270
  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE))
280
315
                               TerminalProfile *profile)
281
316
{
282
317
  guint i;
283
 
  
 
318
 
284
319
  i = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
285
 
  
 
320
 
286
321
  if (i < G_N_ELEMENTS (color_schemes))
287
322
    {
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);
311
346
 
312
 
  for (i = 0; i < G_N_ELEMENTS (color_schemes); ++i)
313
 
    {
314
 
      if (fg && gdk_color_equal (fg, &color_schemes[i].foreground) &&
315
 
          bg && gdk_color_equal (bg, &color_schemes[i].background))
316
 
        break;
 
347
  if (fg && bg)
 
348
    {
 
349
      for (i = 0; i < G_N_ELEMENTS (color_schemes); ++i)
 
350
        {
 
351
          if (gdk_color_equal (fg, &color_schemes[i].foreground) &&
 
352
              gdk_color_equal (bg, &color_schemes[i].background))
 
353
            break;
 
354
        }
 
355
    }
 
356
  else
 
357
    {
 
358
      i = G_N_ELEMENTS (color_schemes);
317
359
    }
318
360
  /* If we didn't find a match, then we get the last combo box item which is "custom" */
319
361
 
409
451
}
410
452
 
411
453
static void
412
 
custom_command_entry_changed_cb (GtkWidget *entry)
 
454
custom_command_entry_changed_cb (GtkEntry *entry)
413
455
{
 
456
#if GTK_CHECK_VERSION (2, 16, 0)
414
457
  const char *command;
415
458
  GError *error = NULL;
416
459
 
417
 
  command = gtk_entry_get_text (GTK_ENTRY (entry));
 
460
  command = gtk_entry_get_text (entry);
418
461
 
419
462
  if (g_shell_parse_argv (command, NULL, NULL, &error))
420
463
    {
421
 
      GtkRcStyle *mod;
422
 
 
423
 
      gtk_widget_set_tooltip_text (entry, NULL);
424
 
 
425
 
      mod = gtk_widget_get_modifier_style (entry);
426
 
      if (mod)
427
 
        mod->color_flags[GTK_STATE_NORMAL] &= ~GTK_RC_TEXT;
428
 
 
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);
431
465
    }
432
466
  else
433
467
    {
434
 
      GdkColor color;
435
468
      char *tooltip;
436
469
 
 
470
      gtk_entry_set_icon_from_stock (entry, GTK_PACK_END, GTK_STOCK_DIALOG_WARNING);
 
471
 
437
472
      tooltip = g_strdup_printf (_("Error parsing command: %s"), error->message);
 
473
      gtk_entry_set_icon_tooltip_text (entry, GTK_PACK_END, tooltip);
 
474
      g_free (tooltip);
 
475
 
438
476
      g_error_free (error);
439
 
 
440
 
      gtk_widget_set_tooltip_text (entry, tooltip);
441
 
      g_free (tooltip);
442
 
    
443
 
      gdk_color_parse ("red", &color);
444
 
      gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &color);
445
477
    }
 
478
#endif /* GTK+ >= 2.16.0 */
446
479
}
447
480
 
448
481
static void
460
493
}
461
494
 
462
495
static void
463
 
scrollback_lines_spin_button_changed_cb (GtkSpinButton *button,
464
 
                                         GParamSpec *pspec,
465
 
                                         GtkLabel *label)
466
 
{
467
 
  double lines;
468
 
  char *kbtext, *text;
469
 
 
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);
475
 
  g_free (kbtext);
476
 
  g_free (text);
477
 
}
478
 
 
479
 
static void
480
496
reset_compat_defaults_cb (GtkWidget       *button,
481
497
                          TerminalProfile *profile)
482
498
{
496
512
  i = G_N_ELEMENTS (color_schemes);
497
513
  while (i > 0)
498
514
    {
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));
501
517
    }
502
518
}
506
522
                      double    val,
507
523
                      void     *data)
508
524
{
509
 
  return g_strdup_printf ("%d%%", (int) rint (val * 100.0));
 
525
  return g_strdup_printf ("%d%%", (int) (val * 100.0 + 0.5));
510
526
}
511
527
 
512
528
static void
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))
783
799
 
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")),
785
801
                    "changed",
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")),
788
804
                    "changed",
789
805
                    G_CALLBACK (visible_name_entry_changed_cb), editor);
790
 
  g_signal_connect (GTK_WIDGET (gtk_builder_get_object  (builder, "scrollback-lines-spinbutton")),
791
 
                    "notify::value",
792
 
                    G_CALLBACK (scrollback_lines_spin_button_changed_cb),
793
 
                    GTK_WIDGET (gtk_builder_get_object  (builder, "scrollback-kb-label")));
794
806
 
795
807
  g_signal_connect (gtk_builder_get_object  (builder, "reset-compat-defaults-button"),
796
808
                    "clicked",
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);
833
850
 
834
851
#undef CONNECT
835
852
#undef CONNECT_WITH_FLAGS