[Xfce4-commits] [xfce/thunar] 01/04: Eschew GtkAction from Thunarx API

noreply at xfce.org noreply at xfce.org
Thu Nov 2 04:40:35 CET 2017


This is an automated email from the git hooks/post-receive script.

a   n   d   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository xfce/thunar.

commit 47fe1cbc3c4a49c93499d8d699fe9e95e68f82d9
Author: Andre Miranda <andreldm at xfce.org>
Date:   Sun Oct 8 12:14:26 2017 -0300

    Eschew GtkAction from Thunarx API
    
    Instead use the new ThunarxMenuItem class and keep all
    the deprecated stuff internally, away from the extensions
    API.
---
 docs/reference/thunarx/thunarx-docs.xml        |   2 +-
 docs/reference/thunarx/thunarx.types           |   1 +
 examples/tex-open-terminal/tex-open-terminal.c |  28 +-
 plugins/thunar-uca/thunar-uca-provider.c       |  46 ++--
 plugins/thunar-wallpaper/twp-provider.c        |  41 ++-
 thunar/thunar-icon-factory.c                   |  20 +-
 thunar/thunar-icon-factory.h                   |   3 +-
 thunar/thunar-icon-renderer.c                  |   2 +-
 thunar/thunar-standard-view.c                  |  36 +--
 thunar/thunar-util.c                           |  64 +++++
 thunar/thunar-util.h                           |   5 +
 thunar/thunar-window.c                         |  52 ++--
 thunarx/Makefile.am                            |   2 +
 thunarx/thunarx-menu-item.c                    | 337 +++++++++++++++++++++++++
 thunarx/thunarx-menu-item.h                    |  53 ++++
 thunarx/thunarx-menu-provider.c                |  20 +-
 thunarx/thunarx-preferences-provider.c         |   6 +-
 thunarx/thunarx-renamer.c                      |  12 +-
 thunarx/thunarx.h                              |   1 +
 19 files changed, 606 insertions(+), 125 deletions(-)

diff --git a/docs/reference/thunarx/thunarx-docs.xml b/docs/reference/thunarx/thunarx-docs.xml
index 0d6cc09..3fc60d3 100644
--- a/docs/reference/thunarx/thunarx-docs.xml
+++ b/docs/reference/thunarx/thunarx-docs.xml
@@ -190,7 +190,7 @@
         <title>Names</title>
 
         <para>
-          Most objects created by the extensions need names, e.g. the <link linkend="GtkAction"><type>GtkAction</type></link>s
+          Most objects created by the extensions need names, e.g. the <link linkend="ThunarxMenuItem"><type>ThunarxMenuItem</type></link>s
           returned from the <link linkend="ThunarxMenuProvider"><type>ThunarxMenuProvider</type></link>s. These names must be
           namespaced with the name of the extension. For example the main action returned from the
           <application>TexOpenTerminal</application> extension (which can be found in the <filename
diff --git a/docs/reference/thunarx/thunarx.types b/docs/reference/thunarx/thunarx.types
index 588ee86..81cbc41 100644
--- a/docs/reference/thunarx/thunarx.types
+++ b/docs/reference/thunarx/thunarx.types
@@ -1,6 +1,7 @@
 #include <thunarx/thunarx.h>
 
 thunarx_file_info_get_type
+thunarx_menu_item_get_type
 thunarx_menu_provider_get_type
 thunarx_preferences_provider_get_type
 thunarx_property_page_get_type
diff --git a/examples/tex-open-terminal/tex-open-terminal.c b/examples/tex-open-terminal/tex-open-terminal.c
index 42da069..18c1788 100644
--- a/examples/tex-open-terminal/tex-open-terminal.c
+++ b/examples/tex-open-terminal/tex-open-terminal.c
@@ -41,7 +41,7 @@ static GList *tex_open_terminal_get_file_actions   (ThunarxMenuProvider      *pr
 static GList *tex_open_terminal_get_folder_actions (ThunarxMenuProvider      *provider,
                                                     GtkWidget                *window,
                                                     ThunarxFileInfo          *folder);
-static void   tex_open_terminal_activated          (GtkAction                *action,
+static void   tex_open_terminal_activated          (ThunarxMenuItem          *item,
                                                     GtkWidget                *window);
 
 
@@ -110,10 +110,10 @@ tex_open_terminal_get_folder_actions (ThunarxMenuProvider *provider,
                                       GtkWidget           *window,
                                       ThunarxFileInfo     *folder)
 {
-  GtkAction *action = NULL;
-  gchar     *scheme;
-  gchar     *path;
-  gchar     *uri;
+  ThunarxMenuItem *item = NULL;
+  gchar           *scheme;
+  gchar           *path;
+  gchar           *uri;
 
   /* determine the uri scheme of the folder and check if we support it */
   scheme = thunarx_file_info_get_uri_scheme (folder);
@@ -127,33 +127,33 @@ tex_open_terminal_get_folder_actions (ThunarxMenuProvider *provider,
       /* check if we have a valid path here */
       if (G_LIKELY (path != NULL))
         {
-          action = gtk_action_new ("TexOpenTerminal::open-terminal-here", "Open Terminal Here", "Open Terminal in this folder", NULL);
-          g_signal_connect (G_OBJECT (action), "activate", G_CALLBACK (tex_open_terminal_activated), window);
-          g_object_set_data_full (G_OBJECT (action), "open-terminal-here-path", path, g_free);
+          item = thunarx_menu_item_new ("TexOpenTerminal::open-terminal-here", "Open Terminal Here", "Open Terminal in this folder", "utilities-terminal");
+          g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (tex_open_terminal_activated), window);
+          g_object_set_data_full (G_OBJECT (item), "open-terminal-here-path", path, g_free);
         }
     }
   g_free (scheme);
 
-  return (action != NULL) ? g_list_prepend (NULL, action) : NULL;
+  return (item != NULL) ? g_list_prepend (NULL, item) : NULL;
 }
 
 
 
 static void
-tex_open_terminal_activated (GtkAction *action,
-                             GtkWidget *window)
+tex_open_terminal_activated (ThunarxMenuItem *item,
+                             GtkWidget       *window)
 {
   const gchar *path;
   GError      *error = NULL;
   gchar       *command;
 
   /* determine the folder path */
-  path = g_object_get_data (G_OBJECT (action), "open-terminal-here-path");
+  path = g_object_get_data (G_OBJECT (item), "open-terminal-here-path");
   if (G_UNLIKELY (path == NULL))
     return;
   
   /* build up the command line for the terminal */
-  command = g_strdup_printf ("Terminal --working-directory \"%s\"", path);
+  command = g_strdup_printf ("exo-open --launch TerminalEmulator --working-directory \"%s\"", path);
 
   /* try to run the terminal command */
   if (!xfce_spawn_command_line_on_screen (gtk_widget_get_screen (window), command, FALSE, FALSE, &error))
@@ -166,5 +166,3 @@ tex_open_terminal_activated (GtkAction *action,
   /* cleanup */
   g_free (command);
 }
-
-
diff --git a/plugins/thunar-uca/thunar-uca-provider.c b/plugins/thunar-uca/thunar-uca-provider.c
index e14db0c..7686ee3 100644
--- a/plugins/thunar-uca/thunar-uca-provider.c
+++ b/plugins/thunar-uca/thunar-uca-provider.c
@@ -48,7 +48,7 @@ static GList *thunar_uca_provider_get_folder_actions        (ThunarxMenuProvider
                                                              GtkWidget                        *window,
                                                              ThunarxFileInfo                  *folder);
 static void   thunar_uca_provider_activated                 (ThunarUcaProvider                *uca_provider,
-                                                             GtkAction                        *action);
+                                                             ThunarxMenuItem                  *item);
 static void   thunar_uca_provider_child_watch               (ThunarUcaProvider                *uca_provider,
                                                              gint                              exit_status);
 static void   thunar_uca_provider_child_watch_destroy       (gpointer                          user_data,
@@ -175,15 +175,15 @@ static GList*
 thunar_uca_provider_get_actions (ThunarxPreferencesProvider *preferences_provider,
                                  GtkWidget                  *window)
 {
-  GtkAction *action;
-  GClosure  *closure;
+  ThunarxMenuItem *item;
+  GClosure        *closure;
 
-  action = gtk_action_new ("ThunarUca::manage-actions", _("Configure c_ustom actions..."),
-                           _("Setup custom actions that will appear in the file managers context menus"), NULL);
+  item = thunarx_menu_item_new ("ThunarUca::manage-actions", _("Configure c_ustom actions..."),
+                                _("Setup custom actions that will appear in the file managers context menus"), NULL);
   closure = g_cclosure_new_object_swap (G_CALLBACK (manage_actions), G_OBJECT (window));
-  g_signal_connect_closure (G_OBJECT (action), "activate", closure, TRUE);
+  g_signal_connect_closure (G_OBJECT (item), "activate", closure, TRUE);
 
-  return g_list_prepend (NULL, action);
+  return g_list_prepend (NULL, item);
 }
 
 
@@ -197,7 +197,7 @@ thunar_uca_provider_get_file_actions (ThunarxMenuProvider *menu_provider,
   ThunarUcaProvider   *uca_provider = THUNAR_UCA_PROVIDER (menu_provider);
   ThunarUcaContext    *uca_context = NULL;
   GtkTreeIter          iter;
-  GtkAction           *action;
+  ThunarxMenuItem     *item;
   GList               *actions = NULL;
   GList               *paths;
   GList               *lp;
@@ -205,7 +205,8 @@ thunar_uca_provider_get_file_actions (ThunarxMenuProvider *menu_provider,
   gchar               *label;
   gchar               *unique_id;
   gchar               *name;
-  GIcon               *gicon;
+  gchar               *icon_name = NULL;
+  GIcon               *gicon = NULL;
 
   paths = thunar_uca_model_match (uca_provider->model, files);
   for (lp = g_list_last (paths); lp != NULL; lp = lp->prev)
@@ -224,13 +225,15 @@ thunar_uca_provider_get_file_actions (ThunarxMenuProvider *menu_provider,
           /* generate a unique action name */
           name = g_strdup_printf ("uca-action-%s", unique_id);
 
+          if (gicon != NULL)
+            icon_name = g_icon_to_string (gicon);
+
           /* create the new action with the given parameters */
-          action = gtk_action_new (name, label, tooltip, NULL);
-          gtk_action_set_gicon (action, gicon);
+          item = thunarx_menu_item_new (name, label, tooltip, icon_name);
 
           /* grab a tree row reference on the given path */
           row = gtk_tree_row_reference_new (GTK_TREE_MODEL (uca_provider->model), lp->data);
-          g_object_set_qdata_full (G_OBJECT (action), thunar_uca_row_quark, row,
+          g_object_set_qdata_full (G_OBJECT (item), thunar_uca_row_quark, row,
                                    (GDestroyNotify) gtk_tree_row_reference_free);
 
           /* allocate a new context on-demand */
@@ -238,20 +241,21 @@ thunar_uca_provider_get_file_actions (ThunarxMenuProvider *menu_provider,
             uca_context = thunar_uca_context_new (window, files);
           else
             uca_context = thunar_uca_context_ref (uca_context);
-          g_object_set_qdata_full (G_OBJECT (action), thunar_uca_context_quark, uca_context, (GDestroyNotify) thunar_uca_context_unref);
+          g_object_set_qdata_full (G_OBJECT (item), thunar_uca_context_quark, uca_context, (GDestroyNotify) thunar_uca_context_unref);
 
           /* connect the "activate" signal */
-          g_signal_connect_data (G_OBJECT (action), "activate", G_CALLBACK (thunar_uca_provider_activated),
+          g_signal_connect_data (G_OBJECT (item), "activate", G_CALLBACK (thunar_uca_provider_activated),
                                  g_object_ref (G_OBJECT (uca_provider)), (GClosureNotify) g_object_unref,
                                  G_CONNECT_SWAPPED);
 
           /* add the action to the return list */
-          actions = g_list_prepend (actions, action);
+          actions = g_list_prepend (actions, item);
 
           /* cleanup */
           g_free (tooltip);
           g_free (label);
           g_free (name);
+          g_free (icon_name);
           g_free (unique_id);
 
           if (gicon != NULL)
@@ -296,7 +300,7 @@ thunar_uca_provider_get_folder_actions (ThunarxMenuProvider *menu_provider,
 
 static void
 thunar_uca_provider_activated (ThunarUcaProvider *uca_provider,
-                               GtkAction         *action)
+                               ThunarxMenuItem   *item)
 {
   GtkTreeRowReference *row;
   ThunarUcaContext    *uca_context;
@@ -318,10 +322,10 @@ thunar_uca_provider_activated (ThunarUcaProvider *uca_provider,
   GClosure            *child_watch;
 
   g_return_if_fail (THUNAR_UCA_IS_PROVIDER (uca_provider));
-  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNARX_IS_MENU_ITEM (item));
 
   /* check if the row reference is still valid */
-  row = g_object_get_qdata (G_OBJECT (action), thunar_uca_row_quark);
+  row = g_object_get_qdata (G_OBJECT (item), thunar_uca_row_quark);
   if (G_UNLIKELY (!gtk_tree_row_reference_valid (row)))
     return;
 
@@ -331,7 +335,7 @@ thunar_uca_provider_activated (ThunarUcaProvider *uca_provider,
   gtk_tree_path_free (path);
 
   /* determine the files and the window for the action */
-  uca_context = g_object_get_qdata (G_OBJECT (action), thunar_uca_context_quark);
+  uca_context = g_object_get_qdata (G_OBJECT (item), thunar_uca_context_quark);
   window = thunar_uca_context_get_window (uca_context);
   files = thunar_uca_context_get_files (uca_context);
 
@@ -354,7 +358,7 @@ thunar_uca_provider_activated (ThunarUcaProvider *uca_provider,
           if (G_LIKELY (filename != NULL))
             {
               /* if this is a folder action, we just use the filename as working directory */
-              if (g_object_get_qdata (G_OBJECT (action), thunar_uca_folder_quark) != NULL)
+              if (g_object_get_qdata (G_OBJECT (item), thunar_uca_folder_quark) != NULL)
                 {
                   working_directory = filename;
                   filename = NULL;
@@ -412,7 +416,7 @@ thunar_uca_provider_activated (ThunarUcaProvider *uca_provider,
   /* present error message to the user */
   if (G_UNLIKELY (!succeed))
     {
-      g_object_get (G_OBJECT (action), "label", &label, NULL);
+      g_object_get (G_OBJECT (item), "label", &label, NULL);
       dialog = gtk_message_dialog_new ((GtkWindow *) window,
                                        GTK_DIALOG_DESTROY_WITH_PARENT
                                        | GTK_DIALOG_MODAL,
diff --git a/plugins/thunar-wallpaper/twp-provider.c b/plugins/thunar-wallpaper/twp-provider.c
index b0b5ae1..5d903c5 100644
--- a/plugins/thunar-wallpaper/twp-provider.c
+++ b/plugins/thunar-wallpaper/twp-provider.c
@@ -46,7 +46,7 @@ static void   twp_provider_finalize             (GObject                  *objec
 static GList *twp_provider_get_file_actions     (ThunarxMenuProvider      *menu_provider,
                                                  GtkWidget                *window,
                                                  GList                    *files);
-static void   twp_action_set_wallpaper          (GtkAction                *action,
+static void   twp_action_set_wallpaper          (ThunarxMenuItem          *item,
                                                  gpointer                  user_data);
 static gint   twp_get_active_workspace_number   (GdkScreen *screen);
 
@@ -129,15 +129,15 @@ twp_provider_get_file_actions (ThunarxMenuProvider *menu_provider,
                                GtkWidget           *window,
                                GList               *files)
 {
-  GtkWidget *action = NULL;
-  GFile     *location;
-  GList     *actions = NULL;
-  gchar     *mime_type;
-  gchar      selection_name[100];
-  Atom       xfce_selection_atom;
-  Atom       nautilus_selection_atom;
-  GdkScreen *gdk_screen = gdk_screen_get_default();
-  gint       xscreen = gdk_screen_get_number(gdk_screen);
+  ThunarxMenuItem *item = NULL;
+  GFile           *location;
+  GList           *actions = NULL;
+  gchar           *mime_type;
+  gchar            selection_name[100];
+  Atom             xfce_selection_atom;
+  Atom             nautilus_selection_atom;
+  GdkScreen       *gdk_screen = gdk_screen_get_default();
+  gint             xscreen = gdk_screen_get_number(gdk_screen);
 
   desktop_type = DESKTOP_TYPE_NONE;
 
@@ -168,14 +168,10 @@ twp_provider_get_file_actions (ThunarxMenuProvider *menu_provider,
                   || thunarx_file_info_has_mime_type (files->data, "image/svg+xml")
                   || thunarx_file_info_has_mime_type (files->data, "image/svg+xml-compressed")))
             {
-              action = g_object_new (GTK_TYPE_ACTION,
-                                     "name", "Twp::setwallpaper",
-                                     "icon-name", "preferences-desktop-wallpaper",
-                                     "label", _("Set as wallpaper"),
-                                     NULL);
-              g_signal_connect (action, "activate", G_CALLBACK (twp_action_set_wallpaper), files->data);
-
-              actions = g_list_append (actions, action);
+              item = thunarx_menu_item_new ("Twp::setwallpaper", _("Set as wallpaper"), NULL, "preferences-desktop-wallpaper");
+              g_signal_connect (item, "activate", G_CALLBACK (twp_action_set_wallpaper), files->data);
+
+              actions = g_list_append (actions, item);
             }
           g_free(mime_type);
         }
@@ -200,17 +196,12 @@ twp_provider_get_file_actions (ThunarxMenuProvider *menu_provider,
       }
     }
 
-  if ((desktop_type == DESKTOP_TYPE_NONE) && (action != NULL))
-    {
-        /* gtk_widget_set_sensitive (action, FALSE); */
-    }
-
   return actions;
 }
 
 static void
-twp_action_set_wallpaper (GtkAction *action,
-                          gpointer   user_data)
+twp_action_set_wallpaper (ThunarxMenuItem *item,
+                          gpointer         user_data)
 {
   ThunarxFileInfo *file_info = user_data;
   GdkDisplay      *display = gdk_display_get_default();
diff --git a/thunar/thunar-icon-factory.c b/thunar/thunar-icon-factory.c
index fd6bdc3..0631221 100644
--- a/thunar/thunar-icon-factory.c
+++ b/thunar/thunar-icon-factory.c
@@ -79,7 +79,8 @@ static GdkPixbuf *thunar_icon_factory_load_from_file        (ThunarIconFactory
 static GdkPixbuf *thunar_icon_factory_lookup_icon           (ThunarIconFactory        *factory,
                                                              const gchar              *name,
                                                              gint                      size,
-                                                             gboolean                  wants_default);
+                                                             gboolean                  wants_default,
+                                                             gboolean                  force_size);
 static guint      thunar_icon_key_hash                      (gconstpointer             data);
 static gboolean   thunar_icon_key_equal                     (gconstpointer             a,
                                                              gconstpointer             b);
@@ -468,7 +469,8 @@ static GdkPixbuf*
 thunar_icon_factory_lookup_icon (ThunarIconFactory *factory,
                                  const gchar       *name,
                                  gint               size,
-                                 gboolean           wants_default)
+                                 gboolean           wants_default,
+                                 gboolean           force_size)
 {
   ThunarIconKey  lookup_key;
   ThunarIconKey *key;
@@ -499,7 +501,8 @@ thunar_icon_factory_lookup_icon (ThunarIconFactory *factory,
             name = "folder";
 
           /* check if the icon theme contains an icon of that name */
-          icon_info = gtk_icon_theme_lookup_icon (factory->icon_theme, name, size, GTK_ICON_LOOKUP_FORCE_SIZE);
+          icon_info = gtk_icon_theme_lookup_icon (factory->icon_theme, name, size,
+                                                  force_size ? GTK_ICON_LOOKUP_FORCE_SIZE : 0);
           if (G_LIKELY (icon_info != NULL))
             {
               /* try to load the pixbuf from the icon info */
@@ -603,7 +606,7 @@ static GdkPixbuf*
 thunar_icon_factory_load_fallback (ThunarIconFactory *factory,
                                    gint               size)
 {
-  return thunar_icon_factory_lookup_icon (factory, "text-x-generic", size, FALSE);
+  return thunar_icon_factory_lookup_icon (factory, "text-x-generic", size, FALSE, TRUE);
 }
 
 
@@ -749,7 +752,8 @@ GdkPixbuf*
 thunar_icon_factory_load_icon (ThunarIconFactory        *factory,
                                const gchar              *name,
                                gint                      size,
-                               gboolean                  wants_default)
+                               gboolean                  wants_default,
+                               gboolean                  force_size)
 {
   _thunar_return_val_if_fail (THUNAR_IS_ICON_FACTORY (factory), NULL);
   _thunar_return_val_if_fail (size > 0, NULL);
@@ -767,7 +771,7 @@ thunar_icon_factory_load_icon (ThunarIconFactory        *factory,
     }
 
   /* lookup the icon */
-  return thunar_icon_factory_lookup_icon (factory, name, size, wants_default);
+  return thunar_icon_factory_lookup_icon (factory, name, size, wants_default, force_size);
 }
 
 
@@ -819,7 +823,7 @@ thunar_icon_factory_load_file_icon (ThunarIconFactory  *factory,
   if (custom_icon != NULL)
     {
       /* try to load the icon */
-      icon = thunar_icon_factory_lookup_icon (factory, custom_icon, icon_size, FALSE);
+      icon = thunar_icon_factory_lookup_icon (factory, custom_icon, icon_size, FALSE, TRUE);
       if (G_LIKELY (icon != NULL))
         return icon;
     }
@@ -893,7 +897,7 @@ thunar_icon_factory_load_file_icon (ThunarIconFactory  *factory,
   if (G_LIKELY (icon == NULL))
     {
       icon_name = thunar_file_get_icon_name (file, icon_state, factory->icon_theme);
-      icon = thunar_icon_factory_load_icon (factory, icon_name, icon_size, TRUE);
+      icon = thunar_icon_factory_load_icon (factory, icon_name, icon_size, TRUE, TRUE);
     }
 
   if (G_LIKELY (icon != NULL))
diff --git a/thunar/thunar-icon-factory.h b/thunar/thunar-icon-factory.h
index a7137ab..cf29a71 100644
--- a/thunar/thunar-icon-factory.h
+++ b/thunar/thunar-icon-factory.h
@@ -54,7 +54,8 @@ gboolean               thunar_icon_factory_get_show_thumbnail (const ThunarIconF
 GdkPixbuf             *thunar_icon_factory_load_icon          (ThunarIconFactory        *factory,
                                                                const gchar              *name,
                                                                gint                      size,
-                                                               gboolean                  wants_default);
+                                                               gboolean                  wants_default,
+                                                               gboolean                  force_size);
 
 GdkPixbuf             *thunar_icon_factory_load_file_icon     (ThunarIconFactory        *factory,
                                                                ThunarFile               *file,
diff --git a/thunar/thunar-icon-renderer.c b/thunar/thunar-icon-renderer.c
index 1561dc7..fe41170 100644
--- a/thunar/thunar-icon-renderer.c
+++ b/thunar/thunar-icon-renderer.c
@@ -497,7 +497,7 @@ thunar_icon_renderer_render (GtkCellRenderer     *renderer,
               emblem_size = MIN ((2 * icon_renderer->size) / 3, 32);
 
               /* check if we have the emblem in the icon theme */
-              emblem = thunar_icon_factory_load_icon (icon_factory, lp->data, emblem_size, FALSE);
+              emblem = thunar_icon_factory_load_icon (icon_factory, lp->data, emblem_size, FALSE, TRUE);
               if (G_UNLIKELY (emblem == NULL))
                 continue;
 
diff --git a/thunar/thunar-standard-view.c b/thunar/thunar-standard-view.c
index 3e8a5b0..2911bd5 100644
--- a/thunar/thunar-standard-view.c
+++ b/thunar/thunar-standard-view.c
@@ -1994,14 +1994,16 @@ static void
 thunar_standard_view_merge_custom_actions (ThunarStandardView *standard_view,
                                            GList              *selected_items)
 {
-  GtkTreeIter iter;
-  ThunarFile *file = NULL;
-  GtkWidget  *window;
-  GList      *providers;
-  GList      *actions = NULL;
-  GList      *files = NULL;
-  GList      *tmp;
-  GList      *lp;
+  GtkTreeIter      iter;
+  ThunarFile      *file = NULL;
+  GtkWidget       *window;
+  GList           *providers;
+  GList           *actions = NULL;
+  GList           *files = NULL;
+  GList           *tmp;
+  GList           *lp;
+  GtkAction       *action;
+  ThunarxMenuItem *item;
 
   /* we cannot add anything if we aren't connected to any UI manager */
   if (G_UNLIKELY (standard_view->ui_manager == NULL))
@@ -2077,8 +2079,11 @@ thunar_standard_view_merge_custom_actions (ThunarStandardView *standard_view,
       /* add the actions to the UI manager */
       for (lp = actions; lp != NULL; lp = lp->next)
         {
+          item = THUNARX_MENU_ITEM (lp->data);
+          action = thunar_util_action_from_menu_item (item, GTK_WIDGET (window));
+
           /* add the action to the action group */
-          gtk_action_group_add_action (standard_view->priv->custom_actions, GTK_ACTION (lp->data));
+          gtk_action_group_add_action (standard_view->priv->custom_actions, action);
 
           /* add the action to the UI manager */
           if (G_LIKELY (selected_items != NULL))
@@ -2087,8 +2092,8 @@ thunar_standard_view_merge_custom_actions (ThunarStandardView *standard_view,
               gtk_ui_manager_add_ui (standard_view->ui_manager,
                                      standard_view->priv->custom_merge_id,
                                      "/file-context-menu/placeholder-custom-actions",
-                                     gtk_action_get_name (GTK_ACTION (lp->data)),
-                                     gtk_action_get_name (GTK_ACTION (lp->data)),
+                                     gtk_action_get_name (GTK_ACTION (action)),
+                                     gtk_action_get_name (GTK_ACTION (action)),
                                      GTK_UI_MANAGER_MENUITEM, FALSE);
             }
           else
@@ -2097,13 +2102,14 @@ thunar_standard_view_merge_custom_actions (ThunarStandardView *standard_view,
               gtk_ui_manager_add_ui (standard_view->ui_manager,
                                      standard_view->priv->custom_merge_id,
                                      "/folder-context-menu/placeholder-custom-actions",
-                                     gtk_action_get_name (GTK_ACTION (lp->data)),
-                                     gtk_action_get_name (GTK_ACTION (lp->data)),
+                                     gtk_action_get_name (GTK_ACTION (action)),
+                                     gtk_action_get_name (GTK_ACTION (action)),
                                      GTK_UI_MANAGER_MENUITEM, FALSE);
             }
 
-          /* release the reference on the action */
-          g_object_unref (G_OBJECT (lp->data));
+          /* release the reference on item and action */
+          g_object_unref (item);
+          g_object_unref (action);
         }
 
       /* be sure to update the UI manager to avoid flickering */
diff --git a/thunar/thunar-util.c b/thunar/thunar-util.c
index 8640249..dd3a04d 100644
--- a/thunar/thunar-util.c
+++ b/thunar/thunar-util.c
@@ -54,6 +54,7 @@
 #include <glib/gwin32.h>
 #endif
 
+#include <thunar/thunar-icon-factory.h>
 #include <thunar/thunar-private.h>
 #include <thunar/thunar-util.h>
 
@@ -609,3 +610,66 @@ thunar_setup_display_cb (gpointer data)
 {
   g_setenv ("DISPLAY", (char *) data, TRUE);
 }
+
+
+
+static void
+extension_action_callback (GtkAction *action,
+                           gpointer callback_data)
+{
+  thunarx_menu_item_activate (THUNARX_MENU_ITEM (callback_data));
+}
+
+
+
+GtkAction *
+thunar_util_action_from_menu_item (ThunarxMenuItem *item,
+                                   GtkWidget       *parent_widget)
+{
+  gchar *name, *label, *tooltip, *icon_name;
+  gboolean           sensitive, priority;
+  GtkAction         *action;
+  GdkPixbuf         *icon;
+  GtkIconTheme      *icon_theme;
+  ThunarIconFactory *icon_factory;
+
+  g_object_get (G_OBJECT (item),
+                "name", &name,
+                "label", &label,
+                "tooltip", &tooltip,
+                "icon", &icon_name,
+                "sensitive", &sensitive,
+                "priority", &priority,
+                NULL);
+
+  action = gtk_action_new (name, label, tooltip, NULL);
+
+  if (icon_name != NULL && parent_widget != NULL)
+    {
+      icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (parent_widget));
+      icon_factory = thunar_icon_factory_get_for_icon_theme (icon_theme);
+      icon = thunar_icon_factory_load_icon (icon_factory, icon_name, GTK_ICON_SIZE_MENU, TRUE, FALSE);
+      if (icon != NULL)
+      {
+        gtk_action_set_gicon (action, G_ICON (icon));
+        g_object_unref (icon);
+      }
+
+      g_object_unref (G_OBJECT (icon_factory));
+  }
+
+  gtk_action_set_sensitive (action, sensitive);
+  g_object_set (action, "is-important", priority, NULL);
+
+  g_signal_connect_data (action, "activate",
+                         G_CALLBACK (extension_action_callback),
+                         g_object_ref (item),
+                         (GClosureNotify)g_object_unref, 0);
+
+  g_free (name);
+  g_free (label);
+  g_free (tooltip);
+  g_free (icon_name);
+
+  return action;
+}
diff --git a/thunar/thunar-util.h b/thunar/thunar-util.h
index 82cba4d..78f3135 100644
--- a/thunar/thunar-util.h
+++ b/thunar/thunar-util.h
@@ -24,6 +24,8 @@
 
 #include <thunar/thunar-enum-types.h>
 
+#include <thunarx/thunarx-menu-item.h>
+
 G_BEGIN_DECLS;
 
 typedef void (*ThunarBookmarksFunc) (GFile       *file,
@@ -55,6 +57,9 @@ gchar     *thunar_util_change_working_directory (const gchar    *new_directory)
 
 void       thunar_setup_display_cb              (gpointer data);
 
+GtkAction *thunar_util_action_from_menu_item    (ThunarxMenuItem *item,
+                                                 GtkWidget       *parent_widget) G_GNUC_WARN_UNUSED_RESULT;
+
 G_END_DECLS;
 
 #endif /* !__THUNAR_UTIL_H__ */
diff --git a/thunar/thunar-window.c b/thunar/thunar-window.c
index 6b2594e..28a39d4 100644
--- a/thunar/thunar-window.c
+++ b/thunar/thunar-window.c
@@ -1944,9 +1944,11 @@ thunar_window_install_sidepane (ThunarWindow *window,
 static void
 thunar_window_merge_custom_preferences (ThunarWindow *window)
 {
-  GList *providers;
-  GList *actions;
-  GList *ap, *pp;
+  GList           *providers;
+  GList           *actions;
+  GList           *ap, *pp;
+  GtkAction       *action;
+  ThunarxMenuItem *item;
 
   _thunar_return_if_fail (THUNAR_IS_WINDOW (window));
   _thunar_return_if_fail (window->custom_preferences_merge_id == 0);
@@ -1966,18 +1968,21 @@ thunar_window_merge_custom_preferences (ThunarWindow *window)
           for (ap = actions; ap != NULL; ap = ap->next)
             {
               /* add the action to the action group */
-              gtk_action_group_add_action (window->action_group, GTK_ACTION (ap->data));
+              item = THUNARX_MENU_ITEM (ap->data);
+              action = thunar_util_action_from_menu_item (item, GTK_WIDGET (window));
+              gtk_action_group_add_action (window->action_group, action);
 
               /* add the action to the UI manager */
               gtk_ui_manager_add_ui (window->ui_manager,
                                      window->custom_preferences_merge_id,
                                      "/main-menu/edit-menu/placeholder-custom-preferences",
-                                     gtk_action_get_name (GTK_ACTION (ap->data)),
-                                     gtk_action_get_name (GTK_ACTION (ap->data)),
+                                     gtk_action_get_name (GTK_ACTION (action)),
+                                     gtk_action_get_name (GTK_ACTION (action)),
                                      GTK_UI_MANAGER_MENUITEM, FALSE);
 
-              /* release the reference on the action */
-              g_object_unref (G_OBJECT (ap->data));
+              /* release the references on item and action */
+              g_object_unref (G_OBJECT (item));
+              g_object_unref (G_OBJECT (action));
             }
 
           /* release the reference on the provider */
@@ -3352,12 +3357,14 @@ thunar_window_update_custom_actions (ThunarView   *view,
                                      GParamSpec   *pspec,
                                      ThunarWindow *window)
 {
-  ThunarFile *folder;
-  GList      *selected_files;
-  GList      *actions = NULL;
-  GList      *lp;
-  GList      *providers;
-  GList      *tmp;
+  ThunarFile      *folder;
+  GList           *selected_files;
+  GList           *actions = NULL;
+  GList           *lp;
+  GList           *providers;
+  GList           *tmp;
+  GtkAction       *action;
+  ThunarxMenuItem *item;
 
   _thunar_return_if_fail (THUNAR_IS_VIEW (view));
   _thunar_return_if_fail (THUNAR_IS_WINDOW (window));
@@ -3434,21 +3441,28 @@ thunar_window_update_custom_actions (ThunarView   *view,
       /* add the actions to the UI manager */
       for (lp = actions; lp != NULL; lp = lp->next)
         {
+          if (G_UNLIKELY (lp->data == NULL))
+            continue;
+
+          item = THUNARX_MENU_ITEM (lp->data);
+          action = thunar_util_action_from_menu_item (item, GTK_WIDGET (window));
+
           /* add the action to the action group */
           gtk_action_group_add_action_with_accel (window->custom_actions,
-                                                  GTK_ACTION (lp->data),
+                                                  action,
                                                   NULL);
 
           /* add to the file context menu */
           gtk_ui_manager_add_ui (window->ui_manager,
                                  window->custom_merge_id,
                                  "/main-menu/file-menu/placeholder-custom-actions",
-                                 gtk_action_get_name (GTK_ACTION (lp->data)),
-                                 gtk_action_get_name (GTK_ACTION (lp->data)),
+                                 gtk_action_get_name (GTK_ACTION (action)),
+                                 gtk_action_get_name (GTK_ACTION (action)),
                                  GTK_UI_MANAGER_MENUITEM, FALSE);
 
-          /* release the reference on the action */
-          g_object_unref (G_OBJECT (lp->data));
+          /* release the references on item and action */
+          g_object_unref (item);
+          g_object_unref (action);
         }
 
       /* cleanup */
diff --git a/thunarx/Makefile.am b/thunarx/Makefile.am
index a992f92..abea879 100644
--- a/thunarx/Makefile.am
+++ b/thunarx/Makefile.am
@@ -9,6 +9,7 @@ libthunarx_headers =							\
 	thunarx.h							\
 	thunarx-config.h						\
 	thunarx-file-info.h						\
+	thunarx-menu-item.h						\
 	thunarx-menu-provider.h						\
 	thunarx-preferences-provider.h					\
 	thunarx-property-page.h						\
@@ -31,6 +32,7 @@ libthunarx_3_la_SOURCES =						\
 	$(libthunarx_headers)						\
 	thunarx-config.c						\
 	thunarx-file-info.c						\
+	thunarx-menu-item.c						\
 	thunarx-menu-provider.c						\
 	thunarx-preferences-provider.c					\
 	thunarx-private.c						\
diff --git a/thunarx/thunarx-menu-item.c b/thunarx/thunarx-menu-item.c
new file mode 100644
index 0000000..dcacfe7
--- /dev/null
+++ b/thunarx/thunarx-menu-item.c
@@ -0,0 +1,337 @@
+/*-
+ * Copyright (c) 2017 Andre Miranda <andreldm at xfce.org>
+ *
+ * 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 (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License 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 <glib/gi18n-lib.h>
+
+#include "thunarx-menu-item.h"
+
+enum
+{
+    ACTIVATE,
+    LAST_SIGNAL
+};
+
+enum
+{
+    PROP_0,
+    PROP_NAME,
+    PROP_LABEL,
+    PROP_TOOLTIP,
+    PROP_ICON,
+    PROP_SENSITIVE,
+    PROP_PRIORITY,
+    PROP_MENU,
+    LAST_PROP
+};
+
+
+static void        thunarx_menu_item_finalize         (GObject    *object);
+static void        thunarx_menu_item_get_property     (GObject    *object,
+                                                       guint       param_id,
+                                                       GValue     *value,
+                                                       GParamSpec *pspec);
+static void        thunarx_menu_item_set_property     (GObject      *object,
+                                                       guint         param_id,
+                                                       const GValue *value,
+                                                       GParamSpec   *pspec);
+
+struct _ThunarxMenuItemDetails
+{
+    char *name;
+    char *label;
+    char *tooltip;
+    char *icon;
+    gboolean sensitive;
+    gboolean priority;
+};
+
+static guint signals[LAST_SIGNAL];
+
+static GObjectClass *parent_class = NULL;
+
+
+G_DEFINE_TYPE (ThunarxMenuItem, thunarx_menu_item, G_TYPE_OBJECT)
+
+
+
+static void
+thunarx_menu_item_class_init (ThunarxMenuItemClass *class)
+{
+    parent_class = g_type_class_peek_parent (class);
+
+    G_OBJECT_CLASS (class)->finalize = thunarx_menu_item_finalize;
+    G_OBJECT_CLASS (class)->get_property = thunarx_menu_item_get_property;
+    G_OBJECT_CLASS (class)->set_property = thunarx_menu_item_set_property;
+
+    signals[ACTIVATE] =
+        g_signal_new ("activate",
+                      G_TYPE_FROM_CLASS (class),
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (ThunarxMenuItemClass,
+                                       activate),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__VOID,
+                      G_TYPE_NONE, 0);
+
+    g_object_class_install_property (G_OBJECT_CLASS (class),
+                                     PROP_NAME,
+                                     g_param_spec_string ("name",
+                                                          "Name",
+                                                          "Name of the item",
+                                                          NULL,
+                                                          G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE | G_PARAM_READABLE));
+    g_object_class_install_property (G_OBJECT_CLASS (class),
+                                     PROP_LABEL,
+                                     g_param_spec_string ("label",
+                                                          "Label",
+                                                          "Label to display to the user",
+                                                          NULL,
+                                                          G_PARAM_READWRITE));
+    g_object_class_install_property (G_OBJECT_CLASS (class),
+                                     PROP_TOOLTIP,
+                                     g_param_spec_string ("tooltip",
+                                                          "Tooltip",
+                                                          "Tooltip for the menu item",
+                                                          NULL,
+                                                          G_PARAM_READWRITE));
+    g_object_class_install_property (G_OBJECT_CLASS (class),
+                                     PROP_ICON,
+                                     g_param_spec_string ("icon",
+                                                          "Icon",
+                                                          "Name of the icon to display in the menu item",
+                                                          NULL,
+                                                          G_PARAM_READWRITE));
+
+    g_object_class_install_property (G_OBJECT_CLASS (class),
+                                     PROP_SENSITIVE,
+                                     g_param_spec_boolean ("sensitive",
+                                                           "Sensitive",
+                                                           "Whether the menu item is sensitive",
+                                                           TRUE,
+                                                           G_PARAM_READWRITE));
+    g_object_class_install_property (G_OBJECT_CLASS (class),
+                                     PROP_PRIORITY,
+                                     g_param_spec_boolean ("priority",
+                                                           "Priority",
+                                                           "Show priority text in toolbars",
+                                                           TRUE,
+                                                           G_PARAM_READWRITE));
+}
+
+
+
+static void
+thunarx_menu_item_init (ThunarxMenuItem *item)
+{
+    item->details = g_new0 (ThunarxMenuItemDetails, 1);
+    item->details->sensitive = TRUE;
+}
+
+
+
+/**
+ * thunarx_menu_item_new:
+ * @name: identifier for the menu item
+ * @label: user-visible label of the menu item
+ * @tooltip: tooltip of the menu item
+ * @icon: path or name of the icon to display in the menu item
+ *
+ * Creates a new menu item that can be added to the toolbar or to a contextual menu.
+ *
+ * Returns: a newly created #ThunarxMenuItem
+ */
+ThunarxMenuItem *
+thunarx_menu_item_new (const char *name,
+                       const char *label,
+                       const char *tooltip,
+                       const char *icon)
+{
+    ThunarxMenuItem *item;
+
+    g_return_val_if_fail (name != NULL, NULL);
+    g_return_val_if_fail (label != NULL, NULL);
+
+    item = g_object_new (THUNARX_TYPE_MENU_ITEM,
+                         "name", name,
+                         "label", label,
+                         "tooltip", tooltip,
+                         "icon", icon,
+                         NULL);
+
+    return item;
+}
+
+
+
+/**
+ * thunarx_menu_item_activate:
+ * @item: pointer to a #ThunarxMenuItem instance
+ *
+ * emits the activate signal.
+ */
+void
+thunarx_menu_item_activate (ThunarxMenuItem *item)
+{
+    g_signal_emit (item, signals[ACTIVATE], 0);
+}
+
+
+
+static void
+thunarx_menu_item_get_property (GObject    *object,
+                                 guint       param_id,
+                                 GValue     *value,
+                                 GParamSpec *pspec)
+{
+    ThunarxMenuItem *item;
+
+    item = THUNARX_MENU_ITEM (object);
+
+    switch (param_id)
+    {
+        case PROP_NAME:
+        {
+            g_value_set_string (value, item->details->name);
+        }
+        break;
+
+        case PROP_LABEL:
+        {
+            g_value_set_string (value, item->details->label);
+        }
+        break;
+
+        case PROP_TOOLTIP:
+        {
+            g_value_set_string (value, item->details->tooltip);
+        }
+        break;
+
+        case PROP_ICON:
+        {
+            g_value_set_string (value, item->details->icon);
+        }
+        break;
+
+        case PROP_SENSITIVE:
+        {
+            g_value_set_boolean (value, item->details->sensitive);
+        }
+        break;
+
+        case PROP_PRIORITY:
+        {
+            g_value_set_boolean (value, item->details->priority);
+        }
+        break;
+
+        default:
+        {
+            G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+        }
+        break;
+    }
+}
+
+
+
+static void
+thunarx_menu_item_set_property (GObject      *object,
+                                guint         param_id,
+                                const GValue *value,
+                                GParamSpec   *pspec)
+{
+    ThunarxMenuItem *item;
+
+    item = THUNARX_MENU_ITEM (object);
+
+    switch (param_id)
+    {
+        case PROP_NAME:
+        {
+            g_free (item->details->name);
+            item->details->name = g_strdup (g_value_get_string (value));
+            g_object_notify (object, "name");
+        }
+        break;
+
+        case PROP_LABEL:
+        {
+            g_free (item->details->label);
+            item->details->label = g_strdup (g_value_get_string (value));
+            g_object_notify (object, "label");
+        }
+        break;
+
+        case PROP_TOOLTIP:
+        {
+            g_free (item->details->tooltip);
+            item->details->tooltip = g_strdup (g_value_get_string (value));
+            g_object_notify (object, "tooltip");
+        }
+        break;
+
+        case PROP_ICON:
+        {
+            g_free (item->details->icon);
+            item->details->icon = g_strdup (g_value_get_string (value));
+            g_object_notify (object, "icon");
+        }
+        break;
+
+        case PROP_SENSITIVE:
+        {
+            item->details->sensitive = g_value_get_boolean (value);
+            g_object_notify (object, "sensitive");
+        }
+        break;
+
+        case PROP_PRIORITY:
+        {
+            item->details->priority = g_value_get_boolean (value);
+            g_object_notify (object, "priority");
+        }
+        break;
+
+        default:
+        {
+            G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+        }
+        break;
+    }
+}
+
+
+
+static void
+thunarx_menu_item_finalize (GObject *object)
+{
+    ThunarxMenuItem *item;
+
+    item = THUNARX_MENU_ITEM (object);
+
+    g_free (item->details->name);
+    g_free (item->details->label);
+    g_free (item->details->tooltip);
+    g_free (item->details->icon);
+
+    g_free (item->details);
+
+    G_OBJECT_CLASS (parent_class)->finalize (object);
+}
diff --git a/thunarx/thunarx-menu-item.h b/thunarx/thunarx-menu-item.h
new file mode 100644
index 0000000..db61f9f
--- /dev/null
+++ b/thunarx/thunarx-menu-item.h
@@ -0,0 +1,53 @@
+/*-
+ * Copyright (c) 2017 Andre Miranda <andreldm at xfce.org>
+ *
+ * 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 (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef THUNARX_MENU_ITEM_H
+#define THUNARX_MENU_ITEM_H
+
+#include <glib-object.h>
+
+#define THUNARX_TYPE_MENU_ITEM            (thunarx_menu_item_get_type())
+#define THUNARX_MENU_ITEM(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNARX_TYPE_MENU_ITEM, ThunarxMenuItem))
+#define THUNARX_MENU_ITEM_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNARX_TYPE_MENU_ITEM, ThunarxMenuItemClass))
+#define THUNARX_IS_MENU_ITEM(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNARX_TYPE_MENU_ITEM))
+#define THUNARX_IS_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), THUNARX_TYPE_MENU_ITEM))
+#define THUNARX_MENU_ITEM_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), THUNARX_TYPE_MENU_ITEM, ThunarxMenuItemClass))
+
+typedef struct _ThunarxMenuItem        ThunarxMenuItem;
+typedef struct _ThunarxMenuItemDetails ThunarxMenuItemDetails;
+typedef struct _ThunarxMenuItemClass   ThunarxMenuItemClass;
+
+struct _ThunarxMenuItem {
+	GObject parent;
+	ThunarxMenuItemDetails *details;
+};
+
+struct _ThunarxMenuItemClass {
+	GObjectClass parent;
+	void (*activate) (ThunarxMenuItem *item);
+};
+
+GType             thunarx_menu_item_get_type      (void);
+ThunarxMenuItem  *thunarx_menu_item_new           (const char      *name,
+                                                   const char      *label,
+                                                   const char      *tip,
+                                                   const char      *icon);
+
+void              thunarx_menu_item_activate      (ThunarxMenuItem *item);
+
+#endif
diff --git a/thunarx/thunarx-menu-provider.c b/thunarx/thunarx-menu-provider.c
index 9fd77f0..a268860 100644
--- a/thunarx/thunarx-menu-provider.c
+++ b/thunarx/thunarx-menu-provider.c
@@ -45,7 +45,7 @@
  * be added to the file manager's context menu. Don't perform any complicated I/O
  * to determine the action list, as that would block the whole file manager process.
  *
- * The <link linkend="GtkAction">GtkAction</link>s returned from the
+ * The <link linkend="ThunarxMenuItem">ThunarxMenuItem</link>s returned from the
  * thunarx_menu_provider_get_file_actions() and thunarx_menu_provider_get_folder_actions()
  * methods must be namespaced with the module to avoid collision with internal file manager
  * actions and actions provided by other extensions. For example, the menu action provided
@@ -85,11 +85,11 @@ thunarx_menu_provider_get_type (void)
  * @window   : the #GtkWindow within which the actions will be used.
  * @files    : the list of #ThunarxFileInfo<!---->s to which the actions will be applied.
  *
- * Returns the list of #GtkAction<!---->s that @provider has to offer for
+ * Returns the list of #ThunarxMenuItem<!---->s that @provider has to offer for
  * @files.
  *
  * As a special note, this method automatically takes a reference on the
- * @provider for every #GtkAction object returned from the real implementation
+ * @provider for every #ThunarxMenuItem object returned from the real implementation
  * of this method in @provider. This is to make sure that the extension stays
  * in memory for atleast the time that the actions are used. If the extension
  * wants to stay in memory for a longer time, it'll need to take care of this
@@ -102,7 +102,7 @@ thunarx_menu_provider_get_type (void)
  * g_list_free_full (list, g_object_unref);
  * </programlisting></informalexample>
  *
- * Return value: the list of #GtkAction<!---->s that @provider has to offer
+ * Return value: the list of #ThunarxMenuItem<!---->s that @provider has to offer
  *               for @files.
  **/
 GList*
@@ -140,11 +140,11 @@ thunarx_menu_provider_get_file_actions (ThunarxMenuProvider *provider,
  * @window   : the #GtkWindow within which the actions will be used.
  * @folder   : the folder to which the actions should will be applied.
  *
- * Returns the list of #GtkAction<!---->s that @provider has to offer for
+ * Returns the list of #ThunarxMenuItem<!---->s that @provider has to offer for
  * @folder.
  *
  * As a special note, this method automatically takes a reference on the
- * @provider for every #GtkAction object returned from the real implementation
+ * @provider for every #ThunarxMenuItem object returned from the real implementation
  * of this method in @provider. This is to make sure that the extension stays
  * in memory for atleast the time that the actions are used. If the extension
  * wants to stay in memory for a longer time, it'll need to take care of this
@@ -157,7 +157,7 @@ thunarx_menu_provider_get_file_actions (ThunarxMenuProvider *provider,
  * g_list_free_full (list, g_object_unref);
  * </programlisting></informalexample>
  *
- * Return value: the list of #GtkAction<!---->s that @provider has to offer
+ * Return value: the list of #ThunarxMenuItem<!---->s that @provider has to offer
  *               for @folder.
  **/
 GList*
@@ -198,13 +198,13 @@ thunarx_menu_provider_get_folder_actions (ThunarxMenuProvider *provider,
  * @files    : the list of #ThunarxFileInfo<!---->s for the files that are 
  *             being dropped to @folder in @window.
  *
- * Returns the list of #GtkAction<!---->s that @provider has to offer for
+ * Returns the list of #ThunarxMenuItem<!---->s that @provider has to offer for
  * dropping the @files into the @folder. For example, the thunar-archive-plugin
  * provides <guilabel>Extract Here</guilabel> actions when dropping archive
  * files into a folder that is writable by the user.
  *
  * As a special note, this method automatically takes a reference on the
- * @provider for every #GtkAction object returned from the real implementation
+ * @provider for every #ThunarxMenuItem object returned from the real implementation
  * of this method in @provider. This is to make sure that the extension stays
  * in memory for atleast the time that the actions are used. If the extension
  * wants to stay in memory for a longer time, it'll need to take care of this
@@ -217,7 +217,7 @@ thunarx_menu_provider_get_folder_actions (ThunarxMenuProvider *provider,
  * g_list_free_full (list, g_object_unref);
  * </programlisting></informalexample>
  *
- * Return value: the list of #GtkAction<!---->s that @provider has to offer
+ * Return value: the list of #ThunarxMenuItem<!---->s that @provider has to offer
  *               for dropping @files to @folder.
  *
  * Since: 0.4.1
diff --git a/thunarx/thunarx-preferences-provider.c b/thunarx/thunarx-preferences-provider.c
index e4908f5..97f7485 100644
--- a/thunarx/thunarx-preferences-provider.c
+++ b/thunarx/thunarx-preferences-provider.c
@@ -41,7 +41,7 @@
  * the file manager menu, because it should use desktop-wide settings for
  * archive managers instead).
  *
- * The <link linkend="GtkAction"><type>GtkAction</type></link>s returned from the
+ * The <link linkend="ThunarxMenuItem"><type>ThunarxMenuItem</type></link>s returned from the
  * thunarx_preferences_provider_get_actions() method must be namespaced with the
  * model to avoid collision with internal file manager actions and actions provided
  * by other extensions. For example, the preferences action provided by the
@@ -80,7 +80,7 @@ thunarx_preferences_provider_get_type (void)
  * @provider : a #ThunarxPreferencesProvider.
  * @window   : the #GtkWindow within which the actions will be used.
  *
- * Returns the list of #GtkAction<!---->s that @provider has to offer
+ * Returns the list of #ThunarxMenuItem<!---->s that @provider has to offer
  * as preferences within @window. These actions will usually be added
  * to the builtin list of preferences in the "Edit" menu of the file
  * manager's @window.
@@ -97,7 +97,7 @@ thunarx_preferences_provider_get_type (void)
  * g_list_free_full (list, g_object_unref);
  * </programlisting></informalexample>
  *
- * Return value: the list of #GtkAction<!---->s that @provider has
+ * Return value: the list of #ThunarxMenuItem<!---->s that @provider has
  *               to offer as preferences within @window.
  **/
 GList*
diff --git a/thunarx/thunarx-renamer.c b/thunarx/thunarx-renamer.c
index cec3a69..7082dcc 100644
--- a/thunarx/thunarx-renamer.c
+++ b/thunarx/thunarx-renamer.c
@@ -627,13 +627,13 @@ thunarx_renamer_save (ThunarxRenamer *renamer,
  * @window  : a #GtkWindow or %NULL.
  * @files   : a #GList of #ThunarxFileInfo<!---->s.
  *
- * Returns the list of #GtkAction<!---->s provided by @renamer for
+ * Returns the list of #ThunarxMenuItem<!---->s provided by @renamer for
  * the given list of @files. By default, this method returns %NULL
  * (the empty list), but derived classes may override this method
  * to provide additional actions for files in the bulk renamer
  * dialog list.
  * 
- * The returned #GtkAction<!---->s will be displayed in the file's
+ * The returned #ThunarxMenuItem<!---->s will be displayed in the file's
  * context menu of the bulk renamer dialog, when this @renamer is
  * active. For example, an ID3-Tag based renamer may add an action
  * "Edit Tags" to the context menus of supported media files and,
@@ -670,16 +670,16 @@ thunarx_renamer_save (ThunarxRenamer *renamer,
  * </programlisting></informalexample>
  *
  * As a special note, this method automatically takes a reference on the
- * @renamer for every #GtkAction object returned from the real implementation
+ * @renamer for every #ThunarxMenuItem object returned from the real implementation
  * of this method in @renamer. This is to make sure that the extension stays
  * in memory for atleast the time that the actions are used.
  *
- * The #GtkAction<!---->s returned from this method must be namespaced with
+ * The #ThunarxMenuItem<!---->s returned from this method must be namespaced with
  * the module to avoid collision with internal file manager actions and
  * actions provided by other extensions. For example, the menu action
  * provided by the ID3-Tag renamer mentioned above, should be named
  * <literal>TagRenamer::edit-tags</literal> (if <literal>TagRenamer</literal>
- * is the class name). For additional information about the way #GtkAction<!---->s
+ * is the class name). For additional information about the way #ThunarxMenuItem<!---->s
  * should be returned from extensions and the way they are used, read the
  * description of the #ThunarxMenuProvider interface or read the introduction
  * provided with this reference manual.
@@ -692,7 +692,7 @@ thunarx_renamer_save (ThunarxRenamer *renamer,
  * forget to release the weak reference if @window survived the lifetime
  * of your action (which is likely to be the case in most situations).
  *
- * Return value: the list of #GtkAction<!---->s provided by @renamer
+ * Return value: the list of #ThunarxMenuItem<!---->s provided by @renamer
  *               for the given list of @files.
  **/
 GList*
diff --git a/thunarx/thunarx.h b/thunarx/thunarx.h
index ebdb9af..d6de691 100644
--- a/thunarx/thunarx.h
+++ b/thunarx/thunarx.h
@@ -25,6 +25,7 @@
 
 #include <thunarx/thunarx-config.h>
 #include <thunarx/thunarx-file-info.h>
+#include <thunarx/thunarx-menu-item.h>
 #include <thunarx/thunarx-menu-provider.h>
 #include <thunarx/thunarx-preferences-provider.h>
 #include <thunarx/thunarx-property-page.h>

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list