Replacing the boolean property "generate-backtrace" by an enum
"debug-policy". This property allows one to choose whether to debug
WARNING, CRITICAL and FATAL (crashes), or CRITICAL and FATAL only, or
only FATAL, or finally nothing.
By default, a stable release will debug CRITICAL and crashes, and
unstable builds will start debugging at WARNINGs.
The reason for the settings is that if you stumble upon a reccurring bug
in your workflow (and this bug is not major enough for data corruption,
and "you can live with it"), you still have to wait for a new release.
At some point, you may want to disable getting a debug dialog, at least
temporarily. Oppositely, even when using a stable build, you may want to
obtain debug info for lesser issues, even WARNINGs, if you wish to help
the GIMP project.
It can be argued though whether the value GIMP_DEBUG_POLICY_NEVER is
really useful. There is nothing to gain from refusing debugging info
when the software crashed anyway. But I could still imagine that someone
is not interested in helping at all. It's sad but not like we are going
to force people to report. Let's just allow disabling the whole
debugging system.
... stacktrace into a file on non-Win32 systems.
This has a few advantages:
- First, we don't need to duplicate stacktrace code inside the
independent gimp-debug-tool (I even noticed that the version in the
tool was gdb-only and not updated for lldb fallback; proof that code
duplication is evil!). Instead, even on a crash, we can create the
stacktrace from the main binary and simply pass it as a file.
- Secondly, that allows to fallback to the backtrace() API even for
crashes (this was not possible if the backtrace was done from a
completely different process). That's nice because this makes that we
will always get backtraces in Linux (even though backtrace() API is
not as nice as gdb/lldb, it's better than nothing).
- Finally this makes the code smaller (i.e. easier to maintain), more
consistent and similar on all platforms.
... our own implementation.
Though the GUI stacktrace is better for most (because it is visible even
when not run in a terminal), the CLI options are quite useful too and
may still be preferred by some, in particular developers. So it may as
well be benefiting from the better implementation. Glib traces are quite
weak even though they also use gdb and debug info are present (often,
even though I had these traces, I had to run gdb separately; now it
won't be necessary in many cases). My traces include more information.
Note that I didn't implement gimp_print_stack_trace() from previous
gimp_get_stack_trace() because I cannot allocate a string after some
types of crash (e.g. segmentation faults). So instead,
gimp_print_stack_trace() now take care optionally of both cases: either
allocating a string, or directly pipe to a file descriptor.
It is nice because when available (Linux only?), it is a lot faster than
using a dedicated debugger such as GDB or LLDB, and also it allows to
always have a backtrace, even when no debuggers are installed.
Unfortunately the output is a lot less detailed, with no file paths, no
line numbers (even when debug symbols are there), no local values
printout, etc. It's pretty bare, with function names and the stack
levels. This is why it is not given priority, and GDB and LLDB are still
preferred when available.
AFAIK this means on all platforms but Win32 and macOS which would rather
need relative path and therefore cannot make use of build-time
LIBEXECDIR. Anyway on these platforms, leaving the binary in BINDIR is
not likely to "pollute" too much as it would on Linux or BSD where
people often use terminal.
It was previously untested, hence as expected needed fixes. First I add
our own exception handler using Win32 API SetUnhandledExceptionFilter().
Second, I reorder things so that ExcHndlInit() is run after this setter,
since they will be executed as a FILO and we need backtraces to be
generated before our separate GUI runs. Last I run the backtrace GUI as
async. No need to keep the main GIMP waiting since the traces have
already been generated into a separate file.
Also replace gtk_show_uri() by the implementation taken straight from
our web-browser plug-in, since apparently gtk_show_uri() doesn't work in
Windows (and probably not macOS either since I see we have a separate
implementation for this platform as well). I would like to be able to
use the PDB but can't because this code needs to be usable both within
the main process and into a separate tool process. Ideally, this should
just be a utils function which could be included without a problem.
* Type pid_t is not cross-platform. Just use int instead, and convert it
to respective type on each platform.
* Get rid of several useless include which should have been removed a
few commits ago, when I reimplemented the backtrace function.
* Better handle the various macros in gimp_eek() (between G_OS_WIN32,
HAVE_EXCHNDL and GIMP_CONSOLE_COMPILATION, but also no_interface and
generate_backtrace options, that was a bit messy).
* Make gimpdebug now always built, whatever the platform.
The feature already exists in our code and produces backtraces upon a
crash into a file. The only difference is that we are now getting the
file contents and showing it in our new debug dialog, so that it works
similarly on all platform (and therefore making the debug info visible
to people, otherwise they would never report, even though the data is
generated).
The difference with gdb/lldb is that it doesn't allow backtraces at
random points (for debugging non-fatal yet bad errors). Also the API has
just 2 functions and in particular an ExcHndlInit() but no way to unload
the feature. So we don't need the debugging page in Preferences because
the switch option would not work. On Windows, the feature will be
decided at build time only.
Last point: the code is untested on Windows so far. I assume it would
work, but there is at least one point I am unsure of: will ExcHndl have
already generated the backtrace file when gimpdebug runs? If not, I will
have to let gimp die first to be able to get the backtrace.
This is just a bit more consistent with existing code. Also build the
gimpdebug tool only when GIMP_CONSOLE_COMPILATION is not set and run
when --no-interface CLI option is not set since it is a GUI tool.
This will determine whether to output backtrace in a GUI and is disabled
by default on stable, and activated in dev builds. It is a bit redundant
with --stack-trace-mode option CLI and will take priority when enabled
since most people would run GIMP with a graphical interface anyway.
This was a bit harder since even though we handle fatal signals,
allowing us to do any last action before GIMP crashes, it seems more
memory allocation is not allowed at this time. So creating a dialog or
simply getting the return output of gdb into the main process is not
allowed. What I do instead is running a separate program (gimpdebug)
which will take care of creating the new dialog and running a debugger.
I still use GimpCriticalDialog code from this separate binary, while I
continue to use this widget also within GIMP for non-fatal errors. The
reason why we still want to use it within GIMP is that we can bundle
several non-fatal errors and backtrace this way (fatal errors don't
return anyway) and it's easier to do so when created from the main
process.
Don't use g_on_error_stack_trace() from glib anymore. It is
over-complicated, using gdb in interactive mode and running command
writing in the pipe input. Sometimes it even gets stuck and never
return. This is useless since gdb even has a batch mode, to just run
commands and exit directly. I just use this.
GIMP will now try to get a backtrace (on Unix machines only for now,
using g_on_error_stack_trace(); for Windows, we will likely have to look
into DrMinGW).
This is now applied to CRITICAL errors only, which usually means major
bugs but are currently mostly hidden unless you run GIMP in terminal. We
limit to 3 backtraces, because many CRITICAL typically get into domino
effect and cause more CRITICALs (for instance when a g_return*_if_fail()
returns too early).
Add a log handler so that GIMP can display errors outputted by GEGL.
Since third party code may run in threads and we have no control on
these, we have to be sure GTK+ code is run in a thread-safe way, hence
the usage of gdk_threads_add_idle_full(). This was the case here for
GEGL, and handling GEGL logs the same way as other GIMP logs would
result in crashes.
Looks like they were forgotten so messages from libs went to stdout
instead of being routed through the log handlers, which would show
them in a dialog, or in the error console.
- don't include <gdk-pixbuf/gdk-pixbuf.h> in headers in app/
- instead, include it in many .c files instead of <glib-object.h>,
finally acknowledging the fact that app/ depends on gdk-pixbuf almost
globally
- fix up includes as if libgimpbase depended in GIO, which it soon will
2009-01-17 Michael Natterer <mitch@gimp.org>
* all files with a GPL header and all COPYING files:
Change licence to GPLv3 (and to LGPLv3 for libgimp).
Cleaned up some copyright headers and regenerated the parsers in
the ImageMap plugin.
svn path=/trunk/; revision=27913
2007-06-13 Sven Neumann <sven@gimp.org>
* app/errors.[ch]: added errors_exit() and unset the Gimp
reference. Errors may occur after the Gimp object has been finalized.
* app/app.c (app_run): call errors_exit().
svn path=/trunk/; revision=22768
2007-01-26 Tor Lillqvist <tml@novell.com>
Make the handling of console output make more sense Win32. Should
mostly fix#400927.
* app/app_procs.c (app_exit): Drop the Win32 "This console window
will close in ten seconds" message from here.
(app_run): Drop the call to FreeConsole() from here. GIMP is built
as a GUI executable on Windows, and in case we do open a fresh
console window in main() (see below), we shouldn't then
immediately close it here.
* app/errors.c (errors_init): Drop printing the "You can mimize
this window, but don't close it" message on Win32 from here.
* app/main.c (gimp_open_console_window): New Win32-only
function. If either stdout or stderr are unconnected, open a new
console window and connect stdout and/or stderr to it as
needed. Set the console title to "GIMP output. You can minimize
this window, but don't close it." Register an atexit function that
waits for the user to close the console window.
(wait_console_window): New Win32-only function. Registered as an
atexit function when GIMP has opened a new console window. Prompts
the user to type any character to close the window.
(main, gimp_show_version): Always call gimp_open_console_window()
in the unstable version. As the "This is a development version of
GIMP. Debug messages may appear here" message says, one point of
the unstable version is that debug messages should be visible, so
I think it makes sense to always see them in an unstable
version. In stable versions, call gimp_open_console_window() only
if options that cause output that the user wants to see were
given, like --help and --version.
svn path=/trunk/; revision=21781
2006-10-09 Michael Natterer <mitch@gimp.org>
Added message severities and make sure all messages are routed
through a central function, so redirecting to the error console or
stderr work again:
* app/core/core-enums.[ch]: added enum GimpMessageSeverity { INFO,
WARNING, ERROR }.
* app/core/gimp.[ch] (gimp_message)
(gimp_message_valist): added severity parameter. Changed
"GimpProgress *progress" parameter to "GObject *handler", where
"handler" can be either a GimpProgress, a GtkWidget or NULL.
* app/core/gimp-gui.[ch] (gimp_show_message): ditto. Honor
--console-messages again. Always dispatch to the GUI message
handler first if it exists.
* app/gui/gui-message.[ch]: pass severity parameters around.
(gui_message_error_dialog): if "handler" is a progress, dispatch
the message to it first. If it is a widget (and *not* a progress),
use a GtkMessageDialog on top of that widget's toplevel. Fall
back to the usual GimpErrorDialog otherwise.
* app/core/gimpprogress.[ch] (gimp_progress_message): added
severity parameter. Also added boolean return value to the virtual
function so it can decide to fail if it can't handle the message.
* app/display/gimpdisplay.c: implement GimpProgress::message() and
redirect the message to GimpDisplayShell.
* app/display/gimpdisplayshell-progress.c: implement
GimpProgress::message() and redirect the message to GimpStatusbar
if it is not an error and if the status bar is visible.
* app/display/gimpstatusbar.[ch]: implement GimpProgress::message(),
but fail on messages that contain a newline. Show the right icons
for the message severities (work in progress).
* app/display/gimpdisplayshell.[ch]: removed
gimp_display_shell_message() and its _valist() variant.
* app/widgets/gimperrorconsole.[ch]: show the right icons for the
message severities.
* app/widgets/gimpthumbbox.c (gimp_thumb_box_progress_message):
return TRUE to swallow all messages.
* app/widgets/gimpwidgets-utils.[ch]: removed
gimp_show_message_dialog(). Added gimp_get_message_stock_id().
* app/errors.c
* app/actions/edit-commands.c
* app/actions/error-console-commands.c
* app/actions/file-commands.c
* app/actions/select-commands.c
* app/actions/text-editor-commands.c
* app/actions/vectors-commands.c
* app/core/gimpimage-convert.c
* app/core/gimpimagefile.c
* app/dialogs/convert-dialog.c
* app/dialogs/file-open-dialog.c
* app/dialogs/file-open-location-dialog.c
* app/dialogs/file-save-dialog.c
* app/dialogs/palette-import-dialog.c
* app/dialogs/stroke-dialog.c
* app/display/gimpdisplayshell-dnd.c
* app/pdb/gimppdb.c
* app/plug-in/gimpplugin.c
* app/tools/gimpimagemaptool.c
* app/tools/gimptool.c
* app/tools/gimpvectortool.c
* app/widgets/gimpactionview.c
* app/widgets/gimpcontrollerlist.c
* app/widgets/gimppdbdialog.c
* app/widgets/gimpvectorstreeview.c
* app/xcf/xcf-load.c
* app/xcf/xcf-save.c
* app/xcf/xcf.c
* tools/pdbgen/pdb/brush.pdb
* tools/pdbgen/pdb/gradient.pdb
* tools/pdbgen/pdb/image.pdb
* tools/pdbgen/pdb/message.pdb
* tools/pdbgen/pdb/palette.pdb: added severity parameter to
gimp_message() calls. Convert all calls to
gimp_show_message_dialog() and gimp_display_shell_message() to
gimp_message(). Also converted some more g_message() calls.
* app/pdb/brush_cmds.c
* app/pdb/gradient_cmds.c
* app/pdb/image_cmds.c
* app/pdb/message_cmds.c
* app/pdb/palette_cmds.c: regenerated.
2006-09-09 Sven Neumann <sven@gimp.org>
* app/app_procs.[ch]
* app/main.c: initialize the error subsystem after the gimp
object
has been created.
* app/errors.[ch]: store a reference to the gimp object (eek)
and
use it to call gimp_gui_ungrab() before g_on_error_query().
* app/core/gimp-gui.[ch]
* app/gui/gui-vtable.c: added gimp_gui_ungrab().
2006-07-19 Sven Neumann <sven@gimp.org>
Make message dialogs transient for the progress window.
Addresses
bug #347214.
* app/core/gimp-gui.[ch]: added a progress parameter to
gimp_message(). Let gimp_message() deal with optionally
delegating the message to gimp_progress_message().
* app/errors.c: changed accordingly.
* app/core/gimpprogress.[ch] (gimp_progress_message): return a
boolean indicating whether the message was handled.
* app/gui/Makefile.am
* app/gui/gui-message.[ch]
* app/gui/gui-vtable.c: moved message handling to a new file.
Only
use the global error dialog for messages without a progress.
Otherwise attach an error dialog to the progress and try to make
it transient to the progress window.
* tools/pdbgen/pdb/message.pdb:
* app/plug-in/gimpplugin-progress.[ch]: don't delegate messages
to
the progress interface, this is handled by gimp_message() now.
* app/pdb/message_cmds.c: regenerated.
* app/plug-in/gimpplugin.c
* app/actions/documents-commands.c: formatting.
2006-06-16 Manish Singh <yosh@gimp.org>
* app/errors.c
* app/main.c
* app/file/gimprecentlist.c
* libgimpbase/gimpsignal.c
* libgimp/gimp.c
* modules/controller_midi.c
* plug-ins/common/gqbist.c: use _GNU_SOURCE instead of the other
_FOO_SOURCE variables to support -ansi -pedantic on glibc systems,
since anything else breaks compilation of otherwise working code.
Fixes bug #344203.
2004-02-05 Raphaël Quinet <quinet@gamers.org>
* configure.in: Added a conditional definition of the preprocessor
symbol GIMP_UNSTABLE if the autoconf symbol GIMP_UNSTABLE is
defined.
* app/errors.c (gimp_errors_init): Replaced the #if test on
GIMP_MINOR_VERSION modulo 2 by #ifdef GIMP_UNSTABLE.
* app/composite/gimp-composite.c (gimp_composite_init): Print the
init messages only in unstable versions. Split the messages in
two lines and mention "supported by gimp_composite" in order to
give a hint that the availability of some features depends also on
what code has been written. Fixes bug #128825.
2004-01-23 Michael Natterer <mitch@gimp.org>
* app/app_procs.c
* app/errors.c
* app/main.c
* app/config/gimpconfigwriter.c
* app/core/gimpdata.c
* app/core/gimpdatafactory.c
* app/gui/user-install-dialog.c
* app/plug-in/plug-ins.c
* app/vectors/gimpvectors-import.c: some more gimp_filename_to_utf8().
* libgimp/gimp.c
* libgimpmodule/gimpmodule.c
* libgimpmodule/gimpmoduledb.c: use it here, too, now that is in
libgimpbase.
2003-11-17 Sven Neumann <sven@gimp.org>
* app/main.c: unref the gimp object after dumping the
configuration as a test for Gimp::finalize.
* app/base/base.[ch]: keep a reference on the config object.
Renamed parameter "use_mmx" to "use_cpu_accel".
* app/core/gimp.[ch]: call base_init() and base_exit() from
app_procs.c, not from the Gimp object.
* app/app_procs.[ch]: renamed app_init() to app_run() since here's
where the main loop is run. Actually quit the main loop in
app_exit_after_callback() instead of just calling exit().
* app/errors.[ch]: declared fatal error handlers as G_GNUC_NORETURN.
* libgimp/gimp.h: fixed usage of G_GNUC_NORETURN.
2003-10-21 Sven Neumann <sven@gimp.org>
* base/base.c (base_init)
* app/errors.c (gimp_errors_init): moved the message about
possible debug messages to gimp_errors_init() so that it appears
before any startup debug output.
* app/app_procs.c (app_init): register a log handler for the
GimpConfig log domain.
* app/widgets/gimpwidgets-utils.c (gimp_message_box)
* app/core/gimp.c (gimp_message): added an extra newline when
sending messages to stderr. Don't output the full progname for
messages; use a simple "GIMP" like the GUI message handler does.
* app/gui/user-install-dialog.c: removed function copy_file()...
* app/config/gimpconfig-utils.[ch]: ... and added it here as
gimp_config_file_copy(). Also added utility function
gimp_config_file_backup_on_error().
* app/config/gimprc.c (gimp_rc_load): if the user gimprc can't be
parsed, create a backup and if that succeeds unlink the broken one
to cure the problem.
* app/gui/session.c: create a backup if sessionrc can't be parsed.
* config/gimpconfig-deserialize.c (gimp_config_deserialize_properties):
don't set an error when token is G_TOKEN_NONE; it should already
be set then.
2003-10-10 Sven Neumann <sven@gimp.org>
* app/errors.c (gimp_eek)
* app/main.c (main) (gimp_text_console_exit)
* app/gui/user-install-dialog.c (user_install_cancel_callback):
call exit() with EXIT_SUCCESS or EXIT_FAILURE instead of 0 and 1.
2003-09-10 Tor Lillqvist <tml@iki.fi>
* config.h.win32: Tell it's outdated.
* app/errors.c (gimp_eek): [Win32] Use full_prog_name, show also
reason.
* app/xcf/xcf.c (xcf_load_args, xcf_save_arge): Document that
filename is in the on-disk charset and encoding, and raw_filename
is just the basename, in UTF-8.
(xcf_save_invoker): Convert filename to UTF-8 before passing to
g_message().
2003-09-09 Michael Natterer <mitch@gimp.org>
Got rid of the last global variables except the_gimp:
* app/Makefile.am
* app/appenv.h: removed this file.
* app/errors.[ch] (gimp_errors_init): new function which lets the
error system know about "full_prog_name", "stack_trace_mode" and
"debug_handlers". Remember these values privately.
* app/app_procs.[ch] (app_init): added "full_prog_name" and
"stack_trace_mode" parameters here too.
* app/main.c (main): call gimp_errors_init() and pass the
additional parameters to app_init().
2003-09-09 Michael Natterer <mitch@gimp.org>
* app/core/gimp.[ch]: added "gboolean console_messages" to the
Gimp struct and to gimp_new() since plug-in messages go directly
through gimp_message() now and need to honor "console_messages"
too.
* app/app_procs.[ch]: added "gboolean console_messages" to
app_init() and pass it to gimp_new().
* app/appenv.h: removed global variable "console_messages".
* app/main.c: added it to main()'s scope and pass it to app_init().
* app/errors.c: changed accordingly.
2003-06-13 Michael Natterer <mitch@gimp.org>
Cleaned up and improved the message system:
* app/core/gimp.[ch]: added "const gchar *domain" to
GimpMessageFunc (a NULL domain means the message is from the GIMP
core, everything else is a plug-in).
* app/errors.c: pass "domain == NULL" to gimp_message().
* tools/pdbgen/pdb/message.pdb: derive the message domain from the
current plug-in's menu_path (evil hack but works reasonably well).
* app/pdb/message_cmds.c: regenerated.
* app/widgets/gimpwidgets-utils.[ch] (gimp_message_box): added a
header showing the message domain and changed the dialog layout to
follow the HIG more closely.
* app/gui/error-console-dialog.[ch]: removed.
* app/widgets/gimperrorconsole.[ch]
* app/gui/error-console-commands.[ch]
* app/gui/error-console-menu.[ch]: new files containing a
re-implementation of the error console dialog.
* app/gui/Makefile.am
* app/gui/dialogs-constructors.c
* app/gui/gui.c
* app/gui/menus.c
* app/widgets/Makefile.am
* app/widgets/widgets-types.h: changed accordingly.
* app/display/gimpprogress.c: added more spacing and removed the
separator (more HIG compliant).
* plug-ins/[most plug-ins].c: Changed lots of messages and
progress strings:
- Removed plug-in names from messages since that's automatically
covered by "domain" now.
- Put all filenames in ''.
- Changed "Loading" to "Opening".
- Added "..." to all progress messages.
- Cleaned up all file open/save error messages to look the
same and include g_strerror(errno).
- Removed special casing for progress bars and *always* show them,
not only if run_mode != GIMP_RUN_NONINTERACTIVE (we can't expect
all plug-ins to do this correctly but need to hack the core to
sort out unwanted progress bars).
Unrelated:
- Cleaned up indentation, spacing, #includes, coding style and
other stuff while I was at all these files.
2003-05-29 Michael Natterer <mitch@gimp.org>
* app/main.c (main): removed the calls to g_log_set_handler().
* app/app_procs.[ch] (app_init): added the g_log_set_handler()
calls and pass them the global Gimp instance as user_data.
Renamed app_gui_init() to app_gui_libs_init().
* app/errors.c: use the passed Gimp pointer instead of using
"the_gimp". Don't #include "app_procs.h".
* app/gui/gui.[ch]: removed gui_get_screen_resolution().
* app/widgets/gimpwidgets-utils.[ch]: added
gimp_get_screen_resolution().
* app/display/gimpdisplayshell-handlers.c
* app/display/gimpdisplayshell.c
* app/gui/preferences-dialog.c
* app/gui/user-install-dialog.c: changed accordingly.
* app/display/gimpdisplayshell.c: don't #include "gui/gui.h".
2001-12-01 Michael Natterer <mitch@gimp.org>
* app/errors.c: forgot a "return".
* app/gui/error-console-dialog.c: the menu item signals were
connected "swapped", which is wrong.
* app/tools/gimperasertool.c: added a cursor_update_func(), update
the "toggled" state there and chain up. Fixes wrong cursor
updating.
Made brush_pipe slection work again, removed the #warnings:
* app/core/gimpbrush.[ch]
* app/core/gimpbrushpipe.c: changed brush_class->select_brush()
and brush_class->want_null_motion() to be proper virtual
functions. Pass last_coords and cur_coords to them.
* app/tools/gimppainttool.c: call the functions again.
2001-12-01 Michael Natterer <mitch@gimp.org>
* app/main.c
* app/appenv.h: moved "message_handler" from here...
* app/core/gimp.[ch]: ...to here. Added gimp_message() and a
"gui_message_func" pointer...
* app/gui/gui.c: ...which gets set here to gui_message().
* app/errors.c: don't include any gui stuff but simply call
gimp_message().
* app/app_procs.c: don't set "message_handler" here, it's done in
gui.c now.
* app/gui/error-console-dialog.[ch]: use gimp->message_handler.
* app/gui/dialogs-constructors.c: pass a Gimp pointer to
error_console_create().
* app/widgets/gimpwidgets-utils.[ch]: made the "message" parameter
of gimp_message_box() a const gchar*, not just gchar*.
* tools/pdbgen/pdb/message.pdb: use gimp->message_handler, don't
include "appenv.h".
* app/pdb/message_cmds.c: regenerated.
* app/devices.[ch]: cleanup before chopping: removed global
variable "current_device", added devices_get_current(), pass lots
of Gimp pointers around.
* app/gimprc.c: pass a Gimp pointer to devices_rc_update().
* app/display/gimpdisplayshell-callbacks.c
* app/gui/toolbox.c
* app/tools/gimppainttool.c: use devices_get_current(), pass Gimp
pointers to all devices_foo() functions.
* app/core/gimpimage-mask.c: no need to include "pdb/pdb-types.h".
2001-11-30 Michael Natterer <mitch@gimp.org>
* app/Makefile.am
* app/plug_in.[ch]: removed...
* app/plug-in/Makefile.am
* app/plug-in/plug-in-types.h
* app/plug-in/plug-in.[ch]: ...and added here.
* app/appenv.h: removed StackTraceMode and MessageHandlerType...
* libgimpbase/gimpbasetypes.h: ...and added them here.
* tools/pdbgen/Makefile.am: don't scan "app/apptypes.h" for enums.
* tools/pdbgen/enumcode.pl: added a general check to prevent
enums which are defined in libgimp* from being written to
"libgimp/gimpenums.c".
* libgimp/gimpenums.h
* plug-ins/script-fu/script-fu-constants.c
* tools/pdbgen/enums.pl: regenerated.
* app/core/core-types.h: include "pdb/pdb-types.h" so including
"core/core-types.h" gets the whole core type space.
* app/core/gimp.[ch]: added a "stack_trace_mode" parameter to the
constructor and store it in the Gimp struct because the value is
also passed to plug-ins and nobody should include "appenv.h".
* app/gimprc.[ch]: pass the alternate_system_gimprc and
alternate_gimprc filenames from the command line to gimprc_prase()
so we don't need to include "appenv.h".
* app/batch.[ch]: pass the "batch_cmds" as parameter, don't
include "append.h".
* app/app_procs.c: pass more parameters around.
* app/devices.c
* app/errors.c
* app/gimphelp.c
* app/main.c
* app/core/gimpgradient.c
* app/display/gimpdisplay.c
* app/display/gimpdisplayshell.c
* app/file/file-open.c
* app/file/file-save.c
* app/file/file-utils.c
* app/gui/commands.c
* app/gui/error-console-dialog.c
* app/gui/file-dialog-utils.c
* app/gui/file-open-dialog.c
* app/gui/file-save-dialog.c
* app/gui/paths-dialog.c
* app/gui/user-install-dialog.c
* app/tools/gimpbezierselecttool.c
* app/tools/xinput_airbrush.c
* app/xcf/xcf.c
* tools/pdbgen/pdb/fileops.pdb
* tools/pdbgen/pdb/help.pdb
* tools/pdbgen/pdb/message.pdb
* tools/pdbgen/pdb/plug_in.pdb: changed accordingly:
- changed "plug-in.h" include where needed.
- don't call gimp_fatal_error() directly, it's called via the log
handler when calling g_error().
- don't incude "errors.h" except from main.c.
- changed stack_trace and message_handler enum names.
- get "stack_trace_mode" from Gimp.
- removed many inclusions of "appenv.h".
* app/pdb/fileops_cmds.c
* app/pdb/help_cmds.c
* app/pdb/message_cmds.c
* app/pdb/plug_in_cmds.c
* app/pdb/procedural_db.c: regenerated.