[gimp] libgimp: allow to call gimp_procedure_add_menu_path() on installed procs



commit b33c3086a9f5a7548d1ebae4c74416da2801bb5e
Author: Michael Natterer <mitch gimp org>
Date:   Mon Aug 12 19:06:13 2019 +0200

    libgimp: allow to call gimp_procedure_add_menu_path() on installed procs
    
    Adding menu paths must be possible even after the procedure has been
    installed, script-fu registers all menu paths afer installing its
    procedures so they are properly sorted.

 libgimp/gimpprocedure.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
---
diff --git a/libgimp/gimpprocedure.c b/libgimp/gimpprocedure.c
index 1f0aec9c1e..01736ed642 100644
--- a/libgimp/gimpprocedure.c
+++ b/libgimp/gimpprocedure.c
@@ -80,6 +80,8 @@ struct _GimpProcedurePrivate
   GimpRunFunc       run_func;
   gpointer          run_data;
   GDestroyNotify    run_data_destroy;
+
+  gboolean          installed;
 };
 
 
@@ -295,6 +297,8 @@ gimp_procedure_real_install (GimpProcedure *procedure)
   gsize          icon_data_length = 0;
   gint           i;
 
+  g_return_if_fail (procedure->priv->installed == FALSE);
+
   args        = gimp_procedure_get_arguments (procedure, &n_args);
   return_vals = gimp_procedure_get_return_values (procedure, &n_return_vals);
 
@@ -392,6 +396,8 @@ gimp_procedure_real_install (GimpProcedure *procedure)
       _gimp_plugin_menu_register (gimp_procedure_get_name (procedure),
                                   list->data);
     }
+
+  procedure->priv->installed = TRUE;
 }
 
 static void
@@ -400,6 +406,8 @@ gimp_procedure_real_uninstall (GimpProcedure *procedure)
   GimpPlugIn      *plug_in;
   GPProcUninstall  proc_uninstall;
 
+  g_return_if_fail (procedure->priv->installed == TRUE);
+
   proc_uninstall.name = (gchar *) gimp_procedure_get_name (procedure);
 
   plug_in = gimp_procedure_get_plug_in (procedure);
@@ -407,6 +415,8 @@ gimp_procedure_real_uninstall (GimpProcedure *procedure)
   if (! gp_proc_uninstall_write (_gimp_plug_in_get_write_channel (plug_in),
                                  &proc_uninstall, plug_in))
     gimp_quit ();
+
+  procedure->priv->installed = FALSE;
 }
 
 static GimpValueArray *
@@ -660,6 +670,10 @@ gimp_procedure_add_menu_path (GimpProcedure *procedure,
 
   procedure->priv->menu_paths = g_list_append (procedure->priv->menu_paths,
                                                g_strdup (menu_path));
+
+  if (procedure->priv->installed)
+    _gimp_plugin_menu_register (gimp_procedure_get_name (procedure),
+                                menu_path);
 }
 
 /**


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]