diff --git a/ChangeLog b/ChangeLog index abc1168304..c03af90715 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +2003-11-17 Sven Neumann + + * 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-11-16 Henrik Brix Andersen * app/config/gimpguiconfig.c (DEFAULT_WEB_BROWSER): changed diff --git a/app/app_procs.c b/app/app_procs.c index 4223635433..225698cef7 100644 --- a/app/app_procs.c +++ b/app/app_procs.c @@ -38,6 +38,8 @@ #include "config/gimprc.h" +#include "base/base.h" + #include "core/gimp.h" #include "file/file-open.h" @@ -67,7 +69,9 @@ static gboolean app_exit_after_callback (Gimp *gimp, /* private variables */ -static Gimp *the_gimp = NULL; +static Gimp *the_gimp = NULL; +static GMainLoop *loop = NULL; + /* public functions */ @@ -80,23 +84,23 @@ app_gui_libs_init (gint *argc, } void -app_init (const gchar *full_prog_name, - gint gimp_argc, - gchar **gimp_argv, - const gchar *alternate_system_gimprc, - const gchar *alternate_gimprc, - const gchar *session_name, - const gchar **batch_cmds, - gboolean no_interface, - gboolean no_data, - gboolean no_fonts, - gboolean no_splash, - gboolean no_splash_image, - gboolean be_verbose, - gboolean use_shm, - gboolean use_mmx, - gboolean console_messages, - GimpStackTraceMode stack_trace_mode) +app_run (const gchar *full_prog_name, + gint gimp_argc, + gchar **gimp_argv, + const gchar *alternate_system_gimprc, + const gchar *alternate_gimprc, + const gchar *session_name, + const gchar **batch_cmds, + gboolean no_interface, + gboolean no_data, + gboolean no_fonts, + gboolean no_splash, + gboolean no_splash_image, + gboolean be_verbose, + gboolean use_shm, + gboolean use_cpu_accel, + gboolean console_messages, + GimpStackTraceMode stack_trace_mode) { GimpInitStatusFunc update_status_func = NULL; @@ -201,10 +205,10 @@ app_init (const gchar *full_prog_name, } } - gimp_load_config (the_gimp, - alternate_system_gimprc, - alternate_gimprc, - use_mmx); + gimp_load_config (the_gimp, alternate_system_gimprc, alternate_gimprc); + + /* initialize lowlevel stuff */ + base_init (GIMP_BASE_CONFIG (the_gimp->config), use_cpu_accel); if (! no_interface) update_status_func = gui_init (the_gimp, no_splash, no_splash_image); @@ -297,8 +301,6 @@ app_init (const gchar *full_prog_name, if (no_interface) { - GMainLoop *loop; - loop = g_main_loop_new (NULL, FALSE); gimp_threads_leave (the_gimp); @@ -313,6 +315,9 @@ app_init (const gchar *full_prog_name, gtk_main (); } + + g_object_unref (the_gimp); + base_exit (); } @@ -332,13 +337,10 @@ app_exit_after_callback (Gimp *gimp, if (gimp->be_verbose) g_print ("EXIT: app_exit_after_callback\n"); - g_object_unref (gimp); - the_gimp = NULL; - - /* There used to be foo_main_quit() here, but there's a chance - * that foo_main() was never called before we reach this point. --Sven - */ - exit (0); + if (loop) + g_main_loop_quit (loop); + else + gtk_main_quit (); return FALSE; } diff --git a/app/app_procs.h b/app/app_procs.h index 469d1efc72..508a0d99a0 100644 --- a/app/app_procs.h +++ b/app/app_procs.h @@ -28,7 +28,7 @@ gboolean app_gui_libs_init (gint *gimp_argc, gchar ***gimp_argv); -void app_init (const gchar *full_prog_name, +void app_run (const gchar *full_prog_name, gint gimp_argc, gchar **gimp_argv, const gchar *alternate_system_gimprc, @@ -42,7 +42,7 @@ void app_init (const gchar *full_prog_name, gboolean no_splash_image, gboolean be_verbose, gboolean use_shm, - gboolean use_mmx, + gboolean use_cpu_accel, gboolean console_messages, GimpStackTraceMode stack_trace_mode); diff --git a/app/base/base.c b/app/base/base.c index 7dadf8d2d4..0ef36b70e5 100644 --- a/app/base/base.c +++ b/app/base/base.c @@ -60,7 +60,7 @@ static void base_tile_cache_size_notify (GObject *config, void base_init (GimpBaseConfig *config, - gboolean use_mmx) + gboolean use_cpu_accel) { gchar *swapfile; gchar *swapdir; @@ -69,7 +69,7 @@ base_init (GimpBaseConfig *config, g_return_if_fail (GIMP_IS_BASE_CONFIG (config)); g_return_if_fail (base_config == NULL); - base_config = config; + base_config = g_object_ref (config); tile_cache_init (config->tile_cache_size); @@ -95,14 +95,17 @@ base_init (GimpBaseConfig *config, g_free (path); + /* FIXME: pass use_cpu_accel to GimpComposite */ gimp_composite_init (); - paint_funcs_setup (use_mmx); + paint_funcs_setup (use_cpu_accel); } void base_exit (void) { + g_return_if_fail (base_config != NULL); + swapping_free (); paint_funcs_free (); tile_swap_exit (); @@ -112,6 +115,7 @@ base_exit (void) base_tile_cache_size_notify, NULL); + g_object_unref (base_config); base_config = NULL; } diff --git a/app/base/base.h b/app/base/base.h index cf3d448576..82301d7a35 100644 --- a/app/base/base.h +++ b/app/base/base.h @@ -20,7 +20,7 @@ #define __BASE_H__ void base_init (GimpBaseConfig *config, - gboolean use_mmx); + gboolean use_cpu_accel); void base_exit (void); diff --git a/app/core/gimp.c b/app/core/gimp.c index cf1081937d..3f6215bd02 100644 --- a/app/core/gimp.c +++ b/app/core/gimp.c @@ -31,8 +31,6 @@ #include "config/gimpconfig-path.h" #include "config/gimprc.h" -#include "base/base.h" - #include "pdb/procedural_db.h" #include "pdb/internal_procs.h" @@ -479,8 +477,6 @@ gimp_finalize (GObject *object) if (gimp->user_units) gimp_units_exit (gimp); - base_exit (); - G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -819,8 +815,7 @@ gimp_edit_config_notify (GObject *edit_config, void gimp_load_config (Gimp *gimp, const gchar *alternate_system_gimprc, - const gchar *alternate_gimprc, - gboolean use_cpu_accel) + const gchar *alternate_gimprc) { GimpRc *gimprc; @@ -840,9 +835,6 @@ gimp_load_config (Gimp *gimp, alternate_gimprc, gimp->be_verbose); - /* initialize lowlevel stuff */ - base_init (GIMP_BASE_CONFIG (gimprc), use_cpu_accel); - gimp->config = GIMP_CORE_CONFIG (gimprc); gimp->edit_config = gimp_config_duplicate (GIMP_CONFIG (gimp->config)); diff --git a/app/core/gimp.h b/app/core/gimp.h index 2f3f093785..6cf408a465 100644 --- a/app/core/gimp.h +++ b/app/core/gimp.h @@ -220,8 +220,7 @@ Gimp * gimp_new (const gchar *name, void gimp_load_config (Gimp *gimp, const gchar *alternate_system_gimprc, - const gchar *alternate_gimprc, - gboolean use_cpu_accel); + const gchar *alternate_gimprc); void gimp_initialize (Gimp *gimp, GimpInitStatusFunc status_callback); void gimp_restore (Gimp *gimp, diff --git a/app/errors.c b/app/errors.c index 8d6721c0e1..cc8e3f7594 100644 --- a/app/errors.c +++ b/app/errors.c @@ -50,9 +50,9 @@ static gchar *full_prog_name = NULL; /* local function prototypes */ -static void gimp_eek (const gchar *reason, - const gchar *message, - gboolean use_handler); +static G_GNUC_NORETURN void gimp_eek (const gchar *reason, + const gchar *message, + gboolean use_handler); /* public functions */ diff --git a/app/errors.h b/app/errors.h index 66a3fe686f..289f9b3a87 100644 --- a/app/errors.h +++ b/app/errors.h @@ -24,23 +24,23 @@ #endif -void gimp_errors_init (const gchar *full_prog_name, - gboolean use_debug_handler, - GimpStackTraceMode stack_trace_mode); +void gimp_errors_init (const gchar *full_prog_name, + gboolean use_debug_handler, + GimpStackTraceMode stack_trace_mode); -void gimp_message_log_func (const gchar *log_domain, - GLogLevelFlags flags, - const gchar *message, - gpointer data); -void gimp_error_log_func (const gchar *domain, - GLogLevelFlags flags, - const gchar *message, - gpointer data); +void gimp_message_log_func (const gchar *log_domain, + GLogLevelFlags flags, + const gchar *message, + gpointer data); +void gimp_error_log_func (const gchar *domain, + GLogLevelFlags flags, + const gchar *message, + gpointer data) G_GNUC_NORETURN; -void gimp_fatal_error (const gchar *message, - ...); -void gimp_terminate (const gchar *message, - ...); +void gimp_fatal_error (const gchar *message, + ...) G_GNUC_NORETURN ; +void gimp_terminate (const gchar *message, + ...) G_GNUC_NORETURN; #endif /* __ERRORS_H__ */ diff --git a/app/main.c b/app/main.c index faa87fa57b..9ca43052b6 100644 --- a/app/main.c +++ b/app/main.c @@ -57,14 +57,14 @@ #ifdef G_OS_WIN32 #include #else -static void gimp_sigfatal_handler (gint sig_num); -static void gimp_sigchld_handler (gint sig_num); +static void gimp_sigfatal_handler (gint sig_num) G_GNUC_NORETURN; +static void gimp_sigchld_handler (gint sig_num); #endif -static void gimp_show_version (void); -static void gimp_show_help (const gchar *progname); -static void gimp_text_console_exit (gint status); +static void gimp_show_version (void); +static void gimp_show_help (const gchar *progname); +static void gimp_text_console_exit (gint status) G_GNUC_NORETURN; /* @@ -176,7 +176,8 @@ main (int argc, if (format) { - Gimp *gimp; + Gimp *gimp; + gboolean success; g_type_init (); @@ -184,8 +185,11 @@ main (int argc, units_init (gimp); - gimp_text_console_exit (gimp_config_dump (format) ? - EXIT_SUCCESS : EXIT_FAILURE); + success = gimp_config_dump (format); + + g_object_unref (gimp); + + gimp_text_console_exit (success ? EXIT_SUCCESS : EXIT_FAILURE); } } } @@ -436,23 +440,23 @@ main (int argc, use_debug_handler, stack_trace_mode); - app_init (full_prog_name, - argc - 1, - argv + 1, - alternate_system_gimprc, - alternate_gimprc, - session_name, - (const gchar **) batch_cmds, - no_interface, - no_data, - no_fonts, - no_splash, - no_splash_image, - be_verbose, - use_shm, - use_mmx, - console_messages, - stack_trace_mode); + app_run (full_prog_name, + argc - 1, + argv + 1, + alternate_system_gimprc, + alternate_gimprc, + session_name, + (const gchar **) batch_cmds, + no_interface, + no_data, + no_fonts, + no_splash, + no_splash_image, + be_verbose, + use_shm, + use_mmx, + console_messages, + stack_trace_mode); g_free (batch_cmds); diff --git a/devel-docs/libgimp/tmpl/gimp.sgml b/devel-docs/libgimp/tmpl/gimp.sgml index 5860b1a652..a7598a3bbf 100644 --- a/devel-docs/libgimp/tmpl/gimp.sgml +++ b/devel-docs/libgimp/tmpl/gimp.sgml @@ -172,6 +172,13 @@ all other GIMP Library headers. @Returns: + + + + + + + diff --git a/libgimp/gimp.h b/libgimp/gimp.h index cac530550b..8f92b613a2 100644 --- a/libgimp/gimp.h +++ b/libgimp/gimp.h @@ -212,7 +212,7 @@ gint gimp_main (const GimpPlugInInfo *info, /* Forcefully causes the gimp library to exit and * close down its connection to main gimp application. */ -void G_GNUC_NORETURN gimp_quit (void); +void gimp_quit (void) G_GNUC_NORETURN; /* Install a procedure in the procedure database.