From df9eeff6ac63caa31edf31d149f6dbcf20a8742b Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Sun, 16 Jul 2000 12:49:04 +0000 Subject: [PATCH] Sven Neumann 2000-07-16 Michael Natterer Sven Neumann * AUTHORS * gimp.1.in * app/about_dialog.c: removed two accidentially added non-authors. * app/errors.[ch] * app/main.c: added a new command line option "--enable-stack-trace" which can be one of {never|query|always}. * app/plug_in.c * libgimp/gimp.c: pass the stack trace mode as an argv[] element to plug-ins. Cleaned up the plug-ins' argv[] (removed unused TILE_WIDTH and TILE_HEIGHT arguments, always pass 6 arguments to make the code simpler). * libgimp/gimpenums.h * plug-ins/script-fu/script-fu-constants.c * tools/pdbgen/Makefile.am * tools/pdbgen/enums.pl: export the app's STACK_TRACE_MODE enum. * plug-ins/common/plugindetails.c: made the titles of the tree view unclickable, cleanups. --- AUTHORS | 4 +- ChangeLog | 25 ++ app/about_dialog.c | 183 +++++++--- app/actions/plug-in-commands.c | 433 ++++++++++++----------- app/dialogs/about-dialog.c | 183 +++++++--- app/errors.c | 100 ++++-- app/errors.h | 9 + app/gui/about-dialog.c | 183 +++++++--- app/gui/plug-in-commands.c | 433 ++++++++++++----------- app/gui/plug-in-menus.c | 433 ++++++++++++----------- app/main.c | 50 ++- app/menus/plug-in-menus.c | 433 ++++++++++++----------- app/plug-in/gimpplugin-message.c | 433 ++++++++++++----------- app/plug-in/gimpplugin-progress.c | 433 ++++++++++++----------- app/plug-in/gimpplugin.c | 433 ++++++++++++----------- app/plug-in/gimppluginmanager-call.c | 433 ++++++++++++----------- app/plug-in/gimppluginmanager-run.c | 433 ++++++++++++----------- app/plug-in/gimppluginmanager.c | 433 ++++++++++++----------- app/plug-in/gimppluginshm.c | 433 ++++++++++++----------- app/plug-in/plug-in-def.c | 433 ++++++++++++----------- app/plug-in/plug-in-message.c | 433 ++++++++++++----------- app/plug-in/plug-in-params.c | 433 ++++++++++++----------- app/plug-in/plug-in-progress.c | 433 ++++++++++++----------- app/plug-in/plug-in-run.c | 433 ++++++++++++----------- app/plug-in/plug-in-shm.c | 433 ++++++++++++----------- app/plug-in/plug-in.c | 433 ++++++++++++----------- app/plug-in/plug-ins.c | 433 ++++++++++++----------- app/plug_in.c | 433 ++++++++++++----------- gimp-1.2.1.in | 5 +- gimp.1.in | 5 +- libgimp/gimp.c | 56 ++- libgimp/gimpenums.h | 7 + plug-ins/common/plugin-browser.c | 137 +++---- plug-ins/common/plugindetails.c | 137 +++---- plug-ins/dbbrowser/plugin-browser.c | 137 +++---- plug-ins/script-fu/script-fu-constants.c | 4 + tools/pdbgen/Makefile.am | 1 + tools/pdbgen/enums.pl | 9 + 38 files changed, 5220 insertions(+), 4675 deletions(-) diff --git a/AUTHORS b/AUTHORS index 7d026c7beb..6bb3f3434f 100644 --- a/AUTHORS +++ b/AUTHORS @@ -25,7 +25,6 @@ Tom Bech Marc Bless Edward Blevins Reagan Blundell -Andreas Bogk Xavier Bouchoux Roberto Boyd Stanislav Brabec @@ -85,7 +84,6 @@ Andrew Kieschnick Peter Kirchgessner Philipp Klaus David Koblas -Vincent Kolwitz Tuomas Kuosmanen Karin Kylander Olof S Kylander @@ -173,4 +171,4 @@ Kris Wehner Nigel Wetten Calvin Williamson Matthew Wilson -Shirasaki Yasuhiro \ No newline at end of file +Shirasaki Yasuhiro diff --git a/ChangeLog b/ChangeLog index e66699d862..38dbe18381 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +2000-07-16 Michael Natterer + Sven Neumann + + * AUTHORS + * gimp.1.in + * app/about_dialog.c: removed two accidentially added non-authors. + + * app/errors.[ch] + * app/main.c: added a new command line option + "--enable-stack-trace" which can be one of {never|query|always}. + + * app/plug_in.c + * libgimp/gimp.c: pass the stack trace mode as an argv[] element to + plug-ins. Cleaned up the plug-ins' argv[] (removed unused TILE_WIDTH + and TILE_HEIGHT arguments, always pass 6 arguments to make the code + simpler). + + * libgimp/gimpenums.h + * plug-ins/script-fu/script-fu-constants.c + * tools/pdbgen/Makefile.am + * tools/pdbgen/enums.pl: export the app's STACK_TRACE_MODE enum. + + * plug-ins/common/plugindetails.c: made the titles of the tree view + unclickable, cleanups. + Sat Jul 15 18:32:04 CEST 2000 Marc Lehmann * plug-ins/common/plasma.c: applied noninteractive fix by David diff --git a/app/about_dialog.c b/app/about_dialog.c index ec965760cf..66b0bf08b8 100644 --- a/app/about_dialog.c +++ b/app/about_dialog.c @@ -15,6 +15,9 @@ * 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 #include #include @@ -22,26 +25,39 @@ #include +#include "appenv.h" +#include "about_dialog.h" +#include "gimpdnd.h" #include "gimphelp.h" #include "libgimp/gimpfeatures.h" -#include "config.h" #include "libgimp/gimpenv.h" #include "libgimp/gimpintl.h" #include "libgimp/gimpmath.h" -#include "about_dialog.h" +#include "pixmaps/wilber2.xpm" + #define ANIMATION_STEPS 16 #define ANIMATION_SIZE 2 -static gint about_dialog_load_logo (GtkWidget *window); -static void about_dialog_destroy (void); -static void about_dialog_unmap (void); -static gint about_dialog_logo_expose (GtkWidget *widget, GdkEventExpose *event); -static gint about_dialog_button (GtkWidget *widget, GdkEventButton *event); -static gint about_dialog_timer (gpointer data); +static gboolean about_dialog_load_logo (GtkWidget *window); +static void about_dialog_destroy (GtkObject *object, + gpointer data); +static void about_dialog_unmap (GtkWidget *widget, + GdkEvent *event, + gpointer data); +static gint about_dialog_logo_expose (GtkWidget *widget, + GdkEventExpose *event, + gpointer data); +static gint about_dialog_button (GtkWidget *widget, + GdkEventButton *event, + gpointer data); +static void about_dialog_tool_drop (GtkWidget *widget, + ToolType tool, + gpointer data); +static gint about_dialog_timer (gpointer data); static GtkWidget *about_dialog = NULL; @@ -74,7 +90,6 @@ static gchar *scroll_text[] = "Marc Bless", "Edward Blevins", "Reagan Blundell", - "Andreas Bogk", "Xavier Bouchoux", "Roberto Boyd", "Stanislav Brabec", @@ -133,7 +148,6 @@ static gchar *scroll_text[] = "Peter Kirchgessner", "Philipp Klaus", "David Koblas", - "Vincent Kolwitz", "Tuomas Kuosmanen", "Karin Kylander", "Olof S Kylander", @@ -230,24 +244,32 @@ static gchar *scroll_text[] = #endif }; static gint nscroll_texts = sizeof (scroll_text) / sizeof (scroll_text[0]); -static gint scroll_text_widths[ sizeof(scroll_text) / sizeof(scroll_text[0]) ]; -static gint cur_scroll_text = 0; -static gint cur_scroll_index; +static gint scroll_text_widths[sizeof (scroll_text) / sizeof (scroll_text[0])]; +static gint cur_scroll_text = 0; +static gint cur_scroll_index = 0; -static gint shuffle_array[ sizeof(scroll_text) / sizeof(scroll_text[0]) ]; +static gint shuffle_array[sizeof (scroll_text) / sizeof (scroll_text[0])]; + +/* dnd stuff */ +static GtkTargetEntry tool_target_table[] = +{ + GIMP_TARGET_TOOL +}; +static guint n_tool_targets = (sizeof (tool_target_table) / + sizeof (tool_target_table[0])); void -about_dialog_create () +about_dialog_create (void) { GtkWidget *vbox; GtkWidget *aboutframe; GtkWidget *label; GtkWidget *alignment; - GtkStyle *style; - GdkFont *font; - gint max_width; - gint i; - gchar *label_text; + GtkStyle *style; + GdkFont *font; + gint max_width; + gint i; + gchar *label_text; if (!about_dialog) { @@ -270,6 +292,14 @@ about_dialog_create () GTK_SIGNAL_FUNC (about_dialog_button), NULL); + /* dnd stuff */ + gtk_drag_dest_set (about_dialog, + GTK_DEST_DEFAULT_MOTION | + GTK_DEST_DEFAULT_DROP, + tool_target_table, n_tool_targets, + GDK_ACTION_COPY); + gimp_dnd_tool_dest_set (about_dialog, about_dialog_tool_drop, NULL); + gtk_widget_set_events (about_dialog, GDK_BUTTON_PRESS_MASK); if (!about_dialog_load_logo (about_dialog)) @@ -398,33 +428,37 @@ about_dialog_create () } -static gint +static gboolean about_dialog_load_logo (GtkWidget *window) { GtkWidget *preview; - GdkGC *gc; - gchar buf[1024]; - guchar *pixelrow; - FILE *fp; - gint count; - gint i, j, k; + GdkGC *gc; + gchar buf[1024]; + gchar *filename; + guchar *pixelrow; + FILE *fp; + gint count; + gint i, j, k; if (logo_pixmap) return TRUE; - g_snprintf (buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S "gimp_logo.ppm", - gimp_data_directory ()); + filename = g_strconcat (gimp_data_directory (), + G_DIR_SEPARATOR_S, + "gimp_logo.ppm", + NULL); + fp = fopen (filename, "rb"); + g_free (filename); - fp = fopen (buf, "rb"); if (!fp) - return 0; + return FALSE; fgets (buf, 1024, fp); if (strncmp (buf, "P6", 2) != 0) { fclose (fp); - return 0; + return FALSE; } fgets (buf, 1024, fp); @@ -435,7 +469,7 @@ about_dialog_load_logo (GtkWidget *window) if (strncmp (buf, "255", 3) != 0) { fclose (fp); - return 0; + return FALSE; } preview = gtk_preview_new (GTK_PREVIEW_COLOR); @@ -444,13 +478,13 @@ about_dialog_load_logo (GtkWidget *window) for (i = 0; i < logo_height; i++) { - count = fread (pixelrow, sizeof (unsigned char), logo_width * 3, fp); + count = fread (pixelrow, sizeof (guchar), logo_width * 3, fp); if (count != (logo_width * 3)) { gtk_widget_destroy (preview); g_free (pixelrow); fclose (fp); - return 0; + return FALSE; } gtk_preview_draw_row (GTK_PREVIEW (preview), pixelrow, 0, i, logo_width); @@ -487,14 +521,17 @@ about_dialog_load_logo (GtkWidget *window) } static void -about_dialog_destroy (void) +about_dialog_destroy (GtkObject *object, + gpointer data) { about_dialog = NULL; - about_dialog_unmap (); + about_dialog_unmap (NULL, NULL, NULL); } static void -about_dialog_unmap (void) +about_dialog_unmap (GtkWidget *widget, + GdkEvent *event, + gpointer data) { if (timer) { @@ -505,7 +542,8 @@ about_dialog_unmap (void) static gint about_dialog_logo_expose (GtkWidget *widget, - GdkEventExpose *event) + GdkEventExpose *event, + gpointer data) { if (do_animation) { @@ -537,7 +575,8 @@ about_dialog_logo_expose (GtkWidget *widget, static gint about_dialog_button (GtkWidget *widget, - GdkEventButton *event) + GdkEventButton *event, + gpointer data) { if (timer) gtk_timeout_remove (timer); @@ -549,6 +588,70 @@ about_dialog_button (GtkWidget *widget, return FALSE; } +static void +about_dialog_tool_drop (GtkWidget *widget, + ToolType tool, + gpointer data) +{ + GdkPixmap *pixmap = NULL; + GdkBitmap *mask = NULL; + gint width = 0; + gint height = 0; + + if (do_animation) + return; + + if (timer) + gtk_timeout_remove (timer); + + timer = gtk_timeout_add (75, about_dialog_timer, NULL); + + frame = 0; + do_animation = TRUE; + do_scrolling = FALSE; + + gdk_draw_rectangle (logo_pixmap, + logo_area->style->white_gc, + TRUE, + 0, 0, + logo_area->allocation.width, + logo_area->allocation.height); + + pixmap = + gdk_pixmap_create_from_xpm_d (widget->window, + &mask, + NULL, + wilber2_xpm); + + gdk_window_get_size (pixmap, &width, &height); + + if (logo_area->allocation.width >= width && + logo_area->allocation.height >= height) + { + gint x, y; + + x = (logo_area->allocation.width - width) / 2; + y = (logo_area->allocation.height - height) / 2; + + gdk_gc_set_clip_mask (logo_area->style->black_gc, mask); + gdk_gc_set_clip_origin (logo_area->style->black_gc, x, y); + + gdk_draw_pixmap (logo_pixmap, + logo_area->style->black_gc, + pixmap, 0, 0, + x, y, + width, height); + + gdk_gc_set_clip_mask (logo_area->style->black_gc, NULL); + gdk_gc_set_clip_origin (logo_area->style->black_gc, 0, 0); + } + + gdk_pixmap_unref (pixmap); + gdk_bitmap_unref (mask); + + double_speed = TRUE; +} + static gint about_dialog_timer (gpointer data) { diff --git a/app/actions/plug-in-commands.c b/app/actions/plug-in-commands.c index 1e10072f31..d7c6be43f2 100644 --- a/app/actions/plug-in-commands.c +++ b/app/actions/plug-in-commands.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/dialogs/about-dialog.c b/app/dialogs/about-dialog.c index ec965760cf..66b0bf08b8 100644 --- a/app/dialogs/about-dialog.c +++ b/app/dialogs/about-dialog.c @@ -15,6 +15,9 @@ * 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 #include #include @@ -22,26 +25,39 @@ #include +#include "appenv.h" +#include "about_dialog.h" +#include "gimpdnd.h" #include "gimphelp.h" #include "libgimp/gimpfeatures.h" -#include "config.h" #include "libgimp/gimpenv.h" #include "libgimp/gimpintl.h" #include "libgimp/gimpmath.h" -#include "about_dialog.h" +#include "pixmaps/wilber2.xpm" + #define ANIMATION_STEPS 16 #define ANIMATION_SIZE 2 -static gint about_dialog_load_logo (GtkWidget *window); -static void about_dialog_destroy (void); -static void about_dialog_unmap (void); -static gint about_dialog_logo_expose (GtkWidget *widget, GdkEventExpose *event); -static gint about_dialog_button (GtkWidget *widget, GdkEventButton *event); -static gint about_dialog_timer (gpointer data); +static gboolean about_dialog_load_logo (GtkWidget *window); +static void about_dialog_destroy (GtkObject *object, + gpointer data); +static void about_dialog_unmap (GtkWidget *widget, + GdkEvent *event, + gpointer data); +static gint about_dialog_logo_expose (GtkWidget *widget, + GdkEventExpose *event, + gpointer data); +static gint about_dialog_button (GtkWidget *widget, + GdkEventButton *event, + gpointer data); +static void about_dialog_tool_drop (GtkWidget *widget, + ToolType tool, + gpointer data); +static gint about_dialog_timer (gpointer data); static GtkWidget *about_dialog = NULL; @@ -74,7 +90,6 @@ static gchar *scroll_text[] = "Marc Bless", "Edward Blevins", "Reagan Blundell", - "Andreas Bogk", "Xavier Bouchoux", "Roberto Boyd", "Stanislav Brabec", @@ -133,7 +148,6 @@ static gchar *scroll_text[] = "Peter Kirchgessner", "Philipp Klaus", "David Koblas", - "Vincent Kolwitz", "Tuomas Kuosmanen", "Karin Kylander", "Olof S Kylander", @@ -230,24 +244,32 @@ static gchar *scroll_text[] = #endif }; static gint nscroll_texts = sizeof (scroll_text) / sizeof (scroll_text[0]); -static gint scroll_text_widths[ sizeof(scroll_text) / sizeof(scroll_text[0]) ]; -static gint cur_scroll_text = 0; -static gint cur_scroll_index; +static gint scroll_text_widths[sizeof (scroll_text) / sizeof (scroll_text[0])]; +static gint cur_scroll_text = 0; +static gint cur_scroll_index = 0; -static gint shuffle_array[ sizeof(scroll_text) / sizeof(scroll_text[0]) ]; +static gint shuffle_array[sizeof (scroll_text) / sizeof (scroll_text[0])]; + +/* dnd stuff */ +static GtkTargetEntry tool_target_table[] = +{ + GIMP_TARGET_TOOL +}; +static guint n_tool_targets = (sizeof (tool_target_table) / + sizeof (tool_target_table[0])); void -about_dialog_create () +about_dialog_create (void) { GtkWidget *vbox; GtkWidget *aboutframe; GtkWidget *label; GtkWidget *alignment; - GtkStyle *style; - GdkFont *font; - gint max_width; - gint i; - gchar *label_text; + GtkStyle *style; + GdkFont *font; + gint max_width; + gint i; + gchar *label_text; if (!about_dialog) { @@ -270,6 +292,14 @@ about_dialog_create () GTK_SIGNAL_FUNC (about_dialog_button), NULL); + /* dnd stuff */ + gtk_drag_dest_set (about_dialog, + GTK_DEST_DEFAULT_MOTION | + GTK_DEST_DEFAULT_DROP, + tool_target_table, n_tool_targets, + GDK_ACTION_COPY); + gimp_dnd_tool_dest_set (about_dialog, about_dialog_tool_drop, NULL); + gtk_widget_set_events (about_dialog, GDK_BUTTON_PRESS_MASK); if (!about_dialog_load_logo (about_dialog)) @@ -398,33 +428,37 @@ about_dialog_create () } -static gint +static gboolean about_dialog_load_logo (GtkWidget *window) { GtkWidget *preview; - GdkGC *gc; - gchar buf[1024]; - guchar *pixelrow; - FILE *fp; - gint count; - gint i, j, k; + GdkGC *gc; + gchar buf[1024]; + gchar *filename; + guchar *pixelrow; + FILE *fp; + gint count; + gint i, j, k; if (logo_pixmap) return TRUE; - g_snprintf (buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S "gimp_logo.ppm", - gimp_data_directory ()); + filename = g_strconcat (gimp_data_directory (), + G_DIR_SEPARATOR_S, + "gimp_logo.ppm", + NULL); + fp = fopen (filename, "rb"); + g_free (filename); - fp = fopen (buf, "rb"); if (!fp) - return 0; + return FALSE; fgets (buf, 1024, fp); if (strncmp (buf, "P6", 2) != 0) { fclose (fp); - return 0; + return FALSE; } fgets (buf, 1024, fp); @@ -435,7 +469,7 @@ about_dialog_load_logo (GtkWidget *window) if (strncmp (buf, "255", 3) != 0) { fclose (fp); - return 0; + return FALSE; } preview = gtk_preview_new (GTK_PREVIEW_COLOR); @@ -444,13 +478,13 @@ about_dialog_load_logo (GtkWidget *window) for (i = 0; i < logo_height; i++) { - count = fread (pixelrow, sizeof (unsigned char), logo_width * 3, fp); + count = fread (pixelrow, sizeof (guchar), logo_width * 3, fp); if (count != (logo_width * 3)) { gtk_widget_destroy (preview); g_free (pixelrow); fclose (fp); - return 0; + return FALSE; } gtk_preview_draw_row (GTK_PREVIEW (preview), pixelrow, 0, i, logo_width); @@ -487,14 +521,17 @@ about_dialog_load_logo (GtkWidget *window) } static void -about_dialog_destroy (void) +about_dialog_destroy (GtkObject *object, + gpointer data) { about_dialog = NULL; - about_dialog_unmap (); + about_dialog_unmap (NULL, NULL, NULL); } static void -about_dialog_unmap (void) +about_dialog_unmap (GtkWidget *widget, + GdkEvent *event, + gpointer data) { if (timer) { @@ -505,7 +542,8 @@ about_dialog_unmap (void) static gint about_dialog_logo_expose (GtkWidget *widget, - GdkEventExpose *event) + GdkEventExpose *event, + gpointer data) { if (do_animation) { @@ -537,7 +575,8 @@ about_dialog_logo_expose (GtkWidget *widget, static gint about_dialog_button (GtkWidget *widget, - GdkEventButton *event) + GdkEventButton *event, + gpointer data) { if (timer) gtk_timeout_remove (timer); @@ -549,6 +588,70 @@ about_dialog_button (GtkWidget *widget, return FALSE; } +static void +about_dialog_tool_drop (GtkWidget *widget, + ToolType tool, + gpointer data) +{ + GdkPixmap *pixmap = NULL; + GdkBitmap *mask = NULL; + gint width = 0; + gint height = 0; + + if (do_animation) + return; + + if (timer) + gtk_timeout_remove (timer); + + timer = gtk_timeout_add (75, about_dialog_timer, NULL); + + frame = 0; + do_animation = TRUE; + do_scrolling = FALSE; + + gdk_draw_rectangle (logo_pixmap, + logo_area->style->white_gc, + TRUE, + 0, 0, + logo_area->allocation.width, + logo_area->allocation.height); + + pixmap = + gdk_pixmap_create_from_xpm_d (widget->window, + &mask, + NULL, + wilber2_xpm); + + gdk_window_get_size (pixmap, &width, &height); + + if (logo_area->allocation.width >= width && + logo_area->allocation.height >= height) + { + gint x, y; + + x = (logo_area->allocation.width - width) / 2; + y = (logo_area->allocation.height - height) / 2; + + gdk_gc_set_clip_mask (logo_area->style->black_gc, mask); + gdk_gc_set_clip_origin (logo_area->style->black_gc, x, y); + + gdk_draw_pixmap (logo_pixmap, + logo_area->style->black_gc, + pixmap, 0, 0, + x, y, + width, height); + + gdk_gc_set_clip_mask (logo_area->style->black_gc, NULL); + gdk_gc_set_clip_origin (logo_area->style->black_gc, 0, 0); + } + + gdk_pixmap_unref (pixmap); + gdk_bitmap_unref (mask); + + double_speed = TRUE; +} + static gint about_dialog_timer (gpointer data) { diff --git a/app/errors.c b/app/errors.c index aee6cf4785..927eb07124 100644 --- a/app/errors.c +++ b/app/errors.c @@ -15,25 +15,19 @@ * 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 #include -#include #include -#ifdef HAVE_SYS_TIME_H -#include -#endif -#ifdef HAVE_SYS_TIMES_H -#include -#endif #include -#include #ifdef HAVE_UNISTD_H #include #endif #include + #include "appenv.h" #include "app_procs.h" #include "errorconsole.h" @@ -46,49 +40,77 @@ extern gchar *prog_name; +StackTraceMode stack_trace_mode = STACK_TRACE_QUERY; + void gimp_message_func (gchar *str) { if (console_messages == FALSE) - switch (message_handler) - { - case MESSAGE_BOX: - gimp_message_box (str, NULL, NULL); - break; - - case ERROR_CONSOLE: - error_console_add (str); - break; - - default: - fprintf (stderr, "%s: %s\n", prog_name, str); + { + switch (message_handler) + { + case MESSAGE_BOX: + gimp_message_box (str, NULL, NULL); break; + + case ERROR_CONSOLE: + error_console_add (str); + break; + + default: + g_printerr ("%s: %s\n", prog_name, str); + break; + } } else - fprintf (stderr, "%s: %s\n", prog_name, str); + { + g_printerr ("%s: %s\n", prog_name, str); + } } void gimp_fatal_error (gchar *fmt, ...) { -#ifndef G_OS_WIN32 va_list args; +#ifndef G_OS_WIN32 + va_start (args, fmt); - g_print ("%s: fatal error: %s\n", prog_name, g_strdup_vprintf (fmt, args)); + g_printerr ("%s: fatal error: %s\n", prog_name, g_strdup_vprintf (fmt, args)); va_end (args); - if (TRUE) + switch (stack_trace_mode) { - sigset_t sigset; + case STACK_TRACE_NEVER: + break; - sigemptyset (&sigset); - sigprocmask (SIG_SETMASK, &sigset, NULL); - g_on_error_query (prog_name); + case STACK_TRACE_QUERY: + { + sigset_t sigset; + + sigemptyset (&sigset); + sigprocmask (SIG_SETMASK, &sigset, NULL); + g_on_error_query (prog_name); + } + break; + + case STACK_TRACE_ALWAYS: + { + sigset_t sigset; + + sigemptyset (&sigset); + sigprocmask (SIG_SETMASK, &sigset, NULL); + g_on_error_stack_trace (prog_name); + } + break; + + default: + break; } + #else - /* g_on_error_query doesn't do anything reasonable on Win32. */ - va_list args; + + /* g_on_error_* don't do anything reasonable on Win32. */ gchar *msg; va_start (args, fmt); @@ -98,18 +120,21 @@ gimp_fatal_error (gchar *fmt, ...) MessageBox (NULL, msg, prog_name, MB_OK|MB_ICONERROR); /* I don't dare do anything more. */ ExitProcess (1); -#endif + +#endif /* ! G_OS_WIN32 */ + app_exit (TRUE); } void gimp_terminate (gchar *fmt, ...) { -#ifndef G_OS_WIN32 va_list args; +#ifndef G_OS_WIN32 + va_start (args, fmt); - g_print ("%s terminated: %s\n", prog_name, g_strdup_vprintf (fmt, args)); + g_printerr ("%s terminated: %s\n", prog_name, g_strdup_vprintf (fmt, args)); va_end (args); if (use_debug_handler) @@ -120,9 +145,10 @@ gimp_terminate (gchar *fmt, ...) sigprocmask (SIG_SETMASK, &sigset, NULL); g_on_error_query (prog_name); } + #else - /* g_on_error_query doesn't do anything reasonable on Win32. */ - va_list args; + + /* g_on_error_* don't do anything reasonable on Win32. */ gchar *msg; va_start (args, fmt); @@ -130,6 +156,8 @@ gimp_terminate (gchar *fmt, ...) va_end (args); MessageBox (NULL, msg, prog_name, MB_OK|MB_ICONERROR); -#endif + +#endif /* ! G_OS_WIN32 */ + gdk_exit (1); } diff --git a/app/errors.h b/app/errors.h index 7b2856bd0b..67baeeb8af 100644 --- a/app/errors.h +++ b/app/errors.h @@ -18,6 +18,15 @@ #ifndef __ERRORS_H__ #define __ERRORS_H__ +typedef enum +{ + STACK_TRACE_NEVER, + STACK_TRACE_QUERY, + STACK_TRACE_ALWAYS +} StackTraceMode; + +extern StackTraceMode stack_trace_mode; + void gimp_message_func (gchar *); void gimp_fatal_error (gchar *, ...); void gimp_terminate (gchar *, ...); diff --git a/app/gui/about-dialog.c b/app/gui/about-dialog.c index ec965760cf..66b0bf08b8 100644 --- a/app/gui/about-dialog.c +++ b/app/gui/about-dialog.c @@ -15,6 +15,9 @@ * 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 #include #include @@ -22,26 +25,39 @@ #include +#include "appenv.h" +#include "about_dialog.h" +#include "gimpdnd.h" #include "gimphelp.h" #include "libgimp/gimpfeatures.h" -#include "config.h" #include "libgimp/gimpenv.h" #include "libgimp/gimpintl.h" #include "libgimp/gimpmath.h" -#include "about_dialog.h" +#include "pixmaps/wilber2.xpm" + #define ANIMATION_STEPS 16 #define ANIMATION_SIZE 2 -static gint about_dialog_load_logo (GtkWidget *window); -static void about_dialog_destroy (void); -static void about_dialog_unmap (void); -static gint about_dialog_logo_expose (GtkWidget *widget, GdkEventExpose *event); -static gint about_dialog_button (GtkWidget *widget, GdkEventButton *event); -static gint about_dialog_timer (gpointer data); +static gboolean about_dialog_load_logo (GtkWidget *window); +static void about_dialog_destroy (GtkObject *object, + gpointer data); +static void about_dialog_unmap (GtkWidget *widget, + GdkEvent *event, + gpointer data); +static gint about_dialog_logo_expose (GtkWidget *widget, + GdkEventExpose *event, + gpointer data); +static gint about_dialog_button (GtkWidget *widget, + GdkEventButton *event, + gpointer data); +static void about_dialog_tool_drop (GtkWidget *widget, + ToolType tool, + gpointer data); +static gint about_dialog_timer (gpointer data); static GtkWidget *about_dialog = NULL; @@ -74,7 +90,6 @@ static gchar *scroll_text[] = "Marc Bless", "Edward Blevins", "Reagan Blundell", - "Andreas Bogk", "Xavier Bouchoux", "Roberto Boyd", "Stanislav Brabec", @@ -133,7 +148,6 @@ static gchar *scroll_text[] = "Peter Kirchgessner", "Philipp Klaus", "David Koblas", - "Vincent Kolwitz", "Tuomas Kuosmanen", "Karin Kylander", "Olof S Kylander", @@ -230,24 +244,32 @@ static gchar *scroll_text[] = #endif }; static gint nscroll_texts = sizeof (scroll_text) / sizeof (scroll_text[0]); -static gint scroll_text_widths[ sizeof(scroll_text) / sizeof(scroll_text[0]) ]; -static gint cur_scroll_text = 0; -static gint cur_scroll_index; +static gint scroll_text_widths[sizeof (scroll_text) / sizeof (scroll_text[0])]; +static gint cur_scroll_text = 0; +static gint cur_scroll_index = 0; -static gint shuffle_array[ sizeof(scroll_text) / sizeof(scroll_text[0]) ]; +static gint shuffle_array[sizeof (scroll_text) / sizeof (scroll_text[0])]; + +/* dnd stuff */ +static GtkTargetEntry tool_target_table[] = +{ + GIMP_TARGET_TOOL +}; +static guint n_tool_targets = (sizeof (tool_target_table) / + sizeof (tool_target_table[0])); void -about_dialog_create () +about_dialog_create (void) { GtkWidget *vbox; GtkWidget *aboutframe; GtkWidget *label; GtkWidget *alignment; - GtkStyle *style; - GdkFont *font; - gint max_width; - gint i; - gchar *label_text; + GtkStyle *style; + GdkFont *font; + gint max_width; + gint i; + gchar *label_text; if (!about_dialog) { @@ -270,6 +292,14 @@ about_dialog_create () GTK_SIGNAL_FUNC (about_dialog_button), NULL); + /* dnd stuff */ + gtk_drag_dest_set (about_dialog, + GTK_DEST_DEFAULT_MOTION | + GTK_DEST_DEFAULT_DROP, + tool_target_table, n_tool_targets, + GDK_ACTION_COPY); + gimp_dnd_tool_dest_set (about_dialog, about_dialog_tool_drop, NULL); + gtk_widget_set_events (about_dialog, GDK_BUTTON_PRESS_MASK); if (!about_dialog_load_logo (about_dialog)) @@ -398,33 +428,37 @@ about_dialog_create () } -static gint +static gboolean about_dialog_load_logo (GtkWidget *window) { GtkWidget *preview; - GdkGC *gc; - gchar buf[1024]; - guchar *pixelrow; - FILE *fp; - gint count; - gint i, j, k; + GdkGC *gc; + gchar buf[1024]; + gchar *filename; + guchar *pixelrow; + FILE *fp; + gint count; + gint i, j, k; if (logo_pixmap) return TRUE; - g_snprintf (buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S "gimp_logo.ppm", - gimp_data_directory ()); + filename = g_strconcat (gimp_data_directory (), + G_DIR_SEPARATOR_S, + "gimp_logo.ppm", + NULL); + fp = fopen (filename, "rb"); + g_free (filename); - fp = fopen (buf, "rb"); if (!fp) - return 0; + return FALSE; fgets (buf, 1024, fp); if (strncmp (buf, "P6", 2) != 0) { fclose (fp); - return 0; + return FALSE; } fgets (buf, 1024, fp); @@ -435,7 +469,7 @@ about_dialog_load_logo (GtkWidget *window) if (strncmp (buf, "255", 3) != 0) { fclose (fp); - return 0; + return FALSE; } preview = gtk_preview_new (GTK_PREVIEW_COLOR); @@ -444,13 +478,13 @@ about_dialog_load_logo (GtkWidget *window) for (i = 0; i < logo_height; i++) { - count = fread (pixelrow, sizeof (unsigned char), logo_width * 3, fp); + count = fread (pixelrow, sizeof (guchar), logo_width * 3, fp); if (count != (logo_width * 3)) { gtk_widget_destroy (preview); g_free (pixelrow); fclose (fp); - return 0; + return FALSE; } gtk_preview_draw_row (GTK_PREVIEW (preview), pixelrow, 0, i, logo_width); @@ -487,14 +521,17 @@ about_dialog_load_logo (GtkWidget *window) } static void -about_dialog_destroy (void) +about_dialog_destroy (GtkObject *object, + gpointer data) { about_dialog = NULL; - about_dialog_unmap (); + about_dialog_unmap (NULL, NULL, NULL); } static void -about_dialog_unmap (void) +about_dialog_unmap (GtkWidget *widget, + GdkEvent *event, + gpointer data) { if (timer) { @@ -505,7 +542,8 @@ about_dialog_unmap (void) static gint about_dialog_logo_expose (GtkWidget *widget, - GdkEventExpose *event) + GdkEventExpose *event, + gpointer data) { if (do_animation) { @@ -537,7 +575,8 @@ about_dialog_logo_expose (GtkWidget *widget, static gint about_dialog_button (GtkWidget *widget, - GdkEventButton *event) + GdkEventButton *event, + gpointer data) { if (timer) gtk_timeout_remove (timer); @@ -549,6 +588,70 @@ about_dialog_button (GtkWidget *widget, return FALSE; } +static void +about_dialog_tool_drop (GtkWidget *widget, + ToolType tool, + gpointer data) +{ + GdkPixmap *pixmap = NULL; + GdkBitmap *mask = NULL; + gint width = 0; + gint height = 0; + + if (do_animation) + return; + + if (timer) + gtk_timeout_remove (timer); + + timer = gtk_timeout_add (75, about_dialog_timer, NULL); + + frame = 0; + do_animation = TRUE; + do_scrolling = FALSE; + + gdk_draw_rectangle (logo_pixmap, + logo_area->style->white_gc, + TRUE, + 0, 0, + logo_area->allocation.width, + logo_area->allocation.height); + + pixmap = + gdk_pixmap_create_from_xpm_d (widget->window, + &mask, + NULL, + wilber2_xpm); + + gdk_window_get_size (pixmap, &width, &height); + + if (logo_area->allocation.width >= width && + logo_area->allocation.height >= height) + { + gint x, y; + + x = (logo_area->allocation.width - width) / 2; + y = (logo_area->allocation.height - height) / 2; + + gdk_gc_set_clip_mask (logo_area->style->black_gc, mask); + gdk_gc_set_clip_origin (logo_area->style->black_gc, x, y); + + gdk_draw_pixmap (logo_pixmap, + logo_area->style->black_gc, + pixmap, 0, 0, + x, y, + width, height); + + gdk_gc_set_clip_mask (logo_area->style->black_gc, NULL); + gdk_gc_set_clip_origin (logo_area->style->black_gc, 0, 0); + } + + gdk_pixmap_unref (pixmap); + gdk_bitmap_unref (mask); + + double_speed = TRUE; +} + static gint about_dialog_timer (gpointer data) { diff --git a/app/gui/plug-in-commands.c b/app/gui/plug-in-commands.c index 1e10072f31..d7c6be43f2 100644 --- a/app/gui/plug-in-commands.c +++ b/app/gui/plug-in-commands.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/gui/plug-in-menus.c b/app/gui/plug-in-menus.c index 1e10072f31..d7c6be43f2 100644 --- a/app/gui/plug-in-menus.c +++ b/app/gui/plug-in-menus.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/main.c b/app/main.c index bd428bd016..d26f21c7d4 100644 --- a/app/main.c +++ b/app/main.c @@ -173,32 +173,32 @@ main (int argc, if (batch_cmds[0] == NULL) /* We need at least one batch command */ show_help = TRUE; } - else if (strcmp (argv[i], "--system-gimprc") == 0) + else if (strcmp (argv[i], "--system-gimprc") == 0) { argv[i] = NULL; if (argc <= ++i) { - show_help = TRUE; - } + show_help = TRUE; + } else { - alternate_system_gimprc = argv[i]; - argv[i] = NULL; + alternate_system_gimprc = argv[i]; + argv[i] = NULL; } - } + } else if ((strcmp (argv[i], "--gimprc") == 0) || (strcmp (argv[i], "-g") == 0)) { if (argc <= ++i) { - show_help = TRUE; - } - else + show_help = TRUE; + } + else { - alternate_gimprc = argv[i]; - argv[i] = NULL; + alternate_gimprc = argv[i]; + argv[i] = NULL; } - } + } else if ((strcmp (argv[i], "--help") == 0) || (strcmp (argv[i], "-h") == 0)) { @@ -252,11 +252,27 @@ main (int argc, restore_session = TRUE; argv[i] = NULL; } - else if (strcmp (argv[i], "--wilber-on-lsd") == 0) + else if (strcmp (argv[i], "--enable-stack-trace") == 0) { - double_speed = TRUE; argv[i] = NULL; - } + if (argc <= ++i) + { + show_help = TRUE; + } + else + { + if (! strcmp (argv[i], "never")) + stack_trace_mode = STACK_TRACE_NEVER; + else if (! strcmp (argv[i], "query")) + stack_trace_mode = STACK_TRACE_QUERY; + else if (! strcmp (argv[i], "always")) + stack_trace_mode = STACK_TRACE_ALWAYS; + else + show_help = TRUE; + + argv[i] = NULL; + } + } /* * ANYTHING ELSE starting with a '-' is an error. */ @@ -296,7 +312,9 @@ main (int argc, g_print (_(" --no-shm Do not use shared memory between GIMP and its plugins.\n")); g_print (_(" --no-xshm Do not use the X Shared Memory extension.\n")); g_print (_(" --console-messages Display warnings to console instead of a dialog box.\n")); - g_print (_(" --debug-handlers Enable debugging signal handlers.\n")); + g_print (_(" --debug-handlers Enable debugging signal handlers for non-fatal signals.\n")); + g_print (_(" --enable-stack-trace {never|query|always}\n")); + g_print (_(" Debugging mode for fatal signals.\n")); g_print (_(" --display Use the designated X display.\n")); g_print (_(" --system-gimprc Use an alternate system gimprc file.\n")); } diff --git a/app/menus/plug-in-menus.c b/app/menus/plug-in-menus.c index 1e10072f31..d7c6be43f2 100644 --- a/app/menus/plug-in-menus.c +++ b/app/menus/plug-in-menus.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/gimpplugin-message.c b/app/plug-in/gimpplugin-message.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/gimpplugin-message.c +++ b/app/plug-in/gimpplugin-message.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/gimpplugin-progress.c b/app/plug-in/gimpplugin-progress.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/gimpplugin-progress.c +++ b/app/plug-in/gimpplugin-progress.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/gimpplugin.c b/app/plug-in/gimpplugin.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/gimpplugin.c +++ b/app/plug-in/gimpplugin.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/gimppluginmanager-call.c b/app/plug-in/gimppluginmanager-call.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/gimppluginmanager-call.c +++ b/app/plug-in/gimppluginmanager-call.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/gimppluginmanager-run.c b/app/plug-in/gimppluginmanager-run.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/gimppluginmanager-run.c +++ b/app/plug-in/gimppluginmanager-run.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/gimppluginmanager.c b/app/plug-in/gimppluginmanager.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/gimppluginmanager.c +++ b/app/plug-in/gimppluginmanager.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/gimppluginshm.c b/app/plug-in/gimppluginshm.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/gimppluginshm.c +++ b/app/plug-in/gimppluginshm.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/plug-in-def.c b/app/plug-in/plug-in-def.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/plug-in-def.c +++ b/app/plug-in/plug-in-def.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/plug-in-message.c b/app/plug-in/plug-in-message.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/plug-in-message.c +++ b/app/plug-in/plug-in-message.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/plug-in-params.c b/app/plug-in/plug-in-params.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/plug-in-params.c +++ b/app/plug-in/plug-in-params.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/plug-in-progress.c b/app/plug-in/plug-in-progress.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/plug-in-progress.c +++ b/app/plug-in/plug-in-progress.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/plug-in-run.c b/app/plug-in/plug-in-run.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/plug-in-run.c +++ b/app/plug-in/plug-in-run.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/plug-in-shm.c b/app/plug-in/plug-in-shm.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/plug-in-shm.c +++ b/app/plug-in/plug-in-shm.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/plug-in.c b/app/plug-in/plug-in.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/plug-in.c +++ b/app/plug-in/plug-in.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug-in/plug-ins.c b/app/plug-in/plug-ins.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug-in/plug-ins.c +++ b/app/plug-in/plug-ins.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/app/plug_in.c b/app/plug_in.c index 1e10072f31..d7c6be43f2 100644 --- a/app/plug_in.c +++ b/app/plug_in.c @@ -15,6 +15,7 @@ * 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" #ifdef HAVE_SYS_PARAM_H @@ -80,6 +81,7 @@ #include "brush_select.h" /* Need for closing dialogs */ #include "drawable.h" #include "datafiles.h" +#include "errors.h" #include "gdisplay.h" #include "general.h" #include "gimage.h" @@ -99,7 +101,7 @@ #include "libgimp/gimpintl.h" -typedef struct _PlugInBlocked PlugInBlocked; +typedef struct _PlugInBlocked PlugInBlocked; struct _PlugInBlocked { @@ -154,28 +156,29 @@ static gint plug_in_make_menu_entry (gpointer foo, static void plug_in_callback (GtkWidget *widget, gpointer client_data); static void plug_in_proc_def_insert (PlugInProcDef *proc_def, - void (*superceed_fn)(void *)); -static void plug_in_proc_def_dead (void *freed_proc_def); + void (* superceed_fn) (void *)); +static void plug_in_proc_def_dead (void *freed_proc_def); static void plug_in_proc_def_remove (PlugInProcDef *proc_def); static void plug_in_proc_def_destroy (PlugInProcDef *proc_def, gboolean data_only); -static Argument* plug_in_temp_run (ProcRecord *proc_rec, - Argument *args, - gint argc); -static Argument* plug_in_params_to_args (GPParam *params, - gint nparams, - gboolean full_copy); -static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy); -static void plug_in_params_destroy (GPParam *params, - gint nparams, - gboolean full_destroy); -static void plug_in_args_destroy (Argument *args, - gint nargs, - gboolean full_destroy); -static void plug_in_init_shm (void); +static Argument * plug_in_temp_run (ProcRecord *proc_rec, + Argument *args, + gint argc); +static Argument * plug_in_params_to_args (GPParam *params, + gint nparams, + gboolean full_copy); +static GPParam * plug_in_args_to_params (Argument *args, + gint nargs, + gboolean full_copy); +static void plug_in_params_destroy (GPParam *params, + gint nparams, + gboolean full_destroy); +static void plug_in_args_destroy (Argument *args, + gint nargs, + gboolean full_destroy); +static void plug_in_init_shm (void); + PlugIn *current_plug_in = NULL; GSList *proc_defs = NULL; @@ -250,8 +253,8 @@ plug_in_init_shm (void) pid = GetCurrentProcessId (); /* From the id, derive the file map name */ - sprintf (fileMapName, "GIMP%d.SHM", pid); - + g_snprintf (fileMapName, sizeof (fileMapName), "GIMP%d.SHM", pid); + /* Create the file mapping into paging space */ shm_handle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0, @@ -284,11 +287,14 @@ void plug_in_init (void) { extern gboolean use_shm; - gchar *filename; - GSList *tmp, *tmp2; + + gchar *filename; + GSList *tmp; + GSList *tmp2; PlugInDef *plug_in_def; PlugInProcDef *proc_def; - gfloat nplugins, nth; + gfloat nplugins; + gfloat nth; /* initialize the gimp protocol library and set the read and * write handlers. @@ -302,9 +308,8 @@ plug_in_init (void) * we'll fall back on sending the data over the pipe. */ if (use_shm) - { - plug_in_init_shm (); - } + plug_in_init_shm (); + /* search for binaries in the plug-in directory path */ datafiles_read_directories (plug_in_path, plug_in_init_file, MODE_EXECUTABLE); @@ -479,7 +484,7 @@ plug_in_add (gchar *prog, gchar *accelerator) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (strncmp ("plug_in_", prog, 8) != 0) { @@ -512,30 +517,30 @@ plug_in_add (gchar *prog, g_free (proc_def->image_types); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; - proc_def->prefixes = NULL; - proc_def->extensions = NULL; - proc_def->magics = NULL; - proc_def->image_types = NULL; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; + proc_def->prefixes = NULL; + proc_def->extensions = NULL; + proc_def->magics = NULL; + proc_def->image_types = NULL; return; } } proc_def = g_new0 (PlugInProcDef, 1); proc_def->db_info.name = prog; - proc_def->menu_path = menu_path; - proc_def->accelerator = accelerator; + proc_def->menu_path = menu_path; + proc_def->accelerator = accelerator; gimprc_proc_defs = g_slist_prepend (gimprc_proc_defs, proc_def); } -gchar* +gchar * plug_in_image_types (gchar *name) { - PlugInDef *plug_in_def; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -599,7 +604,7 @@ plug_in_file_handler (gchar *name, { PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; if (current_plug_in) { @@ -680,9 +685,12 @@ plug_in_def_free (PlugInDef *plug_in_def, GSList *list; g_free (plug_in_def->prog); - if (plug_in_def->locale_domain) g_free (plug_in_def->locale_domain); - if (plug_in_def->locale_path) g_free (plug_in_def->locale_path); - if (plug_in_def->help_path) g_free (plug_in_def->help_path); + if (plug_in_def->locale_domain) + g_free (plug_in_def->locale_domain); + if (plug_in_def->locale_path) + g_free (plug_in_def->locale_path); + if (plug_in_def->help_path) + g_free (plug_in_def->help_path); if (free_proc_defs) { @@ -707,12 +715,13 @@ plug_in_def_add (PlugInDef *plug_in_def) t1 = g_basename (plug_in_def->prog); - /* If this is a file load or save plugin, make sure we have - * something for one of the extensions, prefixes, or magic number. - * Other bits of code rely on detecting file plugins by the presence - * of one of these things, but Nick Lamb's alien/unknown format - * loader needs to be able to register no extensions, prefixes or - * magics. -- austin 13/Feb/99 */ + /* If this is a file load or save plugin, make sure we have + * something for one of the extensions, prefixes, or magic number. + * Other bits of code rely on detecting file plugins by the presence + * of one of these things, but Nick Lamb's alien/unknown format + * loader needs to be able to register no extensions, prefixes or + * magics. -- austin 13/Feb/99 + */ for (tmp = plug_in_def->proc_defs; tmp; tmp = g_slist_next (tmp)) { proc_def = tmp->data; @@ -839,8 +848,8 @@ plug_in_new (gchar *name) plug_in->pid = 0; plug_in->args[0] = g_strdup (path); plug_in->args[1] = g_strdup ("-gimp"); - plug_in->args[2] = g_new (gchar, 32); - plug_in->args[3] = g_new (gchar, 32); + plug_in->args[2] = NULL; + plug_in->args[3] = NULL; plug_in->args[4] = NULL; plug_in->args[5] = NULL; plug_in->args[6] = NULL; @@ -897,7 +906,7 @@ plug_in_destroy (PlugIn *plug_in) gint xspawnv (gint mode, const gchar *cmdname, - const gchar *const *argv ) + const gchar *const *argv) { gchar sExecutable[_MAX_PATH*2]; gchar** sArgsList; @@ -983,17 +992,18 @@ plug_in_open (PlugIn *plug_in) /* Remember the file descriptors for the pipes. */ #ifndef G_OS_WIN32 - sprintf (plug_in->args[2], "%d", - g_io_channel_unix_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d", - g_io_channel_unix_get_fd (plug_in->his_write)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d", g_io_channel_unix_get_fd (plug_in->his_write)); #else - sprintf (plug_in->args[2], "%d", - g_io_channel_win32_get_fd (plug_in->his_read)); - sprintf (plug_in->args[3], "%d:%u:%d", - g_io_channel_win32_get_fd (plug_in->his_write), - GetCurrentThreadId (), - g_io_channel_win32_get_fd (plug_in->my_read)); + plug_in->args[2] = + g_strdup_printf ("%d", g_io_channel_win32_get_fd (plug_in->his_read)); + plug_in->args[3] = + g_strdup_printf ("%d:%u:%d", + g_io_channel_win32_get_fd (plug_in->his_write), + GetCurrentThreadId (), + g_io_channel_win32_get_fd (plug_in->my_read)); #endif /* Set the rest of the command line arguments. @@ -1004,20 +1014,18 @@ plug_in_open (PlugIn *plug_in) } else { - plug_in->args[4] = g_new (gchar, 16); - plug_in->args[5] = g_new (gchar, 16); - - sprintf (plug_in->args[4], "%d", TILE_WIDTH); - sprintf (plug_in->args[5], "%d", TILE_WIDTH); + plug_in->args[4] = g_strdup ("-run"); } + plug_in->args[5] = g_strdup_printf ("%d", (gint) stack_trace_mode); + /* Fork another process. We'll remember the process id * so that we can later use it to kill the filter if * necessary. */ #ifdef __EMX__ - fcntl(my_read[0], F_SETFD, 1); - fcntl(my_write[1], F_SETFD, 1); + fcntl (my_read[0], F_SETFD, 1); + fcntl (my_write[1], F_SETFD, 1); #endif #if defined(G_OS_WIN32) || defined (G_WITH_CYGWIN) || defined(__EMX__) plug_in->pid = _spawnv (_P_NOWAIT, plug_in->args[0], plug_in->args); @@ -1119,8 +1127,7 @@ plug_in_close (PlugIn *plug_in, #endif } - /* If necessary, kill the filter. - */ + /* If necessary, kill the filter. */ #ifndef G_OS_WIN32 if (kill_it && plug_in->pid) status = kill (plug_in->pid, SIGKILL); @@ -1154,13 +1161,11 @@ plug_in_close (PlugIn *plug_in, } #endif - /* Remove the input handler. - */ + /* Remove the input handler. */ if (plug_in->input_id) gdk_input_remove (plug_in->input_id); - /* Close the pipes. - */ + /* Close the pipes. */ if (plug_in->my_read != NULL) { g_io_channel_close (plug_in->my_read); @@ -1188,14 +1193,12 @@ plug_in_close (PlugIn *plug_in, wire_clear_error (); - /* Destroy the progress dialog if it exists - */ + /* Destroy the progress dialog if it exists. */ if (plug_in->progress) progress_end (plug_in->progress); plug_in->progress = NULL; - /* Set the fields to null values. - */ + /* Set the fields to null values. */ plug_in->pid = 0; plug_in->input_id = 0; plug_in->my_read = NULL; @@ -1207,13 +1210,12 @@ plug_in_close (PlugIn *plug_in, gtk_main_quit (); plug_in->synchronous = FALSE; - plug_in->recurse = FALSE; + plug_in->recurse = FALSE; - /* Unregister any temporary procedures - */ + /* Unregister any temporary procedures. */ if (plug_in->temp_proc_defs) { - GSList *list; + GSList *list; PlugInProcDef *proc_def; for (list = plug_in->temp_proc_defs; list; list = g_slist_next (list)) @@ -1239,12 +1241,14 @@ static Argument * plug_in_get_current_return_vals (ProcRecord *proc_rec) { Argument *return_vals; - gint nargs; + gint nargs; /* Return the status code plus the current return values. */ nargs = proc_rec->num_values + 1; if (current_return_vals && current_return_nvals == nargs) - return_vals = current_return_vals; + { + return_vals = current_return_vals; + } else if (current_return_vals) { /* Allocate new return values of the correct size. */ @@ -1267,12 +1271,12 @@ plug_in_get_current_return_vals (ProcRecord *proc_rec) /* We have consumed any saved values, so clear them. */ current_return_nvals = 0; - current_return_vals = NULL; + current_return_vals = NULL; return return_vals; } -Argument* +Argument * plug_in_run (ProcRecord *proc_rec, Argument *args, gint argc, @@ -1333,9 +1337,8 @@ plug_in_run (ProcRecord *proc_rec, plug_in_params_destroy (proc_run.params, proc_run.nparams, FALSE); - /* - * If this is an automatically installed extension, wait for an - * installation-confirmation message + /* If this is an automatically installed extension, wait for an + * installation-confirmation message */ if ((proc_rec->proc_type == PDB_EXTENSION) && (proc_rec->num_args == 0)) @@ -1344,7 +1347,6 @@ plug_in_run (ProcRecord *proc_rec, if (plug_in->recurse) { gtk_main (); - return_vals = plug_in_get_current_return_vals (proc_rec); } } @@ -1380,7 +1382,7 @@ plug_in_repeat (gboolean with_interface) /* initialize the first three plug-in arguments */ args[0].value.pdb_int = (with_interface ? RUN_INTERACTIVE : RUN_WITH_LAST_VALS); - args[1].value.pdb_int = pdb_image_to_id(gdisplay->gimage); + args[1].value.pdb_int = pdb_image_to_id (gdisplay->gimage); args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gdisplay->gimage)); /* run the plug-in procedure */ @@ -1394,8 +1396,8 @@ void plug_in_set_menu_sensitivity (GimpImageType type) { PlugInProcDef *proc_def; - GSList *tmp; - gboolean sensitive = FALSE; + GSList *tmp; + gboolean sensitive = FALSE; for (tmp = proc_defs; tmp; tmp = g_slist_next (tmp)) { @@ -1446,9 +1448,9 @@ plug_in_set_menu_sensitivity (GimpImageType type) } static gboolean -plug_in_recv_message (GIOChannel *channel, - GIOCondition cond, - gpointer data) +plug_in_recv_message (GIOChannel *channel, + GIOCondition cond, + gpointer data) { gboolean got_message = FALSE; @@ -1510,18 +1512,21 @@ plug_in_handle_message (WireMessage *msg) plug_in_handle_quit (); break; case GP_CONFIG: - g_warning ("plug_in_handle_message(): received a config message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a config message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_REQ: plug_in_handle_tile_req (msg->data); break; case GP_TILE_ACK: - g_warning ("plug_in_handle_message(): received a tile ack message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile ack message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TILE_DATA: - g_warning ("plug_in_handle_message(): received a tile data message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a tile data message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_PROC_RUN: @@ -1532,7 +1537,8 @@ plug_in_handle_message (WireMessage *msg) plug_in_close (current_plug_in, FALSE); break; case GP_TEMP_PROC_RUN: - g_warning ("plug_in_handle_message(): received a temp proc run message (should not happen)"); + g_warning ("plug_in_handle_message(): " + "received a temp proc run message (should not happen)"); plug_in_close (current_plug_in, TRUE); break; case GP_TEMP_PROC_RETURN: @@ -1576,13 +1582,13 @@ plug_in_handle_tile_req (GPTileReq *tile_req) if (tile_req->drawable_ID == -1) { tile_data.drawable_ID = -1; - tile_data.tile_num = 0; - tile_data.shadow = 0; - tile_data.bpp = 0; - tile_data.width = 0; - tile_data.height = 0; - tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; - tile_data.data = NULL; + tile_data.tile_num = 0; + tile_data.shadow = 0; + tile_data.bpp = 0; + tile_data.width = 0; + tile_data.height = 0; + tile_data.use_shm = (shm_ID == -1) ? FALSE : TRUE; + tile_data.data = NULL; if (!gp_tile_data_write (current_writechannel, &tile_data)) { @@ -1769,7 +1775,7 @@ static void plug_in_handle_proc_return (GPProcReturn *proc_return) { PlugInBlocked *blocked; - GSList *tmp; + GSList *tmp; if (current_plug_in->recurse) { @@ -1809,17 +1815,16 @@ plug_in_handle_proc_return (GPProcReturn *proc_return) static void plug_in_handle_proc_install (GPProcInstall *proc_install) { - PlugInDef *plug_in_def = NULL; - PlugInProcDef *proc_def; - ProcRecord *proc = NULL; + PlugInDef *plug_in_def = NULL; + PlugInProcDef *proc_def; + ProcRecord *proc = NULL; PlugInMenuEntry *menu_entry; - GSList *tmp = NULL; - gchar *prog = NULL; - gboolean add_proc_def; + GSList *tmp = NULL; + gchar *prog = NULL; + gboolean add_proc_def; gint i; - /* - * Argument checking + /* Argument checking * --only sanity check arguments when the procedure requests a menu path */ @@ -1903,9 +1908,7 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } } - /* - * Sanity check for array arguments - */ + /* Sanity check for array arguments */ for (i = 1; i < proc_install->nparams; i++) { @@ -1927,9 +1930,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) } - /* - * Initialization - */ + /* Initialization */ + proc_def = NULL; switch (proc_install->type) @@ -1988,9 +1990,8 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) proc = &proc_def->db_info; - /* - * The procedural database procedure - */ + /* The procedural database procedure */ + proc->name = g_strdup (proc_install->name); proc->blurb = g_strdup (proc_install->blurb); proc->help = g_strdup (proc_install->help); @@ -2042,9 +2043,10 @@ plug_in_handle_proc_install (GPProcInstall *proc_install) menu_entry = g_new (PlugInMenuEntry, 1); menu_entry->proc_def = proc_def; - /* Below we use a hack to allow translations of Script-Fu paths. - Would be nice if we could solve this properly, but I haven't - found a way yet ... (Sven) */ + /* Below we use a hack to allow translations of Script-Fu paths. + * Would be nice if we could solve this properly, but I haven't + * found a way yet ... (Sven) + */ if (plug_in_def && plug_in_def->locale_domain) menu_entry->domain = plug_in_def->locale_domain; else if (strncmp (proc_def->db_info.name, "script_fu", 9) == 0) @@ -2068,7 +2070,7 @@ static void plug_in_handle_proc_uninstall (GPProcUninstall *proc_uninstall) { PlugInProcDef *proc_def; - GSList *tmp; + GSList *tmp; tmp = current_plug_in->temp_proc_defs; while (tmp) @@ -2120,8 +2122,8 @@ static gboolean plug_in_flush (GIOChannel *channel) { GIOError error; - gint count; - guint bytes; + gint count; + guint bytes; if (current_write_buffer_index > 0) { @@ -2155,17 +2157,17 @@ plug_in_push (PlugIn *plug_in) current_plug_in = plug_in; plug_in_stack = g_slist_prepend (plug_in_stack, current_plug_in); - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_readchannel = NULL; - current_writechannel = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2186,19 +2188,19 @@ plug_in_pop (void) if (plug_in_stack) { - current_plug_in = plug_in_stack->data; - current_readchannel = current_plug_in->my_read; - current_writechannel = current_plug_in->my_write; + current_plug_in = plug_in_stack->data; + current_readchannel = current_plug_in->my_read; + current_writechannel = current_plug_in->my_write; current_write_buffer_index = current_plug_in->write_buffer_index; - current_write_buffer = current_plug_in->write_buffer; + current_write_buffer = current_plug_in->write_buffer; } else { - current_plug_in = NULL; - current_readchannel = NULL; - current_writechannel = NULL; + current_plug_in = NULL; + current_readchannel = NULL; + current_writechannel = NULL; current_write_buffer_index = 0; - current_write_buffer = NULL; + current_write_buffer = NULL; } } @@ -2241,10 +2243,11 @@ plug_in_write_rc_string (FILE *fp, static void plug_in_write_rc (gchar *filename) { - FILE *fp; - PlugInDef *plug_in_def; + FILE *fp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def; - GSList *tmp, *tmp2; + GSList *tmp; + GSList *tmp2; gint i; fp = fopen (filename, "w"); @@ -2354,10 +2357,10 @@ plug_in_write_rc (gchar *filename) static void plug_in_init_file (gchar *filename) { - GSList *tmp; + GSList *tmp; PlugInDef *plug_in_def; - gchar *plug_in_name; - gchar *name; + gchar *plug_in_name; + gchar *name; name = g_basename (filename); @@ -2390,15 +2393,15 @@ plug_in_init_file (gchar *filename) static void plug_in_query (PlugInDef *plug_in_def) { - PlugIn *plug_in; - WireMessage msg; + PlugIn *plug_in; + WireMessage msg; plug_in = plug_in_new (plug_in_def->prog); if (plug_in) { - plug_in->query = TRUE; + plug_in->query = TRUE; plug_in->synchronous = TRUE; - plug_in->user_data = plug_in_def; + plug_in->user_data = plug_in_def; if (plug_in_open (plug_in)) { @@ -2425,9 +2428,9 @@ static void plug_in_add_to_db (void) { PlugInProcDef *proc_def; - Argument args[4]; - Argument *return_vals; - GSList *tmp; + Argument args[4]; + Argument *return_vals; + GSList *tmp; tmp = proc_defs; @@ -2449,16 +2452,16 @@ plug_in_add_to_db (void) if (proc_def->extensions || proc_def->prefixes || proc_def->magics) { - args[0].arg_type = PDB_STRING; + args[0].arg_type = PDB_STRING; args[0].value.pdb_pointer = proc_def->db_info.name; - args[1].arg_type = PDB_STRING; + args[1].arg_type = PDB_STRING; args[1].value.pdb_pointer = proc_def->extensions; - args[2].arg_type = PDB_STRING; + args[2].arg_type = PDB_STRING; args[2].value.pdb_pointer = proc_def->prefixes; - args[3].arg_type = PDB_STRING; + args[3].arg_type = PDB_STRING; args[3].value.pdb_pointer = proc_def->magics; if (proc_def->image_types) @@ -2475,8 +2478,7 @@ plug_in_add_to_db (void) } } -/* - * The following function has to be a GTraverseFunction, +/* The following function has to be a GTraverseFunction, * but is also called directly. Please note that it frees the * menu_entry strcuture. --Sven */ @@ -2551,15 +2553,15 @@ plug_in_make_menu (void) tmp = tmp->next; procs = plug_in_def->proc_defs; - + if (!procs) continue; - + #ifdef ENABLE_NLS { - gchar *domain; - GSList *list; - gboolean found = FALSE; + gchar *domain; + GSList *list; + gboolean found = FALSE; if (plug_in_def->locale_domain) { @@ -2580,7 +2582,7 @@ plug_in_make_menu (void) } } #endif /* ENABLE_NLS */ - + while (procs) { proc_def = procs->data; @@ -2615,9 +2617,9 @@ static void plug_in_callback (GtkWidget *widget, gpointer client_data) { - GDisplay *gdisplay; + GDisplay *gdisplay; ProcRecord *proc_rec; - Argument *args; + Argument *args; gint i; gint gdisp_ID = -1; gint argc = 0; /* calm down a gcc warning. */ @@ -2625,11 +2627,10 @@ plug_in_callback (GtkWidget *widget, /* get the active gdisplay */ gdisplay = gdisplay_active (); - proc_rec = (ProcRecord*) client_data; + proc_rec = (ProcRecord *) client_data; /* construct the procedures arguments */ - args = g_new (Argument, proc_rec->num_args); - memset (args, 0, (sizeof (Argument) * proc_rec->num_args)); + args = g_new0 (Argument, proc_rec->num_args); /* initialize the argument types */ for (i = 0; i < proc_rec->num_args; i++) @@ -2706,11 +2707,12 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, void (*superceed_fn)(void*)) { PlugInProcDef *tmp_proc_def; - GSList *tmp, *prev; + GSList *tmp; + GSList *prev; GSList *list; prev = NULL; - tmp = proc_defs; + tmp = proc_defs; while (tmp) { @@ -2725,14 +2727,14 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, if (proc_def->accelerator) g_free (proc_def->accelerator); - proc_def->menu_path = tmp_proc_def->menu_path; + proc_def->menu_path = tmp_proc_def->menu_path; proc_def->accelerator = tmp_proc_def->accelerator; - tmp_proc_def->menu_path = NULL; + tmp_proc_def->menu_path = NULL; tmp_proc_def->accelerator = NULL; if (superceed_fn) - (*superceed_fn) (tmp_proc_def); + (* superceed_fn) (tmp_proc_def); plug_in_proc_def_destroy (tmp_proc_def, FALSE); return; @@ -2760,27 +2762,27 @@ plug_in_proc_def_insert (PlugInProcDef *proc_def, } /* called when plug_in_proc_def_insert causes a proc_def to be - * overridden and thus g_free()d. */ + * overridden and thus g_free()d. + */ static void plug_in_proc_def_dead (void *freed_proc_def) { - GSList *tmp; - PlugInDef *plug_in_def; + GSList *tmp; + PlugInDef *plug_in_def; PlugInProcDef *proc_def = freed_proc_def; g_warning ("removing duplicate PDB procedure \"%s\"", proc_def->db_info.name); /* search the plugin list to see if any plugins had references to - * the recently freed proc_def. */ - tmp = plug_in_defs; - while (tmp) + * the recently freed proc_def. + */ + for (tmp = plug_in_defs; tmp; tmp = g_slist_next (tmp)) { plug_in_def = tmp->data; plug_in_def->proc_defs = g_slist_remove (plug_in_def->proc_defs, freed_proc_def); - tmp = tmp->next; } } @@ -2864,10 +2866,10 @@ plug_in_temp_run (ProcRecord *proc_rec, Argument *args, gint argc) { - Argument *return_vals; - PlugIn *plug_in; - GPProcRun proc_run; - gint old_recurse; + Argument *return_vals; + PlugIn *plug_in; + GPProcRun proc_run; + gint old_recurse; return_vals = NULL; @@ -2884,9 +2886,9 @@ plug_in_temp_run (ProcRecord *proc_rec, plug_in->busy = TRUE; plug_in_push (plug_in); - proc_run.name = proc_rec->name; + proc_run.name = proc_rec->name; proc_run.nparams = argc; - proc_run.params = plug_in_args_to_params (args, argc, FALSE); + proc_run.params = plug_in_args_to_params (args, argc, FALSE); if (!gp_temp_proc_run_write (current_writechannel, &proc_run) || !wire_flush (current_writechannel)) @@ -2919,9 +2921,9 @@ plug_in_params_to_args (GPParam *params, gint nparams, gboolean full_copy) { - Argument *args; - gchar **stringarray; - guchar *colorarray; + Argument *args; + gchar **stringarray; + guchar *colorarray; gint count; gint i, j; @@ -3018,7 +3020,7 @@ plug_in_params_to_args (GPParam *params, break; case PDB_COLOR: args[i].value.pdb_pointer = g_new (guchar, 3); - colorarray = args[i].value.pdb_pointer; + colorarray = args[i].value.pdb_pointer; colorarray[0] = params[i].data.d_color.red; colorarray[1] = params[i].data.d_color.green; colorarray[2] = params[i].data.d_color.blue; @@ -3070,12 +3072,12 @@ plug_in_params_to_args (GPParam *params, static GPParam* plug_in_args_to_params (Argument *args, - gint nargs, - gboolean full_copy) + gint nargs, + gboolean full_copy) { - GPParam *params; - gchar **stringarray; - guchar *colorarray; + GPParam *params; + gchar **stringarray; + guchar *colorarray; gint i, j; if (nargs == 0) @@ -3177,15 +3179,15 @@ plug_in_args_to_params (Argument *args, colorarray = args[i].value.pdb_pointer; if( colorarray ) { - params[i].data.d_color.red = colorarray[0]; + params[i].data.d_color.red = colorarray[0]; params[i].data.d_color.green = colorarray[1]; - params[i].data.d_color.blue = colorarray[2]; + params[i].data.d_color.blue = colorarray[2]; } else { - params[i].data.d_color.red = 0; + params[i].data.d_color.red = 0; params[i].data.d_color.green = 0; - params[i].data.d_color.blue = 0; + params[i].data.d_color.blue = 0; } break; case PDB_REGION: @@ -3219,13 +3221,14 @@ plug_in_args_to_params (Argument *args, if (full_copy) { GimpParasite *tmp; + tmp = gimp_parasite_copy (args[i].value.pdb_pointer); if (tmp == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else { @@ -3238,10 +3241,10 @@ plug_in_args_to_params (Argument *args, { if (args[i].value.pdb_pointer == NULL) { - params[i].data.d_parasite.name = 0; + params[i].data.d_parasite.name = 0; params[i].data.d_parasite.flags = 0; - params[i].data.d_parasite.size = 0; - params[i].data.d_parasite.data = 0; + params[i].data.d_parasite.size = 0; + params[i].data.d_parasite.data = 0; } else memcpy (¶ms[i].data.d_parasite, @@ -3344,8 +3347,8 @@ plug_in_args_destroy (Argument *args, gboolean full_destroy) { gchar **stringarray; - gint count; - gint i, j; + gint count; + gint i, j; for (i = 0; i < nargs; i++) { diff --git a/gimp-1.2.1.in b/gimp-1.2.1.in index 975b5d815c..dd7648e032 100644 --- a/gimp-1.2.1.in +++ b/gimp-1.2.1.in @@ -87,6 +87,9 @@ Enable debugging signal handlers. Do not popup dialog boxes on errors or warnings. Print the messages on the console instead. .TP 8 +.B \-\-enable\-stack\-trace \fI{never|query|always}\fP +If a stack-trace should be generated in case of fatal signals. +.TP 8 .B \-\-system\-gimprc \fI\fP Use an alternate system gimprc file. @@ -277,7 +280,6 @@ Tom Bech, Marc Bless, Edward Blevins, Reagan Blundell, -Andreas Bogk, Xavier Bouchoux, Roberto Boyd, Stanislav Brabec, @@ -337,7 +339,6 @@ Andrew Kieschnick, Peter Kirchgessner, Philipp Klaus, David Koblas, -Vincent Kolwitz, Tuomas Kuosmanen, Karin Kylander, Olof S Kylander, diff --git a/gimp.1.in b/gimp.1.in index 975b5d815c..dd7648e032 100644 --- a/gimp.1.in +++ b/gimp.1.in @@ -87,6 +87,9 @@ Enable debugging signal handlers. Do not popup dialog boxes on errors or warnings. Print the messages on the console instead. .TP 8 +.B \-\-enable\-stack\-trace \fI{never|query|always}\fP +If a stack-trace should be generated in case of fatal signals. +.TP 8 .B \-\-system\-gimprc \fI\fP Use an alternate system gimprc file. @@ -277,7 +280,6 @@ Tom Bech, Marc Bless, Edward Blevins, Reagan Blundell, -Andreas Bogk, Xavier Bouchoux, Roberto Boyd, Stanislav Brabec, @@ -337,7 +339,6 @@ Andrew Kieschnick, Peter Kirchgessner, Philipp Klaus, David Koblas, -Vincent Kolwitz, Tuomas Kuosmanen, Karin Kylander, Olof S Kylander, diff --git a/libgimp/gimp.c b/libgimp/gimp.c index 0500b4236f..a2f14e3f63 100644 --- a/libgimp/gimp.c +++ b/libgimp/gimp.c @@ -139,6 +139,8 @@ static gchar *progname = NULL; static guint8 write_buffer[WRITE_BUFFER_SIZE]; static guint write_buffer_index = 0; +static GimpStackTraceMode stack_trace_mode = GIMP_STACK_TRACE_NEVER; + static GHashTable *temp_proc_ht = NULL; #ifdef G_OS_WIN32 @@ -208,9 +210,9 @@ gimp_main (int argc, } #endif - if ((argc < 4) || (strcmp (argv[1], "-gimp") != 0)) + if ((argc != 6) || (strcmp (argv[1], "-gimp") != 0)) { - g_print ("%s is a gimp plug-in and must be run by the gimp to be used\n", argv[0]); + g_printerr ("%s is a gimp plug-in and must be run by the gimp to be used\n", argv[0]); return 1; } @@ -240,26 +242,27 @@ gimp_main (int argc, #endif #ifndef G_OS_WIN32 - _readchannel = g_io_channel_unix_new (atoi (argv[2])); + _readchannel = g_io_channel_unix_new (atoi (argv[2])); _writechannel = g_io_channel_unix_new (atoi (argv[3])); #ifdef __EMX__ - setmode(g_io_channel_unix_get_fd(_readchannel), O_BINARY); - setmode(g_io_channel_unix_get_fd(_writechannel), O_BINARY); + setmode (g_io_channel_unix_get_fd (_readchannel), O_BINARY); + setmode (g_io_channel_unix_get_fd (_writechannel), O_BINARY); #endif #else g_assert (PLUG_IN_INFO_PTR != NULL); _readchannel = g_io_channel_win32_new_pipe (atoi (argv[2])); peer = strchr (argv[3], ':') + 1; peer_fd = strchr (peer, ':') + 1; - _writechannel = g_io_channel_win32_new_pipe_with_wakeups - (atoi (argv[3]), atoi (peer), atoi (peer_fd)); + _writechannel = g_io_channel_win32_new_pipe_with_wakeups (atoi (argv[3]), + atoi (peer), + atoi (peer_fd)); #endif gp_init (); wire_set_writer (gimp_write); wire_set_flusher (gimp_flush); - if ((argc == 5) && (strcmp (argv[4], "-query") == 0)) + if (strcmp (argv[4], "-query") == 0) { if (PLUG_IN_INFO.query_proc) (* PLUG_IN_INFO.query_proc) (); @@ -267,6 +270,10 @@ gimp_main (int argc, return 0; } + stack_trace_mode = (GimpStackTraceMode) CLAMP (atoi (argv[5]), + GIMP_STACK_TRACE_NEVER, + GIMP_STACK_TRACE_ALWAYS); + #ifdef G_OS_WIN32 /* Tell the GIMP our thread id */ thread = GetCurrentThreadId (); @@ -872,7 +879,7 @@ gimp_plugin_sigfatal_handler (gint sig_num) case SIGQUIT: case SIGABRT: case SIGTERM: - g_print ("%s terminated: %s\n", progname, g_strsignal (sig_num)); + g_printerr ("%s terminated: %s\n", progname, g_strsignal (sig_num)); break; case SIGBUS: @@ -880,14 +887,31 @@ gimp_plugin_sigfatal_handler (gint sig_num) case SIGFPE: case SIGPIPE: default: - g_print ("%s: fatal error: %s\n", progname, g_strsignal (sig_num)); - if (TRUE) + g_printerr ("%s: fatal error: %s\n", progname, g_strsignal (sig_num)); + switch (stack_trace_mode) { - sigset_t sigset; + case GIMP_STACK_TRACE_NEVER: + break; - sigemptyset (&sigset); - sigprocmask (SIG_SETMASK, &sigset, NULL); - g_on_error_query (progname); + case GIMP_STACK_TRACE_QUERY: + { + sigset_t sigset; + + sigemptyset (&sigset); + sigprocmask (SIG_SETMASK, &sigset, NULL); + g_on_error_query (progname); + } + break; + + case GIMP_STACK_TRACE_ALWAYS: + { + sigset_t sigset; + + sigemptyset (&sigset); + sigprocmask (SIG_SETMASK, &sigset, NULL); + g_on_error_stack_trace (progname); + } + break; } break; } @@ -916,7 +940,7 @@ gimp_plugin_io_error_handler (GIOChannel *channel, GIOCondition cond, gpointer data) { - g_print ("%s: fatal error: GIMP crashed\n", progname); + g_printerr ("%s: fatal error: GIMP crashed\n", progname); gimp_quit (); /* never reached */ diff --git a/libgimp/gimpenums.h b/libgimp/gimpenums.h index aaaf3ac8bd..a956344073 100644 --- a/libgimp/gimpenums.h +++ b/libgimp/gimpenums.h @@ -325,6 +325,13 @@ typedef enum GIMP_POINTS } GimpSizeType; +typedef enum +{ + GIMP_STACK_TRACE_NEVER, + GIMP_STACK_TRACE_QUERY, + GIMP_STACK_TRACE_ALWAYS +} GimpStackTraceMode; + typedef enum { GIMP_SHADOWS, diff --git a/plug-ins/common/plugin-browser.c b/plug-ins/common/plugin-browser.c index 68e3eb1c10..d1f161c668 100644 --- a/plug-ins/common/plugin-browser.c +++ b/plug-ins/common/plugin-browser.c @@ -5,7 +5,7 @@ * * Copyright (C) 1999 Andy Thomas alt@picnic.demon.co.uk * - * Note some portions of th UI comes from the dbbrowser plugin. + * Note some portions of the UI comes from the dbbrowser plugin. * 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 @@ -52,11 +52,11 @@ static gchar *proc_type_str[] = /* Declare some local functions. */ static void query (void); -static void run (gchar *name, - gint nparams, - GParam *param, - gint *nreturn_vals, - GParam **return_vals); +static void run (gchar *name, + gint nparams, + GimpParam *param, + gint *nreturn_vals, + GimpParam **return_vals); static GtkWidget * gimp_plugin_desc (void); @@ -70,7 +70,7 @@ static gint procedure_ctree_select_callback (GtkWidget *widget, gint column, gpointer data); -GPlugInInfo PLUG_IN_INFO = +GimpPlugInInfo PLUG_IN_INFO = { NULL, /* init_proc */ NULL, /* quit_proc */ @@ -84,15 +84,20 @@ MAIN () static void query (void) { - static GParamDef args[] = + static GimpParamDef args[] = { - { PARAM_INT32, "run_mode", "Interactive, [non-interactive]" } + { GIMP_PDB_INT32, "run_mode", "Interactive, [non-interactive]" } }; static gint nargs = sizeof (args) / sizeof (args[0]); gimp_install_procedure ("plug_in_details", "Displays plugin details", - "Helps browse the plugin menus system. You can search for plugin names, sort by name or menu location and you can view a tree representation of the plugin menus. Can also be of help to find where new plugins have installed themselves in the menuing system", + "Helps browse the plugin menus system. You can " + "search for plugin names, sort by name or menu " + "location and you can view a tree representation " + "of the plugin menus. Can also be of help to find " + "where new plugins have installed themselves in " + "the menuing system", "Andy Thomas", "Andy Thomas", "1999", @@ -104,22 +109,22 @@ query (void) } static void -run (gchar *name, - gint nparams, - GParam *param, - gint *nreturn_vals, - GParam **return_vals) +run (gchar *name, + gint nparams, + GimpParam *param, + gint *nreturn_vals, + GimpParam **return_vals) { - static GParam values[2]; - GRunModeType run_mode; - GtkWidget *plugin_dialog; + static GimpParam values[2]; + GimpRunModeType run_mode; + GtkWidget *plugin_dialog; run_mode = param[0].data.d_int32; *nreturn_vals = 1; *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + values[0].type = GIMP_PDB_STATUS; + values[0].data.d_status = GIMP_PDB_CALLING_ERROR; INIT_I18N_UI(); @@ -127,7 +132,7 @@ run (gchar *name, { *nreturn_vals = 1; - values[0].data.d_status = STATUS_SUCCESS; + values[0].data.d_status = GIMP_PDB_SUCCESS; plugin_dialog = gimp_plugin_desc (); @@ -233,13 +238,13 @@ details_callback (GtkWidget *widget, static gchar * format_menu_path (gchar *s) { - gchar ** str_array; - gchar *newstr = NULL; + gchar **str_array; + gchar *newstr = NULL; if (!s) return s; - str_array = g_strsplit (s,"/",0); + str_array = g_strsplit (s, "/", 0); newstr = g_strjoinv ("->", str_array); @@ -277,16 +282,16 @@ procedure_general_select_callback (PDesc *pdesc, if (pdesc->descr_scroll == NULL) return FALSE; - selected_proc_blurb = NULL; - selected_proc_help = NULL; - selected_proc_author = NULL; + selected_proc_blurb = NULL; + selected_proc_help = NULL; + selected_proc_author = NULL; selected_proc_copyright = NULL; - selected_proc_date = NULL; - selected_proc_type = 0; - selected_nparams = 0; - selected_nreturn_vals = 0; - selected_params = NULL; - selected_return_vals = NULL; + selected_proc_date = NULL; + selected_proc_type = 0; + selected_nparams = 0; + selected_nreturn_vals = 0; + selected_params = NULL; + selected_return_vals = NULL; gimp_query_procedure (pinfo->realname, &selected_proc_blurb, @@ -486,7 +491,7 @@ procedure_general_select_callback (PDesc *pdesc, g_free (selected_params); if (selected_return_vals) g_free (selected_return_vals); - + return FALSE; } @@ -544,7 +549,8 @@ procedure_clist_select_callback (GtkWidget *widget, gtk_widget_show (pdesc->ctree); gtk_signal_handler_block_by_func (GTK_OBJECT(pdesc->ctree), - (GtkSignalFunc)procedure_ctree_select_callback, pdesc); + GTK_SIGNAL_FUNC (procedure_ctree_select_callback), + pdesc); gtk_clist_select_row (GTK_CLIST (pdesc->ctree), sel_row, -1); gtk_ctree_select (GTK_CTREE (pdesc->ctree), found_node); @@ -555,7 +561,8 @@ procedure_clist_select_callback (GtkWidget *widget, 0.5, 0.5); gtk_signal_handler_unblock_by_func (GTK_OBJECT (pdesc->ctree), - (GtkSignalFunc)procedure_ctree_select_callback, pdesc); + GTK_SIGNAL_FUNC (procedure_ctree_select_callback), + pdesc); pdesc->ctree_row = sel_row; } @@ -640,7 +647,8 @@ procedure_ctree_select_callback (GtkWidget *widget, /* Block signals */ gtk_signal_handler_block_by_func (GTK_OBJECT (pdesc->clist), - (GtkSignalFunc)procedure_clist_select_callback, pdesc); + GTK_SIGNAL_FUNC (procedure_clist_select_callback), + pdesc); sel_row = gtk_clist_find_row_from_data (GTK_CLIST (pdesc->clist), pinfo); gtk_clist_select_row (GTK_CLIST (pdesc->clist), sel_row, -1); @@ -650,7 +658,8 @@ procedure_ctree_select_callback (GtkWidget *widget, 0.5, 0.5); gtk_signal_handler_unblock_by_func (GTK_OBJECT (pdesc->clist), - (GtkSignalFunc)procedure_clist_select_callback, pdesc); + GTK_SIGNAL_FUNC (procedure_clist_select_callback), + pdesc); pdesc->clist_row = sel_row; @@ -670,7 +679,7 @@ pinfo_free (gpointer p) g_free (pinfo); } -static GtkCTreeNode* +static GtkCTreeNode * get_parent (PDesc *pdesc, GHashTable *ghash, gchar *mpath) @@ -820,12 +829,12 @@ get_plugin_info (PDesc *pdesc, { int loop; pdesc->num_plugins = return_vals[1].data.d_int32; - menu_strs = return_vals[2].data.d_stringarray; - accel_strs = return_vals[4].data.d_stringarray; - prog_strs = return_vals[6].data.d_stringarray; - types_strs = return_vals[8].data.d_stringarray; - time_ints = return_vals[10].data.d_int32array; - realname_strs = return_vals[12].data.d_stringarray; + menu_strs = return_vals[2].data.d_stringarray; + accel_strs = return_vals[4].data.d_stringarray; + prog_strs = return_vals[6].data.d_stringarray; + types_strs = return_vals[8].data.d_stringarray; + time_ints = return_vals[10].data.d_int32array; + realname_strs = return_vals[12].data.d_stringarray; for (loop = 0; loop < return_vals[1].data.d_int32; loop++) { @@ -856,11 +865,11 @@ get_plugin_info (PDesc *pdesc, else strcpy (xtimestr,""); - pinfo->menu = g_strdup (menu_strs[loop]); - pinfo->accel = g_strdup (accel_strs[loop]); - pinfo->prog = g_strdup (prog_strs[loop]); - pinfo->types = g_strdup (types_strs[loop]); - pinfo->instime = time_ints[loop]; + pinfo->menu = g_strdup (menu_strs[loop]); + pinfo->accel = g_strdup (accel_strs[loop]); + pinfo->prog = g_strdup (prog_strs[loop]); + pinfo->types = g_strdup (types_strs[loop]); + pinfo->instime = time_ints[loop]; pinfo->realname = g_strdup (realname_strs[loop]); labels[0] = g_strdup (name); @@ -1035,7 +1044,8 @@ gimp_plugin_desc (void) plugindesc->clist = gtk_clist_new_with_titles (4, clabels); gtk_signal_connect (GTK_OBJECT (plugindesc->clist), "click_column", - (GtkSignalFunc) clist_click_column, NULL); + GTK_SIGNAL_FUNC (clist_click_column), + NULL); gtk_clist_column_titles_show (GTK_CLIST (plugindesc->clist)); swindow = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow), @@ -1045,7 +1055,7 @@ gimp_plugin_desc (void) gtk_widget_set_usize (plugindesc->clist, DBL_LIST_WIDTH, DBL_HEIGHT); gtk_signal_connect (GTK_OBJECT (plugindesc->clist), "select_row", - (GtkSignalFunc) procedure_clist_select_callback, + GTK_SIGNAL_FUNC (procedure_clist_select_callback), plugindesc); label = gtk_label_new (_("List View")); @@ -1063,21 +1073,24 @@ gimp_plugin_desc (void) swindow = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_widget_set_usize(plugindesc->ctree, DBL_LIST_WIDTH, DBL_HEIGHT); + gtk_widget_set_usize (plugindesc->ctree, DBL_LIST_WIDTH, DBL_HEIGHT); gtk_signal_connect (GTK_OBJECT (plugindesc->ctree), "tree_select_row", - (GtkSignalFunc) procedure_ctree_select_callback, + GTK_SIGNAL_FUNC (procedure_ctree_select_callback), plugindesc); - label = gtk_label_new (_("Tree View")); gtk_clist_set_column_auto_resize (GTK_CLIST (plugindesc->ctree), 0, TRUE); gtk_clist_set_column_auto_resize (GTK_CLIST (plugindesc->ctree), 1, TRUE); gtk_clist_set_column_auto_resize (GTK_CLIST (plugindesc->ctree), 2, TRUE); + gtk_clist_column_titles_passive (GTK_CLIST (plugindesc->ctree)); + + label = gtk_label_new (_("Tree View")); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), swindow, label); gtk_container_add (GTK_CONTAINER (swindow), plugindesc->ctree); + gtk_widget_show (plugindesc->ctree); gtk_widget_show (swindow); gtk_signal_connect_after (GTK_OBJECT (notebook), "switch_page", - (GtkSignalFunc) page_select_callback, + GTK_SIGNAL_FUNC (page_select_callback), plugindesc); gtk_widget_show (notebook); @@ -1102,11 +1115,12 @@ gimp_plugin_desc (void) button = gtk_button_new_with_label (_("Details >>")); gtk_misc_set_padding (GTK_MISC (GTK_BIN (button)->child), 2, 0); - gtk_widget_show (button); gtk_signal_connect (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) details_callback, plugindesc); - gtk_box_pack_start (GTK_BOX (searchhbox), - button, FALSE, FALSE, 0); + GTK_SIGNAL_FUNC (details_callback), + plugindesc); + gtk_box_pack_start (GTK_BOX (searchhbox), button, + FALSE, FALSE, 0); + gtk_widget_show (button); /* right = description */ /* the right description is build on first click of the Details button */ @@ -1114,6 +1128,9 @@ gimp_plugin_desc (void) /* now build the list */ dialog_search_callback (NULL, (gpointer) plugindesc); + gtk_clist_set_selection_mode (GTK_CLIST (plugindesc->ctree), + GTK_SELECTION_BROWSE); + gtk_widget_show (plugindesc->clist); gtk_widget_show (plugindesc->dlg); diff --git a/plug-ins/common/plugindetails.c b/plug-ins/common/plugindetails.c index 68e3eb1c10..d1f161c668 100644 --- a/plug-ins/common/plugindetails.c +++ b/plug-ins/common/plugindetails.c @@ -5,7 +5,7 @@ * * Copyright (C) 1999 Andy Thomas alt@picnic.demon.co.uk * - * Note some portions of th UI comes from the dbbrowser plugin. + * Note some portions of the UI comes from the dbbrowser plugin. * 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 @@ -52,11 +52,11 @@ static gchar *proc_type_str[] = /* Declare some local functions. */ static void query (void); -static void run (gchar *name, - gint nparams, - GParam *param, - gint *nreturn_vals, - GParam **return_vals); +static void run (gchar *name, + gint nparams, + GimpParam *param, + gint *nreturn_vals, + GimpParam **return_vals); static GtkWidget * gimp_plugin_desc (void); @@ -70,7 +70,7 @@ static gint procedure_ctree_select_callback (GtkWidget *widget, gint column, gpointer data); -GPlugInInfo PLUG_IN_INFO = +GimpPlugInInfo PLUG_IN_INFO = { NULL, /* init_proc */ NULL, /* quit_proc */ @@ -84,15 +84,20 @@ MAIN () static void query (void) { - static GParamDef args[] = + static GimpParamDef args[] = { - { PARAM_INT32, "run_mode", "Interactive, [non-interactive]" } + { GIMP_PDB_INT32, "run_mode", "Interactive, [non-interactive]" } }; static gint nargs = sizeof (args) / sizeof (args[0]); gimp_install_procedure ("plug_in_details", "Displays plugin details", - "Helps browse the plugin menus system. You can search for plugin names, sort by name or menu location and you can view a tree representation of the plugin menus. Can also be of help to find where new plugins have installed themselves in the menuing system", + "Helps browse the plugin menus system. You can " + "search for plugin names, sort by name or menu " + "location and you can view a tree representation " + "of the plugin menus. Can also be of help to find " + "where new plugins have installed themselves in " + "the menuing system", "Andy Thomas", "Andy Thomas", "1999", @@ -104,22 +109,22 @@ query (void) } static void -run (gchar *name, - gint nparams, - GParam *param, - gint *nreturn_vals, - GParam **return_vals) +run (gchar *name, + gint nparams, + GimpParam *param, + gint *nreturn_vals, + GimpParam **return_vals) { - static GParam values[2]; - GRunModeType run_mode; - GtkWidget *plugin_dialog; + static GimpParam values[2]; + GimpRunModeType run_mode; + GtkWidget *plugin_dialog; run_mode = param[0].data.d_int32; *nreturn_vals = 1; *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + values[0].type = GIMP_PDB_STATUS; + values[0].data.d_status = GIMP_PDB_CALLING_ERROR; INIT_I18N_UI(); @@ -127,7 +132,7 @@ run (gchar *name, { *nreturn_vals = 1; - values[0].data.d_status = STATUS_SUCCESS; + values[0].data.d_status = GIMP_PDB_SUCCESS; plugin_dialog = gimp_plugin_desc (); @@ -233,13 +238,13 @@ details_callback (GtkWidget *widget, static gchar * format_menu_path (gchar *s) { - gchar ** str_array; - gchar *newstr = NULL; + gchar **str_array; + gchar *newstr = NULL; if (!s) return s; - str_array = g_strsplit (s,"/",0); + str_array = g_strsplit (s, "/", 0); newstr = g_strjoinv ("->", str_array); @@ -277,16 +282,16 @@ procedure_general_select_callback (PDesc *pdesc, if (pdesc->descr_scroll == NULL) return FALSE; - selected_proc_blurb = NULL; - selected_proc_help = NULL; - selected_proc_author = NULL; + selected_proc_blurb = NULL; + selected_proc_help = NULL; + selected_proc_author = NULL; selected_proc_copyright = NULL; - selected_proc_date = NULL; - selected_proc_type = 0; - selected_nparams = 0; - selected_nreturn_vals = 0; - selected_params = NULL; - selected_return_vals = NULL; + selected_proc_date = NULL; + selected_proc_type = 0; + selected_nparams = 0; + selected_nreturn_vals = 0; + selected_params = NULL; + selected_return_vals = NULL; gimp_query_procedure (pinfo->realname, &selected_proc_blurb, @@ -486,7 +491,7 @@ procedure_general_select_callback (PDesc *pdesc, g_free (selected_params); if (selected_return_vals) g_free (selected_return_vals); - + return FALSE; } @@ -544,7 +549,8 @@ procedure_clist_select_callback (GtkWidget *widget, gtk_widget_show (pdesc->ctree); gtk_signal_handler_block_by_func (GTK_OBJECT(pdesc->ctree), - (GtkSignalFunc)procedure_ctree_select_callback, pdesc); + GTK_SIGNAL_FUNC (procedure_ctree_select_callback), + pdesc); gtk_clist_select_row (GTK_CLIST (pdesc->ctree), sel_row, -1); gtk_ctree_select (GTK_CTREE (pdesc->ctree), found_node); @@ -555,7 +561,8 @@ procedure_clist_select_callback (GtkWidget *widget, 0.5, 0.5); gtk_signal_handler_unblock_by_func (GTK_OBJECT (pdesc->ctree), - (GtkSignalFunc)procedure_ctree_select_callback, pdesc); + GTK_SIGNAL_FUNC (procedure_ctree_select_callback), + pdesc); pdesc->ctree_row = sel_row; } @@ -640,7 +647,8 @@ procedure_ctree_select_callback (GtkWidget *widget, /* Block signals */ gtk_signal_handler_block_by_func (GTK_OBJECT (pdesc->clist), - (GtkSignalFunc)procedure_clist_select_callback, pdesc); + GTK_SIGNAL_FUNC (procedure_clist_select_callback), + pdesc); sel_row = gtk_clist_find_row_from_data (GTK_CLIST (pdesc->clist), pinfo); gtk_clist_select_row (GTK_CLIST (pdesc->clist), sel_row, -1); @@ -650,7 +658,8 @@ procedure_ctree_select_callback (GtkWidget *widget, 0.5, 0.5); gtk_signal_handler_unblock_by_func (GTK_OBJECT (pdesc->clist), - (GtkSignalFunc)procedure_clist_select_callback, pdesc); + GTK_SIGNAL_FUNC (procedure_clist_select_callback), + pdesc); pdesc->clist_row = sel_row; @@ -670,7 +679,7 @@ pinfo_free (gpointer p) g_free (pinfo); } -static GtkCTreeNode* +static GtkCTreeNode * get_parent (PDesc *pdesc, GHashTable *ghash, gchar *mpath) @@ -820,12 +829,12 @@ get_plugin_info (PDesc *pdesc, { int loop; pdesc->num_plugins = return_vals[1].data.d_int32; - menu_strs = return_vals[2].data.d_stringarray; - accel_strs = return_vals[4].data.d_stringarray; - prog_strs = return_vals[6].data.d_stringarray; - types_strs = return_vals[8].data.d_stringarray; - time_ints = return_vals[10].data.d_int32array; - realname_strs = return_vals[12].data.d_stringarray; + menu_strs = return_vals[2].data.d_stringarray; + accel_strs = return_vals[4].data.d_stringarray; + prog_strs = return_vals[6].data.d_stringarray; + types_strs = return_vals[8].data.d_stringarray; + time_ints = return_vals[10].data.d_int32array; + realname_strs = return_vals[12].data.d_stringarray; for (loop = 0; loop < return_vals[1].data.d_int32; loop++) { @@ -856,11 +865,11 @@ get_plugin_info (PDesc *pdesc, else strcpy (xtimestr,""); - pinfo->menu = g_strdup (menu_strs[loop]); - pinfo->accel = g_strdup (accel_strs[loop]); - pinfo->prog = g_strdup (prog_strs[loop]); - pinfo->types = g_strdup (types_strs[loop]); - pinfo->instime = time_ints[loop]; + pinfo->menu = g_strdup (menu_strs[loop]); + pinfo->accel = g_strdup (accel_strs[loop]); + pinfo->prog = g_strdup (prog_strs[loop]); + pinfo->types = g_strdup (types_strs[loop]); + pinfo->instime = time_ints[loop]; pinfo->realname = g_strdup (realname_strs[loop]); labels[0] = g_strdup (name); @@ -1035,7 +1044,8 @@ gimp_plugin_desc (void) plugindesc->clist = gtk_clist_new_with_titles (4, clabels); gtk_signal_connect (GTK_OBJECT (plugindesc->clist), "click_column", - (GtkSignalFunc) clist_click_column, NULL); + GTK_SIGNAL_FUNC (clist_click_column), + NULL); gtk_clist_column_titles_show (GTK_CLIST (plugindesc->clist)); swindow = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow), @@ -1045,7 +1055,7 @@ gimp_plugin_desc (void) gtk_widget_set_usize (plugindesc->clist, DBL_LIST_WIDTH, DBL_HEIGHT); gtk_signal_connect (GTK_OBJECT (plugindesc->clist), "select_row", - (GtkSignalFunc) procedure_clist_select_callback, + GTK_SIGNAL_FUNC (procedure_clist_select_callback), plugindesc); label = gtk_label_new (_("List View")); @@ -1063,21 +1073,24 @@ gimp_plugin_desc (void) swindow = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_widget_set_usize(plugindesc->ctree, DBL_LIST_WIDTH, DBL_HEIGHT); + gtk_widget_set_usize (plugindesc->ctree, DBL_LIST_WIDTH, DBL_HEIGHT); gtk_signal_connect (GTK_OBJECT (plugindesc->ctree), "tree_select_row", - (GtkSignalFunc) procedure_ctree_select_callback, + GTK_SIGNAL_FUNC (procedure_ctree_select_callback), plugindesc); - label = gtk_label_new (_("Tree View")); gtk_clist_set_column_auto_resize (GTK_CLIST (plugindesc->ctree), 0, TRUE); gtk_clist_set_column_auto_resize (GTK_CLIST (plugindesc->ctree), 1, TRUE); gtk_clist_set_column_auto_resize (GTK_CLIST (plugindesc->ctree), 2, TRUE); + gtk_clist_column_titles_passive (GTK_CLIST (plugindesc->ctree)); + + label = gtk_label_new (_("Tree View")); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), swindow, label); gtk_container_add (GTK_CONTAINER (swindow), plugindesc->ctree); + gtk_widget_show (plugindesc->ctree); gtk_widget_show (swindow); gtk_signal_connect_after (GTK_OBJECT (notebook), "switch_page", - (GtkSignalFunc) page_select_callback, + GTK_SIGNAL_FUNC (page_select_callback), plugindesc); gtk_widget_show (notebook); @@ -1102,11 +1115,12 @@ gimp_plugin_desc (void) button = gtk_button_new_with_label (_("Details >>")); gtk_misc_set_padding (GTK_MISC (GTK_BIN (button)->child), 2, 0); - gtk_widget_show (button); gtk_signal_connect (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) details_callback, plugindesc); - gtk_box_pack_start (GTK_BOX (searchhbox), - button, FALSE, FALSE, 0); + GTK_SIGNAL_FUNC (details_callback), + plugindesc); + gtk_box_pack_start (GTK_BOX (searchhbox), button, + FALSE, FALSE, 0); + gtk_widget_show (button); /* right = description */ /* the right description is build on first click of the Details button */ @@ -1114,6 +1128,9 @@ gimp_plugin_desc (void) /* now build the list */ dialog_search_callback (NULL, (gpointer) plugindesc); + gtk_clist_set_selection_mode (GTK_CLIST (plugindesc->ctree), + GTK_SELECTION_BROWSE); + gtk_widget_show (plugindesc->clist); gtk_widget_show (plugindesc->dlg); diff --git a/plug-ins/dbbrowser/plugin-browser.c b/plug-ins/dbbrowser/plugin-browser.c index 68e3eb1c10..d1f161c668 100644 --- a/plug-ins/dbbrowser/plugin-browser.c +++ b/plug-ins/dbbrowser/plugin-browser.c @@ -5,7 +5,7 @@ * * Copyright (C) 1999 Andy Thomas alt@picnic.demon.co.uk * - * Note some portions of th UI comes from the dbbrowser plugin. + * Note some portions of the UI comes from the dbbrowser plugin. * 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 @@ -52,11 +52,11 @@ static gchar *proc_type_str[] = /* Declare some local functions. */ static void query (void); -static void run (gchar *name, - gint nparams, - GParam *param, - gint *nreturn_vals, - GParam **return_vals); +static void run (gchar *name, + gint nparams, + GimpParam *param, + gint *nreturn_vals, + GimpParam **return_vals); static GtkWidget * gimp_plugin_desc (void); @@ -70,7 +70,7 @@ static gint procedure_ctree_select_callback (GtkWidget *widget, gint column, gpointer data); -GPlugInInfo PLUG_IN_INFO = +GimpPlugInInfo PLUG_IN_INFO = { NULL, /* init_proc */ NULL, /* quit_proc */ @@ -84,15 +84,20 @@ MAIN () static void query (void) { - static GParamDef args[] = + static GimpParamDef args[] = { - { PARAM_INT32, "run_mode", "Interactive, [non-interactive]" } + { GIMP_PDB_INT32, "run_mode", "Interactive, [non-interactive]" } }; static gint nargs = sizeof (args) / sizeof (args[0]); gimp_install_procedure ("plug_in_details", "Displays plugin details", - "Helps browse the plugin menus system. You can search for plugin names, sort by name or menu location and you can view a tree representation of the plugin menus. Can also be of help to find where new plugins have installed themselves in the menuing system", + "Helps browse the plugin menus system. You can " + "search for plugin names, sort by name or menu " + "location and you can view a tree representation " + "of the plugin menus. Can also be of help to find " + "where new plugins have installed themselves in " + "the menuing system", "Andy Thomas", "Andy Thomas", "1999", @@ -104,22 +109,22 @@ query (void) } static void -run (gchar *name, - gint nparams, - GParam *param, - gint *nreturn_vals, - GParam **return_vals) +run (gchar *name, + gint nparams, + GimpParam *param, + gint *nreturn_vals, + GimpParam **return_vals) { - static GParam values[2]; - GRunModeType run_mode; - GtkWidget *plugin_dialog; + static GimpParam values[2]; + GimpRunModeType run_mode; + GtkWidget *plugin_dialog; run_mode = param[0].data.d_int32; *nreturn_vals = 1; *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + values[0].type = GIMP_PDB_STATUS; + values[0].data.d_status = GIMP_PDB_CALLING_ERROR; INIT_I18N_UI(); @@ -127,7 +132,7 @@ run (gchar *name, { *nreturn_vals = 1; - values[0].data.d_status = STATUS_SUCCESS; + values[0].data.d_status = GIMP_PDB_SUCCESS; plugin_dialog = gimp_plugin_desc (); @@ -233,13 +238,13 @@ details_callback (GtkWidget *widget, static gchar * format_menu_path (gchar *s) { - gchar ** str_array; - gchar *newstr = NULL; + gchar **str_array; + gchar *newstr = NULL; if (!s) return s; - str_array = g_strsplit (s,"/",0); + str_array = g_strsplit (s, "/", 0); newstr = g_strjoinv ("->", str_array); @@ -277,16 +282,16 @@ procedure_general_select_callback (PDesc *pdesc, if (pdesc->descr_scroll == NULL) return FALSE; - selected_proc_blurb = NULL; - selected_proc_help = NULL; - selected_proc_author = NULL; + selected_proc_blurb = NULL; + selected_proc_help = NULL; + selected_proc_author = NULL; selected_proc_copyright = NULL; - selected_proc_date = NULL; - selected_proc_type = 0; - selected_nparams = 0; - selected_nreturn_vals = 0; - selected_params = NULL; - selected_return_vals = NULL; + selected_proc_date = NULL; + selected_proc_type = 0; + selected_nparams = 0; + selected_nreturn_vals = 0; + selected_params = NULL; + selected_return_vals = NULL; gimp_query_procedure (pinfo->realname, &selected_proc_blurb, @@ -486,7 +491,7 @@ procedure_general_select_callback (PDesc *pdesc, g_free (selected_params); if (selected_return_vals) g_free (selected_return_vals); - + return FALSE; } @@ -544,7 +549,8 @@ procedure_clist_select_callback (GtkWidget *widget, gtk_widget_show (pdesc->ctree); gtk_signal_handler_block_by_func (GTK_OBJECT(pdesc->ctree), - (GtkSignalFunc)procedure_ctree_select_callback, pdesc); + GTK_SIGNAL_FUNC (procedure_ctree_select_callback), + pdesc); gtk_clist_select_row (GTK_CLIST (pdesc->ctree), sel_row, -1); gtk_ctree_select (GTK_CTREE (pdesc->ctree), found_node); @@ -555,7 +561,8 @@ procedure_clist_select_callback (GtkWidget *widget, 0.5, 0.5); gtk_signal_handler_unblock_by_func (GTK_OBJECT (pdesc->ctree), - (GtkSignalFunc)procedure_ctree_select_callback, pdesc); + GTK_SIGNAL_FUNC (procedure_ctree_select_callback), + pdesc); pdesc->ctree_row = sel_row; } @@ -640,7 +647,8 @@ procedure_ctree_select_callback (GtkWidget *widget, /* Block signals */ gtk_signal_handler_block_by_func (GTK_OBJECT (pdesc->clist), - (GtkSignalFunc)procedure_clist_select_callback, pdesc); + GTK_SIGNAL_FUNC (procedure_clist_select_callback), + pdesc); sel_row = gtk_clist_find_row_from_data (GTK_CLIST (pdesc->clist), pinfo); gtk_clist_select_row (GTK_CLIST (pdesc->clist), sel_row, -1); @@ -650,7 +658,8 @@ procedure_ctree_select_callback (GtkWidget *widget, 0.5, 0.5); gtk_signal_handler_unblock_by_func (GTK_OBJECT (pdesc->clist), - (GtkSignalFunc)procedure_clist_select_callback, pdesc); + GTK_SIGNAL_FUNC (procedure_clist_select_callback), + pdesc); pdesc->clist_row = sel_row; @@ -670,7 +679,7 @@ pinfo_free (gpointer p) g_free (pinfo); } -static GtkCTreeNode* +static GtkCTreeNode * get_parent (PDesc *pdesc, GHashTable *ghash, gchar *mpath) @@ -820,12 +829,12 @@ get_plugin_info (PDesc *pdesc, { int loop; pdesc->num_plugins = return_vals[1].data.d_int32; - menu_strs = return_vals[2].data.d_stringarray; - accel_strs = return_vals[4].data.d_stringarray; - prog_strs = return_vals[6].data.d_stringarray; - types_strs = return_vals[8].data.d_stringarray; - time_ints = return_vals[10].data.d_int32array; - realname_strs = return_vals[12].data.d_stringarray; + menu_strs = return_vals[2].data.d_stringarray; + accel_strs = return_vals[4].data.d_stringarray; + prog_strs = return_vals[6].data.d_stringarray; + types_strs = return_vals[8].data.d_stringarray; + time_ints = return_vals[10].data.d_int32array; + realname_strs = return_vals[12].data.d_stringarray; for (loop = 0; loop < return_vals[1].data.d_int32; loop++) { @@ -856,11 +865,11 @@ get_plugin_info (PDesc *pdesc, else strcpy (xtimestr,""); - pinfo->menu = g_strdup (menu_strs[loop]); - pinfo->accel = g_strdup (accel_strs[loop]); - pinfo->prog = g_strdup (prog_strs[loop]); - pinfo->types = g_strdup (types_strs[loop]); - pinfo->instime = time_ints[loop]; + pinfo->menu = g_strdup (menu_strs[loop]); + pinfo->accel = g_strdup (accel_strs[loop]); + pinfo->prog = g_strdup (prog_strs[loop]); + pinfo->types = g_strdup (types_strs[loop]); + pinfo->instime = time_ints[loop]; pinfo->realname = g_strdup (realname_strs[loop]); labels[0] = g_strdup (name); @@ -1035,7 +1044,8 @@ gimp_plugin_desc (void) plugindesc->clist = gtk_clist_new_with_titles (4, clabels); gtk_signal_connect (GTK_OBJECT (plugindesc->clist), "click_column", - (GtkSignalFunc) clist_click_column, NULL); + GTK_SIGNAL_FUNC (clist_click_column), + NULL); gtk_clist_column_titles_show (GTK_CLIST (plugindesc->clist)); swindow = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow), @@ -1045,7 +1055,7 @@ gimp_plugin_desc (void) gtk_widget_set_usize (plugindesc->clist, DBL_LIST_WIDTH, DBL_HEIGHT); gtk_signal_connect (GTK_OBJECT (plugindesc->clist), "select_row", - (GtkSignalFunc) procedure_clist_select_callback, + GTK_SIGNAL_FUNC (procedure_clist_select_callback), plugindesc); label = gtk_label_new (_("List View")); @@ -1063,21 +1073,24 @@ gimp_plugin_desc (void) swindow = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_widget_set_usize(plugindesc->ctree, DBL_LIST_WIDTH, DBL_HEIGHT); + gtk_widget_set_usize (plugindesc->ctree, DBL_LIST_WIDTH, DBL_HEIGHT); gtk_signal_connect (GTK_OBJECT (plugindesc->ctree), "tree_select_row", - (GtkSignalFunc) procedure_ctree_select_callback, + GTK_SIGNAL_FUNC (procedure_ctree_select_callback), plugindesc); - label = gtk_label_new (_("Tree View")); gtk_clist_set_column_auto_resize (GTK_CLIST (plugindesc->ctree), 0, TRUE); gtk_clist_set_column_auto_resize (GTK_CLIST (plugindesc->ctree), 1, TRUE); gtk_clist_set_column_auto_resize (GTK_CLIST (plugindesc->ctree), 2, TRUE); + gtk_clist_column_titles_passive (GTK_CLIST (plugindesc->ctree)); + + label = gtk_label_new (_("Tree View")); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), swindow, label); gtk_container_add (GTK_CONTAINER (swindow), plugindesc->ctree); + gtk_widget_show (plugindesc->ctree); gtk_widget_show (swindow); gtk_signal_connect_after (GTK_OBJECT (notebook), "switch_page", - (GtkSignalFunc) page_select_callback, + GTK_SIGNAL_FUNC (page_select_callback), plugindesc); gtk_widget_show (notebook); @@ -1102,11 +1115,12 @@ gimp_plugin_desc (void) button = gtk_button_new_with_label (_("Details >>")); gtk_misc_set_padding (GTK_MISC (GTK_BIN (button)->child), 2, 0); - gtk_widget_show (button); gtk_signal_connect (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) details_callback, plugindesc); - gtk_box_pack_start (GTK_BOX (searchhbox), - button, FALSE, FALSE, 0); + GTK_SIGNAL_FUNC (details_callback), + plugindesc); + gtk_box_pack_start (GTK_BOX (searchhbox), button, + FALSE, FALSE, 0); + gtk_widget_show (button); /* right = description */ /* the right description is build on first click of the Details button */ @@ -1114,6 +1128,9 @@ gimp_plugin_desc (void) /* now build the list */ dialog_search_callback (NULL, (gpointer) plugindesc); + gtk_clist_set_selection_mode (GTK_CLIST (plugindesc->ctree), + GTK_SELECTION_BROWSE); + gtk_widget_show (plugindesc->clist); gtk_widget_show (plugindesc->dlg); diff --git a/plug-ins/script-fu/script-fu-constants.c b/plug-ins/script-fu/script-fu-constants.c index ce4ff3ab2a..3fd227dc51 100644 --- a/plug-ins/script-fu/script-fu-constants.c +++ b/plug-ins/script-fu/script-fu-constants.c @@ -220,6 +220,10 @@ init_generated_constants (void) setvar (cintern ("PIXELS"), flocons (0), NIL); setvar (cintern ("POINTS"), flocons (1), NIL); + setvar (cintern ("STACK-TRACE-NEVER"), flocons (0), NIL); + setvar (cintern ("STACK-TRACE-QUERY"), flocons (1), NIL); + setvar (cintern ("STACK-TRACE-ALWAYS"), flocons (2), NIL); + setvar (cintern ("SHADOWS"), flocons (0), NIL); setvar (cintern ("MIDTONES"), flocons (1), NIL); setvar (cintern ("HIGHLIGHTS"), flocons (2), NIL); diff --git a/tools/pdbgen/Makefile.am b/tools/pdbgen/Makefile.am index f203e1e0aa..6e81e136d5 100644 --- a/tools/pdbgen/Makefile.am +++ b/tools/pdbgen/Makefile.am @@ -60,6 +60,7 @@ enum_headers = \ ../../app/convert.h \ ../../app/convolve.h \ ../../app/dodgeburn.h \ + ../../app/errors.h \ ../../app/eraser.h \ ../../app/gimpdrawable.h \ ../../app/gimpimage.h \ diff --git a/tools/pdbgen/enums.pl b/tools/pdbgen/enums.pl index f13d268937..25742b8d15 100644 --- a/tools/pdbgen/enums.pl +++ b/tools/pdbgen/enums.pl @@ -283,6 +283,15 @@ package Gimp::CodeGen::enums; DODGEBURN_MIDTONES => '1', DODGEBURN_SHADOWS => '2' } }, + StackTraceMode => + { contig => 1, + header => 'errors.h', + symbols => [ qw(STACK_TRACE_NEVER STACK_TRACE_QUERY + STACK_TRACE_ALWAYS) ], + mapping => { STACK_TRACE_NEVER => '0', + STACK_TRACE_QUERY => '1', + STACK_TRACE_ALWAYS => '2' } + }, OrientationType => { contig => 1, header => 'gimpimage.h',