/** * gimp_templates_migrate: * @olddir: the old user directory * * Migrating the templaterc from GIMP 2.0 to GIMP 2.2 needs this special * hack since we changed the way that units are handled. This function * merges the user's templaterc with the systemwide templaterc. The goal * is to replace the unit for a couple of default templates with "pixels". **/ void gimp_templates_migrate (const gchar *olddir) { GimpContainer *templates = gimp_list_new (GIMP_TYPE_TEMPLATE, TRUE); GFile *file = gimp_directory_file ("templaterc", NULL); if (gimp_config_deserialize_gfile (GIMP_CONFIG (templates), file, NULL, NULL)) { GFile *sysconf_file; sysconf_file = gimp_sysconf_directory_file ("templaterc", NULL); if (olddir && (strstr (olddir, "2.0") || strstr (olddir, "2.2"))) { /* We changed the spelling of a couple of template names: * * - from upper to lower case between 2.0 and 2.2 * - from "dpi" to "ppi" between 2.2 and 2.4 */ GimpContainerClass *class = GIMP_CONTAINER_GET_CLASS (templates); gpointer func = class->get_child_by_name; class->get_child_by_name = gimp_templates_migrate_get_child_by_name; gimp_config_deserialize_gfile (GIMP_CONFIG (templates), sysconf_file, NULL, NULL); class->get_child_by_name = func; } else {
void gimp_templates_load (Gimp *gimp) { GFile *file; GError *error = NULL; g_return_if_fail (GIMP_IS_GIMP (gimp)); g_return_if_fail (GIMP_IS_LIST (gimp->templates)); file = gimp_directory_file ("templaterc", NULL); if (gimp->be_verbose) g_print ("Parsing '%s'\n", gimp_file_get_utf8_name (file)); if (! gimp_config_deserialize_gfile (GIMP_CONFIG (gimp->templates), file, NULL, &error)) { if (error->code == GIMP_CONFIG_ERROR_OPEN_ENOENT) { g_clear_error (&error); g_object_unref (file); file = gimp_sysconf_directory_file ("templaterc", NULL); if (! gimp_config_deserialize_gfile (GIMP_CONFIG (gimp->templates), file, NULL, &error)) { gimp_message_literal (gimp, NULL, GIMP_MESSAGE_ERROR, error->message); } } else { gimp_message_literal (gimp, NULL, GIMP_MESSAGE_ERROR, error->message); } g_clear_error (&error); } gimp_list_reverse (GIMP_LIST (gimp->templates)); g_object_unref (file); }
static void gimp_rc_load (GimpRc *rc) { GError *error = NULL; g_return_if_fail (GIMP_IS_RC (rc)); if (rc->verbose) g_print ("Parsing '%s'\n", gimp_file_get_utf8_name (rc->system_gimprc)); if (! gimp_config_deserialize_gfile (GIMP_CONFIG (rc), rc->system_gimprc, NULL, &error)) { if (error->code != GIMP_CONFIG_ERROR_OPEN_ENOENT) g_message ("%s", error->message); g_clear_error (&error); } if (rc->verbose) g_print ("Parsing '%s'\n", gimp_file_get_utf8_name (rc->user_gimprc)); if (! gimp_config_deserialize_gfile (GIMP_CONFIG (rc), rc->user_gimprc, NULL, &error)) { if (error->code != GIMP_CONFIG_ERROR_OPEN_ENOENT) { g_message ("%s", error->message); gimp_config_file_backup_on_error (rc->user_gimprc, "gimprc", NULL); } g_clear_error (&error); } }
/** * gimp_rc_save: * @gimprc: a #GimpRc object. * * Saves any settings that differ from the system-wide defined * defaults to the users personal gimprc file. **/ void gimp_rc_save (GimpRc *rc) { GimpRc *global; gchar *header; GError *error = NULL; const gchar *top = "GIMP gimprc\n" "\n" "This is your personal gimprc file. Any variable defined in this file " "takes precedence over the value defined in the system-wide gimprc: "; const gchar *bottom = "\n" "Most values can be set within GIMP by changing some options in " "the Preferences dialog."; const gchar *footer = "end of gimprc"; g_return_if_fail (GIMP_IS_RC (rc)); global = g_object_new (GIMP_TYPE_RC, NULL); gimp_config_deserialize_gfile (GIMP_CONFIG (global), rc->system_gimprc, NULL, NULL); header = g_strconcat (top, gimp_file_get_utf8_name (rc->system_gimprc), bottom, NULL); if (rc->verbose) g_print ("Writing '%s'\n", gimp_file_get_utf8_name (rc->user_gimprc)); if (! gimp_config_serialize_to_gfile (GIMP_CONFIG (rc), rc->user_gimprc, header, footer, global, &error)) { g_message ("%s", error->message); g_error_free (error); } g_free (header); g_object_unref (global); }
gboolean gimp_contexts_load (Gimp *gimp, GError **error) { GFile *file; GError *my_error = NULL; gboolean success; g_return_val_if_fail (GIMP_IS_GIMP (gimp), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); file = gimp_directory_file ("contextrc", NULL); if (gimp->be_verbose) g_print ("Parsing '%s'\n", gimp_file_get_utf8_name (file)); success = gimp_config_deserialize_gfile (GIMP_CONFIG (gimp_get_user_context (gimp)), file, NULL, &my_error); g_object_unref (file); if (! success) { if (my_error->code == GIMP_CONFIG_ERROR_OPEN_ENOENT) { g_clear_error (&my_error); success = TRUE; } else { g_propagate_error (error, my_error); } } return success; }
void gimp_parasiterc_load (Gimp *gimp) { GFile *file; GError *error = NULL; g_return_if_fail (GIMP_IS_GIMP (gimp)); file = gimp_directory_file ("parasiterc", NULL); if (gimp->be_verbose) g_print ("Parsing '%s'\n", gimp_file_get_utf8_name (file)); if (! gimp_config_deserialize_gfile (GIMP_CONFIG (gimp->parasites), file, NULL, &error)) { if (error->code != GIMP_CONFIG_ERROR_OPEN_ENOENT) gimp_message_literal (gimp, NULL, GIMP_MESSAGE_ERROR, error->message); g_error_free (error); } g_object_unref (file); }
void gimp_tools_restore (Gimp *gimp) { GimpContainer *gimp_list; GimpObject *object; GFile *file; GList *list; GError *error = NULL; g_return_if_fail (GIMP_IS_GIMP (gimp)); gimp_list = gimp_list_new (GIMP_TYPE_TOOL_INFO, FALSE); file = gimp_directory_file ("toolrc", NULL); if (gimp->be_verbose) g_print ("Parsing '%s'\n", gimp_file_get_utf8_name (file)); if (gimp_config_deserialize_gfile (GIMP_CONFIG (gimp_list), file, NULL, NULL)) { gint n = gimp_container_get_n_children (gimp->tool_info_list); gint i; gimp_list_reverse (GIMP_LIST (gimp_list)); for (list = GIMP_LIST (gimp_list)->list, i = 0; list; list = g_list_next (list), i++) { const gchar *name; name = gimp_object_get_name (list->data); object = gimp_container_get_child_by_name (gimp->tool_info_list, name); if (object) { g_object_set (object, "visible", GIMP_TOOL_INFO (list->data)->visible, NULL); gimp_container_reorder (gimp->tool_info_list, object, MIN (i, n - 1)); } } } g_object_unref (file); g_object_unref (gimp_list); /* make the generic operation tool invisible by default */ object = gimp_container_get_child_by_name (gimp->tool_info_list, "gimp-operation-tool"); if (object) g_object_set (object, "visible", FALSE, NULL); for (list = gimp_get_tool_info_iter (gimp); list; list = g_list_next (list)) { GimpToolInfo *tool_info = GIMP_TOOL_INFO (list->data); /* get default values from prefs (see bug #120832) */ gimp_config_reset (GIMP_CONFIG (tool_info->tool_options)); } if (! gimp_contexts_load (gimp, &error)) { gimp_message_literal (gimp, NULL, GIMP_MESSAGE_WARNING, error->message); g_clear_error (&error); } /* make sure there is always a tool active, so broken config files * can't leave us with no initial tool */ if (! gimp_context_get_tool (gimp_get_user_context (gimp))) { gimp_context_set_tool (gimp_get_user_context (gimp), gimp_get_tool_info_iter (gimp)->data); } for (list = gimp_get_tool_info_iter (gimp); list; list = g_list_next (list)) { GimpToolInfo *tool_info = GIMP_TOOL_INFO (list->data); GimpToolOptionsGUIFunc options_gui_func; GtkWidget *options_gui; /* copy all context properties except those the tool actually * uses, because the subsequent deserialize() on the tool * options will only set the properties that were set to * non-default values at the time of saving, and we want to * keep these default values as if they have been saved. * (see bug #541586). */ gimp_context_copy_properties (gimp_get_user_context (gimp), GIMP_CONTEXT (tool_info->tool_options), GIMP_CONTEXT_PROP_MASK_ALL &~ (tool_info->context_props | GIMP_CONTEXT_PROP_MASK_TOOL | GIMP_CONTEXT_PROP_MASK_PAINT_INFO)); gimp_tool_options_deserialize (tool_info->tool_options, NULL); options_gui_func = g_object_get_data (G_OBJECT (tool_info), "gimp-tool-options-gui-func"); if (options_gui_func) { options_gui = (* options_gui_func) (tool_info->tool_options); } else { GtkWidget *label; options_gui = gimp_tool_options_gui (tool_info->tool_options); label = gtk_label_new (_("This tool has\nno options.")); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER); gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_STYLE, PANGO_STYLE_ITALIC, -1); gtk_box_pack_start (GTK_BOX (options_gui), label, FALSE, FALSE, 6); gtk_widget_show (label); } gimp_tools_set_tool_options_gui (tool_info->tool_options, g_object_ref_sink (options_gui)); } }