mirror of https://github.com/GNOME/gimp.git
Sven Neumann <sven@gimp.org>
2000-07-16 Michael Natterer <mitch@gimp.org> Sven Neumann <sven@gimp.org> * 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.
This commit is contained in:
parent
e0e4101d6d
commit
df9eeff6ac
4
AUTHORS
4
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
|
||||
Shirasaki Yasuhiro
|
||||
|
|
25
ChangeLog
25
ChangeLog
|
@ -1,3 +1,28 @@
|
|||
2000-07-16 Michael Natterer <mitch@gimp.org>
|
||||
Sven Neumann <sven@gimp.org>
|
||||
|
||||
* 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 <pcg@goof.com>
|
||||
|
||||
* plug-ins/common/plasma.c: applied noninteractive fix by David
|
||||
|
|
|
@ -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 <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
@ -22,26 +25,39 @@
|
|||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#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)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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 <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
@ -22,26 +25,39 @@
|
|||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#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)
|
||||
{
|
||||
|
|
100
app/errors.c
100
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 <signal.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#ifdef HAVE_SYS_TIME_H
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_TIMES_H
|
||||
#include <sys/times.h>
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#include <time.h>
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#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);
|
||||
}
|
||||
|
|
|
@ -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 *, ...);
|
||||
|
|
|
@ -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 <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
@ -22,26 +25,39 @@
|
|||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#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)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
50
app/main.c
50
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 <display> Use the designated X display.\n"));
|
||||
g_print (_(" --system-gimprc <gimprc> Use an alternate system gimprc file.\n"));
|
||||
}
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
433
app/plug_in.c
433
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++)
|
||||
{
|
||||
|
|
|
@ -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<gimprc>\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,
|
||||
|
|
|
@ -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<gimprc>\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,
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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',
|
||||
|
|
Loading…
Reference in New Issue