mirror of https://github.com/GNOME/gimp.git
pdb: move gimp_plugin_icon_register_invoker() from "plugin" to "pdb"
and call it gimp_pdb_set_proc_icon(). Change icon registration code in libgimp/ and app/ so it's now possible to register icons for temporary procedures.
This commit is contained in:
parent
d89adebff8
commit
303ccbedad
|
@ -60,7 +60,8 @@ file_data_init (Gimp *gimp)
|
|||
proc->menu_label = g_strdup (N_("GIMP brush"));
|
||||
gimp_plug_in_procedure_set_icon (proc, GIMP_ICON_TYPE_ICON_NAME,
|
||||
(const guint8 *) "gimp-brush",
|
||||
strlen ("gimp-brush") + 1);
|
||||
strlen ("gimp-brush") + 1,
|
||||
NULL);
|
||||
gimp_plug_in_procedure_set_image_types (proc, NULL);
|
||||
gimp_plug_in_procedure_set_file_proc (proc, "gbr, gbp", "",
|
||||
"20, string, GIMP");
|
||||
|
@ -125,7 +126,8 @@ file_data_init (Gimp *gimp)
|
|||
proc->menu_label = g_strdup (N_("GIMP brush"));
|
||||
gimp_plug_in_procedure_set_icon (proc, GIMP_ICON_TYPE_ICON_NAME,
|
||||
(const guint8 *) "gimp-brush",
|
||||
strlen ("gimp-brush") + 1);
|
||||
strlen ("gimp-brush") + 1,
|
||||
NULL);
|
||||
|
||||
#if 0
|
||||
/* do not register as file procedure */
|
||||
|
@ -211,7 +213,8 @@ file_data_init (Gimp *gimp)
|
|||
proc->menu_label = g_strdup (N_("GIMP brush (animated)"));
|
||||
gimp_plug_in_procedure_set_icon (proc, GIMP_ICON_TYPE_ICON_NAME,
|
||||
(const guint8 *) "gimp-brush",
|
||||
strlen ("gimp-brush") + 1);
|
||||
strlen ("gimp-brush") + 1,
|
||||
NULL);
|
||||
gimp_plug_in_procedure_set_image_types (proc, NULL);
|
||||
gimp_plug_in_procedure_set_file_proc (proc, "gih", "", "");
|
||||
gimp_plug_in_procedure_set_mime_types (proc, "image/gimp-x-gih");
|
||||
|
@ -273,7 +276,8 @@ file_data_init (Gimp *gimp)
|
|||
proc->menu_label = g_strdup (N_("GIMP brush (animated)"));
|
||||
gimp_plug_in_procedure_set_icon (proc, GIMP_ICON_TYPE_ICON_NAME,
|
||||
(const guint8 *) "gimp-brush",
|
||||
strlen ("gimp-brush") + 1);
|
||||
strlen ("gimp-brush") + 1,
|
||||
NULL);
|
||||
|
||||
#if 0
|
||||
/* do not register as file procedure */
|
||||
|
@ -366,7 +370,8 @@ file_data_init (Gimp *gimp)
|
|||
proc->menu_label = g_strdup (N_("GIMP pattern"));
|
||||
gimp_plug_in_procedure_set_icon (proc, GIMP_ICON_TYPE_ICON_NAME,
|
||||
(const guint8 *) "gimp-pattern",
|
||||
strlen ("gimp-pattern") + 1);
|
||||
strlen ("gimp-pattern") + 1,
|
||||
NULL);
|
||||
gimp_plug_in_procedure_set_image_types (proc, NULL);
|
||||
gimp_plug_in_procedure_set_file_proc (proc, "pat", "",
|
||||
"20,string,GPAT");
|
||||
|
@ -427,7 +432,8 @@ file_data_init (Gimp *gimp)
|
|||
proc->menu_label = g_strdup (N_("GIMP pattern"));
|
||||
gimp_plug_in_procedure_set_icon (proc, GIMP_ICON_TYPE_ICON_NAME,
|
||||
(const guint8 *) "gimp-pattern",
|
||||
strlen ("gimp-pattern") + 1);
|
||||
strlen ("gimp-pattern") + 1,
|
||||
NULL);
|
||||
|
||||
#if 0
|
||||
/* do not register as file procedure */
|
||||
|
@ -508,7 +514,8 @@ file_data_init (Gimp *gimp)
|
|||
proc->menu_label = g_strdup (N_("GIMP extension"));
|
||||
gimp_plug_in_procedure_set_icon (proc, GIMP_ICON_TYPE_ICON_NAME,
|
||||
(const guint8 *) "gimp-plugin",
|
||||
strlen ("gimp-plugin") + 1);
|
||||
strlen ("gimp-plugin") + 1,
|
||||
NULL);
|
||||
gimp_plug_in_procedure_set_file_proc (proc, "gex", "",
|
||||
"20, string, GIMP");
|
||||
gimp_plug_in_procedure_set_generic_file_proc (proc, TRUE);
|
||||
|
|
|
@ -443,6 +443,44 @@ pdb_get_proc_menu_paths_invoker (GimpProcedure *procedure,
|
|||
return return_vals;
|
||||
}
|
||||
|
||||
static GimpValueArray *
|
||||
pdb_set_proc_icon_invoker (GimpProcedure *procedure,
|
||||
Gimp *gimp,
|
||||
GimpContext *context,
|
||||
GimpProgress *progress,
|
||||
const GimpValueArray *args,
|
||||
GError **error)
|
||||
{
|
||||
gboolean success = TRUE;
|
||||
const gchar *procedure_name;
|
||||
gint icon_type;
|
||||
gint icon_data_length;
|
||||
const guint8 *icon_data;
|
||||
|
||||
procedure_name = g_value_get_string (gimp_value_array_index (args, 0));
|
||||
icon_type = g_value_get_enum (gimp_value_array_index (args, 1));
|
||||
icon_data_length = g_value_get_int (gimp_value_array_index (args, 2));
|
||||
icon_data = gimp_value_get_uint8_array (gimp_value_array_index (args, 3));
|
||||
|
||||
if (success)
|
||||
{
|
||||
GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
|
||||
|
||||
if (plug_in &&
|
||||
gimp_pdb_is_canonical_procedure (procedure_name, error))
|
||||
{
|
||||
success = gimp_plug_in_set_proc_icon (plug_in, procedure_name,
|
||||
icon_type,
|
||||
icon_data, icon_data_length);
|
||||
}
|
||||
else
|
||||
success = FALSE;
|
||||
}
|
||||
|
||||
return gimp_procedure_get_return_values (procedure, success,
|
||||
error ? *error : NULL);
|
||||
}
|
||||
|
||||
static GimpValueArray *
|
||||
pdb_get_proc_documentation_invoker (GimpProcedure *procedure,
|
||||
Gimp *gimp,
|
||||
|
@ -1067,6 +1105,47 @@ register_pdb_procs (GimpPDB *pdb)
|
|||
gimp_pdb_register_procedure (pdb, procedure);
|
||||
g_object_unref (procedure);
|
||||
|
||||
/*
|
||||
* gimp-pdb-set-proc-icon
|
||||
*/
|
||||
procedure = gimp_procedure_new (pdb_set_proc_icon_invoker);
|
||||
gimp_object_set_static_name (GIMP_OBJECT (procedure),
|
||||
"gimp-pdb-set-proc-icon");
|
||||
gimp_procedure_set_static_strings (procedure,
|
||||
"Register an icon for a plug-in procedure.",
|
||||
"This procedure installs an icon for the given procedure.",
|
||||
"Michael Natterer <mitch@gimp.org>",
|
||||
"Michael Natterer",
|
||||
"2019",
|
||||
NULL);
|
||||
gimp_procedure_add_argument (procedure,
|
||||
gimp_param_spec_string ("procedure-name",
|
||||
"procedure name",
|
||||
"The procedure for which to install the icon",
|
||||
FALSE, FALSE, TRUE,
|
||||
NULL,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_procedure_add_argument (procedure,
|
||||
g_param_spec_enum ("icon-type",
|
||||
"icon type",
|
||||
"The type of the icon",
|
||||
GIMP_TYPE_ICON_TYPE,
|
||||
GIMP_ICON_TYPE_ICON_NAME,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_procedure_add_argument (procedure,
|
||||
g_param_spec_int ("icon-data-length",
|
||||
"icon data length",
|
||||
"The length of 'icon-data'",
|
||||
1, G_MAXINT32, 1,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_procedure_add_argument (procedure,
|
||||
gimp_param_spec_uint8_array ("icon-data",
|
||||
"icon data",
|
||||
"The procedure's icon. The format depends on the 'icon_type' parameter",
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_pdb_register_procedure (pdb, procedure);
|
||||
g_object_unref (procedure);
|
||||
|
||||
/*
|
||||
* gimp-pdb-get-proc-documentation
|
||||
*/
|
||||
|
|
|
@ -182,52 +182,6 @@ plugin_menu_branch_register_invoker (GimpProcedure *procedure,
|
|||
error ? *error : NULL);
|
||||
}
|
||||
|
||||
static GimpValueArray *
|
||||
plugin_icon_register_invoker (GimpProcedure *procedure,
|
||||
Gimp *gimp,
|
||||
GimpContext *context,
|
||||
GimpProgress *progress,
|
||||
const GimpValueArray *args,
|
||||
GError **error)
|
||||
{
|
||||
gboolean success = TRUE;
|
||||
const gchar *procedure_name;
|
||||
gint icon_type;
|
||||
gint icon_data_length;
|
||||
const guint8 *icon_data;
|
||||
|
||||
procedure_name = g_value_get_string (gimp_value_array_index (args, 0));
|
||||
icon_type = g_value_get_enum (gimp_value_array_index (args, 1));
|
||||
icon_data_length = g_value_get_int (gimp_value_array_index (args, 2));
|
||||
icon_data = gimp_value_get_uint8_array (gimp_value_array_index (args, 3));
|
||||
|
||||
if (success)
|
||||
{
|
||||
GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
|
||||
|
||||
if (plug_in &&
|
||||
plug_in->call_mode == GIMP_PLUG_IN_CALL_QUERY &&
|
||||
gimp_pdb_is_canonical_procedure (procedure_name, error))
|
||||
{
|
||||
GimpPlugInProcedure *proc;
|
||||
|
||||
proc = gimp_plug_in_procedure_find (plug_in->plug_in_def->procedures,
|
||||
procedure_name);
|
||||
|
||||
if (proc)
|
||||
gimp_plug_in_procedure_set_icon (proc, icon_type,
|
||||
icon_data, icon_data_length);
|
||||
else
|
||||
success = FALSE;
|
||||
}
|
||||
else
|
||||
success = FALSE;
|
||||
}
|
||||
|
||||
return gimp_procedure_get_return_values (procedure, success,
|
||||
error ? *error : NULL);
|
||||
}
|
||||
|
||||
static GimpValueArray *
|
||||
plugin_set_pdb_error_handler_invoker (GimpProcedure *procedure,
|
||||
Gimp *gimp,
|
||||
|
@ -449,47 +403,6 @@ register_plug_in_procs (GimpPDB *pdb)
|
|||
gimp_pdb_register_procedure (pdb, procedure);
|
||||
g_object_unref (procedure);
|
||||
|
||||
/*
|
||||
* gimp-plugin-icon-register
|
||||
*/
|
||||
procedure = gimp_procedure_new (plugin_icon_register_invoker);
|
||||
gimp_object_set_static_name (GIMP_OBJECT (procedure),
|
||||
"gimp-plugin-icon-register");
|
||||
gimp_procedure_set_static_strings (procedure,
|
||||
"Register an icon for a plug-in procedure.",
|
||||
"This procedure installs an icon for the given procedure.",
|
||||
"Michael Natterer <mitch@gimp.org>",
|
||||
"Michael Natterer",
|
||||
"2004",
|
||||
NULL);
|
||||
gimp_procedure_add_argument (procedure,
|
||||
gimp_param_spec_string ("procedure-name",
|
||||
"procedure name",
|
||||
"The procedure for which to install the icon",
|
||||
FALSE, FALSE, TRUE,
|
||||
NULL,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_procedure_add_argument (procedure,
|
||||
g_param_spec_enum ("icon-type",
|
||||
"icon type",
|
||||
"The type of the icon",
|
||||
GIMP_TYPE_ICON_TYPE,
|
||||
GIMP_ICON_TYPE_ICON_NAME,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_procedure_add_argument (procedure,
|
||||
g_param_spec_int ("icon-data-length",
|
||||
"icon data length",
|
||||
"The length of 'icon-data'",
|
||||
1, G_MAXINT32, 1,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_procedure_add_argument (procedure,
|
||||
gimp_param_spec_uint8_array ("icon-data",
|
||||
"icon data",
|
||||
"The procedure's icon. The format depends on the 'icon_type' parameter",
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_pdb_register_procedure (pdb, procedure);
|
||||
g_object_unref (procedure);
|
||||
|
||||
/*
|
||||
* gimp-plugin-set-pdb-error-handler
|
||||
*/
|
||||
|
|
|
@ -924,21 +924,70 @@ gimp_plug_in_add_proc_menu_path (GimpPlugIn *plug_in,
|
|||
break;
|
||||
}
|
||||
|
||||
if (! proc->menu_label)
|
||||
if (! gimp_plug_in_procedure_add_menu_path (proc, menu_path, &error))
|
||||
{
|
||||
gimp_message (plug_in->manager->gimp, NULL, GIMP_MESSAGE_ERROR,
|
||||
"Plug-in \"%s\"\n(%s)\n"
|
||||
"attempted to register the procedure \"%s\" "
|
||||
"in the menu \"%s\", but the procedure has no label. "
|
||||
"This is not allowed.",
|
||||
gimp_object_get_name (plug_in),
|
||||
gimp_file_get_utf8_name (plug_in->file),
|
||||
proc_name, menu_path);
|
||||
gimp_message_literal (plug_in->manager->gimp, NULL, GIMP_MESSAGE_ERROR,
|
||||
error->message);
|
||||
g_clear_error (&error);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (! gimp_plug_in_procedure_add_menu_path (proc, menu_path, &error))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_plug_in_set_proc_icon (GimpPlugIn *plug_in,
|
||||
const gchar *proc_name,
|
||||
GimpIconType type,
|
||||
const guint8 *data,
|
||||
gint data_length)
|
||||
{
|
||||
GimpPlugInProcedure *proc = NULL;
|
||||
GError *error = NULL;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_PLUG_IN (plug_in), FALSE);
|
||||
g_return_val_if_fail (proc_name != NULL, FALSE);
|
||||
|
||||
if (plug_in->plug_in_def)
|
||||
proc = gimp_plug_in_procedure_find (plug_in->plug_in_def->procedures,
|
||||
proc_name);
|
||||
|
||||
if (! proc)
|
||||
proc = gimp_plug_in_procedure_find (plug_in->temp_procedures, proc_name);
|
||||
|
||||
if (! proc)
|
||||
{
|
||||
gimp_message (plug_in->manager->gimp, NULL, GIMP_MESSAGE_ERROR,
|
||||
"Plug-in \"%s\"\n(%s)\n"
|
||||
"attempted to set the icon "
|
||||
"for the procedure \"%s\".\n"
|
||||
"It has however not installed that procedure. "
|
||||
"This is not allowed.",
|
||||
gimp_object_get_name (plug_in),
|
||||
gimp_file_get_utf8_name (plug_in->file),
|
||||
proc_name);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
switch (GIMP_PROCEDURE (proc)->proc_type)
|
||||
{
|
||||
case GIMP_PDB_PROC_TYPE_INTERNAL:
|
||||
return FALSE;
|
||||
|
||||
case GIMP_PDB_PROC_TYPE_PLUGIN:
|
||||
case GIMP_PDB_PROC_TYPE_EXTENSION:
|
||||
if (plug_in->call_mode != GIMP_PLUG_IN_CALL_QUERY &&
|
||||
plug_in->call_mode != GIMP_PLUG_IN_CALL_INIT)
|
||||
return FALSE;
|
||||
|
||||
case GIMP_PDB_PROC_TYPE_TEMPORARY:
|
||||
break;
|
||||
}
|
||||
|
||||
if (! gimp_plug_in_procedure_set_icon (proc, type, data, data_length,
|
||||
&error))
|
||||
{
|
||||
gimp_message_literal (plug_in->manager->gimp, NULL, GIMP_MESSAGE_ERROR,
|
||||
error->message);
|
||||
|
|
|
@ -108,6 +108,11 @@ const gchar * gimp_plug_in_get_undo_desc (GimpPlugIn *plug_in);
|
|||
gboolean gimp_plug_in_add_proc_menu_path (GimpPlugIn *plug_in,
|
||||
const gchar *proc_name,
|
||||
const gchar *menu_path);
|
||||
gboolean gimp_plug_in_set_proc_icon (GimpPlugIn *plug_in,
|
||||
const gchar *proc_name,
|
||||
GimpIconType type,
|
||||
const guint8 *data,
|
||||
gint data_length);
|
||||
|
||||
void gimp_plug_in_add_temp_proc (GimpPlugIn *plug_in,
|
||||
GimpTemporaryProcedure *procedure);
|
||||
|
|
|
@ -818,30 +818,31 @@ gimp_plug_in_procedure_add_menu_path (GimpPlugInProcedure *proc,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_plug_in_procedure_set_icon (GimpPlugInProcedure *proc,
|
||||
GimpIconType icon_type,
|
||||
const guint8 *icon_data,
|
||||
gint icon_data_length)
|
||||
gboolean
|
||||
gimp_plug_in_procedure_set_icon (GimpPlugInProcedure *proc,
|
||||
GimpIconType icon_type,
|
||||
const guint8 *icon_data,
|
||||
gint icon_data_length,
|
||||
GError **error)
|
||||
{
|
||||
g_return_if_fail (GIMP_IS_PLUG_IN_PROCEDURE (proc));
|
||||
|
||||
gimp_plug_in_procedure_take_icon (proc, icon_type,
|
||||
g_memdup (icon_data, icon_data_length),
|
||||
icon_data_length);
|
||||
return gimp_plug_in_procedure_take_icon (proc, icon_type,
|
||||
g_memdup (icon_data, icon_data_length),
|
||||
icon_data_length, error);
|
||||
}
|
||||
|
||||
void
|
||||
gimp_plug_in_procedure_take_icon (GimpPlugInProcedure *proc,
|
||||
GimpIconType icon_type,
|
||||
guint8 *icon_data,
|
||||
gint icon_data_length)
|
||||
gboolean
|
||||
gimp_plug_in_procedure_take_icon (GimpPlugInProcedure *proc,
|
||||
GimpIconType icon_type,
|
||||
guint8 *icon_data,
|
||||
gint icon_data_length,
|
||||
GError **error)
|
||||
{
|
||||
const gchar *icon_name = NULL;
|
||||
GdkPixbuf *icon_pixbuf = NULL;
|
||||
GError *error = NULL;
|
||||
gboolean success = TRUE;
|
||||
|
||||
g_return_if_fail (GIMP_IS_PLUG_IN_PROCEDURE (proc));
|
||||
g_return_val_if_fail (GIMP_IS_PLUG_IN_PROCEDURE (proc), FALSE);
|
||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||
|
||||
if (proc->icon_data)
|
||||
{
|
||||
|
@ -869,15 +870,26 @@ gimp_plug_in_procedure_take_icon (GimpPlugInProcedure *proc,
|
|||
|
||||
loader = gdk_pixbuf_loader_new ();
|
||||
|
||||
gdk_pixbuf_loader_write (loader,
|
||||
proc->icon_data,
|
||||
proc->icon_data_length,
|
||||
NULL);
|
||||
gdk_pixbuf_loader_close (loader, NULL);
|
||||
icon_pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
|
||||
if (! gdk_pixbuf_loader_write (loader,
|
||||
proc->icon_data,
|
||||
proc->icon_data_length,
|
||||
error))
|
||||
{
|
||||
gdk_pixbuf_loader_close (loader, NULL);
|
||||
success = FALSE;
|
||||
}
|
||||
else if (! gdk_pixbuf_loader_close (loader, error))
|
||||
{
|
||||
success = FALSE;
|
||||
}
|
||||
|
||||
if (icon_pixbuf)
|
||||
g_object_ref (icon_pixbuf);
|
||||
if (success)
|
||||
{
|
||||
icon_pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
|
||||
|
||||
if (icon_pixbuf)
|
||||
g_object_ref (icon_pixbuf);
|
||||
}
|
||||
|
||||
g_object_unref (loader);
|
||||
break;
|
||||
|
@ -887,14 +899,11 @@ gimp_plug_in_procedure_take_icon (GimpPlugInProcedure *proc,
|
|||
proc->icon_data = icon_data;
|
||||
|
||||
icon_pixbuf = gdk_pixbuf_new_from_file ((gchar *) proc->icon_data,
|
||||
&error);
|
||||
break;
|
||||
}
|
||||
error);
|
||||
|
||||
if (! icon_pixbuf && error)
|
||||
{
|
||||
g_printerr ("%s: %s\n", G_STRFUNC, error->message);
|
||||
g_clear_error (&error);
|
||||
if (! icon_pixbuf)
|
||||
success = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
gimp_viewable_set_icon_name (GIMP_VIEWABLE (proc), icon_name);
|
||||
|
@ -902,6 +911,8 @@ gimp_plug_in_procedure_take_icon (GimpPlugInProcedure *proc,
|
|||
|
||||
if (icon_pixbuf)
|
||||
g_object_unref (icon_pixbuf);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
static GimpPlugInImageType
|
||||
|
|
|
@ -111,14 +111,16 @@ gboolean gimp_plug_in_procedure_add_menu_path (GimpPlugInProcedure *pro
|
|||
const gchar *menu_path,
|
||||
GError **error);
|
||||
|
||||
void gimp_plug_in_procedure_set_icon (GimpPlugInProcedure *proc,
|
||||
gboolean gimp_plug_in_procedure_set_icon (GimpPlugInProcedure *proc,
|
||||
GimpIconType type,
|
||||
const guint8 *data,
|
||||
gint data_length);
|
||||
void gimp_plug_in_procedure_take_icon (GimpPlugInProcedure *proc,
|
||||
gint data_length,
|
||||
GError **error);
|
||||
gboolean gimp_plug_in_procedure_take_icon (GimpPlugInProcedure *proc,
|
||||
GimpIconType type,
|
||||
guint8 *data,
|
||||
gint data_length);
|
||||
gint data_length,
|
||||
GError **error);
|
||||
|
||||
void gimp_plug_in_procedure_set_image_types (GimpPlugInProcedure *proc,
|
||||
const gchar *image_types);
|
||||
|
|
|
@ -593,7 +593,8 @@ plug_in_icon_deserialize (GScanner *scanner,
|
|||
}
|
||||
|
||||
gimp_plug_in_procedure_take_icon (proc, icon_type,
|
||||
icon_data, icon_data_length);
|
||||
icon_data, icon_data_length,
|
||||
NULL);
|
||||
|
||||
if (! gimp_scanner_parse_token (scanner, G_TOKEN_RIGHT_PAREN))
|
||||
return G_TOKEN_RIGHT_PAREN;
|
||||
|
|
|
@ -114,7 +114,8 @@ xcf_init (Gimp *gimp)
|
|||
proc->menu_label = g_strdup (N_("GIMP XCF image"));
|
||||
gimp_plug_in_procedure_set_icon (proc, GIMP_ICON_TYPE_ICON_NAME,
|
||||
(const guint8 *) "gimp-wilber",
|
||||
strlen ("gimp-wilber") + 1);
|
||||
strlen ("gimp-wilber") + 1,
|
||||
NULL);
|
||||
gimp_plug_in_procedure_set_image_types (proc, "RGB*, GRAY*, INDEXED*");
|
||||
gimp_plug_in_procedure_set_file_proc (proc, "xcf", "", NULL);
|
||||
gimp_plug_in_procedure_set_mime_types (proc, "image/x-xcf");
|
||||
|
@ -185,7 +186,8 @@ xcf_init (Gimp *gimp)
|
|||
proc->menu_label = g_strdup (N_("GIMP XCF image"));
|
||||
gimp_plug_in_procedure_set_icon (proc, GIMP_ICON_TYPE_ICON_NAME,
|
||||
(const guint8 *) "gimp-wilber",
|
||||
strlen ("gimp-wilber") + 1);
|
||||
strlen ("gimp-wilber") + 1,
|
||||
NULL);
|
||||
gimp_plug_in_procedure_set_image_types (proc, NULL);
|
||||
gimp_plug_in_procedure_set_file_proc (proc, "xcf", "",
|
||||
"0,string,gimp\\040xcf\\040");
|
||||
|
|
|
@ -422,6 +422,51 @@ _gimp_pdb_get_proc_menu_paths (const gchar *procedure_name,
|
|||
return menu_paths;
|
||||
}
|
||||
|
||||
/**
|
||||
* _gimp_pdb_set_proc_icon:
|
||||
* @procedure_name: The procedure for which to install the icon.
|
||||
* @icon_type: The type of the icon.
|
||||
* @icon_data_length: The length of 'icon-data'.
|
||||
* @icon_data: (array length=icon_data_length) (element-type guint8): The procedure's icon. The format depends on the 'icon_type' parameter.
|
||||
*
|
||||
* Register an icon for a plug-in procedure.
|
||||
*
|
||||
* This procedure installs an icon for the given procedure.
|
||||
*
|
||||
* Returns: TRUE on success.
|
||||
*
|
||||
* Since: 3.0
|
||||
**/
|
||||
gboolean
|
||||
_gimp_pdb_set_proc_icon (const gchar *procedure_name,
|
||||
GimpIconType icon_type,
|
||||
gint icon_data_length,
|
||||
const guint8 *icon_data)
|
||||
{
|
||||
GimpValueArray *args;
|
||||
GimpValueArray *return_vals;
|
||||
gboolean success = TRUE;
|
||||
|
||||
args = gimp_value_array_new_from_types (NULL,
|
||||
G_TYPE_STRING, procedure_name,
|
||||
GIMP_TYPE_ICON_TYPE, icon_type,
|
||||
G_TYPE_INT, icon_data_length,
|
||||
GIMP_TYPE_UINT8_ARRAY, NULL,
|
||||
G_TYPE_NONE);
|
||||
gimp_value_set_uint8_array (gimp_value_array_index (args, 3), icon_data, icon_data_length);
|
||||
|
||||
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
||||
"gimp-pdb-set-proc-icon",
|
||||
args);
|
||||
gimp_value_array_unref (args);
|
||||
|
||||
success = GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS;
|
||||
|
||||
gimp_value_array_unref (return_vals);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* _gimp_pdb_get_proc_documentation:
|
||||
* @procedure_name: The procedure name.
|
||||
|
|
|
@ -54,6 +54,10 @@ G_GNUC_INTERNAL gboolean _gimp_pdb_add_proc_menu_path (const gchar
|
|||
const gchar *menu_path);
|
||||
G_GNUC_INTERNAL gchar** _gimp_pdb_get_proc_menu_paths (const gchar *procedure_name,
|
||||
gint *num_menu_paths);
|
||||
G_GNUC_INTERNAL gboolean _gimp_pdb_set_proc_icon (const gchar *procedure_name,
|
||||
GimpIconType icon_type,
|
||||
gint icon_data_length,
|
||||
const guint8 *icon_data);
|
||||
G_GNUC_INTERNAL gboolean _gimp_pdb_get_proc_documentation (const gchar *procedure_name,
|
||||
gchar **blurb,
|
||||
gchar **help,
|
||||
|
|
|
@ -149,51 +149,6 @@ _gimp_plugin_menu_branch_register (const gchar *menu_path,
|
|||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* _gimp_plugin_icon_register:
|
||||
* @procedure_name: The procedure for which to install the icon.
|
||||
* @icon_type: The type of the icon.
|
||||
* @icon_data_length: The length of 'icon-data'.
|
||||
* @icon_data: (array length=icon_data_length) (element-type guint8): The procedure's icon. The format depends on the 'icon_type' parameter.
|
||||
*
|
||||
* Register an icon for a plug-in procedure.
|
||||
*
|
||||
* This procedure installs an icon for the given procedure.
|
||||
*
|
||||
* Returns: TRUE on success.
|
||||
*
|
||||
* Since: 2.2
|
||||
**/
|
||||
gboolean
|
||||
_gimp_plugin_icon_register (const gchar *procedure_name,
|
||||
GimpIconType icon_type,
|
||||
gint icon_data_length,
|
||||
const guint8 *icon_data)
|
||||
{
|
||||
GimpValueArray *args;
|
||||
GimpValueArray *return_vals;
|
||||
gboolean success = TRUE;
|
||||
|
||||
args = gimp_value_array_new_from_types (NULL,
|
||||
G_TYPE_STRING, procedure_name,
|
||||
GIMP_TYPE_ICON_TYPE, icon_type,
|
||||
G_TYPE_INT, icon_data_length,
|
||||
GIMP_TYPE_UINT8_ARRAY, NULL,
|
||||
G_TYPE_NONE);
|
||||
gimp_value_set_uint8_array (gimp_value_array_index (args, 3), icon_data, icon_data_length);
|
||||
|
||||
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
||||
"gimp-plugin-icon-register",
|
||||
args);
|
||||
gimp_value_array_unref (args);
|
||||
|
||||
success = GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS;
|
||||
|
||||
gimp_value_array_unref (return_vals);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* _gimp_plugin_set_pdb_error_handler:
|
||||
* @handler: Who is responsible for handling procedure call errors.
|
||||
|
|
|
@ -38,10 +38,6 @@ G_GNUC_INTERNAL gboolean _gimp_plugin_help_register (const gc
|
|||
const gchar *domain_uri);
|
||||
G_GNUC_INTERNAL gboolean _gimp_plugin_menu_branch_register (const gchar *menu_path,
|
||||
const gchar *menu_name);
|
||||
G_GNUC_INTERNAL gboolean _gimp_plugin_icon_register (const gchar *procedure_name,
|
||||
GimpIconType icon_type,
|
||||
gint icon_data_length,
|
||||
const guint8 *icon_data);
|
||||
G_GNUC_INTERNAL gboolean _gimp_plugin_set_pdb_error_handler (GimpPDBErrorHandler handler);
|
||||
G_GNUC_INTERNAL GimpPDBErrorHandler _gimp_plugin_get_pdb_error_handler (void);
|
||||
|
||||
|
|
|
@ -288,6 +288,65 @@ gimp_procedure_get_property (GObject *object,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_procedure_install_icon (GimpProcedure *procedure)
|
||||
{
|
||||
GimpIconType icon_type;
|
||||
guint8 *icon_data = NULL;
|
||||
gsize icon_data_length = 0;
|
||||
|
||||
icon_type = gimp_procedure_get_icon_type (procedure);
|
||||
|
||||
switch (icon_type)
|
||||
{
|
||||
case GIMP_ICON_TYPE_ICON_NAME:
|
||||
{
|
||||
icon_data = (guint8 *) gimp_procedure_get_icon_name (procedure);
|
||||
if (icon_data)
|
||||
icon_data_length = strlen ((gchar *) icon_data) + 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_ICON_TYPE_PIXBUF:
|
||||
{
|
||||
GdkPixbuf *pixbuf = gimp_procedure_get_icon_pixbuf (procedure);
|
||||
|
||||
if (pixbuf)
|
||||
gdk_pixbuf_save_to_buffer (pixbuf,
|
||||
(gchar **) &icon_data, &icon_data_length,
|
||||
"png", NULL, NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_ICON_TYPE_IMAGE_FILE:
|
||||
{
|
||||
GFile *file = gimp_procedure_get_icon_file (procedure);
|
||||
|
||||
if (file)
|
||||
{
|
||||
icon_data = (guchar *) g_file_get_uri (file);
|
||||
icon_data_length = strlen ((gchar *) icon_data) + 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (icon_data)
|
||||
_gimp_pdb_set_proc_icon (gimp_procedure_get_name (procedure),
|
||||
icon_type, icon_data_length, icon_data);
|
||||
|
||||
switch (icon_type)
|
||||
{
|
||||
case GIMP_ICON_TYPE_ICON_NAME:
|
||||
break;
|
||||
|
||||
case GIMP_ICON_TYPE_PIXBUF:
|
||||
case GIMP_ICON_TYPE_IMAGE_FILE:
|
||||
g_free (icon_data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_procedure_real_install (GimpProcedure *procedure)
|
||||
{
|
||||
|
@ -298,9 +357,6 @@ gimp_procedure_real_install (GimpProcedure *procedure)
|
|||
GList *list;
|
||||
GimpPlugIn *plug_in;
|
||||
GPProcInstall proc_install;
|
||||
GimpIconType icon_type;
|
||||
guint8 *icon_data = NULL;
|
||||
gsize icon_data_length = 0;
|
||||
gint i;
|
||||
|
||||
g_return_if_fail (procedure->priv->installed == FALSE);
|
||||
|
@ -341,60 +397,11 @@ gimp_procedure_real_install (GimpProcedure *procedure)
|
|||
&proc_install, plug_in))
|
||||
gimp_quit ();
|
||||
|
||||
icon_type = gimp_procedure_get_icon_type (procedure);
|
||||
|
||||
switch (icon_type)
|
||||
{
|
||||
case GIMP_ICON_TYPE_ICON_NAME:
|
||||
{
|
||||
icon_data = (guint8 *) gimp_procedure_get_icon_name (procedure);
|
||||
if (icon_data)
|
||||
icon_data_length = strlen ((gchar *) icon_data) + 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_ICON_TYPE_PIXBUF:
|
||||
{
|
||||
GdkPixbuf *pixbuf = gimp_procedure_get_icon_pixbuf (procedure);
|
||||
|
||||
if (pixbuf)
|
||||
gdk_pixbuf_save_to_buffer (pixbuf,
|
||||
(gchar **) &icon_data, &icon_data_length,
|
||||
"png", NULL, NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_ICON_TYPE_IMAGE_FILE:
|
||||
{
|
||||
GFile *file = gimp_procedure_get_icon_file (procedure);
|
||||
|
||||
if (file)
|
||||
{
|
||||
icon_data = (guchar *) g_file_get_uri (file);
|
||||
icon_data_length = strlen ((gchar *) icon_data) + 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (icon_data)
|
||||
_gimp_plugin_icon_register (gimp_procedure_get_name (procedure),
|
||||
icon_type, icon_data_length, icon_data);
|
||||
|
||||
switch (icon_type)
|
||||
{
|
||||
case GIMP_ICON_TYPE_ICON_NAME:
|
||||
break;
|
||||
|
||||
case GIMP_ICON_TYPE_PIXBUF:
|
||||
case GIMP_ICON_TYPE_IMAGE_FILE:
|
||||
g_free (icon_data);
|
||||
break;
|
||||
}
|
||||
|
||||
g_free (proc_install.params);
|
||||
g_free (proc_install.return_vals);
|
||||
|
||||
gimp_procedure_install_icon (procedure);
|
||||
|
||||
for (list = gimp_procedure_get_menu_paths (procedure);
|
||||
list;
|
||||
list = g_list_next (list))
|
||||
|
@ -1642,6 +1649,9 @@ gimp_procedure_set_icon (GimpProcedure *procedure,
|
|||
default:
|
||||
g_return_if_reached ();
|
||||
}
|
||||
|
||||
if (procedure->priv->installed)
|
||||
gimp_procedure_install_icon (procedure);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -437,6 +437,48 @@ CODE
|
|||
);
|
||||
}
|
||||
|
||||
sub pdb_set_proc_icon {
|
||||
$blurb = "Register an icon for a plug-in procedure.";
|
||||
|
||||
$help = <<HELP;
|
||||
This procedure installs an icon for the given procedure.
|
||||
HELP
|
||||
|
||||
&mitch_pdb_misc('2019', '3.0');
|
||||
|
||||
$lib_private = 1;
|
||||
|
||||
@inargs = (
|
||||
{ name => 'procedure_name', type => 'string', non_empty => 1,
|
||||
desc => 'The procedure for which to install the icon' },
|
||||
{ name => 'icon_type', type => 'enum GimpIconType',
|
||||
desc => 'The type of the icon' },
|
||||
{ name => 'icon_data', type => 'int8array',
|
||||
desc => "The procedure's icon. The format depends on the
|
||||
'icon_type' parameter",
|
||||
array => { name => 'icon_data_length', type => '1 <= int32',
|
||||
desc => "The length of 'icon-data'" } }
|
||||
);
|
||||
|
||||
%invoke = (
|
||||
code => <<'CODE'
|
||||
{
|
||||
GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
|
||||
|
||||
if (plug_in &&
|
||||
gimp_pdb_is_canonical_procedure (procedure_name, error))
|
||||
{
|
||||
success = gimp_plug_in_set_proc_icon (plug_in, procedure_name,
|
||||
icon_type,
|
||||
icon_data, icon_data_length);
|
||||
}
|
||||
else
|
||||
success = FALSE;
|
||||
}
|
||||
CODE
|
||||
);
|
||||
}
|
||||
|
||||
sub pdb_get_proc_documentation {
|
||||
$blurb = <<'BLURB';
|
||||
Queries the procedural database for documentation on the specified procedure.
|
||||
|
@ -813,6 +855,7 @@ CODE
|
|||
pdb_get_proc_menu_label
|
||||
pdb_add_proc_menu_path
|
||||
pdb_get_proc_menu_paths
|
||||
pdb_set_proc_icon
|
||||
pdb_get_proc_documentation
|
||||
pdb_get_proc_attribution
|
||||
pdb_get_proc_argument
|
||||
|
|
|
@ -183,56 +183,6 @@ CODE
|
|||
);
|
||||
}
|
||||
|
||||
sub plugin_icon_register {
|
||||
$blurb = "Register an icon for a plug-in procedure.";
|
||||
|
||||
$help = <<HELP;
|
||||
This procedure installs an icon for the given procedure.
|
||||
HELP
|
||||
|
||||
&mitch_pdb_misc('2004', '2.2');
|
||||
|
||||
$lib_private = 1;
|
||||
|
||||
@inargs = (
|
||||
{ name => 'procedure_name', type => 'string', non_empty => 1,
|
||||
desc => 'The procedure for which to install the icon' },
|
||||
{ name => 'icon_type', type => 'enum GimpIconType',
|
||||
desc => 'The type of the icon' },
|
||||
{ name => 'icon_data', type => 'int8array',
|
||||
desc => "The procedure's icon. The format depends on the
|
||||
'icon_type' parameter",
|
||||
array => { name => 'icon_data_length', type => '1 <= int32',
|
||||
desc => "The length of 'icon-data'" } }
|
||||
);
|
||||
|
||||
%invoke = (
|
||||
code => <<'CODE'
|
||||
{
|
||||
GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
|
||||
|
||||
if (plug_in &&
|
||||
plug_in->call_mode == GIMP_PLUG_IN_CALL_QUERY &&
|
||||
gimp_pdb_is_canonical_procedure (procedure_name, error))
|
||||
{
|
||||
GimpPlugInProcedure *proc;
|
||||
|
||||
proc = gimp_plug_in_procedure_find (plug_in->plug_in_def->procedures,
|
||||
procedure_name);
|
||||
|
||||
if (proc)
|
||||
gimp_plug_in_procedure_set_icon (proc, icon_type,
|
||||
icon_data, icon_data_length);
|
||||
else
|
||||
success = FALSE;
|
||||
}
|
||||
else
|
||||
success = FALSE;
|
||||
}
|
||||
CODE
|
||||
);
|
||||
}
|
||||
|
||||
sub plugin_set_pdb_error_handler {
|
||||
$blurb = "Sets an error handler for procedure calls.";
|
||||
|
||||
|
@ -322,11 +272,10 @@ CODE
|
|||
plugin_domain_register
|
||||
plugin_help_register
|
||||
plugin_menu_branch_register
|
||||
plugin_icon_register
|
||||
plugin_set_pdb_error_handler
|
||||
plugin_get_pdb_error_handler);
|
||||
|
||||
%exports = (app => [@procs], lib => [@procs[1,2,3,4,5,6]]);
|
||||
%exports = (app => [@procs], lib => [@procs[1,2,3,4,5]]);
|
||||
|
||||
$desc = 'Plug-in';
|
||||
|
||||
|
|
Loading…
Reference in New Issue