Exemplo n.º 1
0
/**
 * Main entry for program.
 *
 * @param argc Number of command line arguments
 * @param argv Command line arguments
 * @return 0 on success
 */
int
main (int argc, char* argv[])
{
  char *option;
  int result;
  char *sparam1=NULL, *sparam2, *sparam3, *sparam4;
  char *sparam5, *sparam6, *sparam7, *sparam8, *sparam9;
#ifdef _WIN32
  char path[MAX_PATH];
#endif
  int iparam1, iparam2;
  long lparam1;

  /****************************************************************************
   * Show program help
  ****************************************************************************/
  if (get_option (argv, argc, "--help", NULL) == 0)
    {
      usage (stdout);
      exit (0);
    }
  /****************************************************************************
   * Read command line options from file
  ****************************************************************************/
  if (get_option (argv, argc, "-file", &option) == 0)
    {
      result = read_file_options (option);
      free (option);
      if (result == -1)
        fail ("Failed to read options file: %s.", option);
    }
  /****************************************************************************
   * Enable logging
  ****************************************************************************/
  if (get_option (argv, argc, "-log", &option) == 0)
    {
      logFile = fopen (option, "a");
      if (logFile == NULL)
        fail ("Failed to write log file: %s", option);
      free (option);
    }
  /****************************************************************************
   * Wait for process to terminate
  ****************************************************************************/
  if (get_option (argv, argc, "-pid", &option) == 0)
    {
      iparam1 = -1;
      lparam1 = atoi (option);
      free (option);
      if (get_option (argv, argc, "-wait", &option) == 0)
        {
          iparam1 = atoi (option);
        }
      if (wait_for_pid (lparam1, iparam1) != 0)
        fail ("Timed out waiting for process to terminate.");
      free (option);
    }
  /****************************************************************************
   * Remove directories
  ****************************************************************************/
  if (get_option (argv, argc, "-removeDir", &option) == 0)
    {
      result = delete_directories (option, 0);
      if (result != 0)
        fail ("Failed to delete directories: %s", option);
      else
        log_message ("-removeDir %s", option);
      free (option);
    }
  /****************************************************************************
   * Remove directories if they are empty
  ****************************************************************************/
  if (get_option (argv, argc, "-removeEmptyDir", &option) == 0)
    {
      result = delete_directories (option, 1);
      if (result != 0)
        fail ("Failed to delete empty directories: %s", option);
      else
        log_message ("-removeEmptyDir %s", option);
      free (option);
    }
  /****************************************************************************
   * Set registry value
  ****************************************************************************/
  if (get_option (argv, argc, "-regSetValue", &option) == 0)
    {
#ifdef _WIN32
      sparam1 = get_argument (option);
      sparam2 = get_argument (NULL);
      sparam3 = get_argument (NULL);
      sparam4 = get_argument (NULL);
      result = set_registry_value (sparam1, sparam2, sparam3, sparam4);
      if (result != 0)
        fail ("Failed to set registry value.");
      else
        log_message ("-regSetValue %s, %s, %s, %s", sparam1, sparam2,
          sparam3, sparam4);
      free (option);
#else
      fail ("-regSetValue is only supported on Windows.");
#endif
    }
  /****************************************************************************
   * Get registry value
  ****************************************************************************/
  if (get_option (argv, argc, "-regGetValue", &option) == 0)
    {
#ifdef _WIN32
      sparam1 = get_argument (option);
      sparam2 = get_argument (NULL);
      sparam3 = get_registry_value (sparam1, sparam2);
      if (sparam3)
        puts (sparam3);
      else
        fail ("Failed to get registry value %s, %s.", sparam1, sparam2);
      free (option);
#else
      fail ("-regSetValue is only supported on Windows.");
#endif
    }
  /****************************************************************************
   * Delete registry value
  ****************************************************************************/
  if (get_option (argv, argc, "-regDeleteValue", &option) == 0)
    {
#ifdef _WIN32
      sparam1 = get_argument (option);
      sparam2 = get_argument (NULL);
      result = delete_registry_value (sparam1, sparam2);
      if (result != 0)
        fail ("Failed to delete registry value.");
      else
        log_message ("-regDeleteValue %s, %s", sparam1, sparam2);
      free (option);
#else
      fail ("-regDeleteValue is only supported on Windows.");
#endif
    }
  /****************************************************************************
   * Delete registry key
  ****************************************************************************/
  if (get_option (argv, argc, "-regDeleteKey", &option) == 0)
    {
#ifdef _WIN32
      result = delete_registry_key (option);
      if (result != 0)
        fail ("Failed to delete registry key.");
      else
        log_message ("-regDeleteKey %s", option);
      free (option);
#else
      fail ("-regDeleteKey is only supported on Windows.");
#endif
    }
  /****************************************************************************
   * Run as administrator
  ****************************************************************************/
  if (get_option (argv, argc, "-runAdmin", &option) == 0)
    {
#ifdef _WIN32
      sparam1 = get_argument (option);
      sparam2 = get_argument (NULL);

      result = -1;
      if ((sparam1 != NULL) && (sparam2 != NULL))
      {
        replace_chars (sparam2, '\'', '"');
        result = run_admin (sparam1, sparam2);
      }
      if (result != 0)
        fail ("Failed to run program.");
      else
        log_message ("-runAdmin %s,%s", sparam1, sparam2);
      free (option);
#else
      fail ("-runAdmin is currently only supported on Windows.");
#endif
    }
  /****************************************************************************
   * Create short-cut
  ****************************************************************************/
  if (get_option (argv, argc, "-createShortcut", &option) == 0)
    {
      sparam1 = get_argument (option);
      sparam2 = get_argument (NULL);
      sparam3 = get_argument (NULL);
      sparam4 = get_argument (NULL);
      sparam5 = get_argument (NULL);
      sparam6 = get_argument (NULL);
      sparam7 = get_argument (NULL);
      sparam8 = get_argument (NULL);
      sparam9 = get_argument (NULL);
      if (strlen (sparam6) != 0)
        iparam1 = atoi (sparam6);
      else
        iparam1 = 0;
      if (strlen (sparam9) != 0)
        iparam2 = atoi (sparam9);
      else
        iparam2 = 0;
      result = create_shortcut (sparam1, sparam2, sparam3, sparam4, sparam5,
        iparam1, sparam7, sparam8, iparam2);
      if (result != 0)
        fail ("Failed to create shortcut.");
      else
        log_message ("-createShortcut %s, %s, %s, %s, %s, %s, %s, %s %s",
          sparam1, sparam2, sparam3, sparam4, sparam5, sparam6, sparam7,
          sparam8, sparam9);
      free (option);
    }
  /****************************************************************************
   * Get special folder
  ****************************************************************************/
  if (get_option (argv, argc, "-getSpecialFolder", &option) == 0)
    {
#ifdef _WIN32
      sparam1 = get_argument (option);
      iparam1 = get_clsid (sparam1);
      result = get_special_folder (iparam1, path);
      free (option);
      if (result != 0)
        fail ("Failed to get special folder: %s", sparam1);
      else
        puts(path);
#else
      fail ("-getSpecialFolder is only supported on Windows.");
#endif
    }
  /****************************************************************************
   * Get property
  ****************************************************************************/
  if (get_option (argv, argc, "-getOsProperty", &option) == 0)
    {
      sparam1 = get_argument (option);
      print_os_property (sparam1);
      free (option);
    }

  if (logFile != NULL)
    fclose (logFile);
  if (fargv != NULL)
    free (fargv);

  return EXIT_SUCCESS;
}
Exemplo n.º 2
0
  //----------------------------------------------------------------------
  HRESULT create_dia_source()
  {
    HRESULT hr;
    // VC80/90 CRT installs msdiaNN.dll in this folder:
    // "C:\Program Files (x86)\Common Files\microsoft shared\VC"
    char common_files[QMAXPATH];
    qstring vc_shared;
    if ( get_special_folder(CSIDL_PROGRAM_FILES_COMMON, common_files, sizeof(common_files)) )
    {
      vc_shared = common_files;
      vc_shared.append("\\Microsoft Shared\\VC");
    }

    for ( size_t i=0; i < qnumber(g_msdiav); i++ )
    {
      // Try to create using CoCreateInstance()
      hr = CoCreateInstance(*g_msdiav[i],
        NULL,
        CLSCTX_INPROC_SERVER,
        __uuidof(IDiaDataSource),
        (void**)&pSource);

      // Try to create with CoCreateInstanceNoReg()
      if ( FAILED(hr) )
      {
        // Search for this interface in DIA dlls
        char path[QMAXPATH];
        if ( !search_path(g_diadlls[i], path, sizeof(path), false)
          && (vc_shared.empty() || SearchPathA(vc_shared.c_str(), g_diadlls[i], NULL, qnumber(path), path, NULL) == 0) )
          continue;

        for ( size_t j=0; j < qnumber(g_msdiav); j++ )
        {
          hr = CoCreateInstanceNoReg(
            path,
            *g_msdiav[j],
            NULL,
            __uuidof(IDiaDataSource),
            (void**)&pSource,
            &dia_hmod);

          if ( SUCCEEDED(hr) )
          {
            static bool displayed = false;
            if ( !displayed )
            {
              displayed = true;
              msg("PDB: using DIA dll \"%s\"\n", path);
            }
            i = j;
            break;
          }
        }
      }

      if ( SUCCEEDED(hr) )
      {
        dia_ver = g_diaver[i];
        static bool displayed = false;
        if ( !displayed )
        {
          displayed = true;
          msg("PDB: DIA interface version %d.%d\n", dia_ver/100, dia_ver%100);
        }
        return hr;
      }
    }
    return E_NOINTERFACE;
  }
Exemplo n.º 3
0
static void
gimp_core_config_class_init (GimpCoreConfigClass *klass)
{
  GObjectClass *object_class = G_OBJECT_CLASS (klass);
  gchar        *path;
  gchar        *mypaint_brushes;
  GimpRGB       red          = { 1.0, 0, 0, 0.5 };
  guint64       undo_size;

  object_class->finalize     = gimp_core_config_finalize;
  object_class->set_property = gimp_core_config_set_property;
  object_class->get_property = gimp_core_config_get_property;

  GIMP_CONFIG_PROP_STRING (object_class, PROP_LANGUAGE,
                           "language",
                           "Language",
                           LANGUAGE_BLURB,
                           NULL,  /* take from environment */
                           GIMP_PARAM_STATIC_STRINGS |
                           GIMP_CONFIG_PARAM_RESTART);

  GIMP_CONFIG_PROP_ENUM (object_class, PROP_INTERPOLATION_TYPE,
                         "interpolation-type",
                         "Interpolation",
                         INTERPOLATION_TYPE_BLURB,
                         GIMP_TYPE_INTERPOLATION_TYPE,
                         GIMP_INTERPOLATION_CUBIC,
                         GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_INT (object_class, PROP_DEFAULT_THRESHOLD,
                        "default-threshold",
                        "Default threshold",
                        DEFAULT_THRESHOLD_BLURB,
                        0, 255, 15,
                        GIMP_PARAM_STATIC_STRINGS);

  path = gimp_config_build_plug_in_path ("plug-ins");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_PLUG_IN_PATH,
                         "plug-in-path",
                         "Plug-in path",
                         PLUG_IN_PATH_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_RESTART);
  g_free (path);

  path = gimp_config_build_plug_in_path ("modules");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_MODULE_PATH,
                         "module-path",
                         "Module path",
                         MODULE_PATH_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_RESTART);
  g_free (path);

  path = gimp_config_build_plug_in_path ("interpreters");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_INTERPRETER_PATH,
                         "interpreter-path",
                         "Interpreter path",
                         INTERPRETER_PATH_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_RESTART);
  g_free (path);

  path = gimp_config_build_plug_in_path ("environ");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_ENVIRON_PATH,
                         "environ-path",
                         "Environment path",
                         ENVIRON_PATH_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_RESTART);
  g_free (path);

  path = gimp_config_build_data_path ("brushes");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_BRUSH_PATH,
                         "brush-path",
                         "Brush path",
                         BRUSH_PATH_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

  path = gimp_config_build_writable_path ("brushes");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_BRUSH_PATH_WRITABLE,
                         "brush-path-writable",
                         "Writable brush path",
                         BRUSH_PATH_WRITABLE_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

  path = gimp_config_build_data_path ("dynamics");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_DYNAMICS_PATH,
                         "dynamics-path",
                         "Dynamics path",
                         DYNAMICS_PATH_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

  path = gimp_config_build_writable_path ("dynamics");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_DYNAMICS_PATH_WRITABLE,
                         "dynamics-path-writable",
                         "Writable dynamics path",
                         DYNAMICS_PATH_WRITABLE_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

#ifdef ENABLE_RELOCATABLE_RESOURCES
  mypaint_brushes = g_build_filename ("${gimp_installation_dir}",
                                      "share", "mypaint-data",
                                      "1.0", "brushes", NULL);
#else
  mypaint_brushes = g_strdup (MYPAINT_BRUSHES_DIR);
#endif

  path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
                       mypaint_brushes,
                       "~/.mypaint/brushes",
                       NULL);
  g_free (mypaint_brushes);

  GIMP_CONFIG_PROP_PATH (object_class, PROP_MYPAINT_BRUSH_PATH,
                         "mypaint-brush-path",
                         "MyPaint brush path",
                         MYPAINT_BRUSH_PATH_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

  path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
                       "~/.mypaint/brushes",
                       NULL);
  GIMP_CONFIG_PROP_PATH (object_class, PROP_MYPAINT_BRUSH_PATH_WRITABLE,
                         "mypaint-brush-path-writable",
                         "Writable MyPaint brush path",
                         MYPAINT_BRUSH_PATH_WRITABLE_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

  path = gimp_config_build_data_path ("patterns");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_PATTERN_PATH,
                         "pattern-path",
                         "Pattern path",
                         PATTERN_PATH_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

  path = gimp_config_build_writable_path ("patterns");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_PATTERN_PATH_WRITABLE,
                         "pattern-path-writable",
                         "Writable pattern path",
                         PATTERN_PATH_WRITABLE_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

  path = gimp_config_build_data_path ("palettes");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_PALETTE_PATH,
                         "palette-path",
                         "Palette path",
                         PALETTE_PATH_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

  path = gimp_config_build_writable_path ("palettes");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_PALETTE_PATH_WRITABLE,
                         "palette-path-writable",
                         "Writable palette path",
                         PALETTE_PATH_WRITABLE_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

  path = gimp_config_build_data_path ("gradients");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_GRADIENT_PATH,
                         "gradient-path",
                         "Gradient path",
                         GRADIENT_PATH_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

  path = gimp_config_build_writable_path ("gradients");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_GRADIENT_PATH_WRITABLE,
                         "gradient-path-writable",
                         "Writable gradient path",
                         GRADIENT_PATH_WRITABLE_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

  path = gimp_config_build_data_path ("tool-presets");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_TOOL_PRESET_PATH,
                         "tool-preset-path",
                         "Tool preset path",
                         TOOL_PRESET_PATH_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

  path = gimp_config_build_writable_path ("tool-presets");
  GIMP_CONFIG_PROP_PATH (object_class, PROP_TOOL_PRESET_PATH_WRITABLE,
                         "tool-preset-path-writable",
                         "Writable tool preset path",
                         TOOL_PRESET_PATH_WRITABLE_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

  path = gimp_config_build_data_path ("fonts");
#if defined G_OS_WIN32
  /* XXX: since a Windows 10 update, build 17704, Microsoft added the
   * concept of user-installed fonts (until now it was only possible to
   * have system-wide fonts! How weird is that?).
   * A feature request at fontconfig is also done, but until this gets
   * implemented upstream, let's add the folder ourselves in GIMP's
   * default list of folders.
   * See: https://gitlab.gnome.org/GNOME/gimp/issues/2949
   * Also: https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/144
   */
    {
      gchar *user_fonts_dir = get_special_folder (CSIDL_LOCAL_APPDATA);

      if (user_fonts_dir)
        {
          gchar *path2;
          gchar *tmp;

          path2 = g_build_filename (user_fonts_dir,
                                    "Microsoft", "Windows", "Fonts", NULL);
          g_free (user_fonts_dir);

          /* G_SEARCHPATH_SEPARATOR-separated list of folders. */
          tmp = g_strconcat (path2, G_SEARCHPATH_SEPARATOR_S, path, NULL);
          g_free (path2);
          g_free (path);
          path = tmp;
        }
    }
#endif
  GIMP_CONFIG_PROP_PATH (object_class, PROP_FONT_PATH,
                         "font-path",
                         "Font path",
                         FONT_PATH_BLURB,
                         GIMP_CONFIG_PATH_DIR_LIST, path,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_CONFIRM);
  g_free (path);

  GIMP_CONFIG_PROP_PATH (object_class, PROP_FONT_PATH_WRITABLE,
                         "font-path-writable",
                         "Writable font path",
                         NULL,
                         GIMP_CONFIG_PATH_DIR_LIST, NULL,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_IGNORE);

  GIMP_CONFIG_PROP_STRING (object_class, PROP_DEFAULT_BRUSH,
                           "default-brush",
                           "Default brush",
                           DEFAULT_BRUSH_BLURB,
                           GIMP_DEFAULT_BRUSH,
                           GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_STRING (object_class, PROP_DEFAULT_DYNAMICS,
                           "default-dynamics",
                           "Default dynamics",
                           DEFAULT_DYNAMICS_BLURB,
                           GIMP_DEFAULT_DYNAMICS,
                           GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_STRING (object_class, PROP_DEFAULT_MYPAINT_BRUSH,
                           "default-mypaint-brush",
                           "Default MyPaint brush",
                           DEFAULT_MYPAINT_BRUSH_BLURB,
                           GIMP_DEFAULT_MYPAINT_BRUSH,
                           GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_STRING (object_class, PROP_DEFAULT_PATTERN,
                           "default-pattern",
                           "Default pattern",
                           DEFAULT_PATTERN_BLURB,
                           GIMP_DEFAULT_PATTERN,
                           GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_STRING (object_class, PROP_DEFAULT_PALETTE,
                           "default-palette",
                           "Default palette",
                           DEFAULT_PALETTE_BLURB,
                           GIMP_DEFAULT_PALETTE,
                           GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_STRING (object_class, PROP_DEFAULT_GRADIENT,
                           "default-gradient",
                           "Default gradient",
                           DEFAULT_GRADIENT_BLURB,
                           GIMP_DEFAULT_GRADIENT,
                           GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_STRING (object_class, PROP_DEFAULT_TOOL_PRESET,
                           "default-tool-preset",
                           "Default tool preset",
                           DEFAULT_TOOL_PRESET_BLURB,
                           GIMP_DEFAULT_TOOL_PRESET,
                           GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_STRING (object_class, PROP_DEFAULT_FONT,
                           "default-font",
                           "Default font",
                           DEFAULT_FONT_BLURB,
                           GIMP_DEFAULT_FONT,
                           GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_GLOBAL_BRUSH,
                            "global-brush",
                            "Global brush",
                            GLOBAL_BRUSH_BLURB,
                            TRUE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_GLOBAL_DYNAMICS,
                            "global-dynamics",
                            "Global dynamics",
                            GLOBAL_DYNAMICS_BLURB,
                            TRUE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_GLOBAL_PATTERN,
                            "global-pattern",
                            "Global pattern",
                            GLOBAL_PATTERN_BLURB,
                            TRUE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_GLOBAL_PALETTE,
                            "global-palette",
                            "Global palette",
                            GLOBAL_PALETTE_BLURB,
                            TRUE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_GLOBAL_GRADIENT,
                            "global-gradient",
                            "Global gradient",
                            GLOBAL_GRADIENT_BLURB,
                            TRUE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_GLOBAL_FONT,
                            "global-font",
                            "Global font",
                            GLOBAL_FONT_BLURB,
                            TRUE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_OBJECT (object_class, PROP_DEFAULT_IMAGE,
                           "default-image",
                           "Default image",
                           DEFAULT_IMAGE_BLURB,
                           GIMP_TYPE_TEMPLATE,
                           GIMP_PARAM_STATIC_STRINGS |
                           GIMP_CONFIG_PARAM_AGGREGATE);

  GIMP_CONFIG_PROP_OBJECT (object_class, PROP_DEFAULT_GRID,
                           "default-grid",
                           "Default grid",
                           DEFAULT_GRID_BLURB,
                           GIMP_TYPE_GRID,
                           GIMP_PARAM_STATIC_STRINGS |
                           GIMP_CONFIG_PARAM_AGGREGATE);

  GIMP_CONFIG_PROP_INT (object_class, PROP_UNDO_LEVELS,
                        "undo-levels",
                        "Undo levels",
                        UNDO_LEVELS_BLURB,
                        0, 1 << 20, 5,
                        GIMP_PARAM_STATIC_STRINGS |
                        GIMP_CONFIG_PARAM_CONFIRM);

  undo_size = gimp_get_physical_memory_size ();

  if (undo_size > 0)
    undo_size = undo_size / 8; /* 1/8th of the memory */
  else
    undo_size = 1 << 26; /* 64GB */

  GIMP_CONFIG_PROP_MEMSIZE (object_class, PROP_UNDO_SIZE,
                            "undo-size",
                            "Undo size",
                            UNDO_SIZE_BLURB,
                            0, GIMP_MAX_MEMSIZE, undo_size,
                            GIMP_PARAM_STATIC_STRINGS |
                            GIMP_CONFIG_PARAM_CONFIRM);

  GIMP_CONFIG_PROP_ENUM (object_class, PROP_UNDO_PREVIEW_SIZE,
                         "undo-preview-size",
                         "Undo preview size",
                         UNDO_PREVIEW_SIZE_BLURB,
                         GIMP_TYPE_VIEW_SIZE,
                         GIMP_VIEW_SIZE_LARGE,
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_RESTART);

  GIMP_CONFIG_PROP_INT (object_class, PROP_FILTER_HISTORY_SIZE,
                        "plug-in-history-size", /* compat name */
                        "Filter history size",
                        FILTER_HISTORY_SIZE_BLURB,
                        0, 256, 10,
                        GIMP_PARAM_STATIC_STRINGS |
                        GIMP_CONFIG_PARAM_RESTART);

  GIMP_CONFIG_PROP_PATH (object_class,
                         PROP_PLUGINRC_PATH,
                         "pluginrc-path",
                         "plugninrc path",
                         PLUGINRC_PATH_BLURB,
                         GIMP_CONFIG_PATH_FILE,
                         "${gimp_dir}" G_DIR_SEPARATOR_S "pluginrc",
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_RESTART);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_LAYER_PREVIEWS,
                            "layer-previews",
                            "Layer previews",
                            LAYER_PREVIEWS_BLURB,
                            TRUE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_GROUP_LAYER_PREVIEWS,
                            "group-layer-previews",
                            "Layer group previews",
                            GROUP_LAYER_PREVIEWS_BLURB,
                            TRUE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_ENUM (object_class, PROP_LAYER_PREVIEW_SIZE,
                         "layer-preview-size",
                         "Layer preview size",
                         LAYER_PREVIEW_SIZE_BLURB,
                         GIMP_TYPE_VIEW_SIZE,
                         GIMP_VIEW_SIZE_MEDIUM,
                         GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_ENUM (object_class, PROP_THUMBNAIL_SIZE,
                         "thumbnail-size",
                         "Thumbnail size",
                         THUMBNAIL_SIZE_BLURB,
                         GIMP_TYPE_THUMBNAIL_SIZE,
                         GIMP_THUMBNAIL_SIZE_NORMAL,
                         GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_MEMSIZE (object_class, PROP_THUMBNAIL_FILESIZE_LIMIT,
                            "thumbnail-filesize-limit",
                            "Thumbnail file size limit",
                            THUMBNAIL_FILESIZE_LIMIT_BLURB,
                            0, GIMP_MAX_MEMSIZE, 1 << 22,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_OBJECT (object_class, PROP_COLOR_MANAGEMENT,
                           "color-management",
                           "Color management",
                           COLOR_MANAGEMENT_BLURB,
                           GIMP_TYPE_COLOR_CONFIG,
                           GIMP_PARAM_STATIC_STRINGS |
                           GIMP_CONFIG_PARAM_AGGREGATE);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SAVE_DOCUMENT_HISTORY,
                            "save-document-history",
                            "Save document history",
                            SAVE_DOCUMENT_HISTORY_BLURB,
                            TRUE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_RGB (object_class, PROP_QUICK_MASK_COLOR,
                        "quick-mask-color",
                        "Quick mask color",
                        QUICK_MASK_COLOR_BLURB,
                        TRUE, &red,
                        GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_IMPORT_PROMOTE_FLOAT,
                            "import-promote-float",
                            "Import promote float",
                            IMPORT_PROMOTE_FLOAT_BLURB,
                            FALSE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_IMPORT_PROMOTE_DITHER,
                            "import-promote-dither",
                            "Import promote dither",
                            IMPORT_PROMOTE_DITHER_BLURB,
                            TRUE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_IMPORT_ADD_ALPHA,
                            "import-add-alpha",
                            "Import add alpha",
                            IMPORT_ADD_ALPHA_BLURB,
                            FALSE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_PATH (object_class, PROP_IMPORT_RAW_PLUG_IN,
                         "import-raw-plug-in",
                         "Import raw plug-in",
                         IMPORT_RAW_PLUG_IN_BLURB,
                         GIMP_CONFIG_PATH_FILE,
                         "",
                         GIMP_PARAM_STATIC_STRINGS |
                         GIMP_CONFIG_PARAM_RESTART);

  GIMP_CONFIG_PROP_ENUM (object_class, PROP_EXPORT_FILE_TYPE,
                         "export-file-type",
                         "Default export file type",
                         EXPORT_FILE_TYPE_BLURB,
                         GIMP_TYPE_EXPORT_FILE_TYPE,
                         GIMP_EXPORT_FILE_PNG,
                         GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_EXPORT_COLOR_PROFILE,
                            "export-color-profile",
                            "Export Color Profile",
                            EXPORT_COLOR_PROFILE_BLURB,
                            TRUE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_EXPORT_METADATA_EXIF,
                            "export-metadata-exif",
                            "Export Exif metadata",
                            EXPORT_METADATA_EXIF_BLURB,
                            TRUE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_EXPORT_METADATA_XMP,
                            "export-metadata-xmp",
                            "Export XMP metadata",
                            EXPORT_METADATA_XMP_BLURB,
                            TRUE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_EXPORT_METADATA_IPTC,
                            "export-metadata-iptc",
                            "Export IPTC metadata",
                            EXPORT_METADATA_IPTC_BLURB,
                            TRUE,
                            GIMP_PARAM_STATIC_STRINGS);

  GIMP_CONFIG_PROP_ENUM (object_class, PROP_DEBUG_POLICY,
                         "debug-policy",
                         "Try generating backtrace upon errors",
                         GENERATE_BACKTRACE_BLURB,
                         GIMP_TYPE_DEBUG_POLICY,
#ifdef GIMP_UNSTABLE
                         GIMP_DEBUG_POLICY_WARNING,
#else
                         GIMP_DEBUG_POLICY_FATAL,
#endif
                         GIMP_PARAM_STATIC_STRINGS);

  /*  only for backward compatibility:  */
  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_INSTALL_COLORMAP,
                            "install-colormap",
                            NULL, NULL,
                            FALSE,
                            GIMP_PARAM_STATIC_STRINGS |
                            GIMP_CONFIG_PARAM_IGNORE);

  GIMP_CONFIG_PROP_INT (object_class, PROP_MIN_COLORS,
                        "min-colors",
                        NULL, NULL,
                        27, 256, 144,
                        GIMP_PARAM_STATIC_STRINGS |
                        GIMP_CONFIG_PARAM_IGNORE);
}