double options_lookup_double(Options *options, const char *key) { char *str_val = options_lookup_string(options, key); double result = 0; if (str_val) { char *endptr; errno = 0; result = strtod(str_val, &endptr); if (endptr == str_val) { dlg_warning(NULL, _("Unable to convert value '%s' for key '%s' in '%s' to number"), str_val, key, options->name); } else if (errno) { dlg_warning(NULL, _("Unable to convert value '%s' for key '%s' in '%s' " "to number: %s"), str_val, key, options->name, strerror(errno)); } } return result; }
static void colour_scheme_parse_palette(Options * opts, ColourScheme * scheme) { if (!scheme->palette) scheme->palette = g_new0(GdkRGBA, 24); scheme->palette_size = options_lookup_int(opts, "palette_size"); switch (scheme->palette_size) { case 8: case 16: case 24: /* No problem */ break; case -1: /* Not given, probably fine */ scheme->palette_size = 0; break; case 0: break; default: dlg_warning(NULL, _("Invalid palette size %d in colour scheme %s"), scheme->palette_size, options_get_leafname(opts)); scheme->palette_size = 0; break; } colour_scheme_parse_palette_range(opts, scheme, 0, scheme->palette_size); }
gboolean options_file_copy_to_user_dir(GtkWindow *window, const char *src_path, const char *family, const char *new_leaf) { char *new_path = options_file_filename_for_saving(family, NULL); char *buffer = NULL; gsize size; GError *error = NULL; gboolean success = FALSE; if (!g_file_test(new_path, G_FILE_TEST_IS_DIR)) { if (g_mkdir_with_parents(new_path, 0755) == -1) { dlg_warning(window, _("Unable to create directory '%s'"), new_path); return FALSE; } } g_free(new_path); new_path = options_file_filename_for_saving(family, new_leaf, NULL); if (g_file_test(src_path, G_FILE_TEST_IS_REGULAR)) { if (g_file_get_contents(src_path, &buffer, &size, &error)) success = g_file_set_contents(new_path, buffer, size, &error); g_free(buffer); } else { const char *content = ""; if (!strcmp(family, "Profiles")) content = "[roxterm profile]"; else if (!strcmp(family, "Colours")) content = "[roxterm colour scheme]"; else if (!strcmp(family, "Shortcuts")) content = "[roxterm shortcuts scheme]"; success = g_file_set_contents(new_path, content, -1, &error); } if (!success) { dlg_warning(window, _("Unable to copy profile/scheme: %s"), error && error->message ? error->message : _("unknown reason")); } if (error) g_error_free(error); g_free(new_path); return success; }
static gboolean colour_scheme_lookup_and_parse(Options * opts, ColourScheme * scheme, GdkRGBA * colour, const char *key, const char *default_colour, gboolean warn) { char *name = options_lookup_string(opts, key); gboolean result = TRUE; if (!name || !colour_scheme_parse(scheme, colour, name)) { if (warn && name) { dlg_warning(NULL, _("Unable to parse colour '%s' for %s in scheme %s"), name, key, options_get_leafname(opts)); } if (default_colour) result = colour_scheme_parse(scheme, colour, default_colour); else result = FALSE; } if (name) g_free(name); return result; }
ColourGUI *colourgui_open(const char *scheme_name, GdkScreen *scrn) { ColourGUI *cg; char *title; static char const *build_objs[] = { "Colour_Scheme_Editor", NULL }; GError *error = NULL; if (!colourgui_being_edited) { colourgui_being_edited = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); } cg = g_hash_table_lookup(colourgui_being_edited, scheme_name); if (cg) { if (scrn) gtk_window_set_screen(GTK_WINDOW(cg->widget), scrn); gtk_window_present(GTK_WINDOW(cg->widget)); return cg; } cg = g_new0(ColourGUI, 1); cg->scheme_name = g_strdup(scheme_name); cg->capp.options = colour_scheme_lookup_and_ref(scheme_name); cg->orig_scheme = options_copy(cg->capp.options); cg->capp.builder = gtk_builder_new(); if (!gtk_builder_add_objects_from_file(cg->capp.builder, capplet_get_ui_filename(), (char **) build_objs, &error)) { g_error(_("Unable to load 'Colour_Scheme_Editor' from UI defs: %s"), error->message); } cg->widget = GTK_WIDGET(gtk_builder_get_object(cg->capp.builder, "Colour_Scheme_Editor")); if (scrn) gtk_window_set_screen(GTK_WINDOW(cg->widget), scrn); title = g_strdup_printf(_("ROXTerm Colour Scheme \"%s\""), scheme_name); gtk_window_set_title(GTK_WINDOW(cg->widget), title); g_free(title); if (!cg->orig_scheme) { dlg_warning(GTK_WINDOW(cg->widget), _("Unable to back up colour scheme to revert")); gtk_widget_set_sensitive( GTK_WIDGET(gtk_builder_get_object(cg->capp.builder, "revert")), FALSE); } g_hash_table_insert(colourgui_being_edited, g_strdup(scheme_name), cg); colourgui_fill_in_dialog(cg, TRUE); gtk_builder_connect_signals(cg->capp.builder, cg); gtk_widget_show(cg->widget); capplet_inc_windows(); configlet_lock_colour_schemes(); return cg; }