[gimp] libgimp: change GimpPlugIn and GimpProcedures so temp procs work
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] libgimp: change GimpPlugIn and GimpProcedures so temp procs work
- Date: Tue, 30 Jul 2019 19:05:11 +0000 (UTC)
commit d64c0ebd30a6fcc4a890623ef6ac08cbbfbed299
Author: Michael Natterer <mitch gimp org>
Date: Tue Jul 30 21:02:58 2019 +0200
libgimp: change GimpPlugIn and GimpProcedures so temp procs work
libgimp/gimp.c | 2 +-
libgimp/gimp.def | 10 ++++++----
libgimp/gimpplugin-private.h | 4 ++--
libgimp/gimpplugin.c | 39 ++++++++++++++++++++++-----------------
libgimp/gimpplugin.h | 8 ++++----
libgimp/gimpprocedure-private.c | 18 +++++++++++++++---
libgimp/gimpprocedure-private.h | 3 ++-
libgimp/gimpprocedure.c | 34 ++++++++++++++++++++++++++++++----
libgimp/gimpprocedure.h | 7 ++++++-
9 files changed, 88 insertions(+), 37 deletions(-)
---
diff --git a/libgimp/gimp.c b/libgimp/gimp.c
index c710cf2820..569fe9b750 100644
--- a/libgimp/gimp.c
+++ b/libgimp/gimp.c
@@ -2699,7 +2699,7 @@ gimp_temp_proc_run (GPProcRun *proc_run)
{
GimpProcedure *procedure;
- procedure = gimp_plug_in_get_procedure (PLUG_IN, proc_run->name);
+ procedure = gimp_plug_in_get_temp_procedure (PLUG_IN, proc_run->name);
if (procedure)
{
diff --git a/libgimp/gimp.def b/libgimp/gimp.def
index cfeb7256d7..4dddd112ce 100644
--- a/libgimp/gimp.def
+++ b/libgimp/gimp.def
@@ -619,13 +619,13 @@ EXPORTS
gimp_patterns_set_popup
gimp_pencil
gimp_plug_in_add_menu_branch
- gimp_plug_in_add_procedure
+ gimp_plug_in_add_temp_procedure
gimp_plug_in_create_procedure
- gimp_plug_in_get_procedure
- gimp_plug_in_get_procedures
+ gimp_plug_in_get_temp_procedure
+ gimp_plug_in_get_temp_procedures
gimp_plug_in_get_type
gimp_plug_in_info_set_callbacks
- gimp_plug_in_remove_procedure
+ gimp_plug_in_remove_temp_procedure
gimp_plug_in_set_help_domain
gimp_plug_in_set_translation_domain
gimp_plugin_domain_register
@@ -660,6 +660,8 @@ EXPORTS
gimp_procedure_get_menu_label
gimp_procedure_get_menu_paths
gimp_procedure_get_name
+ gimp_procedure_get_plug_in
+ gimp_procedure_get_proc_type
gimp_procedure_get_return_values
gimp_procedure_get_type
gimp_procedure_new
diff --git a/libgimp/gimpplugin-private.h b/libgimp/gimpplugin-private.h
index cf1d0a52ad..38da2435f8 100644
--- a/libgimp/gimpplugin-private.h
+++ b/libgimp/gimpplugin-private.h
@@ -34,8 +34,6 @@ struct _GimpPlugInMenuBranch
struct _GimpPlugInPrivate
{
- GList *procedures;
-
gchar *translation_domain_name;
GFile *translation_domain_path;
@@ -43,6 +41,8 @@ struct _GimpPlugInPrivate
GFile *help_domain_uri;
GList *menu_branches;
+
+ GList *temp_procedures;
};
diff --git a/libgimp/gimpplugin.c b/libgimp/gimpplugin.c
index 591875802c..b3c888c30d 100644
--- a/libgimp/gimpplugin.c
+++ b/libgimp/gimpplugin.c
@@ -24,6 +24,7 @@
#include "gimp.h"
#include "gimpplugin-private.h"
+#include "gimpprocedure-private.h"
/**
@@ -66,10 +67,10 @@ gimp_plug_in_finalize (GObject *object)
GimpPlugIn *plug_in = GIMP_PLUG_IN (object);
GList *list;
- if (plug_in->priv->procedures)
+ if (plug_in->priv->temp_procedures)
{
- g_list_free_full (plug_in->priv->procedures, g_object_unref);
- plug_in->priv->procedures = NULL;
+ g_list_free_full (plug_in->priv->temp_procedures, g_object_unref);
+ plug_in->priv->temp_procedures = NULL;
}
g_clear_pointer (&plug_in->priv->translation_domain_name, g_free);
@@ -160,53 +161,57 @@ gimp_plug_in_create_procedure (GimpPlugIn *plug_in,
}
void
-gimp_plug_in_add_procedure (GimpPlugIn *plug_in,
- GimpProcedure *procedure)
+gimp_plug_in_add_temp_procedure (GimpPlugIn *plug_in,
+ GimpProcedure *procedure)
{
g_return_if_fail (GIMP_IS_PLUG_IN (plug_in));
g_return_if_fail (GIMP_IS_PROCEDURE (procedure));
- plug_in->priv->procedures = g_list_prepend (plug_in->priv->procedures,
- g_object_ref (procedure));
+ plug_in->priv->temp_procedures = g_list_prepend (plug_in->priv->temp_procedures,
+ g_object_ref (procedure));
+
+ _gimp_procedure_register (procedure);
}
void
-gimp_plug_in_remove_procedure (GimpPlugIn *plug_in,
- const gchar *name)
+gimp_plug_in_remove_temp_procedure (GimpPlugIn *plug_in,
+ const gchar *name)
{
GimpProcedure *procedure;
g_return_if_fail (GIMP_IS_PLUG_IN (plug_in));
g_return_if_fail (name != NULL);
- procedure = gimp_plug_in_get_procedure (plug_in, name);
+ procedure = gimp_plug_in_get_temp_procedure (plug_in, name);
if (procedure)
{
- plug_in->priv->procedures = g_list_remove (plug_in->priv->procedures,
- procedure);
+ _gimp_procedure_unregister (procedure);
+
+ plug_in->priv->temp_procedures = g_list_remove (plug_in->priv->temp_procedures,
+ procedure);
g_object_unref (procedure);
}
}
GList *
-gimp_plug_in_get_procedures (GimpPlugIn *plug_in)
+gimp_plug_in_get_temp_procedures (GimpPlugIn *plug_in)
{
g_return_val_if_fail (GIMP_IS_PLUG_IN (plug_in), NULL);
- return plug_in->priv->procedures;
+ return plug_in->priv->temp_procedures;
}
GimpProcedure *
-gimp_plug_in_get_procedure (GimpPlugIn *plug_in,
- const gchar *name)
+gimp_plug_in_get_temp_procedure (GimpPlugIn *plug_in,
+ const gchar *name)
{
GList *list;
g_return_val_if_fail (GIMP_IS_PLUG_IN (plug_in), NULL);
g_return_val_if_fail (name != NULL, NULL);
- for (list = plug_in->priv->procedures; list; list = g_list_next (list))
+ for (list = plug_in->priv->temp_procedures; list; list = g_list_next (list))
{
GimpProcedure *procedure = list->data;
diff --git a/libgimp/gimpplugin.h b/libgimp/gimpplugin.h
index a92305c1d2..2e61501836 100644
--- a/libgimp/gimpplugin.h
+++ b/libgimp/gimpplugin.h
@@ -90,13 +90,13 @@ void gimp_plug_in_add_menu_branch (GimpPlugIn *plug_in,
GimpProcedure * gimp_plug_in_create_procedure (GimpPlugIn *plug_in,
const gchar *name);
-void gimp_plug_in_add_procedure (GimpPlugIn *plug_in,
+void gimp_plug_in_add_temp_procedure (GimpPlugIn *plug_in,
GimpProcedure *procedure);
-void gimp_plug_in_remove_procedure (GimpPlugIn *plug_in,
+void gimp_plug_in_remove_temp_procedure (GimpPlugIn *plug_in,
const gchar *name);
-GList * gimp_plug_in_get_procedures (GimpPlugIn *plug_in);
-GimpProcedure * gimp_plug_in_get_procedure (GimpPlugIn *plug_in,
+GList * gimp_plug_in_get_temp_procedures (GimpPlugIn *plug_in);
+GimpProcedure * gimp_plug_in_get_temp_procedure (GimpPlugIn *plug_in,
const gchar *name);
diff --git a/libgimp/gimpprocedure-private.c b/libgimp/gimpprocedure-private.c
index 65c2d71403..07ecc7c419 100644
--- a/libgimp/gimpprocedure-private.c
+++ b/libgimp/gimpprocedure-private.c
@@ -34,13 +34,14 @@
#include "gimpprocedure-private.h"
+extern GIOChannel *_writechannel;
+
+
/* public functions */
void
_gimp_procedure_register (GimpProcedure *procedure)
{
- extern GIOChannel *_writechannel;
-
GParamSpec **args;
GParamSpec **return_vals;
gint n_args;
@@ -65,7 +66,7 @@ _gimp_procedure_register (GimpProcedure *procedure)
proc_install.date = (gchar *) gimp_procedure_get_date (procedure);
proc_install.menu_label = (gchar *) gimp_procedure_get_menu_label (procedure);
proc_install.image_types = (gchar *) gimp_procedure_get_image_types (procedure);
- proc_install.type = GIMP_PLUGIN;
+ proc_install.type = gimp_procedure_get_proc_type (procedure);
proc_install.nparams = n_args;
proc_install.nreturn_vals = n_return_vals;
proc_install.params = g_new0 (GPParamDef, n_args);
@@ -103,3 +104,14 @@ _gimp_procedure_register (GimpProcedure *procedure)
list->data);
}
}
+
+void
+_gimp_procedure_unregister (GimpProcedure *procedure)
+{
+ GPProcUninstall proc_uninstall;
+
+ proc_uninstall.name = (gchar *) gimp_procedure_get_name (procedure);
+
+ if (! gp_proc_uninstall_write (_writechannel, &proc_uninstall, NULL))
+ gimp_quit ();
+}
diff --git a/libgimp/gimpprocedure-private.h b/libgimp/gimpprocedure-private.h
index 76b117eb05..35e9971ec0 100644
--- a/libgimp/gimpprocedure-private.h
+++ b/libgimp/gimpprocedure-private.h
@@ -24,7 +24,8 @@
G_BEGIN_DECLS
-void _gimp_procedure_register (GimpProcedure *procedure);
+void _gimp_procedure_register (GimpProcedure *procedure);
+void _gimp_procedure_unregister (GimpProcedure *procedure);
G_END_DECLS
diff --git a/libgimp/gimpprocedure.c b/libgimp/gimpprocedure.c
index 4309313cc7..5bd67ee840 100644
--- a/libgimp/gimpprocedure.c
+++ b/libgimp/gimpprocedure.c
@@ -51,6 +51,9 @@ gimp_pdb_error_quark (void)
struct _GimpProcedurePrivate
{
+ GimpPlugIn *plug_in; /* the procedure's plug-in */
+ GimpPDBProcType proc_type; /* procedure type */
+
gchar *name; /* procedure name */
gchar *menu_label;
gchar *blurb; /* Short procedure description */
@@ -113,6 +116,7 @@ gimp_procedure_finalize (GObject *object)
GimpProcedure *procedure = GIMP_PROCEDURE (object);
gint i;
+ g_clear_object (&procedure->priv->plug_in);
g_clear_pointer (&procedure->priv->name, g_free);
gimp_procedure_free_strings (procedure);
@@ -146,22 +150,44 @@ gimp_procedure_finalize (GObject *object)
/* public functions */
GimpProcedure *
-gimp_procedure_new (const gchar *name,
- GimpRunFunc run_func)
+gimp_procedure_new (GimpPlugIn *plug_in,
+ const gchar *name,
+ GimpPDBProcType proc_type,
+ GimpRunFunc run_func)
{
GimpProcedure *procedure;
+ g_return_val_if_fail (GIMP_IS_PLUG_IN (plug_in), NULL);
g_return_val_if_fail (name != NULL, NULL);
+ g_return_val_if_fail (proc_type != GIMP_INTERNAL, NULL);
g_return_val_if_fail (run_func != NULL, NULL);
procedure = g_object_new (GIMP_TYPE_PROCEDURE, NULL);
- procedure->priv->name = g_strdup (name);
- procedure->priv->run_func = run_func;
+ procedure->priv->plug_in = g_object_ref (plug_in);
+ procedure->priv->proc_type = proc_type;
+ procedure->priv->name = g_strdup (name);
+ procedure->priv->run_func = run_func;
return procedure;
}
+GimpPlugIn *
+gimp_procedure_get_plug_in (GimpProcedure *procedure)
+{
+ g_return_val_if_fail (GIMP_IS_PROCEDURE (procedure), NULL);
+
+ return procedure->priv->plug_in;
+}
+
+GimpPDBProcType
+gimp_procedure_get_proc_type (GimpProcedure *procedure)
+{
+ g_return_val_if_fail (GIMP_IS_PROCEDURE (procedure), GIMP_PLUGIN);
+
+ return procedure->priv->proc_type;
+}
+
void
gimp_procedure_set_strings (GimpProcedure *procedure,
const gchar *menu_label,
diff --git a/libgimp/gimpprocedure.h b/libgimp/gimpprocedure.h
index 7eab533f44..ebea525068 100644
--- a/libgimp/gimpprocedure.h
+++ b/libgimp/gimpprocedure.h
@@ -58,9 +58,14 @@ struct _GimpProcedureClass
GType gimp_procedure_get_type (void) G_GNUC_CONST;
-GimpProcedure * gimp_procedure_new (const gchar *name,
+GimpProcedure * gimp_procedure_new (GimpPlugIn *plug_in,
+ const gchar *name,
+ GimpPDBProcType proc_type,
GimpRunFunc run_func);
+GimpPlugIn * gimp_procedure_get_plug_in (GimpProcedure *procedure);
+GimpPDBProcType gimp_procedure_get_proc_type (GimpProcedure *procedure);
+
void gimp_procedure_set_strings (GimpProcedure *procedure,
const gchar *menu_label,
const gchar *blurb,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]