don't say "Now type 'make'" if configure failed.

2002-11-11  Manish Singh  <yosh@gimp.org>

        * autogen.sh: don't say "Now type 'make'" if configure failed.

        * app/core/Makefile.am
        * app/core/core-types.h
        * app/core/gimpenvirontable.[ch]: Implemented GimpEnvironTable,
        keeps an envp array built from system environment and *.env files.

        * app/core/gimp.[ch]: keep a GimpEnvironTable around.

        * app/gimprc.c
        * app/config/gimpcoreconfig.[ch]
        * app/core/gimpcoreconfig.h
        * app/gui/preferences-dialog.c
        * app/gui/user-install-dialog.c: environ-path config stuff

        * themes/Default/images/preferences/Makefile.am
        * themes/Default/images/preferences/folder-environ.png: just copied
        folder.png here, need a better one.

        * app/plug-in/plug-in.c: quick hack to use the envp in the
        GimpEnvironTable. Only on unix now, should really port the
        code to use g_spawn_*.

        * data/misc/user_install
        * etc/gimprc.in: add environ-path stuff

        * data/environ/Makefile: creates system environ directory.

        * data/environ/default.env: sample env file info.

        * data/Makefile.am
        * configure.in: added data/environ dir

        * plug-ins/pygimp/Makefile.am: python module files get put in
        $(gimpplugindir)/python now, install pygimp.env to point to it.

        * plug-ins/pygimp/doc/Makefile.am: minor clean up.
This commit is contained in:
Manish Singh 2002-11-12 03:34:11 +00:00 committed by Manish Singh
parent a6f8c92f4c
commit 2eef2afbc1
38 changed files with 906 additions and 42 deletions

View File

@ -1,3 +1,43 @@
2002-11-11 Manish Singh <yosh@gimp.org>
* autogen.sh: don't say "Now type 'make'" if configure failed.
* app/core/Makefile.am
* app/core/core-types.h
* app/core/gimpenvirontable.[ch]: Implemented GimpEnvironTable,
keeps an envp array built from system environment and *.env files.
* app/core/gimp.[ch]: keep a GimpEnvironTable around.
* app/gimprc.c
* app/config/gimpcoreconfig.[ch]
* app/core/gimpcoreconfig.h
* app/gui/preferences-dialog.c
* app/gui/user-install-dialog.c: environ-path config stuff
* themes/Default/images/preferences/Makefile.am
* themes/Default/images/preferences/folder-environ.png: just copied
folder.png here, need a better one.
* app/plug-in/plug-in.c: quick hack to use the envp in the
GimpEnvironTable. Only on unix now, should really port the
code to use g_spawn_*.
* data/misc/user_install
* etc/gimprc.in: add environ-path stuff
* data/environ/Makefile: creates system environ directory.
* data/environ/default.env: sample env file info.
* data/Makefile.am
* configure.in: added data/environ dir
* plug-ins/pygimp/Makefile.am: python module files get put in
$(gimpplugindir)/python now, install pygimp.env to point to it.
* plug-ins/pygimp/doc/Makefile.am: minor clean up.
2002-11-09 Manish Singh <yosh@gimp.org>
* plug-ins/common/png.c: allow setting compression level 0 from

View File

@ -50,6 +50,7 @@ enum
PROP_PLUG_IN_PATH,
PROP_TOOL_PLUG_IN_PATH,
PROP_MODULE_PATH,
PROP_ENVIRON_PATH,
PROP_BRUSH_PATH,
PROP_PATTERN_PATH,
PROP_PALETTE_PATH,
@ -133,6 +134,9 @@ gimp_core_config_class_init (GimpCoreConfigClass *klass)
GIMP_CONFIG_INSTALL_PROP_PATH (object_class, PROP_MODULE_PATH,
"module-path",
gimp_config_build_plug_in_path ("modules"));
GIMP_CONFIG_INSTALL_PROP_PATH (object_class, PROP_ENVIRON_PATH,
"environ-path",
gimp_config_build_plug_in_path ("environ"));
GIMP_CONFIG_INSTALL_PROP_PATH (object_class, PROP_BRUSH_PATH,
"brush-path",
gimp_config_build_data_path ("brushes"));
@ -220,6 +224,7 @@ gimp_core_config_finalize (GObject *object)
g_free (core_config->plug_in_path);
g_free (core_config->tool_plug_in_path);
g_free (core_config->module_path);
g_free (core_config->environ_path);
g_free (core_config->brush_path);
g_free (core_config->pattern_path);
g_free (core_config->palette_path);
@ -262,6 +267,10 @@ gimp_core_config_set_property (GObject *object,
g_free (core_config->module_path);
core_config->module_path = g_value_dup_string (value);
break;
case PROP_ENVIRON_PATH:
g_free (core_config->environ_path);
core_config->environ_path = g_value_dup_string (value);
break;
case PROP_BRUSH_PATH:
g_free (core_config->brush_path);
core_config->brush_path = g_value_dup_string (value);
@ -376,6 +385,9 @@ gimp_core_config_get_property (GObject *object,
case PROP_MODULE_PATH:
g_value_set_string (value, core_config->module_path);
break;
case PROP_ENVIRON_PATH:
g_value_set_string (value, core_config->environ_path);
break;
case PROP_BRUSH_PATH:
g_value_set_string (value, core_config->brush_path);
break;

View File

@ -45,6 +45,7 @@ struct _GimpCoreConfig
gchar *plug_in_path;
gchar *tool_plug_in_path;
gchar *module_path;
gchar *environ_path;
gchar *brush_path;
gchar *pattern_path;
gchar *palette_path;

View File

@ -78,6 +78,8 @@ libappcore_a_sources = \
gimpdrawable-transform-utils.h \
gimpedit.c \
gimpedit.h \
gimpenvirontable.h \
gimpenvirontable.c \
gimpgradient.c \
gimpgradient.h \
gimpimage.c \

View File

@ -160,6 +160,8 @@ typedef struct _GimpImageMap GimpImageMap;
typedef struct _GimpText GimpText;
typedef struct _GimpEnvironTable GimpEnvironTable;
/* undo objects */

View File

@ -45,6 +45,7 @@
#include "gimpcoreconfig.h"
#include "gimpdatafactory.h"
#include "gimpdocumentlist.h"
#include "gimpenvirontable.h"
#include "gimpgradient.h"
#include "gimpimage.h"
#include "gimpimage-new.h"
@ -147,6 +148,8 @@ gimp_init (Gimp *gimp)
paint_init (gimp);
gimp_modules_init (gimp);
gimp->environ_table = gimp_environ_table_new ();
gimp->images = gimp_list_new (GIMP_TYPE_IMAGE,
GIMP_CONTAINER_POLICY_WEAK);
@ -328,6 +331,12 @@ gimp_finalize (GObject *object)
gimp->images = NULL;
}
if (gimp->environ_table)
{
g_object_unref (gimp->environ_table);
gimp->environ_table = NULL;
}
if (gimp->module_db)
gimp_modules_exit (gimp);
@ -522,6 +531,9 @@ gimp_initialize (Gimp *gimp,
/* register all internal procedures */
(* status_callback) (_("Procedural Database"), NULL, -1);
internal_procs_init (gimp, status_callback);
(* status_callback) (_("Plug-In Environment"), "", -1);
gimp_environ_table_load (gimp->environ_table, gimp->config->environ_path);
}
void

View File

@ -76,6 +76,8 @@ struct _Gimp
GimpModuleDB *module_db;
gboolean write_modulerc;
GimpEnvironTable *environ_table;
GimpContainer *images;
gint next_image_ID;
guint32 next_guide_ID;

View File

@ -27,6 +27,7 @@ struct _GimpCoreConfig
gchar *plug_in_path;
gchar *tool_plug_in_path;
gchar *module_path;
gchar *environ_path;
gchar *brush_path;
gchar *pattern_path;

283
app/core/gimpenvirontable.c Normal file
View File

@ -0,0 +1,283 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* gimpenvirontable.c
* (C) 2002 Manish Singh <yosh@gimp.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glib-object.h>
#include "libgimpbase/gimpbase.h"
#include "core-types.h"
#include "gimpenvirontable.h"
/* FIXME: check how portable this is */
extern char **environ;
static void gimp_environ_table_class_init (GimpEnvironTableClass *class);
static void gimp_environ_table_init (GimpEnvironTable *environ_table);
static void gimp_environ_table_finalize (GObject *object);
static void gimp_environ_table_load_env_file (GimpDatafileData *file_data);
static void gimp_environ_table_populate (GimpEnvironTable *environ_table);
static void gimp_environ_table_populate_one (const gchar *name,
const gchar *value,
GPtrArray *env_array);
static GObjectClass *parent_class = NULL;
GType
gimp_environ_table_get_type (void)
{
static GType environ_table_type = 0;
if (! environ_table_type)
{
static const GTypeInfo environ_table_info =
{
sizeof (GimpEnvironTableClass),
NULL, /* base_init */
NULL, /* base_finalize */
(GClassInitFunc) gimp_environ_table_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (GimpEnvironTable),
0, /* n_preallocs */
(GInstanceInitFunc) gimp_environ_table_init,
};
environ_table_type = g_type_register_static (G_TYPE_OBJECT,
"GimpEnvironTable",
&environ_table_info, 0);
}
return environ_table_type;
}
static void
gimp_environ_table_class_init (GimpEnvironTableClass *class)
{
GObjectClass *object_class;
object_class = G_OBJECT_CLASS (class);
parent_class = g_type_class_peek_parent (class);
object_class->finalize = gimp_environ_table_finalize;
}
static void
gimp_environ_table_init (GimpEnvironTable *env)
{
env->vars = NULL;
env->envp = NULL;
}
static void
gimp_environ_table_finalize (GObject *object)
{
GimpEnvironTable *env;
env = GIMP_ENVIRON_TABLE (object);
gimp_environ_table_clear (env);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
GimpEnvironTable *
gimp_environ_table_new (void)
{
return g_object_new (GIMP_TYPE_ENVIRON_TABLE, NULL);
}
void
gimp_environ_table_load (GimpEnvironTable *environ_table,
const gchar *env_path)
{
g_return_if_fail (GIMP_IS_ENVIRON_TABLE (environ_table));
gimp_environ_table_clear (environ_table);
environ_table->vars = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, g_free);
gimp_datafiles_read_directories (env_path,
G_FILE_TEST_EXISTS,
gimp_environ_table_load_env_file,
environ_table);
gimp_environ_table_populate (environ_table);
}
void
gimp_environ_table_clear (GimpEnvironTable *environ_table)
{
g_return_if_fail (GIMP_IS_ENVIRON_TABLE (environ_table));
if (environ_table->vars)
{
g_hash_table_destroy (environ_table->vars);
environ_table->vars = NULL;
}
if (environ_table->envp)
{
g_strfreev (environ_table->envp);
environ_table->envp = NULL;
}
}
gchar **
gimp_environ_table_get_envp (GimpEnvironTable *environ_table)
{
g_return_val_if_fail (GIMP_IS_ENVIRON_TABLE (environ_table), NULL);
/* Hmm.. should we return a copy here in the future? Not thread safe atm,
* but, the rest of it isn't either.
*/
if (! environ_table->envp)
{
environ_table->envp = g_new (gchar *, 1);
*(environ_table->envp) = NULL;
}
return environ_table->envp;
}
/* private */
static void
gimp_environ_table_load_env_file (GimpDatafileData *file_data)
{
GimpEnvironTable *environ_table;
FILE *env;
gchar buffer[4096];
gsize len;
gchar *name, *value, *p;
environ_table = GIMP_ENVIRON_TABLE (file_data->user_data);
env = fopen (file_data->filename, "r");
if (! env)
return;
while (fgets (buffer, sizeof (buffer), env))
{
/* Skip comments */
if (buffer[0] == '#')
continue;
len = strlen (buffer) - 1;
/* Skip too long lines */
if (buffer[len] != '\n')
continue;
buffer[len] = '\0';
p = strchr (buffer, '=');
if (! p)
continue;
*p = '\0';
name = buffer;
value = p + 1;
if (! g_hash_table_lookup (environ_table->vars, name))
g_hash_table_insert (environ_table->vars,
g_strdup (name),
g_strdup (value));
}
fclose (env);
}
static void
gimp_environ_table_populate (GimpEnvironTable *environ_table)
{
gchar **var = environ;
gchar *name, *p;
GPtrArray *env_array;
env_array = g_ptr_array_new ();
while (*var)
{
p = strchr (*var, '=');
/* shouldn't happen... but just to be safe... */
if (p)
{
name = g_strndup (*var, p - *var);
if (! g_hash_table_lookup (environ_table->vars, name))
g_ptr_array_add (env_array, g_strdup (*var));
g_free (name);
}
var++;
}
g_hash_table_foreach (environ_table->vars,
(GHFunc) gimp_environ_table_populate_one,
env_array);
g_ptr_array_add (env_array, NULL);
environ_table->envp = (gchar **) g_ptr_array_free (env_array, FALSE);
#ifdef ENVP_DEBUG
var = environ_table->envp;
g_print ("GimpEnvironTable:\n");
while (*var)
{
g_print ("%s\n", *var);
var++;
}
#endif /* ENVP_DEBUG */
}
static void
gimp_environ_table_populate_one (const gchar *name,
const gchar *value,
GPtrArray *env_array)
{
gchar *var;
var = g_strconcat (name, "=", value, NULL);
g_ptr_array_add (env_array, var);
}

View File

@ -0,0 +1,61 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* gimpenvirontable.h
* (C) 2002 Manish Singh <yosh@gimp.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __GIMP_ENVIRON_TABLE_H__
#define __GIMP_ENVIRON_TABLE_H__
#define GIMP_TYPE_ENVIRON_TABLE (gimp_environ_table_get_type ())
#define GIMP_ENVIRON_TABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_ENVIRON_TABLE, GimpEnvironTable))
#define GIMP_ENVIRON_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_ENVIRON_TABLE, GimpEnvironTableClass))
#define GIMP_IS_ENVIRON_TABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_ENVIRON_TABLE))
#define GIMP_IS_ENVIRON_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_ENVIRON_TABLE))
#define GIMP_ENVIRON_TABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_ENVIRON_TABLE, GimpEnvironTableClass))
typedef struct _GimpEnvironTableClass GimpEnvironTableClass;
struct _GimpEnvironTable
{
GObject parent_instance;
GHashTable *vars;
gchar **envp;
};
struct _GimpEnvironTableClass
{
GObjectClass parent_class;
};
GType gimp_environ_table_get_type (void) G_GNUC_CONST;
GimpEnvironTable * gimp_environ_table_new (void);
void gimp_environ_table_load (GimpEnvironTable *environ_table,
const gchar *env_path);
void gimp_environ_table_clear (GimpEnvironTable *environ_table);
gchar ** gimp_environ_table_get_envp (GimpEnvironTable *environ_table);
#endif /* __GIMP_ENVIRON_TABLE_H__ */

View File

@ -159,6 +159,7 @@ static gchar * old_swap_path;
static gchar * old_plug_in_path;
static gchar * old_tool_plug_in_path;
static gchar * old_module_path;
static gchar * old_environ_path;
static gchar * old_brush_path;
static gchar * old_pattern_path;
static gchar * old_palette_path;
@ -193,6 +194,7 @@ static gchar * edit_swap_path = NULL;
static gchar * edit_plug_in_path = NULL;
static gchar * edit_tool_plug_in_path = NULL;
static gchar * edit_module_path = NULL;
static gchar * edit_environ_path = NULL;
static gchar * edit_brush_path = NULL;
static gchar * edit_pattern_path = NULL;
static gchar * edit_palette_path = NULL;
@ -376,6 +378,7 @@ prefs_check_settings (Gimp *gimp)
prefs_strcmp (old_plug_in_path, edit_plug_in_path) ||
prefs_strcmp (old_tool_plug_in_path, edit_tool_plug_in_path) ||
prefs_strcmp (old_module_path, edit_module_path) ||
prefs_strcmp (old_environ_path, edit_environ_path) ||
prefs_strcmp (old_brush_path, edit_brush_path) ||
prefs_strcmp (old_pattern_path, edit_pattern_path) ||
prefs_strcmp (old_palette_path, edit_palette_path) ||
@ -511,6 +514,7 @@ prefs_save_callback (GtkWidget *widget,
gchar *save_plug_in_path;
gchar *save_tool_plug_in_path;
gchar *save_module_path;
gchar *save_environ_path;
gchar *save_brush_path;
gchar *save_pattern_path;
gchar *save_palette_path;
@ -563,6 +567,7 @@ prefs_save_callback (GtkWidget *widget,
save_plug_in_path = gimp->config->plug_in_path;
save_tool_plug_in_path = gimp->config->tool_plug_in_path;
save_module_path = gimp->config->module_path;
save_environ_path = gimp->config->environ_path;
save_brush_path = gimp->config->brush_path;
save_pattern_path = gimp->config->pattern_path;
save_palette_path = gimp->config->palette_path;
@ -813,6 +818,11 @@ prefs_save_callback (GtkWidget *widget,
gimp->config->module_path = edit_module_path;
update = g_list_append (update, "module-path");
}
if (prefs_strcmp (old_environ_path, edit_environ_path))
{
gimp->config->environ_path = edit_environ_path;
update = g_list_append (update, "environ-path");
}
if (prefs_strcmp (old_brush_path, edit_brush_path))
{
gimp->config->brush_path = edit_brush_path;
@ -868,6 +878,7 @@ prefs_save_callback (GtkWidget *widget,
gimp->config->plug_in_path = save_plug_in_path;
gimp->config->tool_plug_in_path = save_tool_plug_in_path;
gimp->config->module_path = save_module_path;
gimp->config->environ_path = save_environ_path;
gimp->config->brush_path = save_brush_path;
gimp->config->pattern_path = save_pattern_path;
gimp->config->palette_path = save_palette_path;
@ -981,6 +992,7 @@ prefs_cancel_callback (GtkWidget *widget,
prefs_strset (&edit_plug_in_path, old_plug_in_path);
prefs_strset (&edit_tool_plug_in_path, old_tool_plug_in_path);
prefs_strset (&edit_module_path, old_module_path);
prefs_strset (&edit_environ_path, old_environ_path);
prefs_strset (&edit_brush_path, old_brush_path);
prefs_strset (&edit_pattern_path, old_pattern_path);
prefs_strset (&edit_palette_path, old_palette_path);
@ -1648,6 +1660,7 @@ preferences_dialog_create (Gimp *gimp)
edit_plug_in_path = prefs_strdup (gimp->config->plug_in_path);
edit_tool_plug_in_path = prefs_strdup (gimp->config->tool_plug_in_path);
edit_module_path = prefs_strdup (gimp->config->module_path);
edit_environ_path = prefs_strdup (gimp->config->environ_path);
edit_brush_path = prefs_strdup (gimp->config->brush_path);
edit_pattern_path = prefs_strdup (gimp->config->pattern_path);
edit_palette_path = prefs_strdup (gimp->config->palette_path);
@ -1721,6 +1734,7 @@ preferences_dialog_create (Gimp *gimp)
prefs_strset (&old_plug_in_path, edit_plug_in_path);
prefs_strset (&old_tool_plug_in_path, edit_tool_plug_in_path);
prefs_strset (&old_module_path, edit_module_path);
prefs_strset (&old_environ_path, edit_environ_path);
prefs_strset (&old_brush_path, edit_brush_path);
prefs_strset (&old_pattern_path, edit_pattern_path);
prefs_strset (&old_palette_path, edit_palette_path);
@ -2796,6 +2810,10 @@ preferences_dialog_create (Gimp *gimp)
"dialogs/preferences/folders.html#modules",
N_("Select Module Folders"),
&edit_module_path },
{ N_("Environment"), N_("Environment Folders"), "folders-environ.png",
"dialogs/preferences/folders.html#environ",
N_("Select Environment Folders"),
&edit_environ_path },
{ N_("Themes"), N_("Theme Folders"), "folders-themes.png",
"dialogs/preferences/folders.html#themes",
N_("Select Theme Folders"),

View File

@ -216,6 +216,15 @@ tree_items[] =
"GIMP module folder when searching for modules to load\n"
"during initialization.")
},
{
TRUE, "environ",
N_("This folder is used to store user created, temporary,\n"
"or otherwise non-system-supported additions to the\n"
"plug-in environment. The GIMP checks this folder in\n"
"addition to the system-wide GIMP environment folder\n"
"when searching for plug-in environment modification\n"
"files.")
},
{
TRUE, "scripts",
N_("This folder is used to store user created and installed\n"

View File

@ -324,7 +324,8 @@ gimprc_init (Gimp *gimp)
{ "pluginrc-path", TT_PATH, NULL, NULL },
{ "module-load-inhibit", TT_PATH, NULL, NULL },
{ "thumbnail-size", TT_XTHUMBSIZE,NULL, NULL },
{ "tool-plug-in-path", TT_PATH, NULL, NULL }
{ "tool-plug-in-path", TT_PATH, NULL, NULL },
{ "environ-path", TT_PATH, NULL, NULL }
};
/* this hurts badly */
@ -358,6 +359,7 @@ gimprc_init (Gimp *gimp)
core_funcs[20].val1p = &gimp->config->module_db_load_inhibit;
core_funcs[21].val1p = &gimp->config->thumbnail_size;
core_funcs[22].val1p = &gimp->config->tool_plug_in_path;
core_funcs[23].val1p = &gimp->config->environ_path;
parse_func_hash = g_hash_table_new (g_str_hash, g_str_equal);

View File

@ -159,6 +159,7 @@ static gchar * old_swap_path;
static gchar * old_plug_in_path;
static gchar * old_tool_plug_in_path;
static gchar * old_module_path;
static gchar * old_environ_path;
static gchar * old_brush_path;
static gchar * old_pattern_path;
static gchar * old_palette_path;
@ -193,6 +194,7 @@ static gchar * edit_swap_path = NULL;
static gchar * edit_plug_in_path = NULL;
static gchar * edit_tool_plug_in_path = NULL;
static gchar * edit_module_path = NULL;
static gchar * edit_environ_path = NULL;
static gchar * edit_brush_path = NULL;
static gchar * edit_pattern_path = NULL;
static gchar * edit_palette_path = NULL;
@ -376,6 +378,7 @@ prefs_check_settings (Gimp *gimp)
prefs_strcmp (old_plug_in_path, edit_plug_in_path) ||
prefs_strcmp (old_tool_plug_in_path, edit_tool_plug_in_path) ||
prefs_strcmp (old_module_path, edit_module_path) ||
prefs_strcmp (old_environ_path, edit_environ_path) ||
prefs_strcmp (old_brush_path, edit_brush_path) ||
prefs_strcmp (old_pattern_path, edit_pattern_path) ||
prefs_strcmp (old_palette_path, edit_palette_path) ||
@ -511,6 +514,7 @@ prefs_save_callback (GtkWidget *widget,
gchar *save_plug_in_path;
gchar *save_tool_plug_in_path;
gchar *save_module_path;
gchar *save_environ_path;
gchar *save_brush_path;
gchar *save_pattern_path;
gchar *save_palette_path;
@ -563,6 +567,7 @@ prefs_save_callback (GtkWidget *widget,
save_plug_in_path = gimp->config->plug_in_path;
save_tool_plug_in_path = gimp->config->tool_plug_in_path;
save_module_path = gimp->config->module_path;
save_environ_path = gimp->config->environ_path;
save_brush_path = gimp->config->brush_path;
save_pattern_path = gimp->config->pattern_path;
save_palette_path = gimp->config->palette_path;
@ -813,6 +818,11 @@ prefs_save_callback (GtkWidget *widget,
gimp->config->module_path = edit_module_path;
update = g_list_append (update, "module-path");
}
if (prefs_strcmp (old_environ_path, edit_environ_path))
{
gimp->config->environ_path = edit_environ_path;
update = g_list_append (update, "environ-path");
}
if (prefs_strcmp (old_brush_path, edit_brush_path))
{
gimp->config->brush_path = edit_brush_path;
@ -868,6 +878,7 @@ prefs_save_callback (GtkWidget *widget,
gimp->config->plug_in_path = save_plug_in_path;
gimp->config->tool_plug_in_path = save_tool_plug_in_path;
gimp->config->module_path = save_module_path;
gimp->config->environ_path = save_environ_path;
gimp->config->brush_path = save_brush_path;
gimp->config->pattern_path = save_pattern_path;
gimp->config->palette_path = save_palette_path;
@ -981,6 +992,7 @@ prefs_cancel_callback (GtkWidget *widget,
prefs_strset (&edit_plug_in_path, old_plug_in_path);
prefs_strset (&edit_tool_plug_in_path, old_tool_plug_in_path);
prefs_strset (&edit_module_path, old_module_path);
prefs_strset (&edit_environ_path, old_environ_path);
prefs_strset (&edit_brush_path, old_brush_path);
prefs_strset (&edit_pattern_path, old_pattern_path);
prefs_strset (&edit_palette_path, old_palette_path);
@ -1648,6 +1660,7 @@ preferences_dialog_create (Gimp *gimp)
edit_plug_in_path = prefs_strdup (gimp->config->plug_in_path);
edit_tool_plug_in_path = prefs_strdup (gimp->config->tool_plug_in_path);
edit_module_path = prefs_strdup (gimp->config->module_path);
edit_environ_path = prefs_strdup (gimp->config->environ_path);
edit_brush_path = prefs_strdup (gimp->config->brush_path);
edit_pattern_path = prefs_strdup (gimp->config->pattern_path);
edit_palette_path = prefs_strdup (gimp->config->palette_path);
@ -1721,6 +1734,7 @@ preferences_dialog_create (Gimp *gimp)
prefs_strset (&old_plug_in_path, edit_plug_in_path);
prefs_strset (&old_tool_plug_in_path, edit_tool_plug_in_path);
prefs_strset (&old_module_path, edit_module_path);
prefs_strset (&old_environ_path, edit_environ_path);
prefs_strset (&old_brush_path, edit_brush_path);
prefs_strset (&old_pattern_path, edit_pattern_path);
prefs_strset (&old_palette_path, edit_palette_path);
@ -2796,6 +2810,10 @@ preferences_dialog_create (Gimp *gimp)
"dialogs/preferences/folders.html#modules",
N_("Select Module Folders"),
&edit_module_path },
{ N_("Environment"), N_("Environment Folders"), "folders-environ.png",
"dialogs/preferences/folders.html#environ",
N_("Select Environment Folders"),
&edit_environ_path },
{ N_("Themes"), N_("Theme Folders"), "folders-themes.png",
"dialogs/preferences/folders.html#themes",
N_("Select Theme Folders"),

View File

@ -216,6 +216,15 @@ tree_items[] =
"GIMP module folder when searching for modules to load\n"
"during initialization.")
},
{
TRUE, "environ",
N_("This folder is used to store user created, temporary,\n"
"or otherwise non-system-supported additions to the\n"
"plug-in environment. The GIMP checks this folder in\n"
"addition to the system-wide GIMP environment folder\n"
"when searching for plug-in environment modification\n"
"files.")
},
{
TRUE, "scripts",
N_("This folder is used to store user created and installed\n"

View File

@ -0,0 +1,283 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* gimpenvirontable.c
* (C) 2002 Manish Singh <yosh@gimp.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glib-object.h>
#include "libgimpbase/gimpbase.h"
#include "core-types.h"
#include "gimpenvirontable.h"
/* FIXME: check how portable this is */
extern char **environ;
static void gimp_environ_table_class_init (GimpEnvironTableClass *class);
static void gimp_environ_table_init (GimpEnvironTable *environ_table);
static void gimp_environ_table_finalize (GObject *object);
static void gimp_environ_table_load_env_file (GimpDatafileData *file_data);
static void gimp_environ_table_populate (GimpEnvironTable *environ_table);
static void gimp_environ_table_populate_one (const gchar *name,
const gchar *value,
GPtrArray *env_array);
static GObjectClass *parent_class = NULL;
GType
gimp_environ_table_get_type (void)
{
static GType environ_table_type = 0;
if (! environ_table_type)
{
static const GTypeInfo environ_table_info =
{
sizeof (GimpEnvironTableClass),
NULL, /* base_init */
NULL, /* base_finalize */
(GClassInitFunc) gimp_environ_table_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (GimpEnvironTable),
0, /* n_preallocs */
(GInstanceInitFunc) gimp_environ_table_init,
};
environ_table_type = g_type_register_static (G_TYPE_OBJECT,
"GimpEnvironTable",
&environ_table_info, 0);
}
return environ_table_type;
}
static void
gimp_environ_table_class_init (GimpEnvironTableClass *class)
{
GObjectClass *object_class;
object_class = G_OBJECT_CLASS (class);
parent_class = g_type_class_peek_parent (class);
object_class->finalize = gimp_environ_table_finalize;
}
static void
gimp_environ_table_init (GimpEnvironTable *env)
{
env->vars = NULL;
env->envp = NULL;
}
static void
gimp_environ_table_finalize (GObject *object)
{
GimpEnvironTable *env;
env = GIMP_ENVIRON_TABLE (object);
gimp_environ_table_clear (env);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
GimpEnvironTable *
gimp_environ_table_new (void)
{
return g_object_new (GIMP_TYPE_ENVIRON_TABLE, NULL);
}
void
gimp_environ_table_load (GimpEnvironTable *environ_table,
const gchar *env_path)
{
g_return_if_fail (GIMP_IS_ENVIRON_TABLE (environ_table));
gimp_environ_table_clear (environ_table);
environ_table->vars = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, g_free);
gimp_datafiles_read_directories (env_path,
G_FILE_TEST_EXISTS,
gimp_environ_table_load_env_file,
environ_table);
gimp_environ_table_populate (environ_table);
}
void
gimp_environ_table_clear (GimpEnvironTable *environ_table)
{
g_return_if_fail (GIMP_IS_ENVIRON_TABLE (environ_table));
if (environ_table->vars)
{
g_hash_table_destroy (environ_table->vars);
environ_table->vars = NULL;
}
if (environ_table->envp)
{
g_strfreev (environ_table->envp);
environ_table->envp = NULL;
}
}
gchar **
gimp_environ_table_get_envp (GimpEnvironTable *environ_table)
{
g_return_val_if_fail (GIMP_IS_ENVIRON_TABLE (environ_table), NULL);
/* Hmm.. should we return a copy here in the future? Not thread safe atm,
* but, the rest of it isn't either.
*/
if (! environ_table->envp)
{
environ_table->envp = g_new (gchar *, 1);
*(environ_table->envp) = NULL;
}
return environ_table->envp;
}
/* private */
static void
gimp_environ_table_load_env_file (GimpDatafileData *file_data)
{
GimpEnvironTable *environ_table;
FILE *env;
gchar buffer[4096];
gsize len;
gchar *name, *value, *p;
environ_table = GIMP_ENVIRON_TABLE (file_data->user_data);
env = fopen (file_data->filename, "r");
if (! env)
return;
while (fgets (buffer, sizeof (buffer), env))
{
/* Skip comments */
if (buffer[0] == '#')
continue;
len = strlen (buffer) - 1;
/* Skip too long lines */
if (buffer[len] != '\n')
continue;
buffer[len] = '\0';
p = strchr (buffer, '=');
if (! p)
continue;
*p = '\0';
name = buffer;
value = p + 1;
if (! g_hash_table_lookup (environ_table->vars, name))
g_hash_table_insert (environ_table->vars,
g_strdup (name),
g_strdup (value));
}
fclose (env);
}
static void
gimp_environ_table_populate (GimpEnvironTable *environ_table)
{
gchar **var = environ;
gchar *name, *p;
GPtrArray *env_array;
env_array = g_ptr_array_new ();
while (*var)
{
p = strchr (*var, '=');
/* shouldn't happen... but just to be safe... */
if (p)
{
name = g_strndup (*var, p - *var);
if (! g_hash_table_lookup (environ_table->vars, name))
g_ptr_array_add (env_array, g_strdup (*var));
g_free (name);
}
var++;
}
g_hash_table_foreach (environ_table->vars,
(GHFunc) gimp_environ_table_populate_one,
env_array);
g_ptr_array_add (env_array, NULL);
environ_table->envp = (gchar **) g_ptr_array_free (env_array, FALSE);
#ifdef ENVP_DEBUG
var = environ_table->envp;
g_print ("GimpEnvironTable:\n");
while (*var)
{
g_print ("%s\n", *var);
var++;
}
#endif /* ENVP_DEBUG */
}
static void
gimp_environ_table_populate_one (const gchar *name,
const gchar *value,
GPtrArray *env_array)
{
gchar *var;
var = g_strconcat (name, "=", value, NULL);
g_ptr_array_add (env_array, var);
}

View File

@ -0,0 +1,61 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* gimpenvirontable.h
* (C) 2002 Manish Singh <yosh@gimp.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __GIMP_ENVIRON_TABLE_H__
#define __GIMP_ENVIRON_TABLE_H__
#define GIMP_TYPE_ENVIRON_TABLE (gimp_environ_table_get_type ())
#define GIMP_ENVIRON_TABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_ENVIRON_TABLE, GimpEnvironTable))
#define GIMP_ENVIRON_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_ENVIRON_TABLE, GimpEnvironTableClass))
#define GIMP_IS_ENVIRON_TABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_ENVIRON_TABLE))
#define GIMP_IS_ENVIRON_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_ENVIRON_TABLE))
#define GIMP_ENVIRON_TABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_ENVIRON_TABLE, GimpEnvironTableClass))
typedef struct _GimpEnvironTableClass GimpEnvironTableClass;
struct _GimpEnvironTable
{
GObject parent_instance;
GHashTable *vars;
gchar **envp;
};
struct _GimpEnvironTableClass
{
GObjectClass parent_class;
};
GType gimp_environ_table_get_type (void) G_GNUC_CONST;
GimpEnvironTable * gimp_environ_table_new (void);
void gimp_environ_table_load (GimpEnvironTable *environ_table,
const gchar *env_path);
void gimp_environ_table_clear (GimpEnvironTable *environ_table);
gchar ** gimp_environ_table_get_envp (GimpEnvironTable *environ_table);
#endif /* __GIMP_ENVIRON_TABLE_H__ */

View File

@ -87,6 +87,7 @@
#include "core/gimpcontext.h"
#include "core/gimpcoreconfig.h"
#include "core/gimpdrawable.h"
#include "core/gimpenvirontable.h"
#include "core/gimpimage.h"
#include "gui/plug-in-menus.h"
@ -620,7 +621,8 @@ plug_in_open (PlugIn *plug_in)
* be reached, unless some strange error condition
* exists.
*/
execvp (plug_in->args[0], plug_in->args);
execve (plug_in->args[0], plug_in->args,
gimp_environ_table_get_envp (plug_in->gimp->environ_table));
_exit (1);
}
else if (plug_in->pid == -1)

View File

@ -87,6 +87,7 @@
#include "core/gimpcontext.h"
#include "core/gimpcoreconfig.h"
#include "core/gimpdrawable.h"
#include "core/gimpenvirontable.h"
#include "core/gimpimage.h"
#include "gui/plug-in-menus.h"
@ -620,7 +621,8 @@ plug_in_open (PlugIn *plug_in)
* be reached, unless some strange error condition
* exists.
*/
execvp (plug_in->args[0], plug_in->args);
execve (plug_in->args[0], plug_in->args,
gimp_environ_table_get_envp (plug_in->gimp->environ_table));
_exit (1);
}
else if (plug_in->pid == -1)

View File

@ -87,6 +87,7 @@
#include "core/gimpcontext.h"
#include "core/gimpcoreconfig.h"
#include "core/gimpdrawable.h"
#include "core/gimpenvirontable.h"
#include "core/gimpimage.h"
#include "gui/plug-in-menus.h"
@ -620,7 +621,8 @@ plug_in_open (PlugIn *plug_in)
* be reached, unless some strange error condition
* exists.
*/
execvp (plug_in->args[0], plug_in->args);
execve (plug_in->args[0], plug_in->args,
gimp_environ_table_get_envp (plug_in->gimp->environ_table));
_exit (1);
}
else if (plug_in->pid == -1)

View File

@ -87,6 +87,7 @@
#include "core/gimpcontext.h"
#include "core/gimpcoreconfig.h"
#include "core/gimpdrawable.h"
#include "core/gimpenvirontable.h"
#include "core/gimpimage.h"
#include "gui/plug-in-menus.h"
@ -620,7 +621,8 @@ plug_in_open (PlugIn *plug_in)
* be reached, unless some strange error condition
* exists.
*/
execvp (plug_in->args[0], plug_in->args);
execve (plug_in->args[0], plug_in->args,
gimp_environ_table_get_envp (plug_in->gimp->environ_table));
_exit (1);
}
else if (plug_in->pid == -1)

View File

@ -87,6 +87,7 @@
#include "core/gimpcontext.h"
#include "core/gimpcoreconfig.h"
#include "core/gimpdrawable.h"
#include "core/gimpenvirontable.h"
#include "core/gimpimage.h"
#include "gui/plug-in-menus.h"
@ -620,7 +621,8 @@ plug_in_open (PlugIn *plug_in)
* be reached, unless some strange error condition
* exists.
*/
execvp (plug_in->args[0], plug_in->args);
execve (plug_in->args[0], plug_in->args,
gimp_environ_table_get_envp (plug_in->gimp->environ_table));
_exit (1);
}
else if (plug_in->pid == -1)

View File

@ -87,6 +87,7 @@
#include "core/gimpcontext.h"
#include "core/gimpcoreconfig.h"
#include "core/gimpdrawable.h"
#include "core/gimpenvirontable.h"
#include "core/gimpimage.h"
#include "gui/plug-in-menus.h"
@ -620,7 +621,8 @@ plug_in_open (PlugIn *plug_in)
* be reached, unless some strange error condition
* exists.
*/
execvp (plug_in->args[0], plug_in->args);
execve (plug_in->args[0], plug_in->args,
gimp_environ_table_get_envp (plug_in->gimp->environ_table));
_exit (1);
}
else if (plug_in->pid == -1)

View File

@ -87,6 +87,7 @@
#include "core/gimpcontext.h"
#include "core/gimpcoreconfig.h"
#include "core/gimpdrawable.h"
#include "core/gimpenvirontable.h"
#include "core/gimpimage.h"
#include "gui/plug-in-menus.h"
@ -620,7 +621,8 @@ plug_in_open (PlugIn *plug_in)
* be reached, unless some strange error condition
* exists.
*/
execvp (plug_in->args[0], plug_in->args);
execve (plug_in->args[0], plug_in->args,
gimp_environ_table_get_envp (plug_in->gimp->environ_table));
_exit (1);
}
else if (plug_in->pid == -1)

View File

@ -87,6 +87,7 @@
#include "core/gimpcontext.h"
#include "core/gimpcoreconfig.h"
#include "core/gimpdrawable.h"
#include "core/gimpenvirontable.h"
#include "core/gimpimage.h"
#include "gui/plug-in-menus.h"
@ -620,7 +621,8 @@ plug_in_open (PlugIn *plug_in)
* be reached, unless some strange error condition
* exists.
*/
execvp (plug_in->args[0], plug_in->args);
execve (plug_in->args[0], plug_in->args,
gimp_environ_table_get_envp (plug_in->gimp->environ_table));
_exit (1);
}
else if (plug_in->pid == -1)

View File

@ -87,6 +87,7 @@
#include "core/gimpcontext.h"
#include "core/gimpcoreconfig.h"
#include "core/gimpdrawable.h"
#include "core/gimpenvirontable.h"
#include "core/gimpimage.h"
#include "gui/plug-in-menus.h"
@ -620,7 +621,8 @@ plug_in_open (PlugIn *plug_in)
* be reached, unless some strange error condition
* exists.
*/
execvp (plug_in->args[0], plug_in->args);
execve (plug_in->args[0], plug_in->args,
gimp_environ_table_get_envp (plug_in->gimp->environ_table));
_exit (1);
}
else if (plug_in->pid == -1)

View File

@ -170,7 +170,11 @@ intltoolize --copy --force --automake
cd $ORIGDIR
$srcdir/configure --enable-maintainer-mode --enable-gtk-doc "$@"
if $srcdir/configure --enable-maintainer-mode --enable-gtk-doc "$@"; then
echo
echo "Now type 'make' to compile $PROJECT."
else
echo
echo "Configure failed or did not finish!"
fi
echo
echo "Now type 'make' to compile $PROJECT."

View File

@ -1180,6 +1180,7 @@ themes/Default/Makefile
themes/Default/images/Makefile
themes/Default/images/preferences/Makefile
data/Makefile
data/environ/Makefile
data/misc/Makefile
data/misc/gimp.desktop.in
data/images/Makefile

View File

@ -1,6 +1,6 @@
## Makefile.am for gimp/data
SUBDIRS = misc images brushes gradients palettes patterns
SUBDIRS = environ misc images brushes gradients palettes patterns
EXTRA_DIST = \
AUTHORS \

2
data/environ/.cvsignore Normal file
View File

@ -0,0 +1,2 @@
Makefile.in
Makefile

5
data/environ/Makefile.am Normal file
View File

@ -0,0 +1,5 @@
## Makefile.am for gimp/etc
environdir = $(gimpplugindir)/environ
environ_DATA = default.env

2
data/environ/default.env Normal file
View File

@ -0,0 +1,2 @@
# Example entry in files like these
# FOOPATH=/path/to/foo/stuff

View File

@ -35,6 +35,8 @@ echo "mkdir $2/plug-ins"
mkdir $2/plug-ins
echo "mkdir $2/modules"
mkdir $2/modules
echo "mkdir $2/environ"
mkdir $2/environ
echo "mkdir $2/scripts"
mkdir $2/scripts
echo "mkdir $2/tmp"

View File

@ -14,6 +14,7 @@
(exec_prefix "@exec_prefix@")
(gimp_data_dir "@gimpdatadir@")
(gimp_plugin_dir "@gimpplugindir@")
(gimp_environ_dir "@gimpenvirondir@")
# Set the temporary storage directory...files will appear here
# during the course of running the gimp. Most files will disappear
@ -80,6 +81,9 @@
# Set the path to modules that are to be initialized at startup
(module-path "${gimp_dir}/modules:${gimp_plugin_dir}/modules")
# Set the path to files to fill the plug-in environment
(environ-path "${gimp_dir}/environ:${gimp_plugin_dir}/environ")
# Specify a theme for the GUI. If none is specified it defaults to "Default"
(theme "Default")

View File

@ -2,33 +2,41 @@ SUBDIRS = doc plug-ins
INCLUDES = $(PYTHON_INCLUDES) $(GLIB_CFLAGS) -I$(top_srcdir)
pyexec_LTLIBRARIES = gimpmodule.la
pygimpdir = $(gimpplugindir)/python
pygimp_LTLIBRARIES = gimpmodule.la
gimpmodule_la_SOURCES = \
gimpmodule.c \
pygimp-image.c \
pygimp-drawable.c \
pygimp-tile.c \
pygimp-display.c \
pygimp-parasite.c \
pygimp-pdb.c \
pygimp.h
gimpmodule.c \
pygimp-image.c \
pygimp-drawable.c \
pygimp-tile.c \
pygimp-display.c \
pygimp-parasite.c \
pygimp-pdb.c \
pygimp.h
gimpmodule_la_LDFLAGS = -module -avoid-version \
-export-symbols-regex 'initgimp|PLUG_IN_INFO'
-export-symbols-regex 'initgimp|PLUG_IN_INFO'
gimpmodule_la_LIBADD = \
$(top_builddir)/libgimp/libgimp-$(LT_RELEASE).la \
$(top_builddir)/libgimpcolor/libgimpcolor-$(LT_RELEASE).la \
$(top_builddir)/libgimpbase/libgimpbase-$(LT_RELEASE).la \
$(GLIB_LIBS)
$(top_builddir)/libgimp/libgimp-$(LT_RELEASE).la \
$(top_builddir)/libgimpcolor/libgimpcolor-$(LT_RELEASE).la \
$(top_builddir)/libgimpbase/libgimpbase-$(LT_RELEASE).la \
$(GLIB_LIBS)
python_PYTHON = \
gimpplugin.py \
gimpenums.py \
gimpshelf.py \
gimpui.py \
gimpfu.py
pygimp_PYTHON = \
gimpplugin.py \
gimpenums.py \
gimpshelf.py \
gimpui.py \
gimpfu.py
EXTRA_DIST = pygimp.spec
pyenvdir = $(gimpplugindir)/environ
install-data-local:
$(mkinstalldirs) $(DESTDIR)$(pyenvdir)
echo "PYTHONPATH=$(pygimpdir)" > $(DESTDIR)$(pyenvdir)/pygimp.env
snap:
$(MAKE) dist distdir=$(PACKAGE)-SNAP-`date +"%Y%m%d"`

View File

@ -1,13 +1,14 @@
noinst_DATA = pygimp.html
EXTRA_DIST = pygimp.sgml \
pygimp.html \
structure-of-plugin.html \
procedural-database.html \
gimp-module-procedures.html \
gimp-objects.html \
support-modules.html \
EXTRA_DIST = \
pygimp.sgml \
pygimp.html \
structure-of-plugin.html \
procedural-database.html \
gimp-module-procedures.html \
gimp-objects.html \
support-modules.html \
end-note.html
printed: pygimp.ps pygimp.pdf

View File

@ -10,6 +10,7 @@ PREFS_IMAGES = \
folders-brushes.png \
folders-gradients.png \
folders-modules.png \
folders-environ.png \
folders-palettes.png \
folders-patterns.png \
folders-plug-ins.png \

Binary file not shown.

After

(image error) Size: 2.9 KiB