moved FINITE definition to $extra code. Changed to use #elif, much

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

        * tools/pdbgen/pdb/image.pdb: moved FINITE definition to $extra
        code. Changed to use #elif, much cleaner.

        * app/pdb/image_cmds.c: regenerated

        * app/core/gimpenvirontable.[ch]: added support for app internal
        environment variable settings. These override any *.env files if
        there are collisions. Not sure on that policy. Also, envp is now
        generated on the first get_envp call.

        * app/gui/gui.[ch]: added gui_environ_init, which uses
        gimp_environ_table_add. Moved the setting of DISPLAY to here.
        Added setting of GDK_DISPLAY instead for the fb backends. Hm,
        perhaps GDK should do this itself...

        * app_procs.c: call gui_environ_init.

        * libgimpwidgets/gimpcolorscale.c
        * libgimpwidgets/gimpcolorscales.c: #include <string.h> for
        strlen and memcpy.

-Yosh
This commit is contained in:
Manish Singh 2002-11-25 00:04:26 +00:00 committed by Manish Singh
parent 086cf5784a
commit 2b16283b32
12 changed files with 313 additions and 121 deletions

View File

@ -1,3 +1,26 @@
2002-11-24 Manish Singh <yosh@gimp.org>
* tools/pdbgen/pdb/image.pdb: moved FINITE definition to $extra
code. Changed to use #elif, much cleaner.
* app/pdb/image_cmds.c: regenerated
* app/core/gimpenvirontable.[ch]: added support for app internal
environment variable settings. These override any *.env files if
there are collisions. Not sure on that policy. Also, envp is now
generated on the first get_envp call.
* app/gui/gui.[ch]: added gui_environ_init, which uses
gimp_environ_table_add. Moved the setting of DISPLAY to here.
Added setting of GDK_DISPLAY instead for the fb backends. Hm,
perhaps GDK should do this itself...
* app_procs.c: call gui_environ_init.
* libgimpwidgets/gimpcolorscale.c
* libgimpwidgets/gimpcolorscales.c: #include <string.h> for
strlen and memcpy.
2002-11-24 Dave Neary <bolsh@gimp.org>
* libgimpwidgets/gimpwidgets.c

View File

@ -155,6 +155,7 @@ app_init (gint gimp_argc,
if (! no_interface)
{
gui_environ_init (the_gimp);
tool_manager_init (the_gimp);
}

View File

@ -38,17 +38,20 @@
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_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_finalize (GObject *object);
static void gimp_environ_table_load_env_file (GimpDatafileData *file_data);
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 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 void gimp_environ_table_clear_vars (GimpEnvironTable *environ_table);
static void gimp_environ_table_clear_internal (GimpEnvironTable *environ_table);
static void gimp_environ_table_clear_envp (GimpEnvironTable *environ_table);
static GObjectClass *parent_class = NULL;
@ -95,20 +98,22 @@ gimp_environ_table_class_init (GimpEnvironTableClass *class)
}
static void
gimp_environ_table_init (GimpEnvironTable *env)
gimp_environ_table_init (GimpEnvironTable *environ_table)
{
env->vars = NULL;
env->envp = NULL;
environ_table->vars = NULL;
environ_table->internal = NULL;
environ_table->envp = NULL;
}
static void
gimp_environ_table_finalize (GObject *object)
{
GimpEnvironTable *env;
GimpEnvironTable *environ_table;
env = GIMP_ENVIRON_TABLE (object);
environ_table = GIMP_ENVIRON_TABLE (object);
gimp_environ_table_clear (env);
gimp_environ_table_clear_all (environ_table);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@ -134,8 +139,41 @@ gimp_environ_table_load (GimpEnvironTable *environ_table,
G_FILE_TEST_EXISTS,
gimp_environ_table_load_env_file,
environ_table);
}
gimp_environ_table_populate (environ_table);
void
gimp_environ_table_add (GimpEnvironTable *environ_table,
const gchar *name,
const gchar *value)
{
g_return_if_fail (GIMP_IS_ENVIRON_TABLE (environ_table));
gimp_environ_table_clear_envp (environ_table);
if (! environ_table->internal)
environ_table->internal = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, g_free);
g_hash_table_insert (environ_table->internal,
g_strdup (name),
g_strdup (value));
}
void
gimp_environ_table_remove (GimpEnvironTable *environ_table,
const gchar *name)
{
g_return_if_fail (GIMP_IS_ENVIRON_TABLE (environ_table));
if (! environ_table->internal)
return;
gimp_environ_table_clear_envp (environ_table);
g_hash_table_remove (environ_table->internal, name);
if (g_hash_table_size (environ_table->internal) == 0)
gimp_environ_table_clear_internal (environ_table);
}
void
@ -143,17 +181,20 @@ 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;
}
gimp_environ_table_clear_envp (environ_table);
if (environ_table->envp)
{
g_strfreev (environ_table->envp);
environ_table->envp = NULL;
}
gimp_environ_table_clear_vars (environ_table);
}
void
gimp_environ_table_clear_all (GimpEnvironTable *environ_table)
{
g_return_if_fail (GIMP_IS_ENVIRON_TABLE (environ_table));
gimp_environ_table_clear_envp (environ_table);
gimp_environ_table_clear_vars (environ_table);
gimp_environ_table_clear_internal (environ_table);
}
gchar **
@ -166,10 +207,7 @@ gimp_environ_table_get_envp (GimpEnvironTable *environ_table)
*/
if (! environ_table->envp)
{
environ_table->envp = g_new (gchar *, 1);
*(environ_table->envp) = NULL;
}
gimp_environ_table_populate (environ_table);
return environ_table->envp;
}
@ -251,9 +289,15 @@ gimp_environ_table_populate (GimpEnvironTable *environ_table)
var++;
}
g_hash_table_foreach (environ_table->vars,
(GHFunc) gimp_environ_table_populate_one,
env_array);
if (environ_table->vars)
g_hash_table_foreach (environ_table->vars,
(GHFunc) gimp_environ_table_populate_one,
env_array);
if (environ_table->internal)
g_hash_table_foreach (environ_table->internal,
(GHFunc) gimp_environ_table_populate_one,
env_array);
g_ptr_array_add (env_array, NULL);
@ -281,3 +325,33 @@ gimp_environ_table_populate_one (const gchar *name,
var = g_strconcat (name, "=", value, NULL);
g_ptr_array_add (env_array, var);
}
static void
gimp_environ_table_clear_vars (GimpEnvironTable *environ_table)
{
if (environ_table->vars)
{
g_hash_table_destroy (environ_table->vars);
environ_table->vars = NULL;
}
}
static void
gimp_environ_table_clear_internal (GimpEnvironTable *environ_table)
{
if (environ_table->internal)
{
g_hash_table_destroy (environ_table->internal);
environ_table->internal = NULL;
}
}
static void
gimp_environ_table_clear_envp (GimpEnvironTable *environ_table)
{
if (environ_table->envp)
{
g_strfreev (environ_table->envp);
environ_table->envp = NULL;
}
}

View File

@ -38,6 +38,7 @@ struct _GimpEnvironTable
GObject parent_instance;
GHashTable *vars;
GHashTable *internal;
gchar **envp;
};
@ -48,14 +49,22 @@ struct _GimpEnvironTableClass
};
GType gimp_environ_table_get_type (void) G_GNUC_CONST;
GimpEnvironTable * gimp_environ_table_new (void);
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);
void gimp_environ_table_load (GimpEnvironTable *environ_table,
const gchar *env_path);
gchar ** gimp_environ_table_get_envp (GimpEnvironTable *environ_table);
void gimp_environ_table_add (GimpEnvironTable *environ_table,
const gchar *name,
const gchar *value);
void gimp_environ_table_remove (GimpEnvironTable *environ_table,
const gchar *name);
void gimp_environ_table_clear (GimpEnvironTable *environ_table);
void gimp_environ_table_clear_all (GimpEnvironTable *environ_table);
gchar ** gimp_environ_table_get_envp (GimpEnvironTable *environ_table);
#endif /* __GIMP_ENVIRON_TABLE_H__ */

View File

@ -33,6 +33,7 @@
#include "core/gimp.h"
#include "core/gimpcontainer.h"
#include "core/gimpcontext.h"
#include "core/gimpenvirontable.h"
#include "core/gimpimage.h"
#include "display/gimpdisplay.h"
@ -102,25 +103,33 @@ void
gui_libs_init (gint *argc,
gchar ***argv)
{
#ifdef HAVE_PUTENV
gchar *display_env;
#endif
g_return_if_fail (argc != NULL);
g_return_if_fail (argv != NULL);
gtk_init (argc, argv);
#ifdef HAVE_PUTENV
display_env = g_strconcat ("DISPLAY=", gdk_get_display (), NULL);
putenv (display_env);
#endif
gimp_widgets_init ();
g_type_class_ref (GIMP_TYPE_COLOR_SELECT);
}
void
gui_environ_init (Gimp *gimp)
{
gchar *name = NULL;
#if defined (GDK_WINDOWING_X11)
name = "DISPLAY";
#elif defined (GDK_WINDOWING_DIRECTFB) || defined (GDK_WINDOWING_FB)
name = "GDK_DISPLAY";
#endif
/* TODO: Need to care about display migration with GTK+ 2.2 at some point */
if (name)
gimp_environ_table_add (gimp->environ_table, name, gdk_get_display ());
}
void
gui_themes_init (Gimp *gimp)
{

View File

@ -23,6 +23,8 @@
void gui_libs_init (gint *argc,
gchar ***argv);
void gui_environ_init (Gimp *gimp);
void gui_themes_init (Gimp *gimp);
const gchar * gui_themes_get_theme_dir (Gimp *gimp);

View File

@ -181,6 +181,18 @@ register_image_procs (Gimp *gimp)
procedural_db_register (gimp, &image_get_channel_by_tattoo_proc);
}
#if defined (HAVE_FINITE)
#define FINITE(x) finite(x)
#elif defined (HAVE_ISFINITE)
#define FINITE(x) isfinite(x)
#elif defined (G_OS_WIN32)
#define FINITE(x) _finite(x)
#elif defined (__EMX__)
#define FINITE(x) isfinite(x)
#else
#error "no FINITE() implementation available?!"
#endif
/* Yuup, this is somewhat unsmooth, to say the least */
static void
@ -3756,24 +3768,6 @@ image_set_resolution_invoker (Gimp *gimp,
if (success)
{
#ifdef HAVE_FINITE
#define FINITE(x) finite(x)
#else
#ifdef HAVE_ISFINITE
#define FINITE(x) isfinite(x)
#else
#ifdef G_OS_WIN32
#define FINITE(x) _finite(x)
#else
#ifdef __EMX__
#define FINITE(x) isfinite(x)
#else
#error "no FINITE() implementation available?!"
#endif /* __EMX__ */
#endif /* G_OS_WIN32 */
#endif /* HAVE_ISFINITE */
#endif /* HAVE_FINITE */
if (!FINITE (xresolution) ||
xresolution < GIMP_MIN_RESOLUTION || xresolution > GIMP_MAX_RESOLUTION ||
!FINITE (yresolution) ||

View File

@ -38,17 +38,20 @@
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_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_finalize (GObject *object);
static void gimp_environ_table_load_env_file (GimpDatafileData *file_data);
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 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 void gimp_environ_table_clear_vars (GimpEnvironTable *environ_table);
static void gimp_environ_table_clear_internal (GimpEnvironTable *environ_table);
static void gimp_environ_table_clear_envp (GimpEnvironTable *environ_table);
static GObjectClass *parent_class = NULL;
@ -95,20 +98,22 @@ gimp_environ_table_class_init (GimpEnvironTableClass *class)
}
static void
gimp_environ_table_init (GimpEnvironTable *env)
gimp_environ_table_init (GimpEnvironTable *environ_table)
{
env->vars = NULL;
env->envp = NULL;
environ_table->vars = NULL;
environ_table->internal = NULL;
environ_table->envp = NULL;
}
static void
gimp_environ_table_finalize (GObject *object)
{
GimpEnvironTable *env;
GimpEnvironTable *environ_table;
env = GIMP_ENVIRON_TABLE (object);
environ_table = GIMP_ENVIRON_TABLE (object);
gimp_environ_table_clear (env);
gimp_environ_table_clear_all (environ_table);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@ -134,8 +139,41 @@ gimp_environ_table_load (GimpEnvironTable *environ_table,
G_FILE_TEST_EXISTS,
gimp_environ_table_load_env_file,
environ_table);
}
gimp_environ_table_populate (environ_table);
void
gimp_environ_table_add (GimpEnvironTable *environ_table,
const gchar *name,
const gchar *value)
{
g_return_if_fail (GIMP_IS_ENVIRON_TABLE (environ_table));
gimp_environ_table_clear_envp (environ_table);
if (! environ_table->internal)
environ_table->internal = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, g_free);
g_hash_table_insert (environ_table->internal,
g_strdup (name),
g_strdup (value));
}
void
gimp_environ_table_remove (GimpEnvironTable *environ_table,
const gchar *name)
{
g_return_if_fail (GIMP_IS_ENVIRON_TABLE (environ_table));
if (! environ_table->internal)
return;
gimp_environ_table_clear_envp (environ_table);
g_hash_table_remove (environ_table->internal, name);
if (g_hash_table_size (environ_table->internal) == 0)
gimp_environ_table_clear_internal (environ_table);
}
void
@ -143,17 +181,20 @@ 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;
}
gimp_environ_table_clear_envp (environ_table);
if (environ_table->envp)
{
g_strfreev (environ_table->envp);
environ_table->envp = NULL;
}
gimp_environ_table_clear_vars (environ_table);
}
void
gimp_environ_table_clear_all (GimpEnvironTable *environ_table)
{
g_return_if_fail (GIMP_IS_ENVIRON_TABLE (environ_table));
gimp_environ_table_clear_envp (environ_table);
gimp_environ_table_clear_vars (environ_table);
gimp_environ_table_clear_internal (environ_table);
}
gchar **
@ -166,10 +207,7 @@ gimp_environ_table_get_envp (GimpEnvironTable *environ_table)
*/
if (! environ_table->envp)
{
environ_table->envp = g_new (gchar *, 1);
*(environ_table->envp) = NULL;
}
gimp_environ_table_populate (environ_table);
return environ_table->envp;
}
@ -251,9 +289,15 @@ gimp_environ_table_populate (GimpEnvironTable *environ_table)
var++;
}
g_hash_table_foreach (environ_table->vars,
(GHFunc) gimp_environ_table_populate_one,
env_array);
if (environ_table->vars)
g_hash_table_foreach (environ_table->vars,
(GHFunc) gimp_environ_table_populate_one,
env_array);
if (environ_table->internal)
g_hash_table_foreach (environ_table->internal,
(GHFunc) gimp_environ_table_populate_one,
env_array);
g_ptr_array_add (env_array, NULL);
@ -281,3 +325,33 @@ gimp_environ_table_populate_one (const gchar *name,
var = g_strconcat (name, "=", value, NULL);
g_ptr_array_add (env_array, var);
}
static void
gimp_environ_table_clear_vars (GimpEnvironTable *environ_table)
{
if (environ_table->vars)
{
g_hash_table_destroy (environ_table->vars);
environ_table->vars = NULL;
}
}
static void
gimp_environ_table_clear_internal (GimpEnvironTable *environ_table)
{
if (environ_table->internal)
{
g_hash_table_destroy (environ_table->internal);
environ_table->internal = NULL;
}
}
static void
gimp_environ_table_clear_envp (GimpEnvironTable *environ_table)
{
if (environ_table->envp)
{
g_strfreev (environ_table->envp);
environ_table->envp = NULL;
}
}

View File

@ -38,6 +38,7 @@ struct _GimpEnvironTable
GObject parent_instance;
GHashTable *vars;
GHashTable *internal;
gchar **envp;
};
@ -48,14 +49,22 @@ struct _GimpEnvironTableClass
};
GType gimp_environ_table_get_type (void) G_GNUC_CONST;
GimpEnvironTable * gimp_environ_table_new (void);
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);
void gimp_environ_table_load (GimpEnvironTable *environ_table,
const gchar *env_path);
gchar ** gimp_environ_table_get_envp (GimpEnvironTable *environ_table);
void gimp_environ_table_add (GimpEnvironTable *environ_table,
const gchar *name,
const gchar *value);
void gimp_environ_table_remove (GimpEnvironTable *environ_table,
const gchar *name);
void gimp_environ_table_clear (GimpEnvironTable *environ_table);
void gimp_environ_table_clear_all (GimpEnvironTable *environ_table);
gchar ** gimp_environ_table_get_envp (GimpEnvironTable *environ_table);
#endif /* __GIMP_ENVIRON_TABLE_H__ */

View File

@ -23,6 +23,8 @@
#include "config.h"
#include <string.h>
#include <gtk/gtk.h>
#include "libgimpcolor/gimpcolor.h"

View File

@ -26,6 +26,7 @@
#include "config.h"
#include <stdio.h>
#include <string.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>

View File

@ -1293,24 +1293,6 @@ HELP
$invoke{code} = <<'CODE';
{
#ifdef HAVE_FINITE
#define FINITE(x) finite(x)
#else
#ifdef HAVE_ISFINITE
#define FINITE(x) isfinite(x)
#else
#ifdef G_OS_WIN32
#define FINITE(x) _finite(x)
#else
#ifdef __EMX__
#define FINITE(x) isfinite(x)
#else
#error "no FINITE() implementation available?!"
#endif /* __EMX__ */
#endif /* G_OS_WIN32 */
#endif /* HAVE_ISFINITE */
#endif /* HAVE_FINITE */
if (!FINITE (xresolution) ||
xresolution < GIMP_MIN_RESOLUTION || xresolution > GIMP_MAX_RESOLUTION ||
!FINITE (yresolution) ||
@ -1558,6 +1540,18 @@ CODE
"libgimp/gimpintl.h");
$extra{app}->{code} = <<'CODE';
#if defined (HAVE_FINITE)
#define FINITE(x) finite(x)
#elif defined (HAVE_ISFINITE)
#define FINITE(x) isfinite(x)
#elif defined (G_OS_WIN32)
#define FINITE(x) _finite(x)
#elif defined (__EMX__)
#define FINITE(x) isfinite(x)
#else
#error "no FINITE() implementation available?!"
#endif
/* Yuup, this is somewhat unsmooth, to say the least */
static void