[gimp] libgimpbase, app: remove the plug-in menu_path compat code



commit 03feba0f35268e73ea383a2ef7d03ab72ee430b5
Author: Michael Natterer <mitch gimp org>
Date:   Fri Jul 13 14:07:44 2018 +0200

    libgimpbase, app: remove the plug-in menu_path compat code
    
    Registering a full menu path as a procedure's menu label is now
    forbidden and causes the procedure to be rejected.
    
    Bump the plug-in protocol version so a pluginrc containing such cruft
    is not used.

 app/actions/plug-in-actions.c     | 75 +++++++-----------------------------
 app/menus/plug-in-menus.c         | 80 +++++++++++----------------------------
 app/plug-in/gimpplugin-message.c  | 54 +++++++++++---------------
 app/plug-in/gimppluginprocedure.c | 39 ++++---------------
 libgimp/gimp.c                    |  8 +---
 libgimpbase/gimpprotocol.c        |  8 ++--
 libgimpbase/gimpprotocol.h        |  4 +-
 7 files changed, 74 insertions(+), 194 deletions(-)
---
diff --git a/app/actions/plug-in-actions.c b/app/actions/plug-in-actions.c
index ad39a614bf..de100b7f5a 100644
--- a/app/actions/plug-in-actions.c
+++ b/app/actions/plug-in-actions.c
@@ -152,8 +152,8 @@ plug_in_actions_update (GimpActionGroup *group,
     {
       GimpPlugInProcedure *proc = list->data;
 
-      if ((proc->menu_label || proc->menu_paths) &&
-          ! proc->file_proc                      &&
+      if (proc->menu_label  &&
+          ! proc->file_proc &&
           proc->image_types_val)
         {
           GimpProcedure *procedure = GIMP_PROCEDURE (proc);
@@ -224,7 +224,7 @@ plug_in_actions_register_procedure (GimpPDB         *pdb,
                                G_CALLBACK (plug_in_actions_menu_path_added),
                                group, 0);
 
-      if ((plug_in_proc->menu_label || plug_in_proc->menu_paths) &&
+      if (plug_in_proc->menu_label &&
           ! plug_in_proc->file_proc)
         {
 #if 0
@@ -250,7 +250,7 @@ plug_in_actions_unregister_procedure (GimpPDB         *pdb,
                                             plug_in_actions_menu_path_added,
                                             group);
 
-      if ((plug_in_proc->menu_label || plug_in_proc->menu_paths) &&
+      if (plug_in_proc->menu_label &&
           ! plug_in_proc->file_proc)
         {
           GtkAction *action;
@@ -298,45 +298,10 @@ plug_in_actions_add_proc (GimpActionGroup     *group,
 {
   GimpProcedureActionEntry  entry;
   const gchar              *locale_domain;
-  gchar                    *path_original    = NULL;
-  gchar                    *path_translated  = NULL;
+  GList                    *list;
 
   locale_domain = gimp_plug_in_procedure_get_locale_domain (proc);
 
-  if (! proc->menu_label)
-    {
-      gchar *p1, *p2;
-
-      path_original   = proc->menu_paths->data;
-      path_translated = dgettext (locale_domain, path_original);
-
-      path_original = g_strdup (path_original);
-
-      if (plug_in_actions_check_translation (path_original, path_translated))
-        path_translated = g_strdup (path_translated);
-      else
-        path_translated = g_strdup (path_original);
-
-      p1 = strrchr (path_original, '/');
-      p2 = strrchr (path_translated, '/');
-
-      if (p1 && p2)
-        {
-          *p1 = '\0';
-          *p2 = '\0';
-        }
-      else
-        {
-          g_warning ("bad menu path for procedure \"%s\": \"%s\"",
-                     gimp_object_get_name (proc), path_original);
-
-          g_free (path_original);
-          g_free (path_translated);
-
-          return;
-        }
-    }
-
   entry.name        = gimp_object_get_name (proc);
   entry.icon_name   = gimp_viewable_get_icon_name (GIMP_VIEWABLE (proc));
   entry.label       = gimp_procedure_get_menu_label (GIMP_PROCEDURE (proc));
@@ -348,32 +313,18 @@ plug_in_actions_add_proc (GimpActionGroup     *group,
   gimp_action_group_add_procedure_actions (group, &entry, 1,
                                            G_CALLBACK (plug_in_run_cmd_callback));
 
-  if (proc->menu_label)
-    {
-      GList *list;
-
-      for (list = proc->menu_paths; list; list = g_list_next (list))
-        {
-          const gchar *original   = list->data;
-          const gchar *translated = dgettext (locale_domain, original);
-
-          if (plug_in_actions_check_translation (original, translated))
-            plug_in_actions_build_path (group, original, translated);
-          else
-            plug_in_actions_build_path (group, original, original);
-        }
-    }
-  else
+  for (list = proc->menu_paths; list; list = g_list_next (list))
     {
-      plug_in_actions_build_path (group, path_original, path_translated);
+      const gchar *original   = list->data;
+      const gchar *translated = dgettext (locale_domain, original);
 
-      g_free (path_original);
-      g_free (path_translated);
+      if (plug_in_actions_check_translation (original, translated))
+        plug_in_actions_build_path (group, original, translated);
+      else
+        plug_in_actions_build_path (group, original, original);
     }
 
-  if ((proc->menu_label || proc->menu_paths) &&
-      ! proc->file_proc                      &&
-      proc->image_types_val)
+  if (proc->image_types_val)
     {
       GimpContext  *context  = gimp_get_user_context (group->gimp);
       GimpImage    *image    = gimp_context_get_image (context);
diff --git a/app/menus/plug-in-menus.c b/app/menus/plug-in-menus.c
index a86957bc00..2bf0713c4a 100644
--- a/app/menus/plug-in-menus.c
+++ b/app/menus/plug-in-menus.c
@@ -134,49 +134,36 @@ plug_in_menus_setup (GimpUIManager *manager,
                                G_CALLBACK (plug_in_menus_menu_path_added),
                                manager, 0);
 
-      if (plug_in_proc->menu_paths &&
+      if (plug_in_proc->menu_label &&
           ! plug_in_proc->file_proc)
         {
-          GList *path;
+          GFile       *file = gimp_plug_in_procedure_get_file (plug_in_proc);
+          const gchar *locale_domain;
+          GList       *path;
+
+          locale_domain =
+            gimp_plug_in_manager_get_locale_domain (plug_in_manager,
+                                                    file, NULL);
 
           for (path = plug_in_proc->menu_paths; path; path = g_list_next (path))
             {
               if (g_str_has_prefix (path->data, manager->name))
                 {
                   PlugInMenuEntry *entry = g_slice_new0 (PlugInMenuEntry);
-                  GFile           *file;
-                  const gchar     *locale_domain;
+                  gchar           *menu;
 
                   entry->proc      = plug_in_proc;
                   entry->menu_path = path->data;
 
-                  file = gimp_plug_in_procedure_get_file (plug_in_proc);
-
-                  locale_domain =
-                    gimp_plug_in_manager_get_locale_domain (plug_in_manager,
-                                                            file, NULL);
-
-                  if (plug_in_proc->menu_label)
-                    {
-                      gchar *menu;
-
-                      menu = g_strconcat (dgettext (locale_domain,
-                                                    path->data),
-                                          "/",
-                                          dgettext (locale_domain,
-                                                    plug_in_proc->menu_label),
-                                          NULL);
-
-                      plug_in_menus_tree_insert (menu_entries, menu, entry);
-                      g_free (menu);
-                    }
-                  else
-                    {
-                      plug_in_menus_tree_insert (menu_entries,
-                                                 dgettext (locale_domain,
-                                                           path->data),
-                                                 entry);
-                    }
+                  menu = g_strconcat (dgettext (locale_domain,
+                                                path->data),
+                                      "/",
+                                      dgettext (locale_domain,
+                                                plug_in_proc->menu_label),
+                                      NULL);
+
+                  plug_in_menus_tree_insert (menu_entries, menu, entry);
+                  g_free (menu);
                 }
             }
         }
@@ -216,7 +203,7 @@ plug_in_menus_register_procedure (GimpPDB       *pdb,
                                G_CALLBACK (plug_in_menus_menu_path_added),
                                manager, 0);
 
-      if ((plug_in_proc->menu_label || plug_in_proc->menu_paths) &&
+      if (plug_in_proc->menu_label &&
           ! plug_in_proc->file_proc)
         {
           GList *list;
@@ -244,7 +231,7 @@ plug_in_menus_unregister_procedure (GimpPDB       *pdb,
                                             plug_in_menus_menu_path_added,
                                             manager);
 
-      if ((plug_in_proc->menu_label || plug_in_proc->menu_paths) &&
+      if (plug_in_proc->menu_label &&
           ! plug_in_proc->file_proc)
         {
           GList *list;
@@ -367,7 +354,6 @@ plug_in_menus_add_proc (GimpUIManager       *manager,
                         GimpPlugInProcedure *proc,
                         const gchar         *menu_path)
 {
-  gchar *path;
   gchar *merge_key;
   gchar *stripped_path;
   gchar *action_path;
@@ -378,24 +364,8 @@ plug_in_menus_add_proc (GimpUIManager       *manager,
   g_return_if_fail (ui_path != NULL);
   g_return_if_fail (GIMP_IS_PLUG_IN_PROCEDURE (proc));
 
-  path = g_strdup (menu_path);
-
   if (! proc->menu_label)
-    {
-      gchar *p;
-
-      if (! path)
-        return;
-
-      p = strrchr (path, '/');
-      if (! p)
-        {
-          g_free (path);
-          return;
-        }
-
-      *p = '\0';
-    }
+    return;
 
   merge_key = g_strdup_printf ("%s-merge-id", gimp_object_get_name (proc));
 
@@ -421,16 +391,13 @@ plug_in_menus_add_proc (GimpUIManager       *manager,
                          GUINT_TO_POINTER (menu_merge_id));
     }
 
-  stripped_path = gimp_strip_uline (path);
+  stripped_path = gimp_strip_uline (menu_path);
   action_path = plug_in_menus_build_path (manager, ui_path, menu_merge_id,
                                           stripped_path, FALSE);
   g_free (stripped_path);
 
   if (! action_path)
-    {
-      g_free (path);
-      return;
-    }
+    return;
 
   GIMP_LOG (MENUS, "adding menu item for '%s' (@ %s)",
             gimp_object_get_name (proc), action_path);
@@ -443,7 +410,6 @@ plug_in_menus_add_proc (GimpUIManager       *manager,
                          FALSE);
 
   g_free (action_path);
-  g_free (path);
 }
 
 static void
diff --git a/app/plug-in/gimpplugin-message.c b/app/plug-in/gimpplugin-message.c
index cdbdb27be2..89570cea7f 100644
--- a/app/plug-in/gimpplugin-message.c
+++ b/app/plug-in/gimpplugin-message.c
@@ -747,18 +747,18 @@ gimp_plug_in_handle_proc_install (GimpPlugIn    *plug_in,
 #define VALIDATE(str)         (g_utf8_validate ((str), -1, NULL))
 #define VALIDATE_OR_NULL(str) ((str) == NULL || g_utf8_validate ((str), -1, NULL))
 
-  if (VALIDATE_OR_NULL (proc_install->menu_path) &&
-      VALIDATE         (canonical)               &&
-      VALIDATE_OR_NULL (proc_install->blurb)     &&
-      VALIDATE_OR_NULL (proc_install->help)      &&
-      VALIDATE_OR_NULL (proc_install->author)    &&
-      VALIDATE_OR_NULL (proc_install->copyright) &&
+  if (VALIDATE_OR_NULL (proc_install->menu_label) &&
+      VALIDATE         (canonical)                &&
+      VALIDATE_OR_NULL (proc_install->blurb)      &&
+      VALIDATE_OR_NULL (proc_install->help)       &&
+      VALIDATE_OR_NULL (proc_install->author)     &&
+      VALIDATE_OR_NULL (proc_install->copyright)  &&
       VALIDATE_OR_NULL (proc_install->date))
     {
       null_name  = FALSE;
       valid_utf8 = TRUE;
 
-      for (i = 0; i < proc_install->nparams && valid_utf8 && !null_name; i++)
+      for (i = 0; i < proc_install->nparams && valid_utf8 && ! null_name; i++)
         {
           if (! proc_install->params[i].name)
             {
@@ -810,6 +810,19 @@ gimp_plug_in_handle_proc_install (GimpPlugIn    *plug_in,
       return;
     }
 
+  if (proc_install->menu_label && strlen (proc_install->menu_label) &&
+      proc_install->menu_label[0] == '<')
+    {
+      gimp_message (plug_in->manager->gimp, NULL, GIMP_MESSAGE_ERROR,
+                    "Plug-in \"%s\"\n(%s)\n\n"
+                    "attempted to install a procedure with a full menu path "
+                    "as menu label, this is not supported any longer.",
+                    gimp_object_get_name (plug_in),
+                    gimp_file_get_utf8_name (plug_in->file));
+      g_free (canonical);
+      return;
+    }
+
   /*  Create the procedure object  */
 
   switch (proc_install->type)
@@ -840,6 +853,9 @@ gimp_plug_in_handle_proc_install (GimpPlugIn    *plug_in,
                               proc_install->date,
                               NULL);
 
+  if (proc_install->menu_label && strlen (proc_install->menu_label))
+    proc->menu_label = g_strdup (proc_install->menu_label);
+
   gimp_plug_in_procedure_set_image_types (proc, proc_install->image_types);
 
   for (i = 0; i < proc_install->nparams; i++)
@@ -864,30 +880,6 @@ gimp_plug_in_handle_proc_install (GimpPlugIn    *plug_in,
       gimp_procedure_add_return_value (procedure, pspec);
     }
 
-  /*  Sanity check menu path  */
-
-  if (proc_install->menu_path && strlen (proc_install->menu_path))
-    {
-      if (proc_install->menu_path[0] == '<')
-        {
-          GError *error = NULL;
-
-          if (! gimp_plug_in_procedure_add_menu_path (proc,
-                                                      proc_install->menu_path,
-                                                      &error))
-            {
-              gimp_message_literal (plug_in->manager->gimp,
-                                    NULL, GIMP_MESSAGE_WARNING,
-                                    error->message);
-              g_clear_error (&error);
-            }
-        }
-      else
-        {
-          proc->menu_label = g_strdup (proc_install->menu_path);
-        }
-    }
-
   /*  Install the procedure  */
 
   switch (proc_install->type)
diff --git a/app/plug-in/gimppluginprocedure.c b/app/plug-in/gimppluginprocedure.c
index 01291cdf93..e46190cae0 100644
--- a/app/plug-in/gimppluginprocedure.c
+++ b/app/plug-in/gimppluginprocedure.c
@@ -242,31 +242,20 @@ static const gchar *
 gimp_plug_in_procedure_get_label (GimpProcedure *procedure)
 {
   GimpPlugInProcedure *proc = GIMP_PLUG_IN_PROCEDURE (procedure);
-  const gchar         *path;
-  gchar               *stripped;
+  const gchar         *translated;
   gchar               *ellipsis;
   gchar               *label;
 
   if (proc->label)
     return proc->label;
 
-  if (proc->menu_label)
-    path = dgettext (gimp_plug_in_procedure_get_locale_domain (proc),
-                     proc->menu_label);
-  else if (proc->menu_paths)
-    path = dgettext (gimp_plug_in_procedure_get_locale_domain (proc),
-                     proc->menu_paths->data);
-  else
+  if (! proc->menu_label)
     return NULL;
 
-  stripped = gimp_strip_uline (path);
-
-  if (proc->menu_label)
-    label = g_strdup (stripped);
-  else
-    label = g_path_get_basename (stripped);
+  translated = dgettext (gimp_plug_in_procedure_get_locale_domain (proc),
+                         proc->menu_label);
 
-  g_free (stripped);
+  label = gimp_strip_uline (translated);
 
   ellipsis = strstr (label, "...");
 
@@ -287,22 +276,8 @@ gimp_plug_in_procedure_get_menu_label (GimpProcedure *procedure)
   GimpPlugInProcedure *proc = GIMP_PLUG_IN_PROCEDURE (procedure);
 
   if (proc->menu_label)
-    {
-      return dgettext (gimp_plug_in_procedure_get_locale_domain (proc),
-                       proc->menu_label);
-    }
-  else if (proc->menu_paths)
-    {
-      const gchar *translated;
-
-      translated = dgettext (gimp_plug_in_procedure_get_locale_domain (proc),
-                             proc->menu_paths->data);
-
-      translated = strrchr (translated, '/');
-
-      if (translated)
-        return translated + 1;
-    }
+    return dgettext (gimp_plug_in_procedure_get_locale_domain (proc),
+                     proc->menu_label);
 
   return GIMP_PROCEDURE_CLASS (parent_class)->get_menu_label (procedure);
 }
diff --git a/libgimp/gimp.c b/libgimp/gimp.c
index 7b4ee00b3f..a66eaa49df 100644
--- a/libgimp/gimp.c
+++ b/libgimp/gimp.c
@@ -746,11 +746,7 @@ gimp_quit (void)
  *
  * @menu_label defines the label that should be used for the
  * procedure's menu entry. The position where to register in the menu
- * hierarchy is chosen using gimp_plugin_menu_register().  This
- * function also still accepts the old (pre-2.2) way of registering a
- * menu entry and takes a string in the form
- * "&lt;Domain&gt;/Path/To/My/Menu"
- * (e.g. "&lt;Image&gt;/Filters/Render/Useless").
+ * hierarchy is chosen using gimp_plugin_menu_register().
  *
  * It is possible to register a procedure only for keyboard-shortcut
  * activation by passing a @menu_label to gimp_install_procedure() but
@@ -813,7 +809,7 @@ gimp_install_procedure (const gchar        *name,
   proc_install.author       = (gchar *) author;
   proc_install.copyright    = (gchar *) copyright;
   proc_install.date         = (gchar *) date;
-  proc_install.menu_path    = (gchar *) menu_label;
+  proc_install.menu_label   = (gchar *) menu_label;
   proc_install.image_types  = (gchar *) image_types;
   proc_install.type         = type;
   proc_install.nparams      = n_params;
diff --git a/libgimpbase/gimpprotocol.c b/libgimpbase/gimpprotocol.c
index c71eabda7e..c4aaa59b36 100644
--- a/libgimpbase/gimpprotocol.c
+++ b/libgimpbase/gimpprotocol.c
@@ -1012,7 +1012,7 @@ _gp_proc_install_read (GIOChannel      *channel,
                                 &proc_install->date, 1, user_data))
     goto cleanup;
   if (! _gimp_wire_read_string (channel,
-                                &proc_install->menu_path, 1, user_data))
+                                &proc_install->menu_label, 1, user_data))
     goto cleanup;
   if (! _gimp_wire_read_string (channel,
                                 &proc_install->image_types, 1, user_data))
@@ -1074,7 +1074,7 @@ _gp_proc_install_read (GIOChannel      *channel,
   g_free (proc_install->author);
   g_free (proc_install->copyright);
   g_free (proc_install->date);
-  g_free (proc_install->menu_path);
+  g_free (proc_install->menu_label);
   g_free (proc_install->image_types);
 
   if (proc_install->params)
@@ -1136,7 +1136,7 @@ _gp_proc_install_write (GIOChannel      *channel,
                                  &proc_install->date, 1, user_data))
     return;
   if (! _gimp_wire_write_string (channel,
-                                 &proc_install->menu_path, 1, user_data))
+                                 &proc_install->menu_label, 1, user_data))
     return;
   if (! _gimp_wire_write_string (channel,
                                  &proc_install->image_types, 1, user_data))
@@ -1200,7 +1200,7 @@ _gp_proc_install_destroy (GimpWireMessage *msg)
       g_free (proc_install->author);
       g_free (proc_install->copyright);
       g_free (proc_install->date);
-      g_free (proc_install->menu_path);
+      g_free (proc_install->menu_label);
       g_free (proc_install->image_types);
 
       for (i = 0; i < proc_install->nparams; i++)
diff --git a/libgimpbase/gimpprotocol.h b/libgimpbase/gimpprotocol.h
index 9208fa5a6e..5b2d63fe0a 100644
--- a/libgimpbase/gimpprotocol.h
+++ b/libgimpbase/gimpprotocol.h
@@ -26,7 +26,7 @@ G_BEGIN_DECLS
 
 /* Increment every time the protocol changes
  */
-#define GIMP_PROTOCOL_VERSION  0x0101
+#define GIMP_PROTOCOL_VERSION  0x0102
 
 
 enum
@@ -162,7 +162,7 @@ struct _GPProcInstall
   gchar      *author;
   gchar      *copyright;
   gchar      *date;
-  gchar      *menu_path;
+  gchar      *menu_label;
   gchar      *image_types;
   guint32     type;
   guint32     nparams;


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