Git Repositories

2005-11-29 Benedikt Meurer <benny@xfce.org>
authorBenedikt Meurer <benny@xfce.org>
Tue, 29 Nov 2005 17:28:56 +0000 (17:28 +0000)
committerBenedikt Meurer <benny@xfce.org>
Tue, 29 Nov 2005 17:28:56 +0000 (17:28 +0000)
* thunar/thunar-standard-view.c
  (thunar_standard_view_merge_custom_actions): Fix typo.
* thunarx/thunarx-private.{c,h}, thunarx/thunarx-menu-provider.c,
  thunarx/Makefile.am, thunarx/thunarx-property-page-provider.c: Add
  helper function thunarx_object_list_take_reference(), so we don't
  need to repeat the same code again and again.
* thunar/thunar-window.c(action_entries): Add ... to the Preferences
  action, since it opens a dialog. Use "e" as mnemonic, as "P" is
  already used by "Paste".
* thunar/thunar-standard-view.c(action_entries): Add ... to the Select
  by Pattern action, since it opens a dialog.
* thunar/thunar-preferences-dialog.c: Close preferences dialog on Esc
  key press.
* thunarx/thunarx-preferences-provider.{c,h}, thunarx/thunarx.h,
  thunarx/thunarx.symbols, thunarx/Makefile.am: Add new interface
  ThunarxPreferencesProvider, which can be implemented to add custom
  actions to the preferences section of the "Edit" menu.
* thunar/thunar-window-ui.xml, thunar/thunar-window.c: Query custom
  preferences actions from the installed providers and add them to the
  preferences section of the "Edit" menu. Actions are loaded in an idle
  source to not delay folder loading when opening a new window, even if
  a lot of preferences providers are installed.
* docs/reference/thunarx/: Update the thunarx reference documentation.
* thunar-uca/, configure.in.in, Makefile.am: Import the thunar-uca
  module, which provides advanced users with an easy way to add custom
  actions to Thunar's context menus. With this extension in place
  there's no longer a need to add support G-Scripts (except maybe an
  importer for thunar-uca).
* po/POTFILES.in: Add new translatable files.
* po/: Merge new strings.
* examples/tex-open-terminal/README: Add note to use thunar-uca, and
  consider the tex-open-terminal as example for extension writers.

(Old svn revision: 18962)

44 files changed:
ChangeLog
Makefile.am
configure.in.in
docs/reference/thunarx/thunarx-docs.sgml
docs/reference/thunarx/thunarx-sections.txt
docs/reference/thunarx/thunarx.types
docs/reference/thunarx/tmpl/thunarx-menu-provider.sgml
docs/reference/thunarx/tmpl/thunarx-preferences-provider.sgml [new file with mode: 0644]
examples/tex-open-terminal/README
po/POTFILES.in
po/de.po
po/el.po
po/es.po
po/fr.po
po/hu.po
po/ja.po
po/pt_BR.po
thunar-uca/Makefile.am [new file with mode: 0644]
thunar-uca/README [new file with mode: 0644]
thunar-uca/thunar-uca-chooser.c [new file with mode: 0644]
thunar-uca/thunar-uca-chooser.h [new file with mode: 0644]
thunar-uca/thunar-uca-context.c [new file with mode: 0644]
thunar-uca/thunar-uca-context.h [new file with mode: 0644]
thunar-uca/thunar-uca-editor.c [new file with mode: 0644]
thunar-uca/thunar-uca-editor.h [new file with mode: 0644]
thunar-uca/thunar-uca-model.c [new file with mode: 0644]
thunar-uca/thunar-uca-model.h [new file with mode: 0644]
thunar-uca/thunar-uca-plugin.c [new file with mode: 0644]
thunar-uca/thunar-uca-provider.c [new file with mode: 0644]
thunar-uca/thunar-uca-provider.h [new file with mode: 0644]
thunar-uca/uca.xml.in [new file with mode: 0644]
thunar/thunar-preferences-dialog.c
thunar/thunar-standard-view.c
thunar/thunar-window-ui.xml
thunar/thunar-window.c
thunarx/Makefile.am
thunarx/thunarx-menu-provider.c
thunarx/thunarx-preferences-provider.c [new file with mode: 0644]
thunarx/thunarx-preferences-provider.h [new file with mode: 0644]
thunarx/thunarx-private.c [new file with mode: 0644]
thunarx/thunarx-private.h
thunarx/thunarx-property-page-provider.c
thunarx/thunarx.h
thunarx/thunarx.symbols

index b70511c..7970f4e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,40 @@
 2005-11-29     Benedikt Meurer <benny@xfce.org>
 
+       * thunar/thunar-standard-view.c
+         (thunar_standard_view_merge_custom_actions): Fix typo.
+       * thunarx/thunarx-private.{c,h}, thunarx/thunarx-menu-provider.c,
+         thunarx/Makefile.am, thunarx/thunarx-property-page-provider.c: Add
+         helper function thunarx_object_list_take_reference(), so we don't
+         need to repeat the same code again and again.
+       * thunar/thunar-window.c(action_entries): Add ... to the Preferences
+         action, since it opens a dialog. Use "e" as mnemonic, as "P" is
+         already used by "Paste".
+       * thunar/thunar-standard-view.c(action_entries): Add ... to the Select
+         by Pattern action, since it opens a dialog.
+       * thunar/thunar-preferences-dialog.c: Close preferences dialog on Esc
+         key press.
+       * thunarx/thunarx-preferences-provider.{c,h}, thunarx/thunarx.h,
+         thunarx/thunarx.symbols, thunarx/Makefile.am: Add new interface
+         ThunarxPreferencesProvider, which can be implemented to add custom
+         actions to the preferences section of the "Edit" menu.
+       * thunar/thunar-window-ui.xml, thunar/thunar-window.c: Query custom
+         preferences actions from the installed providers and add them to the
+         preferences section of the "Edit" menu. Actions are loaded in an idle
+         source to not delay folder loading when opening a new window, even if
+         a lot of preferences providers are installed.
+       * docs/reference/thunarx/: Update the thunarx reference documentation.
+       * thunar-uca/, configure.in.in, Makefile.am: Import the thunar-uca
+         module, which provides advanced users with an easy way to add custom
+         actions to Thunar's context menus. With this extension in place
+         there's no longer a need to add support G-Scripts (except maybe an
+         importer for thunar-uca).
+       * po/POTFILES.in: Add new translatable files.
+       * po/: Merge new strings.
+       * examples/tex-open-terminal/README: Add note to use thunar-uca, and
+         consider the tex-open-terminal as example for extension writers.
+
+2005-11-29     Benedikt Meurer <benny@xfce.org>
+
        * configure.in.in, thunar-vfs/thunar-vfs-types.h: Add largefile support
          for systems that don't support 64bit file offsets by default. This
          fixes bug #1243.
index 11a07a0..6df4248 100644 (file)
@@ -1,16 +1,21 @@
 # $Id$
 
+if ENABLE_UCA_PLUGIN
+SUBDIRS_THUNAR_UCA = thunar-uca
+endif
+
 SUBDIRS =                                                              \
        icons                                                           \
        pixmaps                                                         \
        po                                                              \
        tdb                                                             \
-       thunar-vfs                                                      \
        thunarx                                                         \
+       thunar-vfs                                                      \
        thunar                                                          \
        tests                                                           \
        docs                                                            \
-       examples
+       examples                                                        \
+       $(SUBDIRS_THUNAR_UCA)
 
 AUTOMAKE_OPTIONS =                                                     \
        1.8                                                             \
index 1eabaff..867f823 100644 (file)
@@ -322,6 +322,15 @@ AC_SUBST([PLATFORM_CFLAGS])
 AC_SUBST([PLATFORM_CPPFLAGS])
 AC_SUBST([PLATFORM_LDFLAGS])
 
+dnl *****************************************
+dnl *** Check whether to build UCA plugin ***
+dnl *****************************************
+AC_ARG_ENABLE([uca-plugin], AC_HELP_STRING([--disable-uca-plugin], [Don't build the thunar-uca plugin, see thunar-uca/README]),
+  [], [enable_uca_plugin=yes])
+AC_MSG_CHECKING([whether to build the thunar-uca plugin])
+AM_CONDITIONAL([ENABLE_UCA_PLUGIN], [test x"$enable_uca_plugin" = x"yes"])
+AC_MSG_RESULT([$enable_uca_plugin])
+
 AC_OUTPUT([
 Makefile
 docs/Makefile
@@ -344,6 +353,7 @@ pixmaps/Makefile
 tests/Makefile
 tests/data/Makefile
 thunar/Makefile
+thunar-uca/Makefile
 thunar-vfs/Makefile
 thunar-vfs/thunar-vfs-1.pc
 thunar-vfs/thunar-vfs-config.h
index f30b561..903da55 100644 (file)
@@ -4,6 +4,7 @@
 
 <!ENTITY ThunarxFileInfo SYSTEM "xml/thunarx-file-info.xml">
 <!ENTITY ThunarxMenuProvider SYSTEM "xml/thunarx-menu-provider.xml">
+<!ENTITY ThunarxPreferencesProvider SYSTEM "xml/thunarx-preferences-provider.xml">
 <!ENTITY ThunarxPropertyPage SYSTEM "xml/thunarx-property-page.xml">
 <!ENTITY ThunarxPropertyPageProvider SYSTEM "xml/thunarx-property-page-provider.xml">
 <!ENTITY ThunarxProviderFactory SYSTEM "xml/thunarx-provider-factory.xml">
@@ -11,7 +12,7 @@
 <!ENTITY thunarx-version-information SYSTEM "xml/thunarx-version-information.xml">
 
 <!ENTITY version SYSTEM "version.xml">
-<!ENTITY date "September 2005">
+<!ENTITY date "December 2005">
 ]>
 
 <book id="index">
           Providers implement one or more of the <link linkend="GInterface"><type>GInterface</type></link>s included with
           the <systemitem class="library">thunarx</systemitem> library. The currently exported interfaces
           include the <link linkend="ThunarxMenuProvider"><type>ThunarxMenuProvider</type></link> for adding context menu
-          items to the file views and the <link
+          items to the file views, the <link
           linkend="ThunarxPropertyPageProvider"><type>ThunarxPropertyPageProvider</type></link> for adding pages to the
-          file properties dialog.
+          file properties dialog and the <link
+          linkend="ThunarxPreferencesProvider"><type>ThunarxPreferencesProvider</type></link> for adding actions to the
+          preferences section of the main menu.
         </para>
       </sect2>
 
@@ -455,6 +458,7 @@ thunar_extension_initialize (ThunarxProviderPlugin *plugin)
 
     &ThunarxMenuProvider;
     &ThunarxPropertyPageProvider;
+    &ThunarxPreferencesProvider;
   </part>
 
   <part id="thunarx-using-extensions">
index 7dd8a9e..20e4fc2 100644 (file)
@@ -41,6 +41,21 @@ thunarx_menu_provider_get_type
 </SECTION>
 
 <SECTION>
+<FILE>thunarx-preferences-provider</FILE>
+<TITLE>ThunarxPreferencesProvider</TITLE>
+ThunarxPreferencesProviderIface
+ThunarxPreferencesProvider
+thunarx_preferences_provider_get_actions
+<SUBSECTION Standard>
+THUNARX_TYPE_PREFERENCES_PROVIDER
+THUNARX_PREFERENCES_PROVIDER
+THUNARX_IS_PREFERENCES_PROVIDER
+THUNARX_PREFERENCES_PROVIDER_GET_IFACE
+<SUBSECTION Private>
+thunarx_preferences_provider_get_type
+</SECTION>
+
+<SECTION>
 <FILE>thunarx-property-page</FILE>
 <TITLE>ThunarxPropertyPage</TITLE>
 ThunarxPropertyPage
index 8dd576c..4396817 100644 (file)
@@ -2,6 +2,7 @@
 
 thunarx_file_info_get_type
 thunarx_menu_provider_get_type
+thunarx_preferences_provider_get_type
 thunarx_property_page_get_type
 thunarx_property_page_provider_get_type
 thunarx_provider_factory_get_type
index d424e6b..1ee6e3c 100644 (file)
@@ -51,8 +51,7 @@ hello_menu_provider_init (ThunarxMenuProviderIface *iface)
 }
 
 static void
-hello_activated (GtkAction *action,
-                 GtkWidget *window)
+hello_activated (GtkWidget *window)
 {
   GtkWidget *dialog;
 
@@ -72,13 +71,11 @@ hello_get_file_actions (ThunarxMenuProvider *provider,
                         GList               *files)
 {
   GtkAction *action;
+  GClosure  *closure;
 
-  action = gtk_action_new ("Hello::say-hello",
-                           "Say hello", "Say hello",
-                           NULL);
-  g_signal_connect (G_OBJECT (action), "activate",
-                    G_CALLBACK (hello_activated),
-                    window);
+  action = gtk_action_new ("Hello::say-hello", "Say hello", "Say hello", NULL);
+  closure = g_cclosure_object_new_swap (G_CALLBACK (hello_activated), G_OBJECT (window));
+  g_signal_connect_closure (G_OBJECT (action), "activate", closure, TRUE);
 
   return g_list_append (NULL, action);
 }</programlisting>
diff --git a/docs/reference/thunarx/tmpl/thunarx-preferences-provider.sgml b/docs/reference/thunarx/tmpl/thunarx-preferences-provider.sgml
new file mode 100644 (file)
index 0000000..9314f2d
--- /dev/null
@@ -0,0 +1,115 @@
+<!-- ##### SECTION Title ##### -->
+ThunarxPreferencesProvider
+
+<!-- ##### SECTION Short_Description ##### -->
+The interface to extensions that provide preferences
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+  The ThunarxPreferencesProvider interface is implemented by extensions that
+  want to register additional actions in the preferences menu of the file
+  manager. In general this should only be done by extensions that are closely
+  tied to the file manager (for example, the <literal>thunar-uca</literal> is
+  such an extension, while an extension that just adds <guimenuitem>Compress
+  file</guimenuitem> and <guimenuitem>Uncompress file</guimenuitem> to the
+  context menu of compressed files should not add their own preferences to
+  the file manager menu, because it should use desktop-wide settings for
+  archive managers instead).
+</para>
+
+<para>
+  The <link linkend="GtkAction"><type>GtkAction</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
+  <literal>thunar-uca</literal> extension is called
+  <literal>ThunarUca::manage-actions</literal>.
+</para>
+
+<example>
+  <title>Preferences provider example</title>
+
+  <programlisting>
+static void hello_preferences_provider_init (ThunarxPreferencesProviderIface *iface);
+static void hello_get_actions               (ThunarxPreferencesProvider      *provider,
+                                             GtkWidget                       *window);
+
+THUNARX_DEFINE_TYPE_WITH_CODE (Hello, hello, G_TYPE_OBJECT,
+                               THUNARX_IMPLEMENT_INTERFACE (THUNARX_TYPE_PREFERENCES_PROVIDER,
+                                                            hello_preferences_provider_init));
+
+static void
+hello_preferences_provider_init (ThunarxPreferencesProviderIface *iface)
+{
+  iface->get_actions = hello_get_actions;
+}
+
+static void
+hello_activated (GtkWidget *window)
+{
+  GtkWidget *dialog;
+
+  dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+                                   GTK_DIALOG_MODAL
+                                   | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                   GTK_MESSAGE_INFO,
+                                   GTK_BUTTONS_OK,
+                                   "Hello World!");
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+}
+
+static GList*
+hello_get_actions (ThunarxPreferencesProvider *provider,
+                   GtkWidget                  *window)
+{
+  GtkAction *action;
+  GClosure  *closure;
+
+  action = gtk_action_new ("Hello::say-hello", "Say hello", "Say hello", NULL);
+  closure = g_cclosure_object_new_swap (G_CALLBACK (hello_activated), G_OBJECT (window));
+  g_signal_connect_closure (G_OBJECT (action), "activate", closure, TRUE);
+
+  return g_list_prepend (NULL, action);
+}
+  </programlisting>
+</example>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+Stable
+
+<!-- ##### STRUCT ThunarxPreferencesProviderIface ##### -->
+<para>
+  Interface with virtual methods implementation by extensions that
+  want to install preferences actions in the file managers menu.
+</para>
+
+<para>
+  Providers don't need to implement all of the virtual methods listed
+  in the interface.
+</para>
+
+@get_actions: See thunarx_preferences_provider_get_actions().
+
+<!-- ##### STRUCT ThunarxPreferencesProvider ##### -->
+<para>
+  Preferences provider type.
+</para>
+
+
+<!-- ##### FUNCTION thunarx_preferences_provider_get_actions ##### -->
+<para>
+
+</para>
+
+@provider: 
+@window: 
+@Returns: 
+
+
index d56759f..047a0d4 100644 (file)
@@ -13,3 +13,10 @@ this extension, you can use the command
   make install-extensionsLTLIBRARIES
 
 in this directory.
+
+Please note that this extension is not meant for daily use, but should just
+serve as an example of how to write a simple Thunar extension. If you want
+to be able to open a terminal in a specific folder, you should consider
+installing the thunar-uca extension (see thunar-uca/README) and adding an
+"Open Terminal Here" action there (there's already such an action available
+by default).
index 72ef6df..6dcf06b 100644 (file)
@@ -74,4 +74,17 @@ thunar/thunar-window.c
 thunarx/thunarx-property-page.c
 thunarx/thunarx-provider-plugin.c
 
+thunar-uca/thunar-uca-chooser.c
+thunar-uca/thunar-uca-chooser.h
+thunar-uca/thunar-uca-context.c
+thunar-uca/thunar-uca-context.h
+thunar-uca/thunar-uca-editor.c
+thunar-uca/thunar-uca-editor.h
+thunar-uca/thunar-uca-model.c
+thunar-uca/thunar-uca-model.h
+thunar-uca/thunar-uca-plugin.c
+thunar-uca/thunar-uca-provider.c
+thunar-uca/thunar-uca-provider.h
+thunar-uca/uca.xml.in
+
 Thunar.desktop.in
index 0773e09..2739061 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Thunar 0.1.4svn\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-11-28 23:30+0900\n"
+"POT-Creation-Date: 2005-11-29 18:22+0100\n"
 "PO-Revision-Date: 2005-10-06 22:03+0900\n"
 "Last-Translator: Benedikt Meurer <benny@xfce.org>\n"
 "Language-Team: German <de@li.org>\n"
@@ -138,7 +138,7 @@ msgid "copy of %s"
 msgstr ""
 
 #: ../thunar-vfs/thunar-vfs-xfer.c:158 ../thunar/thunar-list-model.c:703
-#: ../thunar/thunar-properties-dialog.c:617
+#: ../thunar/thunar-properties-dialog.c:629
 #, c-format
 msgid "link to %s"
 msgstr ""
@@ -250,7 +250,7 @@ msgid "Failed to create symbolic `%s'"
 msgstr ""
 
 #. setup application name
-#: ../thunar/main.c:47 ../thunar/thunar-window.c:391
+#: ../thunar/main.c:47 ../thunar/thunar-window.c:404
 msgid "Thunar"
 msgstr "Thunar"
 
@@ -340,32 +340,33 @@ msgstr ""
 msgid "Open <i>%s</i> and other files of type \"%s\" with:"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:634
+#: ../thunar/thunar-chooser-dialog.c:634 ../thunar-uca/thunar-uca-editor.c:491
 #, fuzzy
 msgid "Select an Application"
 msgstr "Andere Anwendung..."
 
-#: ../thunar/thunar-chooser-dialog.c:644
+#: ../thunar/thunar-chooser-dialog.c:644 ../thunar-uca/thunar-uca-editor.c:501
+#: ../thunar-uca/thunar-uca-editor.c:640
 msgid "All Files"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:649
+#: ../thunar/thunar-chooser-dialog.c:649 ../thunar-uca/thunar-uca-editor.c:506
 msgid "Executable Files"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:664
+#: ../thunar/thunar-chooser-dialog.c:664 ../thunar-uca/thunar-uca-editor.c:521
 msgid "Perl Scripts"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:670
+#: ../thunar/thunar-chooser-dialog.c:670 ../thunar-uca/thunar-uca-editor.c:527
 msgid "Python Scripts"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:676
+#: ../thunar/thunar-chooser-dialog.c:676 ../thunar-uca/thunar-uca-editor.c:533
 msgid "Ruby Scripts"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:682
+#: ../thunar/thunar-chooser-dialog.c:682 ../thunar-uca/thunar-uca-editor.c:539
 msgid "Shell Scripts"
 msgstr ""
 
@@ -453,6 +454,8 @@ msgid "Details view"
 msgstr "Detailansicht"
 
 #: ../thunar/thunar-dialogs.c:74 ../thunar/thunar-dialogs.c:78
+#: ../thunar-uca/thunar-uca-chooser.c:412
+#: ../thunar-uca/thunar-uca-provider.c:329
 #, c-format
 msgid "%s."
 msgstr ""
@@ -718,16 +721,16 @@ msgid "Number of visible files"
 msgstr ""
 
 #: ../thunar/thunar-list-model.c:342 ../thunar/thunar-view.c:108
-#: ../thunar/thunar-window.c:258
+#: ../thunar/thunar-window.c:268
 msgid "Show hidden"
 msgstr ""
 
 #: ../thunar/thunar-list-model.c:343 ../thunar/thunar-view.c:109
-#: ../thunar/thunar-window.c:259
+#: ../thunar/thunar-window.c:269
 msgid "Whether to display hidden files"
 msgstr ""
 
-#: ../thunar/thunar-list-model.c:701 ../thunar/thunar-properties-dialog.c:615
+#: ../thunar/thunar-list-model.c:701 ../thunar/thunar-properties-dialog.c:627
 msgid "broken link"
 msgstr ""
 
@@ -767,11 +770,11 @@ msgid_plural "%d items selected (%s)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../thunar/thunar-location-buttons.c:256
+#: ../thunar/thunar-location-buttons.c:258
 msgid "Spacing"
 msgstr ""
 
-#: ../thunar/thunar-location-buttons.c:257
+#: ../thunar/thunar-location-buttons.c:259
 msgid "The amount of space between the path buttons"
 msgstr ""
 
@@ -783,7 +786,7 @@ msgstr ""
 msgid "_Location:"
 msgstr ""
 
-#: ../thunar/thunar-navigator.c:135 ../thunar/thunar-window.c:245
+#: ../thunar/thunar-navigator.c:135 ../thunar/thunar-window.c:255
 msgid "Current directory"
 msgstr ""
 
@@ -813,60 +816,60 @@ msgstr ""
 msgid "The icon size for the path entry"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:177
+#: ../thunar/thunar-preferences-dialog.c:185
 #, fuzzy
 msgid "File Manager Preferences"
 msgstr "Dateimanager"
 
-#: ../thunar/thunar-preferences-dialog.c:193
+#: ../thunar/thunar-preferences-dialog.c:201
 msgid "<b>Default View</b>"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:204
+#: ../thunar/thunar-preferences-dialog.c:212
 msgid "View _new folders using:"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:209
+#: ../thunar/thunar-preferences-dialog.c:217
 msgid "Icon View"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:210
+#: ../thunar/thunar-preferences-dialog.c:218
 #, fuzzy
 msgid "Detailed List View"
 msgstr "Detailansicht"
 
-#: ../thunar/thunar-preferences-dialog.c:211
+#: ../thunar/thunar-preferences-dialog.c:219
 msgid "Last Active View"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:226
+#: ../thunar/thunar-preferences-dialog.c:234
 msgid "Sort _folders before files"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:228
+#: ../thunar/thunar-preferences-dialog.c:236
 msgid "Select this option to list folders before files when you sort a folder."
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:232
+#: ../thunar/thunar-preferences-dialog.c:240
 msgid "Show hidden and _backup files"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:234
+#: ../thunar/thunar-preferences-dialog.c:242
 msgid ""
 "Select this option to show hidden and backup files in new windows. The first "
 "character in a hidden filename is a period (.). The last character in a "
 "backup filename is a tilde (~)."
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:244
+#: ../thunar/thunar-preferences-dialog.c:252
 msgid "<b>Icon View</b>"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:255
+#: ../thunar/thunar-preferences-dialog.c:263
 msgid "_Text beside icons"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:257
+#: ../thunar/thunar-preferences-dialog.c:265
 msgid ""
 "Select this option to place the icon captions for items beside the icon "
 "rather than below the icon."
@@ -935,62 +938,62 @@ msgstr[1] ""
 msgid "The file displayed by the dialog"
 msgstr ""
 
-#: ../thunar/thunar-properties-dialog.c:209
+#: ../thunar/thunar-properties-dialog.c:217
 msgid "General"
 msgstr "Allgemein"
 
-#: ../thunar/thunar-properties-dialog.c:226
+#: ../thunar/thunar-properties-dialog.c:234
 msgid "Name:"
 msgstr "Name:"
 
 #.
 #. Second box (kind)
 #.
-#: ../thunar/thunar-properties-dialog.c:251
+#: ../thunar/thunar-properties-dialog.c:259
 msgid "Kind:"
 msgstr ""
 
 #.
 #. Third box (modified, accessed)
 #.
-#: ../thunar/thunar-properties-dialog.c:276
+#: ../thunar/thunar-properties-dialog.c:284
 msgid "Modified:"
 msgstr ""
 
-#: ../thunar/thunar-properties-dialog.c:289
+#: ../thunar/thunar-properties-dialog.c:297
 msgid "Accessed:"
 msgstr ""
 
 #.
 #. Fourth box (volume, size)
 #.
-#: ../thunar/thunar-properties-dialog.c:313
+#: ../thunar/thunar-properties-dialog.c:321
 msgid "Volume:"
 msgstr ""
 
-#: ../thunar/thunar-properties-dialog.c:336
+#: ../thunar/thunar-properties-dialog.c:344
 msgid "Size:"
 msgstr "Größe:"
 
 #.
 #. Emblem chooser
 #.
-#: ../thunar/thunar-properties-dialog.c:360
+#: ../thunar/thunar-properties-dialog.c:368
 msgid "Emblems"
 msgstr ""
 
-#: ../thunar/thunar-properties-dialog.c:592
+#: ../thunar/thunar-properties-dialog.c:604
 #, c-format
 msgid "%s Info"
 msgstr ""
 
-#: ../thunar/thunar-properties-dialog.c:673
+#: ../thunar/thunar-properties-dialog.c:685
 #, c-format
 msgid "%s (%u Bytes)"
 msgstr "%s (%u Byte)"
 
 #. display an error message
-#: ../thunar/thunar-properties-dialog.c:719
+#: ../thunar/thunar-properties-dialog.c:731
 #: ../thunar/thunar-standard-view.c:2175
 #, c-format
 msgid "Failed to rename `%s'"
@@ -1067,7 +1070,7 @@ msgid "Select all files in this window"
 msgstr ""
 
 #: ../thunar/thunar-standard-view.c:263
-msgid "Select _by Pattern"
+msgid "Select _by Pattern..."
 msgstr ""
 
 #: ../thunar/thunar-standard-view.c:263
@@ -1223,7 +1226,7 @@ msgstr ""
 msgid "Text to be displayed in the statusbar associated with this view"
 msgstr ""
 
-#: ../thunar/thunar-view.c:122 ../thunar/thunar-window.c:273
+#: ../thunar/thunar-view.c:122 ../thunar/thunar-window.c:283
 msgid "UI manager"
 msgstr ""
 
@@ -1231,180 +1234,181 @@ msgstr ""
 msgid "UI manager of the surrounding window"
 msgstr ""
 
-#: ../thunar/thunar-window.c:156
+#: ../thunar/thunar-window.c:166
 msgid "_File"
 msgstr "_Datei"
 
-#: ../thunar/thunar-window.c:157
+#: ../thunar/thunar-window.c:167
 msgid "Open New _Window"
 msgstr "_Neues Fenster öffnen"
 
-#: ../thunar/thunar-window.c:157
+#: ../thunar/thunar-window.c:167
 msgid "Open a new Thunar window for the displayed location"
 msgstr ""
 
-#: ../thunar/thunar-window.c:158
+#: ../thunar/thunar-window.c:168
 msgid "Close _All Windows"
 msgstr ""
 
-#: ../thunar/thunar-window.c:158
+#: ../thunar/thunar-window.c:168
 msgid "Close all Thunar windows"
 msgstr "Alle Thunar Fenster schließen"
 
-#: ../thunar/thunar-window.c:159
+#: ../thunar/thunar-window.c:169
 msgid "_Close"
 msgstr "_Schließen"
 
-#: ../thunar/thunar-window.c:159
+#: ../thunar/thunar-window.c:169
 msgid "Close this window"
 msgstr "Dieses Fenster schließen"
 
-#: ../thunar/thunar-window.c:160
+#: ../thunar/thunar-window.c:170
 msgid "_Edit"
 msgstr "_Bearbeiten"
 
-#: ../thunar/thunar-window.c:161
+#: ../thunar/thunar-window.c:171
 #, fuzzy
-msgid "_Preferences"
+msgid "Pr_eferences..."
 msgstr "_Eigenschaften"
 
-#: ../thunar/thunar-window.c:161
-msgid "Edit Thunar Preferences"
-msgstr ""
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Edit Thunars Preferences"
+msgstr "Dateimanager"
 
-#: ../thunar/thunar-window.c:162
+#: ../thunar/thunar-window.c:172
 msgid "_View"
 msgstr "_Anzeige"
 
-#: ../thunar/thunar-window.c:163
+#: ../thunar/thunar-window.c:173
 msgid "_Location Selector"
 msgstr ""
 
-#: ../thunar/thunar-window.c:164
+#: ../thunar/thunar-window.c:174
 msgid "_Side Pane"
 msgstr ""
 
-#: ../thunar/thunar-window.c:165
+#: ../thunar/thunar-window.c:175
 msgid "_Go"
 msgstr "_Gehe"
 
-#: ../thunar/thunar-window.c:166
+#: ../thunar/thunar-window.c:176
 msgid "Open _Parent"
 msgstr ""
 
-#: ../thunar/thunar-window.c:166
+#: ../thunar/thunar-window.c:176
 msgid "Open the parent folder"
 msgstr ""
 
-#: ../thunar/thunar-window.c:167
+#: ../thunar/thunar-window.c:177
 msgid "_Home"
 msgstr ""
 
-#: ../thunar/thunar-window.c:167
+#: ../thunar/thunar-window.c:177
 msgid "Open the home folder"
 msgstr ""
 
-#: ../thunar/thunar-window.c:168
+#: ../thunar/thunar-window.c:178
 msgid "Open _Location..."
 msgstr ""
 
-#: ../thunar/thunar-window.c:168
+#: ../thunar/thunar-window.c:178
 msgid "Specify a location to open"
 msgstr ""
 
-#: ../thunar/thunar-window.c:169
+#: ../thunar/thunar-window.c:179
 msgid "_Help"
 msgstr "_Hilfe"
 
-#: ../thunar/thunar-window.c:171 ../thunar/thunar-window.c:173
+#: ../thunar/thunar-window.c:181 ../thunar/thunar-window.c:183
 msgid "_About"
 msgstr "Ü_ber"
 
-#: ../thunar/thunar-window.c:171 ../thunar/thunar-window.c:173
+#: ../thunar/thunar-window.c:181 ../thunar/thunar-window.c:183
 msgid "Display information about Thunar"
 msgstr ""
 
-#: ../thunar/thunar-window.c:179
+#: ../thunar/thunar-window.c:189
 msgid "Show _Hidden Files"
 msgstr ""
 
-#: ../thunar/thunar-window.c:179
+#: ../thunar/thunar-window.c:189
 msgid "Toggles the display of hidden files in the current window"
 msgstr ""
 
-#: ../thunar/thunar-window.c:246
+#: ../thunar/thunar-window.c:256
 msgid "The directory currently displayed within this window"
 msgstr ""
 
-#: ../thunar/thunar-window.c:274
+#: ../thunar/thunar-window.c:284
 msgid "The UI manager used within this window"
 msgstr ""
 
 #.
 #. * add the side pane options
 #.
-#: ../thunar/thunar-window.c:329
+#: ../thunar/thunar-window.c:342
 msgid "_Favourites"
 msgstr "Favouriten"
 
-#: ../thunar/thunar-window.c:335 ../thunar/thunar-window.c:358
+#: ../thunar/thunar-window.c:348 ../thunar/thunar-window.c:371
 msgid "_Hidden"
 msgstr ""
 
 #.
 #. * add the location selector options
 #.
-#: ../thunar/thunar-window.c:344
+#: ../thunar/thunar-window.c:357
 msgid "_Pathbar Style"
 msgstr ""
 
-#: ../thunar/thunar-window.c:345
+#: ../thunar/thunar-window.c:358
 msgid "Modern approach with buttons that correspond to folders"
 msgstr ""
 
-#: ../thunar/thunar-window.c:351
+#: ../thunar/thunar-window.c:364
 msgid "_Toolbar Style"
 msgstr ""
 
-#: ../thunar/thunar-window.c:352
+#: ../thunar/thunar-window.c:365
 msgid "Traditional approach with location bar and navigation buttons"
 msgstr ""
 
-#: ../thunar/thunar-window.c:358
+#: ../thunar/thunar-window.c:371
 msgid "Don't display any location selector"
 msgstr ""
 
 #.
 #. * add view options
 #.
-#: ../thunar/thunar-window.c:367
+#: ../thunar/thunar-window.c:380
 msgid "View as _Icons"
 msgstr ""
 
-#: ../thunar/thunar-window.c:367
+#: ../thunar/thunar-window.c:380
 msgid "Display folder content in an icon view"
 msgstr ""
 
-#: ../thunar/thunar-window.c:374
+#: ../thunar/thunar-window.c:387
 msgid "View as _Detailed List"
 msgstr ""
 
-#: ../thunar/thunar-window.c:374
+#: ../thunar/thunar-window.c:387
 msgid "Display folder content in a detailed list view"
 msgstr ""
 
 #. display an error to the user
-#: ../thunar/thunar-window.c:868
+#: ../thunar/thunar-window.c:951
 msgid "Failed to open home directory"
 msgstr ""
 
-#: ../thunar/thunar-window.c:943
+#: ../thunar/thunar-window.c:1026
 msgid ""
 "Thunar is a fast and easy to use file manager\n"
 "for the Xfce Desktop Environment."
 msgstr ""
 
-#: ../thunar/thunar-window.c:948
+#: ../thunar/thunar-window.c:1031
 msgid "translator-credits"
 msgstr ""
 
@@ -1432,6 +1436,251 @@ msgstr ""
 msgid "Don't unload the plugin from memory"
 msgstr ""
 
+#: ../thunar-uca/thunar-uca-chooser.c:125
+msgid "Custom Actions"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:142
+msgid ""
+"You can configure custom actions that will appear in the\n"
+"file managers context menus for certain kinds of files."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:192
+msgid "Add a new custom action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:202
+msgid "Edit the currently selected action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:212
+msgid "Delete the currently selected action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:222
+msgid "Move the currently selection action up by one row."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:232
+msgid "Move the currently selection action down by one row."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:362
+msgid "Edit Action"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:362
+msgid "Create Action"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:411
+#, fuzzy
+msgid "Failed to save actions to disk."
+msgstr "Andere Anwendung..."
+
+#.
+#. Basic
+#.
+#: ../thunar-uca/thunar-uca-editor.c:136
+msgid "Basic"
+msgstr "Allgemein"
+
+#: ../thunar-uca/thunar-uca-editor.c:145
+msgid "_Name:"
+msgstr "Name:"
+
+#: ../thunar-uca/thunar-uca-editor.c:150
+msgid "The name of the action that will be displayed in the context menu."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:163
+msgid "_Description:"
+msgstr "_Beschreibung:"
+
+#: ../thunar-uca/thunar-uca-editor.c:168
+msgid ""
+"The description of the action that will be displayed as tooltip in the "
+"statusbar when selecting the item from the context menu."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:181
+msgid "_Command:"
+msgstr "_Befehl:"
+
+#: ../thunar-uca/thunar-uca-editor.c:190
+msgid ""
+"The command (including the necessary parameters) to perform the action. See "
+"the command parameter legend below for a list of supported parameter "
+"variables, which will be substituted when launching the command. When upper-"
+"case letters (e.g. %F, %D, %N) are used, the action will be applicable even "
+"if more than one item is selected. Else the action will only be applicable "
+"if exactly one item is selected."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:201
+msgid "Browse the file system to select an application to use for this action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:217
+msgid "_Icon:"
+msgstr ""
+
+#. setup a label to tell that no icon was selected
+#: ../thunar-uca/thunar-uca-editor.c:225 ../thunar-uca/thunar-uca-editor.c:770
+msgid "No icon"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:226
+msgid ""
+"Click this button to select an icon file that will be displayed in the "
+"context menu in addition to the action name chosen above."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:257
+msgid ""
+"The following command parameters will be\n"
+"substituted when launching the action:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:295
+msgid "the path to the first selected file"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:307
+msgid "the paths to all selected files"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:319
+#, c-format
+msgid "directory containing the file that is passed in %f"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:331
+#, c-format
+msgid "directories containing the files that are passed in %F"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:343
+msgid "the first selected filename (without path)"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:355
+msgid "the selected filenames (without paths)"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:369
+msgid "Appearance Conditions"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:377
+#, fuzzy
+msgid "_File Pattern:"
+msgstr "Dateimanager"
+
+#: ../thunar-uca/thunar-uca-editor.c:382
+msgid ""
+"Enter a list of patterns that will be used to determine whether this action "
+"should be displayed for a selected file. If you specify more than one "
+"pattern here, the list items must be separated with semicolons (e.g. *.txt;*."
+"doc)."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:401
+msgid "Appears if selection contains:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:414
+msgid "_Directories"
+msgstr "_Verzeichnisse"
+
+#: ../thunar-uca/thunar-uca-editor.c:418
+msgid "_Audio Files"
+msgstr "_Audiodateien"
+
+#: ../thunar-uca/thunar-uca-editor.c:422
+msgid "_Image Files"
+msgstr "_Bilddateien"
+
+#: ../thunar-uca/thunar-uca-editor.c:426
+msgid "_Text Files"
+msgstr "_Textdateien"
+
+#: ../thunar-uca/thunar-uca-editor.c:431
+msgid "_Video Files"
+msgstr "_Videodateien"
+
+#: ../thunar-uca/thunar-uca-editor.c:435
+msgid "_Other Files"
+msgstr "A_ndere Dateien"
+
+#: ../thunar-uca/thunar-uca-editor.c:452
+msgid ""
+"This page lists the conditions under which the\n"
+"action will appear in the file managers context\n"
+"menus. The file patterns are specified as a list\n"
+"of simple file patterns separated by semicolons\n"
+"(e.g. *.txt;*.doc). For an action to appear in the\n"
+"context menu of a file or folder, atleast one of\n"
+"these patterns must match the name of the file\n"
+"or folder. Additionally, you can specify that the\n"
+"action should only appear for certain kinds of\n"
+"files."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:630
+#, fuzzy
+msgid "Select an Icon"
+msgstr "Andere Anwendung..."
+
+#: ../thunar-uca/thunar-uca-editor.c:645
+msgid "Image Files"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:762
+#, c-format
+msgid "Unknown element <%s>"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:780
+msgid "End element handler called while in root context"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:868
+#, c-format
+msgid "Unknown closing element <%s>"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:1293
+msgid "Failed to determine save location for uca.xml"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:1409
+msgid "Command not configured"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:155
+msgid "Configure c_ustom actions..."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:156
+msgid ""
+"Setup custom actions that will appear in the file managers context menus"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:328
+#, fuzzy, c-format
+msgid "Failed to launch action `%s'."
+msgstr "Andere Anwendung..."
+
+#: ../thunar-uca/uca.xml.in.h:1
+msgid "Example for a custom action"
+msgstr ""
+
+#: ../thunar-uca/uca.xml.in.h:2
+msgid "Open Terminal Here"
+msgstr ""
+
 #: ../Thunar.desktop.in.h:1
 msgid "Browse the filesystem with the file manager"
 msgstr ""
index 720ac6f..b3ef010 100644 (file)
--- a/po/el.po
+++ b/po/el.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Thunar 0.1.4svn\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-11-28 23:30+0900\n"
+"POT-Creation-Date: 2005-11-29 18:22+0100\n"
 "PO-Revision-Date: 2005-11-15 22:07+0200\n"
 "Last-Translator: Stavros Giannouris <stavrosg2002@freemail.gr>\n"
 "Language-Team: Greek <nls@tux.hellug.gr>\n"
@@ -149,7 +149,7 @@ msgid "copy of %s"
 msgstr "αντίγραφο του %s"
 
 #: ../thunar-vfs/thunar-vfs-xfer.c:158 ../thunar/thunar-list-model.c:703
-#: ../thunar/thunar-properties-dialog.c:617
+#: ../thunar/thunar-properties-dialog.c:629
 #, c-format
 msgid "link to %s"
 msgstr "δεσμός προς το %s"
@@ -261,7 +261,7 @@ msgid "Failed to create symbolic `%s'"
 msgstr "Δεν είναι δυνατή η δημιουργία συμβολικού δεσμού `%s'"
 
 #. setup application name
-#: ../thunar/main.c:47 ../thunar/thunar-window.c:391
+#: ../thunar/main.c:47 ../thunar/thunar-window.c:404
 msgid "Thunar"
 msgstr "Thunar"
 
@@ -349,31 +349,32 @@ msgstr "Η εκτέλεση του `%s' απέτυχε"
 msgid "Open <i>%s</i> and other files of type \"%s\" with:"
 msgstr "Άνοιγμα του <i>%s</i> και των άλλων αρχείων του τύπου \"%s\" με:"
 
-#: ../thunar/thunar-chooser-dialog.c:634
+#: ../thunar/thunar-chooser-dialog.c:634 ../thunar-uca/thunar-uca-editor.c:491
 msgid "Select an Application"
 msgstr "Επιλογή Εφαρμογής"
 
-#: ../thunar/thunar-chooser-dialog.c:644
+#: ../thunar/thunar-chooser-dialog.c:644 ../thunar-uca/thunar-uca-editor.c:501
+#: ../thunar-uca/thunar-uca-editor.c:640
 msgid "All Files"
 msgstr "Όλα τα Αρχεία"
 
-#: ../thunar/thunar-chooser-dialog.c:649
+#: ../thunar/thunar-chooser-dialog.c:649 ../thunar-uca/thunar-uca-editor.c:506
 msgid "Executable Files"
 msgstr "Εκτελέσιμα Αρχεία"
 
-#: ../thunar/thunar-chooser-dialog.c:664
+#: ../thunar/thunar-chooser-dialog.c:664 ../thunar-uca/thunar-uca-editor.c:521
 msgid "Perl Scripts"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:670
+#: ../thunar/thunar-chooser-dialog.c:670 ../thunar-uca/thunar-uca-editor.c:527
 msgid "Python Scripts"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:676
+#: ../thunar/thunar-chooser-dialog.c:676 ../thunar-uca/thunar-uca-editor.c:533
 msgid "Ruby Scripts"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:682
+#: ../thunar/thunar-chooser-dialog.c:682 ../thunar-uca/thunar-uca-editor.c:539
 msgid "Shell Scripts"
 msgstr ""
 
@@ -459,6 +460,8 @@ msgid "Details view"
 msgstr "Προβολή λεπτομεριών"
 
 #: ../thunar/thunar-dialogs.c:74 ../thunar/thunar-dialogs.c:78
+#: ../thunar-uca/thunar-uca-chooser.c:412
+#: ../thunar-uca/thunar-uca-provider.c:329
 #, c-format
 msgid "%s."
 msgstr ""
@@ -724,16 +727,16 @@ msgid "Number of visible files"
 msgstr "Αριθμός ορατών αρχείων"
 
 #: ../thunar/thunar-list-model.c:342 ../thunar/thunar-view.c:108
-#: ../thunar/thunar-window.c:258
+#: ../thunar/thunar-window.c:268
 msgid "Show hidden"
 msgstr "Προβολή κρυφών"
 
 #: ../thunar/thunar-list-model.c:343 ../thunar/thunar-view.c:109
-#: ../thunar/thunar-window.c:259
+#: ../thunar/thunar-window.c:269
 msgid "Whether to display hidden files"
 msgstr "Αν θα προβάλλονται τα κρυφά αρχεία"
 
-#: ../thunar/thunar-list-model.c:701 ../thunar/thunar-properties-dialog.c:615
+#: ../thunar/thunar-list-model.c:701 ../thunar/thunar-properties-dialog.c:627
 msgid "broken link"
 msgstr "σπασμένος δεσμός"
 
@@ -773,11 +776,11 @@ msgid_plural "%d items selected (%s)"
 msgstr[0] "%d επιλεγμένο αντικείμενο"
 msgstr[1] "%d επιλεγμένα αντικείμενα (%s)"
 
-#: ../thunar/thunar-location-buttons.c:256
+#: ../thunar/thunar-location-buttons.c:258
 msgid "Spacing"
 msgstr "Διάστιχο"
 
-#: ../thunar/thunar-location-buttons.c:257
+#: ../thunar/thunar-location-buttons.c:259
 msgid "The amount of space between the path buttons"
 msgstr "Το μέγεθος του διαστήματος μεταξύ κουμπιών διαδρομής"
 
@@ -789,7 +792,7 @@ msgstr "Άνοιγμα Τοποθεσίας"
 msgid "_Location:"
 msgstr "_Τοποθεσία:"
 
-#: ../thunar/thunar-navigator.c:135 ../thunar/thunar-window.c:245
+#: ../thunar/thunar-navigator.c:135 ../thunar/thunar-window.c:255
 msgid "Current directory"
 msgstr "Τρέχον κατάλογος"
 
@@ -819,63 +822,63 @@ msgstr "Το αρχείο που εμφανίζεται τώρα"
 msgid "The icon size for the path entry"
 msgstr "Μέγεθος εικονιδίου για τη διαδρομή"
 
-#: ../thunar/thunar-preferences-dialog.c:177
+#: ../thunar/thunar-preferences-dialog.c:185
 #, fuzzy
 msgid "File Manager Preferences"
 msgstr "Επεξεργασία Προτιμήσεων Thunar"
 
-#: ../thunar/thunar-preferences-dialog.c:193
+#: ../thunar/thunar-preferences-dialog.c:201
 msgid "<b>Default View</b>"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:204
+#: ../thunar/thunar-preferences-dialog.c:212
 msgid "View _new folders using:"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:209
+#: ../thunar/thunar-preferences-dialog.c:217
 #, fuzzy
 msgid "Icon View"
 msgstr "Προβολή Εικονιδίων"
 
-#: ../thunar/thunar-preferences-dialog.c:210
+#: ../thunar/thunar-preferences-dialog.c:218
 #, fuzzy
 msgid "Detailed List View"
 msgstr "Προβολή λεπτομεριών"
 
-#: ../thunar/thunar-preferences-dialog.c:211
+#: ../thunar/thunar-preferences-dialog.c:219
 msgid "Last Active View"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:226
+#: ../thunar/thunar-preferences-dialog.c:234
 msgid "Sort _folders before files"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:228
+#: ../thunar/thunar-preferences-dialog.c:236
 msgid "Select this option to list folders before files when you sort a folder."
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:232
+#: ../thunar/thunar-preferences-dialog.c:240
 #, fuzzy
 msgid "Show hidden and _backup files"
 msgstr "Εμφάνιση _Κρυφών Αρχείων"
 
-#: ../thunar/thunar-preferences-dialog.c:234
+#: ../thunar/thunar-preferences-dialog.c:242
 msgid ""
 "Select this option to show hidden and backup files in new windows. The first "
 "character in a hidden filename is a period (.). The last character in a "
 "backup filename is a tilde (~)."
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:244
+#: ../thunar/thunar-preferences-dialog.c:252
 #, fuzzy
 msgid "<b>Icon View</b>"
 msgstr "Προβολή Εικονιδίων"
 
-#: ../thunar/thunar-preferences-dialog.c:255
+#: ../thunar/thunar-preferences-dialog.c:263
 msgid "_Text beside icons"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:257
+#: ../thunar/thunar-preferences-dialog.c:265
 msgid ""
 "Select this option to place the icon captions for items beside the icon "
 "rather than below the icon."
@@ -944,62 +947,62 @@ msgstr[1] "(απομένουν %lu δευτερόλεπτα)"
 msgid "The file displayed by the dialog"
 msgstr "Το αρχείο που απεικονίζεται από το διάλογο"
 
-#: ../thunar/thunar-properties-dialog.c:209
+#: ../thunar/thunar-properties-dialog.c:217
 msgid "General"
 msgstr "Γενικές"
 
-#: ../thunar/thunar-properties-dialog.c:226
+#: ../thunar/thunar-properties-dialog.c:234
 msgid "Name:"
 msgstr "Όνομα:"
 
 #.
 #. Second box (kind)
 #.
-#: ../thunar/thunar-properties-dialog.c:251
+#: ../thunar/thunar-properties-dialog.c:259
 msgid "Kind:"
 msgstr "Είδος:"
 
 #.
 #. Third box (modified, accessed)
 #.
-#: ../thunar/thunar-properties-dialog.c:276
+#: ../thunar/thunar-properties-dialog.c:284
 msgid "Modified:"
 msgstr "Τροποποιήθηκε:"
 
-#: ../thunar/thunar-properties-dialog.c:289
+#: ../thunar/thunar-properties-dialog.c:297
 msgid "Accessed:"
 msgstr "Προσπελάστηκε:"
 
 #.
 #. Fourth box (volume, size)
 #.
-#: ../thunar/thunar-properties-dialog.c:313
+#: ../thunar/thunar-properties-dialog.c:321
 msgid "Volume:"
 msgstr "Τόμος:"
 
-#: ../thunar/thunar-properties-dialog.c:336
+#: ../thunar/thunar-properties-dialog.c:344
 msgid "Size:"
 msgstr "Μέγεθος:"
 
 #.
 #. Emblem chooser
 #.
-#: ../thunar/thunar-properties-dialog.c:360
+#: ../thunar/thunar-properties-dialog.c:368
 msgid "Emblems"
 msgstr "Εμβλήματα"
 
-#: ../thunar/thunar-properties-dialog.c:592
+#: ../thunar/thunar-properties-dialog.c:604
 #, c-format
 msgid "%s Info"
 msgstr "%s Πληροφορίες"
 
-#: ../thunar/thunar-properties-dialog.c:673
+#: ../thunar/thunar-properties-dialog.c:685
 #, c-format
 msgid "%s (%u Bytes)"
 msgstr "%s (%u Bytes)"
 
 #. display an error message
-#: ../thunar/thunar-properties-dialog.c:719
+#: ../thunar/thunar-properties-dialog.c:731
 #: ../thunar/thunar-standard-view.c:2175
 #, c-format
 msgid "Failed to rename `%s'"
@@ -1074,7 +1077,8 @@ msgid "Select all files in this window"
 msgstr "Επιλογή όλων των αρχείων σε αυτό το παράθυρο"
 
 #: ../thunar/thunar-standard-view.c:263
-msgid "Select _by Pattern"
+#, fuzzy
+msgid "Select _by Pattern..."
 msgstr "Επιλογή _βάσει μοτίβου"
 
 #: ../thunar/thunar-standard-view.c:263
@@ -1236,7 +1240,7 @@ msgstr "Το πλάτος αναδίπλωσης"
 msgid "Text to be displayed in the statusbar associated with this view"
 msgstr "Κείμενο που θα εμφανίζεται στην γραμμή κατάστασης σε αυτή την προβολή"
 
-#: ../thunar/thunar-view.c:122 ../thunar/thunar-window.c:273
+#: ../thunar/thunar-view.c:122 ../thunar/thunar-window.c:283
 msgid "UI manager"
 msgstr "Διαχειριστής UI"
 
@@ -1244,177 +1248,179 @@ msgstr "Διαχειριστής UI"
 msgid "UI manager of the surrounding window"
 msgstr ""
 
-#: ../thunar/thunar-window.c:156
+#: ../thunar/thunar-window.c:166
 msgid "_File"
 msgstr "_Αρχείο"
 
-#: ../thunar/thunar-window.c:157
+#: ../thunar/thunar-window.c:167
 msgid "Open New _Window"
 msgstr "Άνοιγμα νέου _παραθύρου"
 
-#: ../thunar/thunar-window.c:157
+#: ../thunar/thunar-window.c:167
 msgid "Open a new Thunar window for the displayed location"
 msgstr ""
 "'Ανοιγμα ενός άλλου παράθυρου του Thunar για την προβαλλόμενη τοποθεσία"
 
-#: ../thunar/thunar-window.c:158
+#: ../thunar/thunar-window.c:168
 msgid "Close _All Windows"
 msgstr "Κλείσιμο _Όλων των Παραθύρων"
 
-#: ../thunar/thunar-window.c:158
+#: ../thunar/thunar-window.c:168
 msgid "Close all Thunar windows"
 msgstr "Κλείσιμο όλων των παραθύρων του Thunar"
 
-#: ../thunar/thunar-window.c:159
+#: ../thunar/thunar-window.c:169
 msgid "_Close"
 msgstr "_Κλείσιμο"
 
-#: ../thunar/thunar-window.c:159
+#: ../thunar/thunar-window.c:169
 msgid "Close this window"
 msgstr "Κλείσιμο αυτού του παραθύρου"
 
-#: ../thunar/thunar-window.c:160
+#: ../thunar/thunar-window.c:170
 msgid "_Edit"
 msgstr "_Επεξεργασία"
 
-#: ../thunar/thunar-window.c:161
-msgid "_Preferences"
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Pr_eferences..."
 msgstr "_Προτιμήσεις"
 
-#: ../thunar/thunar-window.c:161
-msgid "Edit Thunar Preferences"
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Edit Thunars Preferences"
 msgstr "Επεξεργασία Προτιμήσεων Thunar"
 
-#: ../thunar/thunar-window.c:162
+#: ../thunar/thunar-window.c:172
 msgid "_View"
 msgstr "_Προβολή"
 
-#: ../thunar/thunar-window.c:163
+#: ../thunar/thunar-window.c:173
 #, fuzzy
 msgid "_Location Selector"
 msgstr "Γραμμή _Τοποθεσίας"
 
-#: ../thunar/thunar-window.c:164
+#: ../thunar/thunar-window.c:174
 msgid "_Side Pane"
 msgstr "_Πλευρικό Ταμπλό"
 
-#: ../thunar/thunar-window.c:165
+#: ../thunar/thunar-window.c:175
 msgid "_Go"
 msgstr "_Μετάβαση"
 
-#: ../thunar/thunar-window.c:166
+#: ../thunar/thunar-window.c:176
 msgid "Open _Parent"
 msgstr "Άνοιγμα _Γονικού"
 
-#: ../thunar/thunar-window.c:166
+#: ../thunar/thunar-window.c:176
 msgid "Open the parent folder"
 msgstr "Άνοιγμα του γονικού φακέλου"
 
-#: ../thunar/thunar-window.c:167
+#: ../thunar/thunar-window.c:177
 msgid "_Home"
 msgstr "_Αρχή"
 
-#: ../thunar/thunar-window.c:167
+#: ../thunar/thunar-window.c:177
 msgid "Open the home folder"
 msgstr "Άνοιγμα του αρχικού φακέλου"
 
-#: ../thunar/thunar-window.c:168
+#: ../thunar/thunar-window.c:178
 msgid "Open _Location..."
 msgstr "Άνοιγμα _Τοποθεσίας..."
 
-#: ../thunar/thunar-window.c:168
+#: ../thunar/thunar-window.c:178
 msgid "Specify a location to open"
 msgstr "Καθορίστε μια τοποθεσία για άνοιγμα"
 
-#: ../thunar/thunar-window.c:169
+#: ../thunar/thunar-window.c:179
 msgid "_Help"
 msgstr "_Βοήθεια"
 
-#: ../thunar/thunar-window.c:171 ../thunar/thunar-window.c:173
+#: ../thunar/thunar-window.c:181 ../thunar/thunar-window.c:183
 msgid "_About"
 msgstr "_Περί"
 
-#: ../thunar/thunar-window.c:171 ../thunar/thunar-window.c:173
+#: ../thunar/thunar-window.c:181 ../thunar/thunar-window.c:183
 msgid "Display information about Thunar"
 msgstr "Εμφάνιση πληροφοριών σχετικά με το Thunar"
 
-#: ../thunar/thunar-window.c:179
+#: ../thunar/thunar-window.c:189
 msgid "Show _Hidden Files"
 msgstr "Εμφάνιση _Κρυφών Αρχείων"
 
-#: ../thunar/thunar-window.c:179
+#: ../thunar/thunar-window.c:189
 msgid "Toggles the display of hidden files in the current window"
 msgstr "Εναλλάσσει την εμφάνιση κρυφών αρχείων στο τρέχον παράθυρο"
 
-#: ../thunar/thunar-window.c:246
+#: ../thunar/thunar-window.c:256
 msgid "The directory currently displayed within this window"
 msgstr "Ο κατάλογος που εμφανίζεται τώρα σε αυτό το παράθυρο"
 
-#: ../thunar/thunar-window.c:274
+#: ../thunar/thunar-window.c:284
 msgid "The UI manager used within this window"
 msgstr ""
 
 #.
 #. * add the side pane options
 #.
-#: ../thunar/thunar-window.c:329
+#: ../thunar/thunar-window.c:342
 msgid "_Favourites"
 msgstr "_Αγαπημένα"
 
-#: ../thunar/thunar-window.c:335 ../thunar/thunar-window.c:358
+#: ../thunar/thunar-window.c:348 ../thunar/thunar-window.c:371
 msgid "_Hidden"
 msgstr "Κ_ρυφό"
 
 #.
 #. * add the location selector options
 #.
-#: ../thunar/thunar-window.c:344
+#: ../thunar/thunar-window.c:357
 #, fuzzy
 msgid "_Pathbar Style"
 msgstr "_Παραδοσιακό Στυλ"
 
-#: ../thunar/thunar-window.c:345
+#: ../thunar/thunar-window.c:358
 msgid "Modern approach with buttons that correspond to folders"
 msgstr ""
 
-#: ../thunar/thunar-window.c:351
+#: ../thunar/thunar-window.c:364
 #, fuzzy
 msgid "_Toolbar Style"
 msgstr "_Παραδοσιακό Στυλ"
 
-#: ../thunar/thunar-window.c:352
+#: ../thunar/thunar-window.c:365
 msgid "Traditional approach with location bar and navigation buttons"
 msgstr ""
 
-#: ../thunar/thunar-window.c:358
+#: ../thunar/thunar-window.c:371
 msgid "Don't display any location selector"
 msgstr ""
 
 #.
 #. * add view options
 #.
-#: ../thunar/thunar-window.c:367
+#: ../thunar/thunar-window.c:380
 msgid "View as _Icons"
 msgstr "Προβολή Ε_ικονιδίων"
 
-#: ../thunar/thunar-window.c:367
+#: ../thunar/thunar-window.c:380
 msgid "Display folder content in an icon view"
 msgstr ""
 
-#: ../thunar/thunar-window.c:374
+#: ../thunar/thunar-window.c:387
 msgid "View as _Detailed List"
 msgstr "Προβολή _Λεπτομερούς Λίστας"
 
-#: ../thunar/thunar-window.c:374
+#: ../thunar/thunar-window.c:387
 msgid "Display folder content in a detailed list view"
 msgstr ""
 
 #. display an error to the user
-#: ../thunar/thunar-window.c:868
+#: ../thunar/thunar-window.c:951
 msgid "Failed to open home directory"
 msgstr "Αδυναμία ανοίγματος αρχικού καταλόγου"
 
-#: ../thunar/thunar-window.c:943
+#: ../thunar/thunar-window.c:1026
 msgid ""
 "Thunar is a fast and easy to use file manager\n"
 "for the Xfce Desktop Environment."
@@ -1422,7 +1428,7 @@ msgstr ""
 "Ο Thunar είναι ένας γρήγορος και εύκολος διαχειριστής αρχείων\n"
 "για το Περιβάλλον Εργασίας Xfce."
 
-#: ../thunar/thunar-window.c:948
+#: ../thunar/thunar-window.c:1031
 msgid "translator-credits"
 msgstr "Σταύρος Γιαννούρης <stavrosg2002@freemail.gr>"
 
@@ -1451,6 +1457,267 @@ msgstr ""
 msgid "Don't unload the plugin from memory"
 msgstr ""
 
+#: ../thunar-uca/thunar-uca-chooser.c:125
+msgid "Custom Actions"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:142
+msgid ""
+"You can configure custom actions that will appear in the\n"
+"file managers context menus for certain kinds of files."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:192
+msgid "Add a new custom action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:202
+#, fuzzy
+msgid "Edit the currently selected action."
+msgstr "Το αρχείο που εμφανίζεται τώρα"
+
+#: ../thunar-uca/thunar-uca-chooser.c:212
+#, fuzzy
+msgid "Delete the currently selected action."
+msgstr "Διαγραφή των επιλεγμένων αρχείων"
+
+#: ../thunar-uca/thunar-uca-chooser.c:222
+msgid "Move the currently selection action up by one row."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:232
+msgid "Move the currently selection action down by one row."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:362
+msgid "Edit Action"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:362
+msgid "Create Action"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:411
+#, fuzzy
+msgid "Failed to save actions to disk."
+msgstr "Η φόρτωση της εφαρμογής από το αρχείο %s απέτυχε"
+
+#.
+#. Basic
+#.
+#: ../thunar-uca/thunar-uca-editor.c:136
+msgid "Basic"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:145
+#, fuzzy
+msgid "_Name:"
+msgstr "Όνομα:"
+
+#: ../thunar-uca/thunar-uca-editor.c:150
+#, fuzzy
+msgid "The name of the action that will be displayed in the context menu."
+msgstr "Το κυρίως κείμενο που θα εμφανίζεται στη μπάρα κατάστασης"
+
+#: ../thunar-uca/thunar-uca-editor.c:163
+#, fuzzy
+msgid "_Description:"
+msgstr "_Τοποθεσία:"
+
+#: ../thunar-uca/thunar-uca-editor.c:168
+msgid ""
+"The description of the action that will be displayed as tooltip in the "
+"statusbar when selecting the item from the context menu."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:181
+msgid "_Command:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:190
+msgid ""
+"The command (including the necessary parameters) to perform the action. See "
+"the command parameter legend below for a list of supported parameter "
+"variables, which will be substituted when launching the command. When upper-"
+"case letters (e.g. %F, %D, %N) are used, the action will be applicable even "
+"if more than one item is selected. Else the action will only be applicable "
+"if exactly one item is selected."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:201
+msgid "Browse the file system to select an application to use for this action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:217
+#, fuzzy
+msgid "_Icon:"
+msgstr "_Τοποθεσία:"
+
+#. setup a label to tell that no icon was selected
+#: ../thunar-uca/thunar-uca-editor.c:225 ../thunar-uca/thunar-uca-editor.c:770
+msgid "No icon"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:226
+msgid ""
+"Click this button to select an icon file that will be displayed in the "
+"context menu in addition to the action name chosen above."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:257
+msgid ""
+"The following command parameters will be\n"
+"substituted when launching the action:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:295
+#, fuzzy
+msgid "the path to the first selected file"
+msgstr "Προβολή των ιδιοτήτων του επιλεγμένου αρχείου"
+
+#: ../thunar-uca/thunar-uca-editor.c:307
+#, fuzzy
+msgid "the paths to all selected files"
+msgstr "Αποκοπή των επιλεγμένων αρχείων"
+
+#: ../thunar-uca/thunar-uca-editor.c:319
+#, c-format
+msgid "directory containing the file that is passed in %f"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:331
+#, c-format
+msgid "directories containing the files that are passed in %F"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:343
+msgid "the first selected filename (without path)"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:355
+msgid "the selected filenames (without paths)"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:369
+msgid "Appearance Conditions"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:377
+#, fuzzy
+msgid "_File Pattern:"
+msgstr "Μοτίβο:"
+
+#: ../thunar-uca/thunar-uca-editor.c:382
+msgid ""
+"Enter a list of patterns that will be used to determine whether this action "
+"should be displayed for a selected file. If you specify more than one "
+"pattern here, the list items must be separated with semicolons (e.g. *.txt;*."
+"doc)."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:401
+msgid "Appears if selection contains:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:414
+#, fuzzy
+msgid "_Directories"
+msgstr "Διαγραφή καταλόγων..."
+
+#: ../thunar-uca/thunar-uca-editor.c:418
+#, fuzzy
+msgid "_Audio Files"
+msgstr "_Αντιγραφή Αρχείων"
+
+#: ../thunar-uca/thunar-uca-editor.c:422
+#, fuzzy
+msgid "_Image Files"
+msgstr "_Επικόλληση Αρχείων"
+
+#: ../thunar-uca/thunar-uca-editor.c:426
+#, fuzzy
+msgid "_Text Files"
+msgstr "Α_ποκοπή Αρχείων"
+
+#: ../thunar-uca/thunar-uca-editor.c:431
+#, fuzzy
+msgid "_Video Files"
+msgstr "_Αντιγραφή Αρχείων"
+
+#: ../thunar-uca/thunar-uca-editor.c:435
+#, fuzzy
+msgid "_Other Files"
+msgstr "_Επικόλληση Αρχείων"
+
+#: ../thunar-uca/thunar-uca-editor.c:452
+msgid ""
+"This page lists the conditions under which the\n"
+"action will appear in the file managers context\n"
+"menus. The file patterns are specified as a list\n"
+"of simple file patterns separated by semicolons\n"
+"(e.g. *.txt;*.doc). For an action to appear in the\n"
+"context menu of a file or folder, atleast one of\n"
+"these patterns must match the name of the file\n"
+"or folder. Additionally, you can specify that the\n"
+"action should only appear for certain kinds of\n"
+"files."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:630
+#, fuzzy
+msgid "Select an Icon"
+msgstr "Επιλογή Εφαρμογής"
+
+#: ../thunar-uca/thunar-uca-editor.c:645
+#, fuzzy
+msgid "Image Files"
+msgstr "_Επικόλληση Αρχείων"
+
+#: ../thunar-uca/thunar-uca-model.c:762
+#, c-format
+msgid "Unknown element <%s>"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:780
+msgid "End element handler called while in root context"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:868
+#, c-format
+msgid "Unknown closing element <%s>"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:1293
+#, fuzzy
+msgid "Failed to determine save location for uca.xml"
+msgstr "Ο προσδιορισμός των πληροφοριών αρχείου για το `%s' απέτυχε"
+
+#: ../thunar-uca/thunar-uca-model.c:1409
+msgid "Command not configured"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:155
+msgid "Configure c_ustom actions..."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:156
+msgid ""
+"Setup custom actions that will appear in the file managers context menus"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:328
+#, fuzzy, c-format
+msgid "Failed to launch action `%s'."
+msgstr "Η εκκίνηση της ενέργειας απέτυχε"
+
+#: ../thunar-uca/uca.xml.in.h:1
+msgid "Example for a custom action"
+msgstr ""
+
+#: ../thunar-uca/uca.xml.in.h:2
+msgid "Open Terminal Here"
+msgstr ""
+
 #: ../Thunar.desktop.in.h:1
 msgid "Browse the filesystem with the file manager"
 msgstr "Περιήγηση του συστήματος αρχείων με τον διαχειριστή αρχείων"
index 691de39..03aa635 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Thunar 0.1.4svn\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-11-28 23:30+0900\n"
+"POT-Creation-Date: 2005-11-29 18:22+0100\n"
 "PO-Revision-Date: 2005-10-14 23:57+0900\n"
 "Last-Translator: Pablo Hernández-M. Saiz <homeless3d@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
@@ -148,7 +148,7 @@ msgid "copy of %s"
 msgstr ""
 
 #: ../thunar-vfs/thunar-vfs-xfer.c:158 ../thunar/thunar-list-model.c:703
-#: ../thunar/thunar-properties-dialog.c:617
+#: ../thunar/thunar-properties-dialog.c:629
 #, c-format
 msgid "link to %s"
 msgstr ""
@@ -260,7 +260,7 @@ msgid "Failed to create symbolic `%s'"
 msgstr "Imposible crear el enlace de %s."
 
 #. setup application name
-#: ../thunar/main.c:47 ../thunar/thunar-window.c:391
+#: ../thunar/main.c:47 ../thunar/thunar-window.c:404
 msgid "Thunar"
 msgstr "Thunar"
 
@@ -351,34 +351,35 @@ msgstr "Imposible renombrar %s."
 msgid "Open <i>%s</i> and other files of type \"%s\" with:"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:634
+#: ../thunar/thunar-chooser-dialog.c:634 ../thunar-uca/thunar-uca-editor.c:491
 #, fuzzy
 msgid "Select an Application"
 msgstr "Otra aplicación..."
 
-#: ../thunar/thunar-chooser-dialog.c:644
+#: ../thunar/thunar-chooser-dialog.c:644 ../thunar-uca/thunar-uca-editor.c:501
+#: ../thunar-uca/thunar-uca-editor.c:640
 #, fuzzy
 msgid "All Files"
 msgstr "Archivos"
 
-#: ../thunar/thunar-chooser-dialog.c:649
+#: ../thunar/thunar-chooser-dialog.c:649 ../thunar-uca/thunar-uca-editor.c:506
 #, fuzzy
 msgid "Executable Files"
 msgstr "Seleccionar _todos los archivos"
 
-#: ../thunar/thunar-chooser-dialog.c:664
+#: ../thunar/thunar-chooser-dialog.c:664 ../thunar-uca/thunar-uca-editor.c:521
 msgid "Perl Scripts"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:670
+#: ../thunar/thunar-chooser-dialog.c:670 ../thunar-uca/thunar-uca-editor.c:527
 msgid "Python Scripts"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:676
+#: ../thunar/thunar-chooser-dialog.c:676 ../thunar-uca/thunar-uca-editor.c:533
 msgid "Ruby Scripts"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:682
+#: ../thunar/thunar-chooser-dialog.c:682 ../thunar-uca/thunar-uca-editor.c:539
 msgid "Shell Scripts"
 msgstr ""
 
@@ -466,6 +467,8 @@ msgid "Details view"
 msgstr "Vista detallada"
 
 #: ../thunar/thunar-dialogs.c:74 ../thunar/thunar-dialogs.c:78
+#: ../thunar-uca/thunar-uca-chooser.c:412
+#: ../thunar-uca/thunar-uca-provider.c:329
 #, c-format
 msgid "%s."
 msgstr ""
@@ -735,16 +738,16 @@ msgid "Number of visible files"
 msgstr "Número de archivos visibles"
 
 #: ../thunar/thunar-list-model.c:342 ../thunar/thunar-view.c:108
-#: ../thunar/thunar-window.c:258
+#: ../thunar/thunar-window.c:268
 msgid "Show hidden"
 msgstr "Mostrar ocultos"
 
 #: ../thunar/thunar-list-model.c:343 ../thunar/thunar-view.c:109
-#: ../thunar/thunar-window.c:259
+#: ../thunar/thunar-window.c:269
 msgid "Whether to display hidden files"
 msgstr ""
 
-#: ../thunar/thunar-list-model.c:701 ../thunar/thunar-properties-dialog.c:615
+#: ../thunar/thunar-list-model.c:701 ../thunar/thunar-properties-dialog.c:627
 msgid "broken link"
 msgstr ""
 
@@ -784,11 +787,11 @@ msgid_plural "%d items selected (%s)"
 msgstr[0] "%d elemento seleccionado"
 msgstr[1] "%d elementos seleccionados (%s)"
 
-#: ../thunar/thunar-location-buttons.c:256
+#: ../thunar/thunar-location-buttons.c:258
 msgid "Spacing"
 msgstr "Espaciado"
 
-#: ../thunar/thunar-location-buttons.c:257
+#: ../thunar/thunar-location-buttons.c:259
 msgid "The amount of space between the path buttons"
 msgstr "Espacio entre los botones del path"
 
@@ -800,7 +803,7 @@ msgstr "Abrir dirección..."
 msgid "_Location:"
 msgstr "_Dirección"
 
-#: ../thunar/thunar-navigator.c:135 ../thunar/thunar-window.c:245
+#: ../thunar/thunar-navigator.c:135 ../thunar/thunar-window.c:255
 msgid "Current directory"
 msgstr "Directorio actual"
 
@@ -830,63 +833,63 @@ msgstr ""
 msgid "The icon size for the path entry"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:177
+#: ../thunar/thunar-preferences-dialog.c:185
 #, fuzzy
 msgid "File Manager Preferences"
 msgstr "Gestor de archivos"
 
-#: ../thunar/thunar-preferences-dialog.c:193
+#: ../thunar/thunar-preferences-dialog.c:201
 msgid "<b>Default View</b>"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:204
+#: ../thunar/thunar-preferences-dialog.c:212
 msgid "View _new folders using:"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:209
+#: ../thunar/thunar-preferences-dialog.c:217
 #, fuzzy
 msgid "Icon View"
 msgstr "Vista de iconos"
 
-#: ../thunar/thunar-preferences-dialog.c:210
+#: ../thunar/thunar-preferences-dialog.c:218
 #, fuzzy
 msgid "Detailed List View"
 msgstr "Vista detallada"
 
-#: ../thunar/thunar-preferences-dialog.c:211
+#: ../thunar/thunar-preferences-dialog.c:219
 msgid "Last Active View"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:226
+#: ../thunar/thunar-preferences-dialog.c:234
 msgid "Sort _folders before files"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:228
+#: ../thunar/thunar-preferences-dialog.c:236
 msgid "Select this option to list folders before files when you sort a folder."
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:232
+#: ../thunar/thunar-preferences-dialog.c:240
 #, fuzzy
 msgid "Show hidden and _backup files"
 msgstr "Mostrar los archivos _ocultos"
 
-#: ../thunar/thunar-preferences-dialog.c:234
+#: ../thunar/thunar-preferences-dialog.c:242
 msgid ""
 "Select this option to show hidden and backup files in new windows. The first "
 "character in a hidden filename is a period (.). The last character in a "
 "backup filename is a tilde (~)."
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:244
+#: ../thunar/thunar-preferences-dialog.c:252
 #, fuzzy
 msgid "<b>Icon View</b>"
 msgstr "Vista de iconos"
 
-#: ../thunar/thunar-preferences-dialog.c:255
+#: ../thunar/thunar-preferences-dialog.c:263
 msgid "_Text beside icons"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:257
+#: ../thunar/thunar-preferences-dialog.c:265
 msgid ""
 "Select this option to place the icon captions for items beside the icon "
 "rather than below the icon."
@@ -955,62 +958,62 @@ msgstr[1] ""
 msgid "The file displayed by the dialog"
 msgstr ""
 
-#: ../thunar/thunar-properties-dialog.c:209
+#: ../thunar/thunar-properties-dialog.c:217
 msgid "General"
 msgstr "General"
 
-#: ../thunar/thunar-properties-dialog.c:226
+#: ../thunar/thunar-properties-dialog.c:234
 msgid "Name:"
 msgstr "Nombre:"
 
 #.
 #. Second box (kind)
 #.
-#: ../thunar/thunar-properties-dialog.c:251
+#: ../thunar/thunar-properties-dialog.c:259
 msgid "Kind:"
 msgstr "Tipo:"
 
 #.
 #. Third box (modified, accessed)
 #.
-#: ../thunar/thunar-properties-dialog.c:276
+#: ../thunar/thunar-properties-dialog.c:284
 msgid "Modified:"
 msgstr "Modificado:"
 
-#: ../thunar/thunar-properties-dialog.c:289
+#: ../thunar/thunar-properties-dialog.c:297
 msgid "Accessed:"
 msgstr "Accedido:"
 
 #.
 #. Fourth box (volume, size)
 #.
-#: ../thunar/thunar-properties-dialog.c:313
+#: ../thunar/thunar-properties-dialog.c:321
 msgid "Volume:"
 msgstr "Volumen:"
 
-#: ../thunar/thunar-properties-dialog.c:336
+#: ../thunar/thunar-properties-dialog.c:344
 msgid "Size:"
 msgstr "Tamaño:"
 
 #.
 #. Emblem chooser
 #.
-#: ../thunar/thunar-properties-dialog.c:360
+#: ../thunar/thunar-properties-dialog.c:368
 msgid "Emblems"
 msgstr ""
 
-#: ../thunar/thunar-properties-dialog.c:592
+#: ../thunar/thunar-properties-dialog.c:604
 #, c-format
 msgid "%s Info"
 msgstr ""
 
-#: ../thunar/thunar-properties-dialog.c:673
+#: ../thunar/thunar-properties-dialog.c:685
 #, c-format
 msgid "%s (%u Bytes)"
 msgstr "%s (%u Bytes)"
 
 #. display an error message
-#: ../thunar/thunar-properties-dialog.c:719
+#: ../thunar/thunar-properties-dialog.c:731
 #: ../thunar/thunar-standard-view.c:2175
 #, fuzzy, c-format
 msgid "Failed to rename `%s'"
@@ -1096,7 +1099,7 @@ msgstr "Seleccionar todos los archivos en esta ventana"
 
 #: ../thunar/thunar-standard-view.c:263
 #, fuzzy
-msgid "Select _by Pattern"
+msgid "Select _by Pattern..."
 msgstr "Patrón de selección"
 
 #: ../thunar/thunar-standard-view.c:263
@@ -1260,7 +1263,7 @@ msgstr ""
 msgid "Text to be displayed in the statusbar associated with this view"
 msgstr ""
 
-#: ../thunar/thunar-view.c:122 ../thunar/thunar-window.c:273
+#: ../thunar/thunar-view.c:122 ../thunar/thunar-window.c:283
 msgid "UI manager"
 msgstr ""
 
@@ -1268,182 +1271,183 @@ msgstr ""
 msgid "UI manager of the surrounding window"
 msgstr ""
 
-#: ../thunar/thunar-window.c:156
+#: ../thunar/thunar-window.c:166
 msgid "_File"
 msgstr "_Archivo"
 
-#: ../thunar/thunar-window.c:157
+#: ../thunar/thunar-window.c:167
 msgid "Open New _Window"
 msgstr "Nueva _ventana"
 
-#: ../thunar/thunar-window.c:157
+#: ../thunar/thunar-window.c:167
 msgid "Open a new Thunar window for the displayed location"
 msgstr ""
 
-#: ../thunar/thunar-window.c:158
+#: ../thunar/thunar-window.c:168
 msgid "Close _All Windows"
 msgstr "Cerrar _todas las ventanas"
 
-#: ../thunar/thunar-window.c:158
+#: ../thunar/thunar-window.c:168
 msgid "Close all Thunar windows"
 msgstr "Cerrar todas las ventanas de Thunar"
 
-#: ../thunar/thunar-window.c:159
+#: ../thunar/thunar-window.c:169
 msgid "_Close"
 msgstr "_Cerrar"
 
-#: ../thunar/thunar-window.c:159
+#: ../thunar/thunar-window.c:169
 msgid "Close this window"
 msgstr "Cerrar esta ventana"
 
-#: ../thunar/thunar-window.c:160
+#: ../thunar/thunar-window.c:170
 msgid "_Edit"
 msgstr "_Editar"
 
-#: ../thunar/thunar-window.c:161
+#: ../thunar/thunar-window.c:171
 #, fuzzy
-msgid "_Preferences"
+msgid "Pr_eferences..."
 msgstr "_Propiedades"
 
-#: ../thunar/thunar-window.c:161
-msgid "Edit Thunar Preferences"
-msgstr ""
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Edit Thunars Preferences"
+msgstr "Gestor de archivos"
 
-#: ../thunar/thunar-window.c:162
+#: ../thunar/thunar-window.c:172
 msgid "_View"
 msgstr "_Ver"
 
-#: ../thunar/thunar-window.c:163
+#: ../thunar/thunar-window.c:173
 #, fuzzy
 msgid "_Location Selector"
 msgstr "Barra de _dirección"
 
-#: ../thunar/thunar-window.c:164
+#: ../thunar/thunar-window.c:174
 msgid "_Side Pane"
 msgstr "Panel _lateral"
 
-#: ../thunar/thunar-window.c:165
+#: ../thunar/thunar-window.c:175
 msgid "_Go"
 msgstr "_Ir a"
 
-#: ../thunar/thunar-window.c:166
+#: ../thunar/thunar-window.c:176
 msgid "Open _Parent"
 msgstr "Abrir _antecesor"
 
-#: ../thunar/thunar-window.c:166
+#: ../thunar/thunar-window.c:176
 msgid "Open the parent folder"
 msgstr "Abre la carpeta anterior"
 
 # msgstr "Sistema de archivos"
-#: ../thunar/thunar-window.c:167
+#: ../thunar/thunar-window.c:177
 #, fuzzy
 msgid "_Home"
 msgstr "Casa"
 
-#: ../thunar/thunar-window.c:167
+#: ../thunar/thunar-window.c:177
 #, fuzzy
 msgid "Open the home folder"
 msgstr "Abre la carpeta anterior"
 
-#: ../thunar/thunar-window.c:168
+#: ../thunar/thunar-window.c:178
 msgid "Open _Location..."
 msgstr "Abrir _dirección..."
 
-#: ../thunar/thunar-window.c:168
+#: ../thunar/thunar-window.c:178
 msgid "Specify a location to open"
 msgstr "Especificar una dirección para abrir"
 
-#: ../thunar/thunar-window.c:169
+#: ../thunar/thunar-window.c:179
 msgid "_Help"
 msgstr "A_yuda"
 
-#: ../thunar/thunar-window.c:171 ../thunar/thunar-window.c:173
+#: ../thunar/thunar-window.c:181 ../thunar/thunar-window.c:183
 msgid "_About"
 msgstr "_Acerca de"
 
-#: ../thunar/thunar-window.c:171 ../thunar/thunar-window.c:173
+#: ../thunar/thunar-window.c:181 ../thunar/thunar-window.c:183
 msgid "Display information about Thunar"
 msgstr "Muestra información acerca de Thunar"
 
-#: ../thunar/thunar-window.c:179
+#: ../thunar/thunar-window.c:189
 #, fuzzy
 msgid "Show _Hidden Files"
 msgstr "Mostrar los archivos _ocultos"
 
-#: ../thunar/thunar-window.c:179
+#: ../thunar/thunar-window.c:189
 msgid "Toggles the display of hidden files in the current window"
 msgstr ""
 
-#: ../thunar/thunar-window.c:246
+#: ../thunar/thunar-window.c:256
 msgid "The directory currently displayed within this window"
 msgstr ""
 
-#: ../thunar/thunar-window.c:274
+#: ../thunar/thunar-window.c:284
 msgid "The UI manager used within this window"
 msgstr ""
 
 #.
 #. * add the side pane options
 #.
-#: ../thunar/thunar-window.c:329
+#: ../thunar/thunar-window.c:342
 msgid "_Favourites"
 msgstr "_Marcadores"
 
-#: ../thunar/thunar-window.c:335 ../thunar/thunar-window.c:358
+#: ../thunar/thunar-window.c:348 ../thunar/thunar-window.c:371
 msgid "_Hidden"
 msgstr "_Oculto/a"
 
 #.
 #. * add the location selector options
 #.
-#: ../thunar/thunar-window.c:344
+#: ../thunar/thunar-window.c:357
 #, fuzzy
 msgid "_Pathbar Style"
 msgstr "Estilo _tradicional"
 
-#: ../thunar/thunar-window.c:345
+#: ../thunar/thunar-window.c:358
 msgid "Modern approach with buttons that correspond to folders"
 msgstr ""
 
-#: ../thunar/thunar-window.c:351
+#: ../thunar/thunar-window.c:364
 #, fuzzy
 msgid "_Toolbar Style"
 msgstr "Estilo _tradicional"
 
-#: ../thunar/thunar-window.c:352
+#: ../thunar/thunar-window.c:365
 msgid "Traditional approach with location bar and navigation buttons"
 msgstr ""
 
-#: ../thunar/thunar-window.c:358
+#: ../thunar/thunar-window.c:371
 msgid "Don't display any location selector"
 msgstr ""
 
 #.
 #. * add view options
 #.
-#: ../thunar/thunar-window.c:367
+#: ../thunar/thunar-window.c:380
 msgid "View as _Icons"
 msgstr "Ver como _Iconos"
 
-#: ../thunar/thunar-window.c:367
+#: ../thunar/thunar-window.c:380
 msgid "Display folder content in an icon view"
 msgstr ""
 
-#: ../thunar/thunar-window.c:374
+#: ../thunar/thunar-window.c:387
 msgid "View as _Detailed List"
 msgstr "Ver como _Lista"
 
-#: ../thunar/thunar-window.c:374
+#: ../thunar/thunar-window.c:387
 msgid "Display folder content in a detailed list view"
 msgstr ""
 
 #. display an error to the user
-#: ../thunar/thunar-window.c:868
+#: ../thunar/thunar-window.c:951
 #, fuzzy
 msgid "Failed to open home directory"
 msgstr "Imposible abrir el directorio %s."
 
-#: ../thunar/thunar-window.c:943
+#: ../thunar/thunar-window.c:1026
 msgid ""
 "Thunar is a fast and easy to use file manager\n"
 "for the Xfce Desktop Environment."
@@ -1451,7 +1455,7 @@ msgstr ""
 "Thunar es un gestor de archivos rápido\n"
 "y fácil de usar para el escritorio Xfce"
 
-#: ../thunar/thunar-window.c:948
+#: ../thunar/thunar-window.c:1031
 msgid "translator-credits"
 msgstr ""
 
@@ -1479,6 +1483,265 @@ msgstr ""
 msgid "Don't unload the plugin from memory"
 msgstr ""
 
+#: ../thunar-uca/thunar-uca-chooser.c:125
+msgid "Custom Actions"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:142
+msgid ""
+"You can configure custom actions that will appear in the\n"
+"file managers context menus for certain kinds of files."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:192
+msgid "Add a new custom action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:202
+msgid "Edit the currently selected action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:212
+#, fuzzy
+msgid "Delete the currently selected action."
+msgstr "Abrir el elemento seleccionado"
+
+#: ../thunar-uca/thunar-uca-chooser.c:222
+msgid "Move the currently selection action up by one row."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:232
+msgid "Move the currently selection action down by one row."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:362
+msgid "Edit Action"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:362
+msgid "Create Action"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:411
+#, fuzzy
+msgid "Failed to save actions to disk."
+msgstr "Imposible renombrar %s."
+
+#.
+#. Basic
+#.
+#: ../thunar-uca/thunar-uca-editor.c:136
+msgid "Basic"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:145
+#, fuzzy
+msgid "_Name:"
+msgstr "Nombre:"
+
+#: ../thunar-uca/thunar-uca-editor.c:150
+msgid "The name of the action that will be displayed in the context menu."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:163
+#, fuzzy
+msgid "_Description:"
+msgstr "_Dirección"
+
+#: ../thunar-uca/thunar-uca-editor.c:168
+msgid ""
+"The description of the action that will be displayed as tooltip in the "
+"statusbar when selecting the item from the context menu."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:181
+msgid "_Command:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:190
+msgid ""
+"The command (including the necessary parameters) to perform the action. See "
+"the command parameter legend below for a list of supported parameter "
+"variables, which will be substituted when launching the command. When upper-"
+"case letters (e.g. %F, %D, %N) are used, the action will be applicable even "
+"if more than one item is selected. Else the action will only be applicable "
+"if exactly one item is selected."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:201
+msgid "Browse the file system to select an application to use for this action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:217
+#, fuzzy
+msgid "_Icon:"
+msgstr "_Dirección"
+
+#. setup a label to tell that no icon was selected
+#: ../thunar-uca/thunar-uca-editor.c:225 ../thunar-uca/thunar-uca-editor.c:770
+msgid "No icon"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:226
+msgid ""
+"Click this button to select an icon file that will be displayed in the "
+"context menu in addition to the action name chosen above."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:257
+msgid ""
+"The following command parameters will be\n"
+"substituted when launching the action:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:295
+#, fuzzy
+msgid "the path to the first selected file"
+msgstr "Ver las propiedades del elemento seleccionado"
+
+#: ../thunar-uca/thunar-uca-editor.c:307
+#, fuzzy
+msgid "the paths to all selected files"
+msgstr "Abrir el elemento seleccionado"
+
+#: ../thunar-uca/thunar-uca-editor.c:319
+#, c-format
+msgid "directory containing the file that is passed in %f"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:331
+#, c-format
+msgid "directories containing the files that are passed in %F"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:343
+msgid "the first selected filename (without path)"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:355
+msgid "the selected filenames (without paths)"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:369
+msgid "Appearance Conditions"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:377
+#, fuzzy
+msgid "_File Pattern:"
+msgstr "Patrón:"
+
+#: ../thunar-uca/thunar-uca-editor.c:382
+msgid ""
+"Enter a list of patterns that will be used to determine whether this action "
+"should be displayed for a selected file. If you specify more than one "
+"pattern here, the list items must be separated with semicolons (e.g. *.txt;*."
+"doc)."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:401
+msgid "Appears if selection contains:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:414
+#, fuzzy
+msgid "_Directories"
+msgstr "Borrando archivos..."
+
+#: ../thunar-uca/thunar-uca-editor.c:418
+#, fuzzy
+msgid "_Audio Files"
+msgstr "_Copiar archivos"
+
+#: ../thunar-uca/thunar-uca-editor.c:422
+#, fuzzy
+msgid "_Image Files"
+msgstr "_Pegar archivos"
+
+#: ../thunar-uca/thunar-uca-editor.c:426
+#, fuzzy
+msgid "_Text Files"
+msgstr "Cor_tar archivos"
+
+#: ../thunar-uca/thunar-uca-editor.c:431
+#, fuzzy
+msgid "_Video Files"
+msgstr "_Copiar archivos"
+
+#: ../thunar-uca/thunar-uca-editor.c:435
+#, fuzzy
+msgid "_Other Files"
+msgstr "_Pegar archivos"
+
+#: ../thunar-uca/thunar-uca-editor.c:452
+msgid ""
+"This page lists the conditions under which the\n"
+"action will appear in the file managers context\n"
+"menus. The file patterns are specified as a list\n"
+"of simple file patterns separated by semicolons\n"
+"(e.g. *.txt;*.doc). For an action to appear in the\n"
+"context menu of a file or folder, atleast one of\n"
+"these patterns must match the name of the file\n"
+"or folder. Additionally, you can specify that the\n"
+"action should only appear for certain kinds of\n"
+"files."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:630
+#, fuzzy
+msgid "Select an Icon"
+msgstr "Otra aplicación..."
+
+#: ../thunar-uca/thunar-uca-editor.c:645
+#, fuzzy
+msgid "Image Files"
+msgstr "_Pegar archivos"
+
+#: ../thunar-uca/thunar-uca-model.c:762
+#, c-format
+msgid "Unknown element <%s>"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:780
+msgid "End element handler called while in root context"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:868
+#, c-format
+msgid "Unknown closing element <%s>"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:1293
+#, fuzzy
+msgid "Failed to determine save location for uca.xml"
+msgstr "Imposible renombrar %s."
+
+#: ../thunar-uca/thunar-uca-model.c:1409
+msgid "Command not configured"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:155
+msgid "Configure c_ustom actions..."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:156
+msgid ""
+"Setup custom actions that will appear in the file managers context menus"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:328
+#, fuzzy, c-format
+msgid "Failed to launch action `%s'."
+msgstr "Imposible renombrar %s."
+
+#: ../thunar-uca/uca.xml.in.h:1
+msgid "Example for a custom action"
+msgstr ""
+
+#: ../thunar-uca/uca.xml.in.h:2
+msgid "Open Terminal Here"
+msgstr ""
+
 #: ../Thunar.desktop.in.h:1
 msgid "Browse the filesystem with the file manager"
 msgstr "Explorar el sistema de archivos con el navegador"
index e3311ae..9c773f9 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Thunar 0.1.4svn\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-11-28 23:30+0900\n"
+"POT-Creation-Date: 2005-11-29 18:22+0100\n"
 "PO-Revision-Date: 2005-11-17 09:20+0100\n"
 "Last-Translator: Stephane Roy <sroy@j2n.net>\n"
 "Language-Team: French <traduc@traduc.org>\n"
@@ -146,7 +146,7 @@ msgid "copy of %s"
 msgstr "copie de %s"
 
 #: ../thunar-vfs/thunar-vfs-xfer.c:158 ../thunar/thunar-list-model.c:703
-#: ../thunar/thunar-properties-dialog.c:617
+#: ../thunar/thunar-properties-dialog.c:629
 #, c-format
 msgid "link to %s"
 msgstr "lien vers %s"
@@ -258,7 +258,7 @@ msgid "Failed to create symbolic `%s'"
 msgstr "Échec à la création du lien symbolique `%s'"
 
 #. setup application name
-#: ../thunar/main.c:47 ../thunar/thunar-window.c:391
+#: ../thunar/main.c:47 ../thunar/thunar-window.c:404
 msgid "Thunar"
 msgstr "Thunar"
 
@@ -346,31 +346,32 @@ msgstr "Échec à l'exécution de `%s'"
 msgid "Open <i>%s</i> and other files of type \"%s\" with:"
 msgstr "Ouvrir <i>%s</i> et les autres fichiers de type \"%s\" avec :"
 
-#: ../thunar/thunar-chooser-dialog.c:634
+#: ../thunar/thunar-chooser-dialog.c:634 ../thunar-uca/thunar-uca-editor.c:491
 msgid "Select an Application"
 msgstr "Sélectionner une application"
 
-#: ../thunar/thunar-chooser-dialog.c:644
+#: ../thunar/thunar-chooser-dialog.c:644 ../thunar-uca/thunar-uca-editor.c:501
+#: ../thunar-uca/thunar-uca-editor.c:640
 msgid "All Files"
 msgstr "Tous les fichiers"
 
-#: ../thunar/thunar-chooser-dialog.c:649
+#: ../thunar/thunar-chooser-dialog.c:649 ../thunar-uca/thunar-uca-editor.c:506
 msgid "Executable Files"
 msgstr "Fichiers exécutables"
 
-#: ../thunar/thunar-chooser-dialog.c:664
+#: ../thunar/thunar-chooser-dialog.c:664 ../thunar-uca/thunar-uca-editor.c:521
 msgid "Perl Scripts"
 msgstr "Scripts perl"
 
-#: ../thunar/thunar-chooser-dialog.c:670
+#: ../thunar/thunar-chooser-dialog.c:670 ../thunar-uca/thunar-uca-editor.c:527
 msgid "Python Scripts"
 msgstr "Scripts python"
 
-#: ../thunar/thunar-chooser-dialog.c:676
+#: ../thunar/thunar-chooser-dialog.c:676 ../thunar-uca/thunar-uca-editor.c:533
 msgid "Ruby Scripts"
 msgstr "Scripts ruby"
 
-#: ../thunar/thunar-chooser-dialog.c:682
+#: ../thunar/thunar-chooser-dialog.c:682 ../thunar-uca/thunar-uca-editor.c:539
 msgid "Shell Scripts"
 msgstr "Scripts shell"
 
@@ -456,6 +457,8 @@ msgid "Details view"
 msgstr "Vue détails"
 
 #: ../thunar/thunar-dialogs.c:74 ../thunar/thunar-dialogs.c:78
+#: ../thunar-uca/thunar-uca-chooser.c:412
+#: ../thunar-uca/thunar-uca-provider.c:329
 #, c-format
 msgid "%s."
 msgstr "%s."
@@ -722,16 +725,16 @@ msgid "Number of visible files"
 msgstr "Nombre de fichiers visibles"
 
 #: ../thunar/thunar-list-model.c:342 ../thunar/thunar-view.c:108
-#: ../thunar/thunar-window.c:258
+#: ../thunar/thunar-window.c:268
 msgid "Show hidden"
 msgstr "Montrer cachés"
 
 #: ../thunar/thunar-list-model.c:343 ../thunar/thunar-view.c:109
-#: ../thunar/thunar-window.c:259
+#: ../thunar/thunar-window.c:269
 msgid "Whether to display hidden files"
 msgstr "Montrer ou non les fichiers cachés"
 
-#: ../thunar/thunar-list-model.c:701 ../thunar/thunar-properties-dialog.c:615
+#: ../thunar/thunar-list-model.c:701 ../thunar/thunar-properties-dialog.c:627
 msgid "broken link"
 msgstr "lien cassé"
 
@@ -771,11 +774,11 @@ msgid_plural "%d items selected (%s)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../thunar/thunar-location-buttons.c:256
+#: ../thunar/thunar-location-buttons.c:258
 msgid "Spacing"
 msgstr "Espace"
 
-#: ../thunar/thunar-location-buttons.c:257
+#: ../thunar/thunar-location-buttons.c:259
 msgid "The amount of space between the path buttons"
 msgstr "Quantité d'espace entre les boutons du chemin"
 
@@ -787,7 +790,7 @@ msgstr "Aller à..."
 msgid "_Location:"
 msgstr ""
 
-#: ../thunar/thunar-navigator.c:135 ../thunar/thunar-window.c:245
+#: ../thunar/thunar-navigator.c:135 ../thunar/thunar-window.c:255
 msgid "Current directory"
 msgstr "Répertoire courant"
 
@@ -817,45 +820,45 @@ msgstr "Le fichier actuellement affiché"
 msgid "The icon size for the path entry"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:177
+#: ../thunar/thunar-preferences-dialog.c:185
 msgid "File Manager Preferences"
 msgstr "Préférences du gestionnaire de fichier"
 
-#: ../thunar/thunar-preferences-dialog.c:193
+#: ../thunar/thunar-preferences-dialog.c:201
 msgid "<b>Default View</b>"
 msgstr "<b>Vue par défaut</b>"
 
-#: ../thunar/thunar-preferences-dialog.c:204
+#: ../thunar/thunar-preferences-dialog.c:212
 msgid "View _new folders using:"
 msgstr "Voir un _nouveau dossier en utilisant :"
 
-#: ../thunar/thunar-preferences-dialog.c:209
+#: ../thunar/thunar-preferences-dialog.c:217
 msgid "Icon View"
 msgstr "vue d'icônes"
 
-#: ../thunar/thunar-preferences-dialog.c:210
+#: ../thunar/thunar-preferences-dialog.c:218
 msgid "Detailed List View"
 msgstr "liste détaillée"
 
-#: ../thunar/thunar-preferences-dialog.c:211
+#: ../thunar/thunar-preferences-dialog.c:219
 msgid "Last Active View"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:226
+#: ../thunar/thunar-preferences-dialog.c:234
 msgid "Sort _folders before files"
 msgstr "Trier les _dossiers avant les fichiers"
 
-#: ../thunar/thunar-preferences-dialog.c:228
+#: ../thunar/thunar-preferences-dialog.c:236
 msgid "Select this option to list folders before files when you sort a folder."
 msgstr ""
 "Sélectionner cette option pour lister les dossiers avant les fichiers quand "
 "vous trier un dossier."
 
-#: ../thunar/thunar-preferences-dialog.c:232
+#: ../thunar/thunar-preferences-dialog.c:240
 msgid "Show hidden and _backup files"
 msgstr "Montrer les fichiers _cachés et de sauvegardes"
 
-#: ../thunar/thunar-preferences-dialog.c:234
+#: ../thunar/thunar-preferences-dialog.c:242
 msgid ""
 "Select this option to show hidden and backup files in new windows. The first "
 "character in a hidden filename is a period (.). The last character in a "
@@ -865,15 +868,15 @@ msgstr ""
 "dans une nouvelle fenêtre. Le premier caractère d'un fichier caché est un "
 "point (.). Le dernier caractère d'un fichier de sauvegarde est un tilde (~)."
 
-#: ../thunar/thunar-preferences-dialog.c:244
+#: ../thunar/thunar-preferences-dialog.c:252
 msgid "<b>Icon View</b>"
 msgstr "<b>Vue d'icônes</b>"
 
-#: ../thunar/thunar-preferences-dialog.c:255
+#: ../thunar/thunar-preferences-dialog.c:263
 msgid "_Text beside icons"
 msgstr "_Texte à côté des icônes"
 
-#: ../thunar/thunar-preferences-dialog.c:257
+#: ../thunar/thunar-preferences-dialog.c:265
 msgid ""
 "Select this option to place the icon captions for items beside the icon "
 "rather than below the icon."
@@ -945,62 +948,62 @@ msgstr[1] ""
 msgid "The file displayed by the dialog"
 msgstr "La fichier affiché par la fenêtre de dialogue"
 
-#: ../thunar/thunar-properties-dialog.c:209
+#: ../thunar/thunar-properties-dialog.c:217
 msgid "General"
 msgstr "Général"
 
-#: ../thunar/thunar-properties-dialog.c:226
+#: ../thunar/thunar-properties-dialog.c:234
 msgid "Name:"
 msgstr "Nom :"
 
 #.
 #. Second box (kind)
 #.
-#: ../thunar/thunar-properties-dialog.c:251
+#: ../thunar/thunar-properties-dialog.c:259
 msgid "Kind:"
 msgstr "Type :"
 
 #.
 #. Third box (modified, accessed)
 #.
-#: ../thunar/thunar-properties-dialog.c:276
+#: ../thunar/thunar-properties-dialog.c:284
 msgid "Modified:"
 msgstr "Modifié :"
 
-#: ../thunar/thunar-properties-dialog.c:289
+#: ../thunar/thunar-properties-dialog.c:297
 msgid "Accessed:"
 msgstr "Accédé :"
 
 #.
 #. Fourth box (volume, size)
 #.
-#: ../thunar/thunar-properties-dialog.c:313
+#: ../thunar/thunar-properties-dialog.c:321
 msgid "Volume:"
 msgstr "Volume :"
 
-#: ../thunar/thunar-properties-dialog.c:336
+#: ../thunar/thunar-properties-dialog.c:344
 msgid "Size:"
 msgstr "Taille :"
 
 #.
 #. Emblem chooser
 #.
-#: ../thunar/thunar-properties-dialog.c:360
+#: ../thunar/thunar-properties-dialog.c:368
 msgid "Emblems"
 msgstr "Emblèmes"
 
-#: ../thunar/thunar-properties-dialog.c:592
+#: ../thunar/thunar-properties-dialog.c:604
 #, c-format
 msgid "%s Info"
 msgstr ""
 
-#: ../thunar/thunar-properties-dialog.c:673
+#: ../thunar/thunar-properties-dialog.c:685
 #, c-format
 msgid "%s (%u Bytes)"
 msgstr "%s (%u octets)"
 
 #. display an error message
-#: ../thunar/thunar-properties-dialog.c:719
+#: ../thunar/thunar-properties-dialog.c:731
 #: ../thunar/thunar-standard-view.c:2175
 #, c-format
 msgid "Failed to rename `%s'"
@@ -1075,7 +1078,8 @@ msgid "Select all files in this window"
 msgstr "Sélectionner tous les fichiers dans cette fenêtre"
 
 #: ../thunar/thunar-standard-view.c:263
-msgid "Select _by Pattern"
+#, fuzzy
+msgid "Select _by Pattern..."
 msgstr "Sélectionner par _motif"
 
 #: ../thunar/thunar-standard-view.c:263
@@ -1231,7 +1235,7 @@ msgstr ""
 msgid "Text to be displayed in the statusbar associated with this view"
 msgstr "Texte à afficher dans la barre de statut associée à cette vue"
 
-#: ../thunar/thunar-view.c:122 ../thunar/thunar-window.c:273
+#: ../thunar/thunar-view.c:122 ../thunar/thunar-window.c:283
 msgid "UI manager"
 msgstr ""
 
@@ -1239,175 +1243,177 @@ msgstr ""
 msgid "UI manager of the surrounding window"
 msgstr ""
 
-#: ../thunar/thunar-window.c:156
+#: ../thunar/thunar-window.c:166
 msgid "_File"
 msgstr "_Fichier"
 
-#: ../thunar/thunar-window.c:157
+#: ../thunar/thunar-window.c:167
 msgid "Open New _Window"
 msgstr "Ouvrir une _nouvelle fenêtre"
 
-#: ../thunar/thunar-window.c:157
+#: ../thunar/thunar-window.c:167
 msgid "Open a new Thunar window for the displayed location"
 msgstr "Ouvre une nouvelle fenêtre de Thunar pour l'endroit affiché"
 
-#: ../thunar/thunar-window.c:158
+#: ../thunar/thunar-window.c:168
 msgid "Close _All Windows"
 msgstr "Fermer _toutes les fenêtres"
 
-#: ../thunar/thunar-window.c:158
+#: ../thunar/thunar-window.c:168
 msgid "Close all Thunar windows"
 msgstr "Ferme toutes les fenêtres de Thunar"
 
-#: ../thunar/thunar-window.c:159
+#: ../thunar/thunar-window.c:169
 msgid "_Close"
 msgstr "_Fermer"
 
-#: ../thunar/thunar-window.c:159
+#: ../thunar/thunar-window.c:169
 msgid "Close this window"
 msgstr "Fermer cette fenêtre"
 
-#: ../thunar/thunar-window.c:160
+#: ../thunar/thunar-window.c:170
 msgid "_Edit"
 msgstr "Édit_er"
 
-#: ../thunar/thunar-window.c:161
-msgid "_Preferences"
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Pr_eferences..."
 msgstr "_Préférences"
 
-#: ../thunar/thunar-window.c:161
-msgid "Edit Thunar Preferences"
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Edit Thunars Preferences"
 msgstr "Éditer les préférences de Thunar"
 
-#: ../thunar/thunar-window.c:162
+#: ../thunar/thunar-window.c:172
 msgid "_View"
 msgstr "_Voir"
 
-#: ../thunar/thunar-window.c:163
+#: ../thunar/thunar-window.c:173
 msgid "_Location Selector"
 msgstr ""
 
-#: ../thunar/thunar-window.c:164
+#: ../thunar/thunar-window.c:174
 msgid "_Side Pane"
 msgstr "_Panneau latéral"
 
-#: ../thunar/thunar-window.c:165
+#: ../thunar/thunar-window.c:175
 msgid "_Go"
 msgstr "_Aller"
 
-#: ../thunar/thunar-window.c:166
+#: ../thunar/thunar-window.c:176
 msgid "Open _Parent"
 msgstr "Ouvrir le _père"
 
-#: ../thunar/thunar-window.c:166
+#: ../thunar/thunar-window.c:176
 msgid "Open the parent folder"
 msgstr "Ouvrir le dossier père"
 
-#: ../thunar/thunar-window.c:167
+#: ../thunar/thunar-window.c:177
 msgid "_Home"
 msgstr "_Répertoire personnel"
 
-#: ../thunar/thunar-window.c:167
+#: ../thunar/thunar-window.c:177
 msgid "Open the home folder"
 msgstr "Ouvrir le répertoire personnel"
 
-#: ../thunar/thunar-window.c:168
+#: ../thunar/thunar-window.c:178
 msgid "Open _Location..."
 msgstr "A_ller à..."
 
-#: ../thunar/thunar-window.c:168
+#: ../thunar/thunar-window.c:178
 msgid "Specify a location to open"
 msgstr "Spécifier un chemin à ouvrir"
 
-#: ../thunar/thunar-window.c:169
+#: ../thunar/thunar-window.c:179
 msgid "_Help"
 msgstr "_Aide"
 
-#: ../thunar/thunar-window.c:171 ../thunar/thunar-window.c:173
+#: ../thunar/thunar-window.c:181 ../thunar/thunar-window.c:183
 msgid "_About"
 msgstr "À _propos"
 
-#: ../thunar/thunar-window.c:171 ../thunar/thunar-window.c:173
+#: ../thunar/thunar-window.c:181 ../thunar/thunar-window.c:183
 msgid "Display information about Thunar"
 msgstr "Affiche des informations à propos de Thunar"
 
-#: ../thunar/thunar-window.c:179
+#: ../thunar/thunar-window.c:189
 msgid "Show _Hidden Files"
 msgstr "Montrer les fichiers _cachés"
 
-#: ../thunar/thunar-window.c:179
+#: ../thunar/thunar-window.c:189
 msgid "Toggles the display of hidden files in the current window"
 msgstr "Montrer/cache les fichiers cachés dans la fenêtre courante"
 
-#: ../thunar/thunar-window.c:246
+#: ../thunar/thunar-window.c:256
 msgid "The directory currently displayed within this window"
 msgstr "Le répertoire actuellement affiché dans cette fenêtre"
 
-#: ../thunar/thunar-window.c:274
+#: ../thunar/thunar-window.c:284
 msgid "The UI manager used within this window"
 msgstr ""
 
 #.
 #. * add the side pane options
 #.
-#: ../thunar/thunar-window.c:329
+#: ../thunar/thunar-window.c:342
 msgid "_Favourites"
 msgstr "_Favoris"
 
-#: ../thunar/thunar-window.c:335 ../thunar/thunar-window.c:358
+#: ../thunar/thunar-window.c:348 ../thunar/thunar-window.c:371
 msgid "_Hidden"
 msgstr "_Caché"
 
 #.
 #. * add the location selector options
 #.
-#: ../thunar/thunar-window.c:344
+#: ../thunar/thunar-window.c:357
 msgid "_Pathbar Style"
 msgstr "Style de la barre de _chemin"
 
-#: ../thunar/thunar-window.c:345
+#: ../thunar/thunar-window.c:358
 msgid "Modern approach with buttons that correspond to folders"
 msgstr "Approche moderne avec les boutons qui correspondent aux dossiers"
 
-#: ../thunar/thunar-window.c:351
+#: ../thunar/thunar-window.c:364
 msgid "_Toolbar Style"
 msgstr "Style de la barre d'_outils"
 
-#: ../thunar/thunar-window.c:352
+#: ../thunar/thunar-window.c:365
 msgid "Traditional approach with location bar and navigation buttons"
 msgstr ""
 "Approche traditionnelle avec les la barre de chemin et les boutons de "
 "navigation"
 
-#: ../thunar/thunar-window.c:358
+#: ../thunar/thunar-window.c:371
 msgid "Don't display any location selector"
 msgstr ""
 
 #.
 #. * add view options
 #.
-#: ../thunar/thunar-window.c:367
+#: ../thunar/thunar-window.c:380
 msgid "View as _Icons"
 msgstr "Voir en _icônes"
 
-#: ../thunar/thunar-window.c:367
+#: ../thunar/thunar-window.c:380
 msgid "Display folder content in an icon view"
 msgstr "Affiche le contenu du dossier sous forme de vue d'icônes"
 
-#: ../thunar/thunar-window.c:374
+#: ../thunar/thunar-window.c:387
 msgid "View as _Detailed List"
 msgstr "Voir en liste _détaillée"
 
-#: ../thunar/thunar-window.c:374
+#: ../thunar/thunar-window.c:387
 msgid "Display folder content in a detailed list view"
 msgstr "Affiche le contenu du dossier sous forme de liste détaillée"
 
 #. display an error to the user
-#: ../thunar/thunar-window.c:868
+#: ../thunar/thunar-window.c:951
 msgid "Failed to open home directory"
 msgstr "Échec dans l'ouverture du répertoire personnel"
 
-#: ../thunar/thunar-window.c:943
+#: ../thunar/thunar-window.c:1026
 msgid ""
 "Thunar is a fast and easy to use file manager\n"
 "for the Xfce Desktop Environment."
@@ -1415,7 +1421,7 @@ msgstr ""
 "Thunar est un gestionnaire de fichier rapide et facile\n"
 "d'utilisation pour l'Environnement de Bureau Xfce."
 
-#: ../thunar/thunar-window.c:948
+#: ../thunar/thunar-window.c:1031
 msgid "translator-credits"
 msgstr "crédits-traducteur"
 
@@ -1443,6 +1449,265 @@ msgstr ""
 msgid "Don't unload the plugin from memory"
 msgstr ""
 
+#: ../thunar-uca/thunar-uca-chooser.c:125
+msgid "Custom Actions"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:142
+msgid ""
+"You can configure custom actions that will appear in the\n"
+"file managers context menus for certain kinds of files."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:192
+msgid "Add a new custom action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:202
+#, fuzzy
+msgid "Edit the currently selected action."
+msgstr "Le fichier actuellement affiché"
+
+#: ../thunar-uca/thunar-uca-chooser.c:212
+#, fuzzy
+msgid "Delete the currently selected action."
+msgstr "Supprime les fichiers sélectionnés"
+
+#: ../thunar-uca/thunar-uca-chooser.c:222
+msgid "Move the currently selection action up by one row."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:232
+msgid "Move the currently selection action down by one row."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:362
+msgid "Edit Action"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:362
+msgid "Create Action"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:411
+#, fuzzy
+msgid "Failed to save actions to disk."
+msgstr "Échec à l'ajout de la nouvelle application `%s'"
+
+#.
+#. Basic
+#.
+#: ../thunar-uca/thunar-uca-editor.c:136
+msgid "Basic"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:145
+#, fuzzy
+msgid "_Name:"
+msgstr "Nom :"
+
+#: ../thunar-uca/thunar-uca-editor.c:150
+#, fuzzy
+msgid "The name of the action that will be displayed in the context menu."
+msgstr "Le texte principal à afficher dans la barre de statut"
+
+#: ../thunar-uca/thunar-uca-editor.c:163
+msgid "_Description:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:168
+msgid ""
+"The description of the action that will be displayed as tooltip in the "
+"statusbar when selecting the item from the context menu."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:181
+msgid "_Command:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:190
+msgid ""
+"The command (including the necessary parameters) to perform the action. See "
+"the command parameter legend below for a list of supported parameter "
+"variables, which will be substituted when launching the command. When upper-"
+"case letters (e.g. %F, %D, %N) are used, the action will be applicable even "
+"if more than one item is selected. Else the action will only be applicable "
+"if exactly one item is selected."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:201
+msgid "Browse the file system to select an application to use for this action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:217
+msgid "_Icon:"
+msgstr ""
+
+#. setup a label to tell that no icon was selected
+#: ../thunar-uca/thunar-uca-editor.c:225 ../thunar-uca/thunar-uca-editor.c:770
+msgid "No icon"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:226
+msgid ""
+"Click this button to select an icon file that will be displayed in the "
+"context menu in addition to the action name chosen above."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:257
+msgid ""
+"The following command parameters will be\n"
+"substituted when launching the action:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:295
+#, fuzzy
+msgid "the path to the first selected file"
+msgstr "Affiche les propriétés du fichier sélectionné"
+
+#: ../thunar-uca/thunar-uca-editor.c:307
+#, fuzzy
+msgid "the paths to all selected files"
+msgstr "Coupe les fichiers sélectionnés"
+
+#: ../thunar-uca/thunar-uca-editor.c:319
+#, c-format
+msgid "directory containing the file that is passed in %f"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:331
+#, c-format
+msgid "directories containing the files that are passed in %F"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:343
+msgid "the first selected filename (without path)"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:355
+msgid "the selected filenames (without paths)"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:369
+msgid "Appearance Conditions"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:377
+#, fuzzy
+msgid "_File Pattern:"
+msgstr "Motif :"
+
+#: ../thunar-uca/thunar-uca-editor.c:382
+msgid ""
+"Enter a list of patterns that will be used to determine whether this action "
+"should be displayed for a selected file. If you specify more than one "
+"pattern here, the list items must be separated with semicolons (e.g. *.txt;*."
+"doc)."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:401
+msgid "Appears if selection contains:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:414
+#, fuzzy
+msgid "_Directories"
+msgstr "Suppression des répertoires..."
+
+#: ../thunar-uca/thunar-uca-editor.c:418
+#, fuzzy
+msgid "_Audio Files"
+msgstr "_Copier les fichiers"
+
+#: ../thunar-uca/thunar-uca-editor.c:422
+#, fuzzy
+msgid "_Image Files"
+msgstr "Co_ller les fichiers"
+
+#: ../thunar-uca/thunar-uca-editor.c:426
+#, fuzzy
+msgid "_Text Files"
+msgstr "Cou_per les fichiers"
+
+#: ../thunar-uca/thunar-uca-editor.c:431
+#, fuzzy
+msgid "_Video Files"
+msgstr "_Copier les fichiers"
+
+#: ../thunar-uca/thunar-uca-editor.c:435
+#, fuzzy
+msgid "_Other Files"
+msgstr "Co_ller les fichiers"
+
+#: ../thunar-uca/thunar-uca-editor.c:452
+msgid ""
+"This page lists the conditions under which the\n"
+"action will appear in the file managers context\n"
+"menus. The file patterns are specified as a list\n"
+"of simple file patterns separated by semicolons\n"
+"(e.g. *.txt;*.doc). For an action to appear in the\n"
+"context menu of a file or folder, atleast one of\n"
+"these patterns must match the name of the file\n"
+"or folder. Additionally, you can specify that the\n"
+"action should only appear for certain kinds of\n"
+"files."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:630
+#, fuzzy
+msgid "Select an Icon"
+msgstr "Sélectionner une application"
+
+#: ../thunar-uca/thunar-uca-editor.c:645
+#, fuzzy
+msgid "Image Files"
+msgstr "Co_ller les fichiers"
+
+#: ../thunar-uca/thunar-uca-model.c:762
+#, c-format
+msgid "Unknown element <%s>"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:780
+msgid "End element handler called while in root context"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:868
+#, c-format
+msgid "Unknown closing element <%s>"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:1293
+#, fuzzy
+msgid "Failed to determine save location for uca.xml"
+msgstr "Échec à la détermination d'informations sur le fichier `%s'"
+
+#: ../thunar-uca/thunar-uca-model.c:1409
+msgid "Command not configured"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:155
+msgid "Configure c_ustom actions..."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:156
+msgid ""
+"Setup custom actions that will appear in the file managers context menus"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:328
+#, fuzzy, c-format
+msgid "Failed to launch action `%s'."
+msgstr "Échec à l'ajout de la nouvelle application `%s'"
+
+#: ../thunar-uca/uca.xml.in.h:1
+msgid "Example for a custom action"
+msgstr ""
+
+#: ../thunar-uca/uca.xml.in.h:2
+msgid "Open Terminal Here"
+msgstr ""
+
 #: ../Thunar.desktop.in.h:1
 msgid "Browse the filesystem with the file manager"
 msgstr "Explorer le système de fichiers avec le gestionnaire de fichiers"
index 591a1a8..e4aa0d8 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Thunar 0.1.4svn\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-11-28 23:30+0900\n"
+"POT-Creation-Date: 2005-11-29 18:22+0100\n"
 "PO-Revision-Date: 2005-10-06 22:02+0900\n"
 "Last-Translator: SZERVÁC Attila <sas@321.hu>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
@@ -148,7 +148,7 @@ msgid "copy of %s"
 msgstr ""
 
 #: ../thunar-vfs/thunar-vfs-xfer.c:158 ../thunar/thunar-list-model.c:703
-#: ../thunar/thunar-properties-dialog.c:617
+#: ../thunar/thunar-properties-dialog.c:629
 #, c-format
 msgid "link to %s"
 msgstr ""
@@ -260,7 +260,7 @@ msgid "Failed to create symbolic `%s'"
 msgstr "Nem hozható létre e szimlink: %s"
 
 #. setup application name
-#: ../thunar/main.c:47 ../thunar/thunar-window.c:391
+#: ../thunar/main.c:47 ../thunar/thunar-window.c:404
 msgid "Thunar"
 msgstr "Thunar"
 
@@ -352,34 +352,35 @@ msgstr "Nem törölhető: %s"
 msgid "Open <i>%s</i> and other files of type \"%s\" with:"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:634
+#: ../thunar/thunar-chooser-dialog.c:634 ../thunar-uca/thunar-uca-editor.c:491
 #, fuzzy
 msgid "Select an Application"
 msgstr "_Hely megnyitása..."
 
-#: ../thunar/thunar-chooser-dialog.c:644
+#: ../thunar/thunar-chooser-dialog.c:644 ../thunar-uca/thunar-uca-editor.c:501
+#: ../thunar-uca/thunar-uca-editor.c:640
 #, fuzzy
 msgid "All Files"
 msgstr "Fájlok"
 
-#: ../thunar/thunar-chooser-dialog.c:649
+#: ../thunar/thunar-chooser-dialog.c:649 ../thunar-uca/thunar-uca-editor.c:506
 #, fuzzy
 msgid "Executable Files"
 msgstr "Minden fájl kiválasztása"
 
-#: ../thunar/thunar-chooser-dialog.c:664
+#: ../thunar/thunar-chooser-dialog.c:664 ../thunar-uca/thunar-uca-editor.c:521
 msgid "Perl Scripts"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:670
+#: ../thunar/thunar-chooser-dialog.c:670 ../thunar-uca/thunar-uca-editor.c:527
 msgid "Python Scripts"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:676
+#: ../thunar/thunar-chooser-dialog.c:676 ../thunar-uca/thunar-uca-editor.c:533
 msgid "Ruby Scripts"
 msgstr ""
 
-#: ../thunar/thunar-chooser-dialog.c:682
+#: ../thunar/thunar-chooser-dialog.c:682 ../thunar-uca/thunar-uca-editor.c:539
 msgid "Shell Scripts"
 msgstr ""
 
@@ -469,6 +470,8 @@ msgid "Details view"
 msgstr "Részletes nézet"
 
 #: ../thunar/thunar-dialogs.c:74 ../thunar/thunar-dialogs.c:78
+#: ../thunar-uca/thunar-uca-chooser.c:412
+#: ../thunar-uca/thunar-uca-provider.c:329
 #, c-format
 msgid "%s."
 msgstr ""
@@ -740,16 +743,16 @@ msgid "Number of visible files"
 msgstr "Látható fájlok száma"
 
 #: ../thunar/thunar-list-model.c:342 ../thunar/thunar-view.c:108
-#: ../thunar/thunar-window.c:258
+#: ../thunar/thunar-window.c:268
 msgid "Show hidden"
 msgstr "Rejtettek mutatása"
 
 #: ../thunar/thunar-list-model.c:343 ../thunar/thunar-view.c:109
-#: ../thunar/thunar-window.c:259
+#: ../thunar/thunar-window.c:269
 msgid "Whether to display hidden files"
 msgstr "Mutassuk-e a rejtett fájlokat"
 
-#: ../thunar/thunar-list-model.c:701 ../thunar/thunar-properties-dialog.c:615
+#: ../thunar/thunar-list-model.c:701 ../thunar/thunar-properties-dialog.c:627
 msgid "broken link"
 msgstr ""
 
@@ -789,11 +792,11 @@ msgid_plural "%d items selected (%s)"
 msgstr[0] "%d elem kijelölve"
 msgstr[1] "%d elem kijelölve"
 
-#: ../thunar/thunar-location-buttons.c:256
+#: ../thunar/thunar-location-buttons.c:258
 msgid "Spacing"
 msgstr "Távolság"
 
-#: ../thunar/thunar-location-buttons.c:257
+#: ../thunar/thunar-location-buttons.c:259
 msgid "The amount of space between the path buttons"
 msgstr "Ösvénygombok közti táv"
 
@@ -805,7 +808,7 @@ msgstr "Hely megnyitása"
 msgid "_Location:"
 msgstr "_Hely:"
 
-#: ../thunar/thunar-navigator.c:135 ../thunar/thunar-window.c:245
+#: ../thunar/thunar-navigator.c:135 ../thunar/thunar-window.c:255
 msgid "Current directory"
 msgstr "Jelenlegi könyvtár"
 
@@ -836,63 +839,63 @@ msgstr "A most megjelenített fájl"
 msgid "The icon size for the path entry"
 msgstr "Az ösvényelem ikonmérete"
 
-#: ../thunar/thunar-preferences-dialog.c:177
+#: ../thunar/thunar-preferences-dialog.c:185
 #, fuzzy
 msgid "File Manager Preferences"
 msgstr "Fájlkezelő"
 
-#: ../thunar/thunar-preferences-dialog.c:193
+#: ../thunar/thunar-preferences-dialog.c:201
 msgid "<b>Default View</b>"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:204
+#: ../thunar/thunar-preferences-dialog.c:212
 msgid "View _new folders using:"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:209
+#: ../thunar/thunar-preferences-dialog.c:217
 #, fuzzy
 msgid "Icon View"
 msgstr "Ikonnézet"
 
-#: ../thunar/thunar-preferences-dialog.c:210
+#: ../thunar/thunar-preferences-dialog.c:218
 #, fuzzy
 msgid "Detailed List View"
 msgstr "Részletes nézet"
 
-#: ../thunar/thunar-preferences-dialog.c:211
+#: ../thunar/thunar-preferences-dialog.c:219
 msgid "Last Active View"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:226
+#: ../thunar/thunar-preferences-dialog.c:234
 msgid "Sort _folders before files"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:228
+#: ../thunar/thunar-preferences-dialog.c:236
 msgid "Select this option to list folders before files when you sort a folder."
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:232
+#: ../thunar/thunar-preferences-dialog.c:240
 #, fuzzy
 msgid "Show hidden and _backup files"
 msgstr "Rejtett fájlok mutatása"
 
-#: ../thunar/thunar-preferences-dialog.c:234
+#: ../thunar/thunar-preferences-dialog.c:242
 msgid ""
 "Select this option to show hidden and backup files in new windows. The first "
 "character in a hidden filename is a period (.). The last character in a "
 "backup filename is a tilde (~)."
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:244
+#: ../thunar/thunar-preferences-dialog.c:252
 #, fuzzy
 msgid "<b>Icon View</b>"
 msgstr "Ikonnézet"
 
-#: ../thunar/thunar-preferences-dialog.c:255
+#: ../thunar/thunar-preferences-dialog.c:263
 msgid "_Text beside icons"
 msgstr ""
 
-#: ../thunar/thunar-preferences-dialog.c:257
+#: ../thunar/thunar-preferences-dialog.c:265
 msgid ""
 "Select this option to place the icon captions for items beside the icon "
 "rather than below the icon."
@@ -961,62 +964,62 @@ msgstr[1] ""
 msgid "The file displayed by the dialog"
 msgstr ""
 
-#: ../thunar/thunar-properties-dialog.c:209
+#: ../thunar/thunar-properties-dialog.c:217
 msgid "General"
 msgstr "Általános"
 
-#: ../thunar/thunar-properties-dialog.c:226
+#: ../thunar/thunar-properties-dialog.c:234
 msgid "Name:"
 msgstr "Név"
 
 #.
 #. Second box (kind)
 #.
-#: ../thunar/thunar-properties-dialog.c:251
+#: ../thunar/thunar-properties-dialog.c:259
 msgid "Kind:"
 msgstr "Típus:"
 
 #.
 #. Third box (modified, accessed)
 #.
-#: ../thunar/thunar-properties-dialog.c:276
+#: ../thunar/thunar-properties-dialog.c:284
 msgid "Modified:"
 msgstr "Módosítva:"
 
-#: ../thunar/thunar-properties-dialog.c:289
+#: ../thunar/thunar-properties-dialog.c:297
 msgid "Accessed:"
 msgstr "Megnyitva:"
 
 #.
 #. Fourth box (volume, size)
 #.
-#: ../thunar/thunar-properties-dialog.c:313
+#: ../thunar/thunar-properties-dialog.c:321
 msgid "Volume:"
 msgstr "Kötet:"
 
-#: ../thunar/thunar-properties-dialog.c:336
+#: ../thunar/thunar-properties-dialog.c:344
 msgid "Size:"
 msgstr "Méret:"
 
 #.
 #. Emblem chooser
 #.
-#: ../thunar/thunar-properties-dialog.c:360
+#: ../thunar/thunar-properties-dialog.c:368
 msgid "Emblems"
 msgstr ""
 
-#: ../thunar/thunar-properties-dialog.c:592
+#: ../thunar/thunar-properties-dialog.c:604
 #, c-format
 msgid "%s Info"
 msgstr "%s Info"
 
-#: ../thunar/thunar-properties-dialog.c:673
+#: ../thunar/thunar-properties-dialog.c:685
 #, c-format
 msgid "%s (%u Bytes)"
 msgstr "%s (%u bájt)"
 
 #. display an error message
-#: ../thunar/thunar-properties-dialog.c:719
+#: ../thunar/thunar-properties-dialog.c:731
 #: ../thunar/thunar-standard-view.c:2175
 #, fuzzy, c-format
 msgid "Failed to rename `%s'"
@@ -1104,7 +1107,7 @@ msgstr "Minden fájlt kiválaszt ebből az ablakból"
 
 #: ../thunar/thunar-standard-view.c:263
 #, fuzzy
-msgid "Select _by Pattern"
+msgid "Select _by Pattern..."
 msgstr "Kijelölés mintával"
 
 #: ../thunar/thunar-standard-view.c:263
@@ -1267,7 +1270,7 @@ msgstr ""
 msgid "Text to be displayed in the statusbar associated with this view"
 msgstr "E nézet állapotsorának szövege"
 
-#: ../thunar/thunar-view.c:122 ../thunar/thunar-window.c:273
+#: ../thunar/thunar-view.c:122 ../thunar/thunar-window.c:283
 msgid "UI manager"
 msgstr "UI kezelő"
 
@@ -1275,187 +1278,188 @@ msgstr "UI kezelő"
 msgid "UI manager of the surrounding window"
 msgstr "Adot ablak felhasználói felület kezelője"
 
-#: ../thunar/thunar-window.c:156
+#: ../thunar/thunar-window.c:166
 msgid "_File"
 msgstr "_Fájl"
 
-#: ../thunar/thunar-window.c:157
+#: ../thunar/thunar-window.c:167
 msgid "Open New _Window"
 msgstr "Új _Ablak"
 
-#: ../thunar/thunar-window.c:157
+#: ../thunar/thunar-window.c:167
 msgid "Open a new Thunar window for the displayed location"
 msgstr "Új Thunar ablak az adott helyhez"
 
-#: ../thunar/thunar-window.c:158
+#: ../thunar/thunar-window.c:168
 msgid "Close _All Windows"
 msgstr "_Minden ablak bezárása"
 
-#: ../thunar/thunar-window.c:158
+#: ../thunar/thunar-window.c:168
 msgid "Close all Thunar windows"
 msgstr "Bezár minden Thunar ablakot"
 
-#: ../thunar/thunar-window.c:159
+#: ../thunar/thunar-window.c:169
 msgid "_Close"
 msgstr "_Bezárás"
 
-#: ../thunar/thunar-window.c:159
+#: ../thunar/thunar-window.c:169
 msgid "Close this window"
 msgstr "Bezárja ezt az ablakot"
 
-#: ../thunar/thunar-window.c:160
+#: ../thunar/thunar-window.c:170
 msgid "_Edit"
 msgstr "Sz_erkesztés"
 
-#: ../thunar/thunar-window.c:161
+#: ../thunar/thunar-window.c:171
 #, fuzzy
-msgid "_Preferences"
+msgid "Pr_eferences..."
 msgstr "Tulajdonságok"
 
-#: ../thunar/thunar-window.c:161
-msgid "Edit Thunar Preferences"
-msgstr ""
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Edit Thunars Preferences"
+msgstr "Fájlkezelő"
 
-#: ../thunar/thunar-window.c:162
+#: ../thunar/thunar-window.c:172
 msgid "_View"
 msgstr "_Nézet"
 
-#: ../thunar/thunar-window.c:163
+#: ../thunar/thunar-window.c:173
 #, fuzzy
 msgid "_Location Selector"
 msgstr "_Címsor"
 
-#: ../thunar/thunar-window.c:164
+#: ../thunar/thunar-window.c:174
 msgid "_Side Pane"
 msgstr ""
 
-#: ../thunar/thunar-window.c:165
+#: ../thunar/thunar-window.c:175
 msgid "_Go"
 msgstr "_Ugrás"
 
-#: ../thunar/thunar-window.c:166
+#: ../thunar/thunar-window.c:176
 msgid "Open _Parent"
 msgstr "_Szülő megnyitása"
 
-#: ../thunar/thunar-window.c:166
+#: ../thunar/thunar-window.c:176
 msgid "Open the parent folder"
 msgstr "Szülőmappa megnyitása"
 
-#: ../thunar/thunar-window.c:167
+#: ../thunar/thunar-window.c:177
 #, fuzzy
 msgid "_Home"
 msgstr "Saját könyvtár"
 
-#: ../thunar/thunar-window.c:167
+#: ../thunar/thunar-window.c:177
 #, fuzzy
 msgid "Open the home folder"
 msgstr "Szülőmappa megnyitása"
 
-#: ../thunar/thunar-window.c:168
+#: ../thunar/thunar-window.c:178
 msgid "Open _Location..."
 msgstr "_Hely megnyitása..."
 
-#: ../thunar/thunar-window.c:168
+#: ../thunar/thunar-window.c:178
 msgid "Specify a location to open"
 msgstr "Adott hely megnyitása"
 
-#: ../thunar/thunar-window.c:169
+#: ../thunar/thunar-window.c:179
 msgid "_Help"
 msgstr "_Súgó"
 
-#: ../thunar/thunar-window.c:171 ../thunar/thunar-window.c:173
+#: ../thunar/thunar-window.c:181 ../thunar/thunar-window.c:183
 msgid "_About"
 msgstr "_Névjegy"
 
-#: ../thunar/thunar-window.c:171 ../thunar/thunar-window.c:173
+#: ../thunar/thunar-window.c:181 ../thunar/thunar-window.c:183
 msgid "Display information about Thunar"
 msgstr "A Thunar adatainak megjelenítése"
 
-#: ../thunar/thunar-window.c:179
+#: ../thunar/thunar-window.c:189
 #, fuzzy
 msgid "Show _Hidden Files"
 msgstr "Rejtett fájlok mutatása"
 
-#: ../thunar/thunar-window.c:179
+#: ../thunar/thunar-window.c:189
 msgid "Toggles the display of hidden files in the current window"
 msgstr "A rejtett fájlok mutatását váltja a jelen ablakban"
 
-#: ../thunar/thunar-window.c:246
+#: ../thunar/thunar-window.c:256
 msgid "The directory currently displayed within this window"
 msgstr "Ezen ablakban megjelenített könyvtár"
 
-#: ../thunar/thunar-window.c:274
+#: ../thunar/thunar-window.c:284
 msgid "The UI manager used within this window"
 msgstr "Ezen ablakban használt UI kezelő"
 
 #.
 #. * add the side pane options
 #.
-#: ../thunar/thunar-window.c:329
+#: ../thunar/thunar-window.c:342
 msgid "_Favourites"
 msgstr ""
 
-#: ../thunar/thunar-window.c:335 ../thunar/thunar-window.c:358
+#: ../thunar/thunar-window.c:348 ../thunar/thunar-window.c:371
 msgid "_Hidden"
 msgstr "_Rejtett"
 
 #.
 #. * add the location selector options
 #.
-#: ../thunar/thunar-window.c:344
+#: ../thunar/thunar-window.c:357
 #, fuzzy
 msgid "_Pathbar Style"
 msgstr "_Hagyományos stílus"
 
-#: ../thunar/thunar-window.c:345
+#: ../thunar/thunar-window.c:358
 msgid "Modern approach with buttons that correspond to folders"
 msgstr ""
 
-#: ../thunar/thunar-window.c:351
+#: ../thunar/thunar-window.c:364
 #, fuzzy
 msgid "_Toolbar Style"
 msgstr "_Hagyományos stílus"
 
-#: ../thunar/thunar-window.c:352
+#: ../thunar/thunar-window.c:365
 msgid "Traditional approach with location bar and navigation buttons"
 msgstr ""
 
-#: ../thunar/thunar-window.c:358
+#: ../thunar/thunar-window.c:371
 msgid "Don't display any location selector"
 msgstr ""
 
 #.
 #. * add view options
 #.
-#: ../thunar/thunar-window.c:367
+#: ../thunar/thunar-window.c:380
 msgid "View as _Icons"
 msgstr ""
 
-#: ../thunar/thunar-window.c:367
+#: ../thunar/thunar-window.c:380
 msgid "Display folder content in an icon view"
 msgstr ""
 
-#: ../thunar/thunar-window.c:374
+#: ../thunar/thunar-window.c:387
 msgid "View as _Detailed List"
 msgstr ""
 
-#: ../thunar/thunar-window.c:374
+#: ../thunar/thunar-window.c:387
 msgid "Display folder content in a detailed list view"
 msgstr ""
 
 #. display an error to the user
-#: ../thunar/thunar-window.c:868
+#: ../thunar/thunar-window.c:951
 #, fuzzy
 msgid "Failed to open home directory"
 msgstr "Nem megnyitható könyvtár: %s"
 
-#: ../thunar/thunar-window.c:943
+#: ../thunar/thunar-window.c:1026
 msgid ""
 "Thunar is a fast and easy to use file manager\n"
 "for the Xfce Desktop Environment."
 msgstr ""
 
-#: ../thunar/thunar-window.c:948
+#: ../thunar/thunar-window.c:1031
 msgid "translator-credits"
 msgstr ""
 
@@ -1483,6 +1487,267 @@ msgstr ""
 msgid "Don't unload the plugin from memory"
 msgstr ""
 
+#: ../thunar-uca/thunar-uca-chooser.c:125
+msgid "Custom Actions"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:142
+msgid ""
+"You can configure custom actions that will appear in the\n"
+"file managers context menus for certain kinds of files."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:192
+msgid "Add a new custom action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:202
+#, fuzzy
+msgid "Edit the currently selected action."
+msgstr "A most megjelenített fájl"
+
+#: ../thunar-uca/thunar-uca-chooser.c:212
+#, fuzzy
+msgid "Delete the currently selected action."
+msgstr "A kijelölt elem tulajdonságai"
+
+#: ../thunar-uca/thunar-uca-chooser.c:222
+msgid "Move the currently selection action up by one row."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:232
+msgid "Move the currently selection action down by one row."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:362
+msgid "Edit Action"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:362
+msgid "Create Action"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:411
+#, fuzzy
+msgid "Failed to save actions to disk."
+msgstr "Nem törölhető: %s"
+
+#.
+#. Basic
+#.
+#: ../thunar-uca/thunar-uca-editor.c:136
+msgid "Basic"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:145
+#, fuzzy
+msgid "_Name:"
+msgstr "Név"
+
+#: ../thunar-uca/thunar-uca-editor.c:150
+#, fuzzy
+msgid "The name of the action that will be displayed in the context menu."
+msgstr "Az állapotsor fő szövege"
+
+#: ../thunar-uca/thunar-uca-editor.c:163
+#, fuzzy
+msgid "_Description:"
+msgstr "_Hely:"
+
+#: ../thunar-uca/thunar-uca-editor.c:168
+msgid ""
+"The description of the action that will be displayed as tooltip in the "
+"statusbar when selecting the item from the context menu."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:181
+msgid "_Command:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:190
+msgid ""
+"The command (including the necessary parameters) to perform the action. See "
+"the command parameter legend below for a list of supported parameter "
+"variables, which will be substituted when launching the command. When upper-"
+"case letters (e.g. %F, %D, %N) are used, the action will be applicable even "
+"if more than one item is selected. Else the action will only be applicable "
+"if exactly one item is selected."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:201
+msgid "Browse the file system to select an application to use for this action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:217
+#, fuzzy
+msgid "_Icon:"
+msgstr "_Hely:"
+
+#. setup a label to tell that no icon was selected
+#: ../thunar-uca/thunar-uca-editor.c:225 ../thunar-uca/thunar-uca-editor.c:770
+msgid "No icon"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:226
+msgid ""
+"Click this button to select an icon file that will be displayed in the "
+"context menu in addition to the action name chosen above."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:257
+msgid ""
+"The following command parameters will be\n"
+"substituted when launching the action:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:295
+#, fuzzy
+msgid "the path to the first selected file"
+msgstr "A kijelölt elem tulajdonságai"
+
+#: ../thunar-uca/thunar-uca-editor.c:307
+#, fuzzy
+msgid "the paths to all selected files"
+msgstr "A kijelölt elem tulajdonságai"
+
+#: ../thunar-uca/thunar-uca-editor.c:319
+#, c-format
+msgid "directory containing the file that is passed in %f"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:331
+#, c-format
+msgid "directories containing the files that are passed in %F"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:343
+msgid "the first selected filename (without path)"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:355
+msgid "the selected filenames (without paths)"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:369
+msgid "Appearance Conditions"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:377
+#, fuzzy
+msgid "_File Pattern:"
+msgstr "Minta:"
+
+#: ../thunar-uca/thunar-uca-editor.c:382
+msgid ""
+"Enter a list of patterns that will be used to determine whether this action "
+"should be displayed for a selected file. If you specify more than one "
+"pattern here, the list items must be separated with semicolons (e.g. *.txt;*."
+"doc)."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:401
+msgid "Appears if selection contains:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:414
+#, fuzzy
+msgid "_Directories"
+msgstr "Fájlok gyűjtése..."
+
+#: ../thunar-uca/thunar-uca-editor.c:418
+#, fuzzy
+msgid "_Audio Files"
+msgstr "Fájlok másolása"
+
+#: ../thunar-uca/thunar-uca-editor.c:422
+#, fuzzy
+msgid "_Image Files"
+msgstr "Fájlok beillesztése"
+
+#: ../thunar-uca/thunar-uca-editor.c:426
+#, fuzzy
+msgid "_Text Files"
+msgstr "Fájlok kivágása"
+
+#: ../thunar-uca/thunar-uca-editor.c:431
+#, fuzzy
+msgid "_Video Files"
+msgstr "Fájlok másolása"
+
+#: ../thunar-uca/thunar-uca-editor.c:435
+#, fuzzy
+msgid "_Other Files"
+msgstr "Fájlok beillesztése"
+
+#: ../thunar-uca/thunar-uca-editor.c:452
+msgid ""
+"This page lists the conditions under which the\n"
+"action will appear in the file managers context\n"
+"menus. The file patterns are specified as a list\n"
+"of simple file patterns separated by semicolons\n"
+"(e.g. *.txt;*.doc). For an action to appear in the\n"
+"context menu of a file or folder, atleast one of\n"
+"these patterns must match the name of the file\n"
+"or folder. Additionally, you can specify that the\n"
+"action should only appear for certain kinds of\n"
+"files."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:630
+#, fuzzy
+msgid "Select an Icon"
+msgstr "_Hely megnyitása..."
+
+#: ../thunar-uca/thunar-uca-editor.c:645
+#, fuzzy
+msgid "Image Files"
+msgstr "Fájlok beillesztése"
+
+#: ../thunar-uca/thunar-uca-model.c:762
+#, c-format
+msgid "Unknown element <%s>"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:780
+msgid "End element handler called while in root context"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:868
+#, c-format
+msgid "Unknown closing element <%s>"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:1293
+#, fuzzy
+msgid "Failed to determine save location for uca.xml"
+msgstr "Nem sikerült meghatározni a szülő URI-t ehhez: %s"
+
+#: ../thunar-uca/thunar-uca-model.c:1409
+msgid "Command not configured"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:155
+msgid "Configure c_ustom actions..."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:156
+msgid ""
+"Setup custom actions that will appear in the file managers context menus"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:328
+#, fuzzy, c-format
+msgid "Failed to launch action `%s'."
+msgstr "Nem törölhető: %s"
+
+#: ../thunar-uca/uca.xml.in.h:1
+msgid "Example for a custom action"
+msgstr ""
+
+#: ../thunar-uca/uca.xml.in.h:2
+msgid "Open Terminal Here"
+msgstr ""
+
 #: ../Thunar.desktop.in.h:1
 msgid "Browse the filesystem with the file manager"
 msgstr ""
index 01640ca..126a85b 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Thunar 0.1.4svn\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-11-28 19:07+0900\n"
+"POT-Creation-Date: 2005-11-29 18:22+0100\n"
 "PO-Revision-Date: 2005-11-28 22:00+0900\n"
 "Last-Translator: Daichi Kawahata <daichi@xfce.org>\n"
 "Language-Team: Japanese <xfce-users-jp@ml.fdiary.net>\n"
@@ -149,7 +149,7 @@ msgid "copy of %s"
 msgstr "%s のコピー"
 
 #: ../thunar-vfs/thunar-vfs-xfer.c:158 ../thunar/thunar-list-model.c:703
-#: ../thunar/thunar-properties-dialog.c:617
+#: ../thunar/thunar-properties-dialog.c:629
 #, c-format
 msgid "link to %s"
 msgstr "%s へのリンク"
@@ -259,7 +259,7 @@ msgid "Failed to create symbolic `%s'"
 msgstr "リンク `%s' の作成に失敗しました。"
 
 #. setup application name
-#: ../thunar/main.c:47 ../thunar/thunar-window.c:391
+#: ../thunar/main.c:47 ../thunar/thunar-window.c:404
 msgid "Thunar"
 msgstr "Thunar"
 
@@ -347,31 +347,32 @@ msgstr "`%s' の実行に失敗しました。"
 msgid "Open <i>%s</i> and other files of type \"%s\" with:"
 msgstr "<i>%s</i> とタイプが \"%s\" の他のファイルを以下のアプリで開きます:"
 
-#: ../thunar/thunar-chooser-dialog.c:634
+#: ../thunar/thunar-chooser-dialog.c:634 ../thunar-uca/thunar-uca-editor.c:491
 msgid "Select an Application"
 msgstr "アプリケーションを選択して下さい"
 
-#: ../thunar/thunar-chooser-dialog.c:644
+#: ../thunar/thunar-chooser-dialog.c:644 ../thunar-uca/thunar-uca-editor.c:501
+#: ../thunar-uca/thunar-uca-editor.c:640
 msgid "All Files"
 msgstr "全てのファイル"
 
-#: ../thunar/thunar-chooser-dialog.c:649
+#: ../thunar/thunar-chooser-dialog.c:649 ../thunar-uca/thunar-uca-editor.c:506
 msgid "Executable Files"
 msgstr "実行可能ファイル"
 
-#: ../thunar/thunar-chooser-dialog.c:664
+#: ../thunar/thunar-chooser-dialog.c:664 ../thunar-uca/thunar-uca-editor.c:521
 msgid "Perl Scripts"
 msgstr "Perl スクリプト"
 
-#: ../thunar/thunar-chooser-dialog.c:670
+#: ../thunar/thunar-chooser-dialog.c:670 ../thunar-uca/thunar-uca-editor.c:527
 msgid "Python Scripts"
 msgstr "Python スクリプト"
 
-#: ../thunar/thunar-chooser-dialog.c:676
+#: ../thunar/thunar-chooser-dialog.c:676 ../thunar-uca/thunar-uca-editor.c:533
 msgid "Ruby Scripts"
 msgstr "Ruby スクリプト"
 
-#: ../thunar/thunar-chooser-dialog.c:682
+#: ../thunar/thunar-chooser-dialog.c:682 ../thunar-uca/thunar-uca-editor.c:539
 msgid "Shell Scripts"
 msgstr "シェルスクリプト"
 
@@ -457,6 +458,8 @@ msgid "Details view"
 msgstr "詳細表示"
 
 #: ../thunar/thunar-dialogs.c:74 ../thunar/thunar-dialogs.c:78
+#: ../thunar-uca/thunar-uca-chooser.c:412
+#: ../thunar-uca/thunar-uca-provider.c:329
 #, c-format
 msgid "%s."
 msgstr "%s。"
@@ -721,16 +724,16 @@ msgid "Number of visible files"
 msgstr "表示されるファイルの数です。"
 
 #: ../thunar/thunar-list-model.c:342 ../thunar/thunar-view.c:108
-#: ../thunar/thunar-window.c:258
+#: ../thunar/thunar-window.c:268
 msgid "Show hidden"
 msgstr "隠しファイルを表示"
 
 #: ../thunar/thunar-list-model.c:343 ../thunar/thunar-view.c:109
-#: ../thunar/thunar-window.c:259
+#: ../thunar/thunar-window.c:269
 msgid "Whether to display hidden files"
 msgstr "隠しファイルを表示するかを指定します。"
 
-#: ../thunar/thunar-list-model.c:701 ../thunar/thunar-properties-dialog.c:615
+#: ../thunar/thunar-list-model.c:701 ../thunar/thunar-properties-dialog.c:627
 msgid "broken link"
 msgstr "壊れたリンク"
 
@@ -767,11 +770,11 @@ msgid "%d item selected"
 msgid_plural "%d items selected (%s)"
 msgstr[0] "%d 個のアイテム (%s) が選択されています。"
 
-#: ../thunar/thunar-location-buttons.c:256
+#: ../thunar/thunar-location-buttons.c:258
 msgid "Spacing"
 msgstr "間隔"
 
-#: ../thunar/thunar-location-buttons.c:257
+#: ../thunar/thunar-location-buttons.c:259
 msgid "The amount of space between the path buttons"
 msgstr "パスボタン同士の間のスペースです。"
 
@@ -783,7 +786,7 @@ msgstr "開く位置を指定して下さい"
 msgid "_Location:"
 msgstr "フォルダの位置(_L):"
 
-#: ../thunar/thunar-navigator.c:135 ../thunar/thunar-window.c:245
+#: ../thunar/thunar-navigator.c:135 ../thunar/thunar-window.c:255
 msgid "Current directory"
 msgstr "現在のフォルダ"
 
@@ -813,45 +816,45 @@ msgstr "現在表示されているファイルです。"
 msgid "The icon size for the path entry"
 msgstr "パス・エントリーのアイコン・サイズです"
 
-#: ../thunar/thunar-preferences-dialog.c:177
+#: ../thunar/thunar-preferences-dialog.c:185
 msgid "File Manager Preferences"
 msgstr "ファイルマネージャーの環境設定"
 
-#: ../thunar/thunar-preferences-dialog.c:193
+#: ../thunar/thunar-preferences-dialog.c:201
 msgid "<b>Default View</b>"
 msgstr "<b>標準の表示方法</b>"
 
-#: ../thunar/thunar-preferences-dialog.c:204
+#: ../thunar/thunar-preferences-dialog.c:212
 msgid "View _new folders using:"
 msgstr "新規フォルダの表示方法(_N):"
 
-#: ../thunar/thunar-preferences-dialog.c:209
+#: ../thunar/thunar-preferences-dialog.c:217
 msgid "Icon View"
 msgstr "アイコン表示"
 
-#: ../thunar/thunar-preferences-dialog.c:210
+#: ../thunar/thunar-preferences-dialog.c:218
 msgid "Detailed List View"
 msgstr "詳細リスト表示"
 
-#: ../thunar/thunar-preferences-dialog.c:211
+#: ../thunar/thunar-preferences-dialog.c:219
 msgid "Last Active View"
 msgstr "最後に使用した表示方法"
 
-#: ../thunar/thunar-preferences-dialog.c:226
+#: ../thunar/thunar-preferences-dialog.c:234
 msgid "Sort _folders before files"
 msgstr "フォルダをファイルの前にする(_F)"
 
-#: ../thunar/thunar-preferences-dialog.c:228
+#: ../thunar/thunar-preferences-dialog.c:236
 msgid "Select this option to list folders before files when you sort a folder."
 msgstr ""
 "フォルダを並べ替える時にフォルダをファイルの前に並べるなら、このオプションを"
 "選択して下さい。"
 
-#: ../thunar/thunar-preferences-dialog.c:232
+#: ../thunar/thunar-preferences-dialog.c:240
 msgid "Show hidden and _backup files"
 msgstr "隠しファイルを表示(_B)"
 
-#: ../thunar/thunar-preferences-dialog.c:234
+#: ../thunar/thunar-preferences-dialog.c:242
 msgid ""
 "Select this option to show hidden and backup files in new windows. The first "
 "character in a hidden filename is a period (.). The last character in a "
@@ -861,15 +864,15 @@ msgstr ""
 "選択して下さい。隠しファイル名の先頭につく文字はピリオド「.」、予備ファイルの"
 "末尾にはチルダ「~」がついています。"
 
-#: ../thunar/thunar-preferences-dialog.c:244
+#: ../thunar/thunar-preferences-dialog.c:252
 msgid "<b>Icon View</b>"
 msgstr "<b>アイコン表示</b>"
 
-#: ../thunar/thunar-preferences-dialog.c:255
+#: ../thunar/thunar-preferences-dialog.c:263
 msgid "_Text beside icons"
 msgstr "文字をアイコンの隣に置く(_T)"
 
-#: ../thunar/thunar-preferences-dialog.c:257
+#: ../thunar/thunar-preferences-dialog.c:265
 msgid ""
 "Select this option to place the icon captions for items beside the icon "
 "rather than below the icon."
@@ -937,62 +940,62 @@ msgstr[0] "(残り %lu 秒)"
 msgid "The file displayed by the dialog"
 msgstr "ダイアログに表示されているファイルです"
 
-#: ../thunar/thunar-properties-dialog.c:209
+#: ../thunar/thunar-properties-dialog.c:217
 msgid "General"
 msgstr "一般"
 
-#: ../thunar/thunar-properties-dialog.c:226
+#: ../thunar/thunar-properties-dialog.c:234
 msgid "Name:"
 msgstr "名前:"
 
 #.
 #. Second box (kind)
 #.
-#: ../thunar/thunar-properties-dialog.c:251
+#: ../thunar/thunar-properties-dialog.c:259
 msgid "Kind:"
 msgstr "種類:"
 
 #.
 #. Third box (modified, accessed)
 #.
-#: ../thunar/thunar-properties-dialog.c:276
+#: ../thunar/thunar-properties-dialog.c:284
 msgid "Modified:"
 msgstr "変更日時:"
 
-#: ../thunar/thunar-properties-dialog.c:289
+#: ../thunar/thunar-properties-dialog.c:297
 msgid "Accessed:"
 msgstr "アクセス日時:"
 
 #.
 #. Fourth box (volume, size)
 #.
-#: ../thunar/thunar-properties-dialog.c:313
+#: ../thunar/thunar-properties-dialog.c:321
 msgid "Volume:"
 msgstr "容量:"
 
-#: ../thunar/thunar-properties-dialog.c:336
+#: ../thunar/thunar-properties-dialog.c:344
 msgid "Size:"
 msgstr "サイズ:"
 
 #.
 #. Emblem chooser
 #.
-#: ../thunar/thunar-properties-dialog.c:360
+#: ../thunar/thunar-properties-dialog.c:368
 msgid "Emblems"
 msgstr "エンブレム"
 
-#: ../thunar/thunar-properties-dialog.c:592
+#: ../thunar/thunar-properties-dialog.c:604
 #, c-format
 msgid "%s Info"
 msgstr "%s の情報"
 
-#: ../thunar/thunar-properties-dialog.c:673
+#: ../thunar/thunar-properties-dialog.c:685
 #, c-format
 msgid "%s (%u Bytes)"
 msgstr "%s (%u バイト)"
 
 #. display an error message
-#: ../thunar/thunar-properties-dialog.c:719
+#: ../thunar/thunar-properties-dialog.c:731
 #: ../thunar/thunar-standard-view.c:2175
 #, c-format
 msgid "Failed to rename `%s'"
@@ -1067,7 +1070,8 @@ msgid "Select all files in this window"
 msgstr "このウィンドウの全てのファイルを選択します。"
 
 #: ../thunar/thunar-standard-view.c:263
-msgid "Select _by Pattern"
+#, fuzzy
+msgid "Select _by Pattern..."
 msgstr "パターンで選択(_B)"
 
 #: ../thunar/thunar-standard-view.c:263
@@ -1219,7 +1223,7 @@ msgstr "テキストを折り返す幅です。"
 msgid "Text to be displayed in the statusbar associated with this view"
 msgstr "この表示に関連付けられたステータスバーで表示されるテキストです。"
 
-#: ../thunar/thunar-view.c:122 ../thunar/thunar-window.c:273
+#: ../thunar/thunar-view.c:122 ../thunar/thunar-window.c:283
 msgid "UI manager"
 msgstr "UI マネージャー"
 
@@ -1227,173 +1231,175 @@ msgstr "UI マネージャー"
 msgid "UI manager of the surrounding window"
 msgstr "ウィンドウを囲う UI マネージャーです。"
 
-#: ../thunar/thunar-window.c:156
+#: ../thunar/thunar-window.c:166
 msgid "_File"
 msgstr "ファイル(_F)"
 
-#: ../thunar/thunar-window.c:157
+#: ../thunar/thunar-window.c:167
 msgid "Open New _Window"
 msgstr "新規ウィンドウを開く(_W)"
 
-#: ../thunar/thunar-window.c:157
+#: ../thunar/thunar-window.c:167
 msgid "Open a new Thunar window for the displayed location"
 msgstr "表示されている場所のウィンドウを新しく開きます。"
 
-#: ../thunar/thunar-window.c:158
+#: ../thunar/thunar-window.c:168
 msgid "Close _All Windows"
 msgstr "全ウィンドウを閉じる(_A)"
 
-#: ../thunar/thunar-window.c:158
+#: ../thunar/thunar-window.c:168
 msgid "Close all Thunar windows"
 msgstr "Thunar の全てのウィンドウを閉じます。"
 
-#: ../thunar/thunar-window.c:159
+#: ../thunar/thunar-window.c:169
 msgid "_Close"
 msgstr "閉じる(_C)"
 
-#: ../thunar/thunar-window.c:159
+#: ../thunar/thunar-window.c:169
 msgid "Close this window"
 msgstr "このウィンドウを閉じます。"
 
-#: ../thunar/thunar-window.c:160
+#: ../thunar/thunar-window.c:170
 msgid "_Edit"
 msgstr "編集(_E)"
 
-#: ../thunar/thunar-window.c:161
-msgid "_Preferences"
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Pr_eferences..."
 msgstr "環境設定(_P)"
 
-#: ../thunar/thunar-window.c:161
-msgid "Edit Thunar Preferences"
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Edit Thunars Preferences"
 msgstr "Thunar の環境設定を行います。"
 
-#: ../thunar/thunar-window.c:162
+#: ../thunar/thunar-window.c:172
 msgid "_View"
 msgstr "表示(_V)"
 
-#: ../thunar/thunar-window.c:163
+#: ../thunar/thunar-window.c:173
 msgid "_Location Selector"
 msgstr "位置セレクター(_L)"
 
-#: ../thunar/thunar-window.c:164
+#: ../thunar/thunar-window.c:174
 msgid "_Side Pane"
 msgstr "サイドペイン(_S)"
 
-#: ../thunar/thunar-window.c:165
+#: ../thunar/thunar-window.c:175
 msgid "_Go"
 msgstr "移動(_G)"
 
-#: ../thunar/thunar-window.c:166
+#: ../thunar/thunar-window.c:176
 msgid "Open _Parent"
 msgstr "上位フォルダを開く(_P)"
 
-#: ../thunar/thunar-window.c:166
+#: ../thunar/thunar-window.c:176
 msgid "Open the parent folder"
 msgstr "上の階層にあるフォルダを開きます。"
 
-#: ../thunar/thunar-window.c:167
+#: ../thunar/thunar-window.c:177
 msgid "_Home"
 msgstr "ホーム(_H)"
 
-#: ../thunar/thunar-window.c:167
+#: ../thunar/thunar-window.c:177
 msgid "Open the home folder"
 msgstr "ホームフォルダを開きます。"
 
-#: ../thunar/thunar-window.c:168
+#: ../thunar/thunar-window.c:178
 msgid "Open _Location..."
 msgstr "指定位置を開く(_L)..."
 
-#: ../thunar/thunar-window.c:168
+#: ../thunar/thunar-window.c:178
 msgid "Specify a location to open"
 msgstr "フォルダの位置を指定して開きます。"
 
-#: ../thunar/thunar-window.c:169
+#: ../thunar/thunar-window.c:179
 msgid "_Help"
 msgstr "ヘルプ(_H)"
 
-#: ../thunar/thunar-window.c:171 ../thunar/thunar-window.c:173
+#: ../thunar/thunar-window.c:181 ../thunar/thunar-window.c:183
 msgid "_About"
 msgstr "このプログラムについて(_A)"
 
-#: ../thunar/thunar-window.c:171 ../thunar/thunar-window.c:173
+#: ../thunar/thunar-window.c:181 ../thunar/thunar-window.c:183
 msgid "Display information about Thunar"
 msgstr "Thunar についての情報を表示します。"
 
-#: ../thunar/thunar-window.c:179
+#: ../thunar/thunar-window.c:189
 msgid "Show _Hidden Files"
 msgstr "隠しファイルを表示(_H)"
 
-#: ../thunar/thunar-window.c:179
+#: ../thunar/thunar-window.c:189
 msgid "Toggles the display of hidden files in the current window"
 msgstr "現在のウィンドウで隠しファイルの表示/非表示を切り替えます。"
 
-#: ../thunar/thunar-window.c:246
+#: ../thunar/thunar-window.c:256
 msgid "The directory currently displayed within this window"
 msgstr "現在このウィンドウ内に表示されているフォルダです。"
 
-#: ../thunar/thunar-window.c:274
+#: ../thunar/thunar-window.c:284
 msgid "The UI manager used within this window"
 msgstr "このウィンドウ内で使用されている UI マネージャーです。"
 
 #.
 #. * add the side pane options
 #.
-#: ../thunar/thunar-window.c:329
+#: ../thunar/thunar-window.c:342
 msgid "_Favourites"
 msgstr "お気に入り(_F)"
 
-#: ../thunar/thunar-window.c:335 ../thunar/thunar-window.c:358
+#: ../thunar/thunar-window.c:348 ../thunar/thunar-window.c:371
 msgid "_Hidden"
 msgstr "表示しない(_H)"
 
 #.
 #. * add the location selector options
 #.
-#: ../thunar/thunar-window.c:344
+#: ../thunar/thunar-window.c:357
 msgid "_Pathbar Style"
 msgstr "パスボタン方式(_T)"
 
-#: ../thunar/thunar-window.c:345
+#: ../thunar/thunar-window.c:358
 msgid "Modern approach with buttons that correspond to folders"
 msgstr "フォルダに対応するボタンを表示する今風の表示方式です。"
 
-#: ../thunar/thunar-window.c:351
+#: ../thunar/thunar-window.c:364
 msgid "_Toolbar Style"
 msgstr "ツールバー方式(_T)"
 
-#: ../thunar/thunar-window.c:352
+#: ../thunar/thunar-window.c:365
 msgid "Traditional approach with location bar and navigation buttons"
 msgstr "位置バーおよびナビゲーションボタンを表示する旧来の表示方式です。"
 
-#: ../thunar/thunar-window.c:358
+#: ../thunar/thunar-window.c:371
 msgid "Don't display any location selector"
 msgstr "いずれの位置セレクターも表示しません。"
 
 #.
 #. * add view options
 #.
-#: ../thunar/thunar-window.c:367
+#: ../thunar/thunar-window.c:380
 msgid "View as _Icons"
 msgstr "アイコン表示(_I)"
 
-#: ../thunar/thunar-window.c:367
+#: ../thunar/thunar-window.c:380
 msgid "Display folder content in an icon view"
 msgstr "フォルダの内容をアイコンで表示します。"
 
-#: ../thunar/thunar-window.c:374
+#: ../thunar/thunar-window.c:387
 msgid "View as _Detailed List"
 msgstr "詳細リスト表示(_D)"
 
-#: ../thunar/thunar-window.c:374
+#: ../thunar/thunar-window.c:387
 msgid "Display folder content in a detailed list view"
 msgstr "フォルダの内容を詳細なリストで表示します。"
 
 #. display an error to the user
-#: ../thunar/thunar-window.c:868
+#: ../thunar/thunar-window.c:951
 msgid "Failed to open home directory"
 msgstr "ホームフォルダを開くのに失敗しました。"
 
-#: ../thunar/thunar-window.c:943
+#: ../thunar/thunar-window.c:1026
 msgid ""
 "Thunar is a fast and easy to use file manager\n"
 "for the Xfce Desktop Environment."
@@ -1401,7 +1407,7 @@ msgstr ""
 "Thunar は Xfce デスクトップ環境向けの\n"
 "使いやすい軽快なファイルマネージャーです。"
 
-#: ../thunar/thunar-window.c:948
+#: ../thunar/thunar-window.c:1031
 msgid "translator-credits"
 msgstr "Daichi Kawahata <daichi@xfce.org>"
 
@@ -1429,6 +1435,268 @@ msgstr "常駐させる"
 msgid "Don't unload the plugin from memory"
 msgstr "一度読み込まれたプラグインはメモリーに残しておきます。"
 
+#: ../thunar-uca/thunar-uca-chooser.c:125
+msgid "Custom Actions"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:142
+msgid ""
+"You can configure custom actions that will appear in the\n"
+"file managers context menus for certain kinds of files."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:192
+msgid "Add a new custom action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:202
+#, fuzzy
+msgid "Edit the currently selected action."
+msgstr "現在表示されているファイルです。"
+
+#: ../thunar-uca/thunar-uca-chooser.c:212
+#, fuzzy
+msgid "Delete the currently selected action."
+msgstr "選択したファイルを削除します。"
+
+#: ../thunar-uca/thunar-uca-chooser.c:222
+msgid "Move the currently selection action up by one row."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:232
+msgid "Move the currently selection action down by one row."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:362
+msgid "Edit Action"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:362
+msgid "Create Action"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:411
+#, fuzzy
+msgid "Failed to save actions to disk."
+msgstr "ファイル %s からアプリケーションを読み込むのに失敗しました。"
+
+#.
+#. Basic
+#.
+#: ../thunar-uca/thunar-uca-editor.c:136
+#, fuzzy
+msgid "Basic"
+msgstr "戻る"
+
+#: ../thunar-uca/thunar-uca-editor.c:145
+#, fuzzy
+msgid "_Name:"
+msgstr "名前:"
+
+#: ../thunar-uca/thunar-uca-editor.c:150
+#, fuzzy
+msgid "The name of the action that will be displayed in the context menu."
+msgstr "ステータスバーに表示されるメインテキストです。"
+
+#: ../thunar-uca/thunar-uca-editor.c:163
+#, fuzzy
+msgid "_Description:"
+msgstr "フォルダの位置(_L):"
+
+#: ../thunar-uca/thunar-uca-editor.c:168
+msgid ""
+"The description of the action that will be displayed as tooltip in the "
+"statusbar when selecting the item from the context menu."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:181
+msgid "_Command:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:190
+msgid ""
+"The command (including the necessary parameters) to perform the action. See "
+"the command parameter legend below for a list of supported parameter "
+"variables, which will be substituted when launching the command. When upper-"
+"case letters (e.g. %F, %D, %N) are used, the action will be applicable even "
+"if more than one item is selected. Else the action will only be applicable "
+"if exactly one item is selected."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:201
+msgid "Browse the file system to select an application to use for this action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:217
+#, fuzzy
+msgid "_Icon:"
+msgstr "フォルダの位置(_L):"
+
+#. setup a label to tell that no icon was selected
+#: ../thunar-uca/thunar-uca-editor.c:225 ../thunar-uca/thunar-uca-editor.c:770
+msgid "No icon"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:226
+msgid ""
+"Click this button to select an icon file that will be displayed in the "
+"context menu in addition to the action name chosen above."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:257
+msgid ""
+"The following command parameters will be\n"
+"substituted when launching the action:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:295
+#, fuzzy
+msgid "the path to the first selected file"
+msgstr "選択したファイルのプロパティを表示します。"
+
+#: ../thunar-uca/thunar-uca-editor.c:307
+#, fuzzy
+msgid "the paths to all selected files"
+msgstr "選択したファイルを切り取ります。"
+
+#: ../thunar-uca/thunar-uca-editor.c:319
+#, c-format
+msgid "directory containing the file that is passed in %f"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:331
+#, c-format
+msgid "directories containing the files that are passed in %F"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:343
+msgid "the first selected filename (without path)"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:355
+msgid "the selected filenames (without paths)"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:369
+msgid "Appearance Conditions"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:377
+#, fuzzy
+msgid "_File Pattern:"
+msgstr "パターン:"
+
+#: ../thunar-uca/thunar-uca-editor.c:382
+msgid ""
+"Enter a list of patterns that will be used to determine whether this action "
+"should be displayed for a selected file. If you specify more than one "
+"pattern here, the list items must be separated with semicolons (e.g. *.txt;*."
+"doc)."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:401
+msgid "Appears if selection contains:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:414
+#, fuzzy
+msgid "_Directories"
+msgstr "フォルダを削除しています..."
+
+#: ../thunar-uca/thunar-uca-editor.c:418
+#, fuzzy
+msgid "_Audio Files"
+msgstr "コピー(_C)"
+
+#: ../thunar-uca/thunar-uca-editor.c:422
+#, fuzzy
+msgid "_Image Files"
+msgstr "貼り付け(_P)"
+
+#: ../thunar-uca/thunar-uca-editor.c:426
+#, fuzzy
+msgid "_Text Files"
+msgstr "切り取り(_T)"
+
+#: ../thunar-uca/thunar-uca-editor.c:431
+#, fuzzy
+msgid "_Video Files"
+msgstr "コピー(_C)"
+
+#: ../thunar-uca/thunar-uca-editor.c:435
+#, fuzzy
+msgid "_Other Files"
+msgstr "貼り付け(_P)"
+
+#: ../thunar-uca/thunar-uca-editor.c:452
+msgid ""
+"This page lists the conditions under which the\n"
+"action will appear in the file managers context\n"
+"menus. The file patterns are specified as a list\n"
+"of simple file patterns separated by semicolons\n"
+"(e.g. *.txt;*.doc). For an action to appear in the\n"
+"context menu of a file or folder, atleast one of\n"
+"these patterns must match the name of the file\n"
+"or folder. Additionally, you can specify that the\n"
+"action should only appear for certain kinds of\n"
+"files."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:630
+#, fuzzy
+msgid "Select an Icon"
+msgstr "アプリケーションを選択して下さい"
+
+#: ../thunar-uca/thunar-uca-editor.c:645
+#, fuzzy
+msgid "Image Files"
+msgstr "貼り付け(_P)"
+
+#: ../thunar-uca/thunar-uca-model.c:762
+#, c-format
+msgid "Unknown element <%s>"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:780
+msgid "End element handler called while in root context"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:868
+#, c-format
+msgid "Unknown closing element <%s>"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:1293
+#, fuzzy
+msgid "Failed to determine save location for uca.xml"
+msgstr "`%s' のファイル情報を確定するのに失敗しました。"
+
+#: ../thunar-uca/thunar-uca-model.c:1409
+msgid "Command not configured"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:155
+msgid "Configure c_ustom actions..."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:156
+msgid ""
+"Setup custom actions that will appear in the file managers context menus"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:328
+#, fuzzy, c-format
+msgid "Failed to launch action `%s'."
+msgstr "操作の実行に失敗しました。"
+
+#: ../thunar-uca/uca.xml.in.h:1
+msgid "Example for a custom action"
+msgstr ""
+
+#: ../thunar-uca/uca.xml.in.h:2
+msgid "Open Terminal Here"
+msgstr ""
+
 #: ../Thunar.desktop.in.h:1
 msgid "Browse the filesystem with the file manager"
 msgstr "ファイルマネージャーでファイルシステムを閲覧します"
index 4e65ce2..c8fb394 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Thunar 0.1.4svn\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-11-28 23:30+0900\n"
+"POT-Creation-Date: 2005-11-29 18:22+0100\n"
 "PO-Revision-Date: 2005-11-17 16:55+0900\n"
 "Last-Translator: Joao Pedrosa <joaopedrosa@gmail.com>\n"
 "Language-Team: os-cillation <info@os-cillation.com>\n"
@@ -147,7 +147,7 @@ msgid "copy of %s"
 msgstr "cópia de %s"
 
 #: ../thunar-vfs/thunar-vfs-xfer.c:158 ../thunar/thunar-list-model.c:703
-#: ../thunar/thunar-properties-dialog.c:617
+#: ../thunar/thunar-properties-dialog.c:629
 #, c-format
 msgid "link to %s"
 msgstr "link para %s"
@@ -259,7 +259,7 @@ msgid "Failed to create symbolic `%s'"
 msgstr "Falha em criar simbólico `%s'"
 
 #. setup application name
-#: ../thunar/main.c:47 ../thunar/thunar-window.c:391
+#: ../thunar/main.c:47 ../thunar/thunar-window.c:404
 msgid "Thunar"
 msgstr "Thunar"
 
@@ -347,31 +347,32 @@ msgstr "Falha em executar `%s'"
 msgid "Open <i>%s</i> and other files of type \"%s\" with:"
 msgstr "Abrir <i>%s</i> e outros arquivos do tipo \"%s\" com:"
 
-#: ../thunar/thunar-chooser-dialog.c:634
+#: ../thunar/thunar-chooser-dialog.c:634 ../thunar-uca/thunar-uca-editor.c:491
 msgid "Select an Application"
 msgstr "Selecione uma Aplicação"
 
-#: ../thunar/thunar-chooser-dialog.c:644
+#: ../thunar/thunar-chooser-dialog.c:644 ../thunar-uca/thunar-uca-editor.c:501
+#: ../thunar-uca/thunar-uca-editor.c:640
 msgid "All Files"
 msgstr "Todos os Arquivos"
 
-#: ../thunar/thunar-chooser-dialog.c:649
+#: ../thunar/thunar-chooser-dialog.c:649 ../thunar-uca/thunar-uca-editor.c:506
 msgid "Executable Files"
 msgstr "Arquivos Executáveis"
 
-#: ../thunar/thunar-chooser-dialog.c:664
+#: ../thunar/thunar-chooser-dialog.c:664 ../thunar-uca/thunar-uca-editor.c:521
 msgid "Perl Scripts"
 msgstr "Scripts de Perl"
 
-#: ../thunar/thunar-chooser-dialog.c:670
+#: ../thunar/thunar-chooser-dialog.c:670 ../thunar-uca/thunar-uca-editor.c:527
 msgid "Python Scripts"
 msgstr "Scripts de Python"
 
-#: ../thunar/thunar-chooser-dialog.c:676
+#: ../thunar/thunar-chooser-dialog.c:676 ../thunar-uca/thunar-uca-editor.c:533
 msgid "Ruby Scripts"
 msgstr "Scripts de Ruby"
 
-#: ../thunar/thunar-chooser-dialog.c:682
+#: ../thunar/thunar-chooser-dialog.c:682 ../thunar-uca/thunar-uca-editor.c:539
 msgid "Shell Scripts"
 msgstr "Scripts de Shell"
 
@@ -457,6 +458,8 @@ msgid "Details view"
 msgstr "Visualização de detalhes"
 
 #: ../thunar/thunar-dialogs.c:74 ../thunar/thunar-dialogs.c:78
+#: ../thunar-uca/thunar-uca-chooser.c:412
+#: ../thunar-uca/thunar-uca-provider.c:329
 #, c-format
 msgid "%s."
 msgstr "%s."
@@ -722,16 +725,16 @@ msgid "Number of visible files"
 msgstr "Número de arquivos visíveis"
 
 #: ../thunar/thunar-list-model.c:342 ../thunar/thunar-view.c:108
-#: ../thunar/thunar-window.c:258
+#: ../thunar/thunar-window.c:268
 msgid "Show hidden"
 msgstr "Mostrar invisíveis"
 
 #: ../thunar/thunar-list-model.c:343 ../thunar/thunar-view.c:109
-#: ../thunar/thunar-window.c:259
+#: ../thunar/thunar-window.c:269
 msgid "Whether to display hidden files"
 msgstr "Se deve-se mostrar arquivos invisíveis"
 
-#: ../thunar/thunar-list-model.c:701 ../thunar/thunar-properties-dialog.c:615
+#: ../thunar/thunar-list-model.c:701 ../thunar/thunar-properties-dialog.c:627
 msgid "broken link"
 msgstr "ligação quebrada"
 
@@ -771,11 +774,11 @@ msgid_plural "%d items selected (%s)"
 msgstr[0] "%d item selecionado"
 msgstr[1] "%d ítens selecionados"
 
-#: ../thunar/thunar-location-buttons.c:256
+#: ../thunar/thunar-location-buttons.c:258
 msgid "Spacing"
 msgstr "Espaçamento"
 
-#: ../thunar/thunar-location-buttons.c:257
+#: ../thunar/thunar-location-buttons.c:259
 msgid "The amount of space between the path buttons"
 msgstr "A quantidade de espaço entre os botões de caminho"
 
@@ -787,7 +790,7 @@ msgstr "Abrir Endereço"
 msgid "_Location:"
 msgstr "_Endereço:"
 
-#: ../thunar/thunar-navigator.c:135 ../thunar/thunar-window.c:245
+#: ../thunar/thunar-navigator.c:135 ../thunar/thunar-window.c:255
 msgid "Current directory"
 msgstr "Diretório atual"
 
@@ -817,45 +820,45 @@ msgstr "O arquivo mostrado atualmente"
 msgid "The icon size for the path entry"
 msgstr "O tamanho de ícone para a entrada de caminho"
 
-#: ../thunar/thunar-preferences-dialog.c:177
+#: ../thunar/thunar-preferences-dialog.c:185
 msgid "File Manager Preferences"
 msgstr "Preferências de Gerenciador de Arquivo"
 
-#: ../thunar/thunar-preferences-dialog.c:193
+#: ../thunar/thunar-preferences-dialog.c:201
 msgid "<b>Default View</b>"
 msgstr "<b>Visualização Padrão</b>"
 
-#: ../thunar/thunar-preferences-dialog.c:204
+#: ../thunar/thunar-preferences-dialog.c:212
 msgid "View _new folders using:"
 msgstr "Visualizar _novas pastas usando:"
 
-#: ../thunar/thunar-preferences-dialog.c:209
+#: ../thunar/thunar-preferences-dialog.c:217
 msgid "Icon View"
 msgstr "Visualização de Ícone"
 
-#: ../thunar/thunar-preferences-dialog.c:210
+#: ../thunar/thunar-preferences-dialog.c:218
 msgid "Detailed List View"
 msgstr "Visualização de Lista Detalhada"
 
-#: ../thunar/thunar-preferences-dialog.c:211
+#: ../thunar/thunar-preferences-dialog.c:219
 msgid "Last Active View"
 msgstr "Última Visualização Ativa"
 
-#: ../thunar/thunar-preferences-dialog.c:226
+#: ../thunar/thunar-preferences-dialog.c:234
 msgid "Sort _folders before files"
 msgstr "Ordenar _pastas antes dos arquivos"
 
-#: ../thunar/thunar-preferences-dialog.c:228
+#: ../thunar/thunar-preferences-dialog.c:236
 msgid "Select this option to list folders before files when you sort a folder."
 msgstr ""
 "Selecione esta opção para listar pastas antes dos arquivos quando você "
 "ordenar uma pasta."
 
-#: ../thunar/thunar-preferences-dialog.c:232
+#: ../thunar/thunar-preferences-dialog.c:240
 msgid "Show hidden and _backup files"
 msgstr "Mostrar arquivos de _backup e invisíveis"
 
-#: ../thunar/thunar-preferences-dialog.c:234
+#: ../thunar/thunar-preferences-dialog.c:242
 msgid ""
 "Select this option to show hidden and backup files in new windows. The first "
 "character in a hidden filename is a period (.). The last character in a "
@@ -865,15 +868,15 @@ msgstr ""
 "janelas. O primeiro caractere em um arquivo invisível é um ponto (.). O "
 "último caractere em um arquivo de backup é um tio (~)."
 
-#: ../thunar/thunar-preferences-dialog.c:244
+#: ../thunar/thunar-preferences-dialog.c:252
 msgid "<b>Icon View</b>"
 msgstr "<b>Visualização de Ícone</b>"
 
-#: ../thunar/thunar-preferences-dialog.c:255
+#: ../thunar/thunar-preferences-dialog.c:263
 msgid "_Text beside icons"
 msgstr "_Texto ao lado dos ícones"
 
-#: ../thunar/thunar-preferences-dialog.c:257
+#: ../thunar/thunar-preferences-dialog.c:265
 msgid ""
 "Select this option to place the icon captions for items beside the icon "
 "rather than below the icon."
@@ -944,62 +947,62 @@ msgstr[1] "(Restando %lu segundos)"
 msgid "The file displayed by the dialog"
 msgstr "O arquivo mostrado pelo diálogo"
 
-#: ../thunar/thunar-properties-dialog.c:209
+#: ../thunar/thunar-properties-dialog.c:217
 msgid "General"
 msgstr "Geral"
 
-#: ../thunar/thunar-properties-dialog.c:226
+#: ../thunar/thunar-properties-dialog.c:234
 msgid "Name:"
 msgstr "Nome:"
 
 #.
 #. Second box (kind)
 #.
-#: ../thunar/thunar-properties-dialog.c:251
+#: ../thunar/thunar-properties-dialog.c:259
 msgid "Kind:"
 msgstr "Tipo:"
 
 #.
 #. Third box (modified, accessed)
 #.
-#: ../thunar/thunar-properties-dialog.c:276
+#: ../thunar/thunar-properties-dialog.c:284
 msgid "Modified:"
 msgstr "Modificado:"
 
-#: ../thunar/thunar-properties-dialog.c:289
+#: ../thunar/thunar-properties-dialog.c:297
 msgid "Accessed:"
 msgstr "Acessado:"
 
 #.
 #. Fourth box (volume, size)
 #.
-#: ../thunar/thunar-properties-dialog.c:313
+#: ../thunar/thunar-properties-dialog.c:321
 msgid "Volume:"
 msgstr "Volume:"
 
-#: ../thunar/thunar-properties-dialog.c:336
+#: ../thunar/thunar-properties-dialog.c:344
 msgid "Size:"
 msgstr "Tamanho:"
 
 #.
 #. Emblem chooser
 #.
-#: ../thunar/thunar-properties-dialog.c:360
+#: ../thunar/thunar-properties-dialog.c:368
 msgid "Emblems"
 msgstr "Emblemas"
 
-#: ../thunar/thunar-properties-dialog.c:592
+#: ../thunar/thunar-properties-dialog.c:604
 #, c-format
 msgid "%s Info"
 msgstr "Informação %s"
 
-#: ../thunar/thunar-properties-dialog.c:673
+#: ../thunar/thunar-properties-dialog.c:685
 #, c-format
 msgid "%s (%u Bytes)"
 msgstr "%s (%u Bytes)"
 
 #. display an error message
-#: ../thunar/thunar-properties-dialog.c:719
+#: ../thunar/thunar-properties-dialog.c:731
 #: ../thunar/thunar-standard-view.c:2175
 #, c-format
 msgid "Failed to rename `%s'"
@@ -1074,7 +1077,8 @@ msgid "Select all files in this window"
 msgstr "Selecionar todos os arquivos nesta janela"
 
 #: ../thunar/thunar-standard-view.c:263
-msgid "Select _by Pattern"
+#, fuzzy
+msgid "Select _by Pattern..."
 msgstr "Selecionar por _Padrão"
 
 #: ../thunar/thunar-standard-view.c:263
@@ -1235,7 +1239,7 @@ msgid "Text to be displayed in the statusbar associated with this view"
 msgstr ""
 "Texto a ser mostrado na barra de status associada com esta visualização"
 
-#: ../thunar/thunar-view.c:122 ../thunar/thunar-window.c:273
+#: ../thunar/thunar-view.c:122 ../thunar/thunar-window.c:283
 msgid "UI manager"
 msgstr "Gerenciador de Interface de Usuário"
 
@@ -1243,173 +1247,175 @@ msgstr "Gerenciador de Interface de Usuário"
 msgid "UI manager of the surrounding window"
 msgstr "Gerenciador de Interface de Usuário da janela circundante"
 
-#: ../thunar/thunar-window.c:156
+#: ../thunar/thunar-window.c:166
 msgid "_File"
 msgstr "_Arquivo"
 
-#: ../thunar/thunar-window.c:157
+#: ../thunar/thunar-window.c:167
 msgid "Open New _Window"
 msgstr "Abrir Nova _Janela"
 
-#: ../thunar/thunar-window.c:157
+#: ../thunar/thunar-window.c:167
 msgid "Open a new Thunar window for the displayed location"
 msgstr "Abrir uma nova janela Thunar para o endereço mostrado"
 
-#: ../thunar/thunar-window.c:158
+#: ../thunar/thunar-window.c:168
 msgid "Close _All Windows"
 msgstr "Fechar Tod_as as Janelas"
 
-#: ../thunar/thunar-window.c:158
+#: ../thunar/thunar-window.c:168
 msgid "Close all Thunar windows"
 msgstr "Fechar todas as janelas Thunar"
 
-#: ../thunar/thunar-window.c:159
+#: ../thunar/thunar-window.c:169
 msgid "_Close"
 msgstr "Fe_char"
 
-#: ../thunar/thunar-window.c:159
+#: ../thunar/thunar-window.c:169
 msgid "Close this window"
 msgstr "Fechar esta janela"
 
-#: ../thunar/thunar-window.c:160
+#: ../thunar/thunar-window.c:170
 msgid "_Edit"
 msgstr "_Editar"
 
-#: ../thunar/thunar-window.c:161
-msgid "_Preferences"
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Pr_eferences..."
 msgstr "_Preferências"
 
-#: ../thunar/thunar-window.c:161
-msgid "Edit Thunar Preferences"
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Edit Thunars Preferences"
 msgstr "Editar Preferências do Thunar"
 
-#: ../thunar/thunar-window.c:162
+#: ../thunar/thunar-window.c:172
 msgid "_View"
 msgstr "_Visualização"
 
-#: ../thunar/thunar-window.c:163
+#: ../thunar/thunar-window.c:173
 msgid "_Location Selector"
 msgstr "_Seletor de Endereço"
 
-#: ../thunar/thunar-window.c:164
+#: ../thunar/thunar-window.c:174
 msgid "_Side Pane"
 msgstr "_Painel Lateral"
 
-#: ../thunar/thunar-window.c:165
+#: ../thunar/thunar-window.c:175
 msgid "_Go"
 msgstr "_Ir"
 
-#: ../thunar/thunar-window.c:166
+#: ../thunar/thunar-window.c:176
 msgid "Open _Parent"
 msgstr "Abrir _Pai"
 
-#: ../thunar/thunar-window.c:166
+#: ../thunar/thunar-window.c:176
 msgid "Open the parent folder"
 msgstr "Abrir a pasta pai"
 
-#: ../thunar/thunar-window.c:167
+#: ../thunar/thunar-window.c:177
 msgid "_Home"
 msgstr "_Pasta Inicial"
 
-#: ../thunar/thunar-window.c:167
+#: ../thunar/thunar-window.c:177
 msgid "Open the home folder"
 msgstr "Abrir a pasta inicial"
 
-#: ../thunar/thunar-window.c:168
+#: ../thunar/thunar-window.c:178
 msgid "Open _Location..."
 msgstr "Abrir _Endereço..."
 
-#: ../thunar/thunar-window.c:168
+#: ../thunar/thunar-window.c:178
 msgid "Specify a location to open"
 msgstr "Especifique um endereço para abrir"
 
-#: ../thunar/thunar-window.c:169
+#: ../thunar/thunar-window.c:179
 msgid "_Help"
 msgstr "Aj_uda"
 
-#: ../thunar/thunar-window.c:171 ../thunar/thunar-window.c:173
+#: ../thunar/thunar-window.c:181 ../thunar/thunar-window.c:183
 msgid "_About"
 msgstr "_Sobre"
 
-#: ../thunar/thunar-window.c:171 ../thunar/thunar-window.c:173
+#: ../thunar/thunar-window.c:181 ../thunar/thunar-window.c:183
 msgid "Display information about Thunar"
 msgstr "Mostrar informação sobre o Thunar"
 
-#: ../thunar/thunar-window.c:179
+#: ../thunar/thunar-window.c:189
 msgid "Show _Hidden Files"
 msgstr "Mostrar Arquivos Invisíveis"
 
-#: ../thunar/thunar-window.c:179
+#: ../thunar/thunar-window.c:189
 msgid "Toggles the display of hidden files in the current window"
 msgstr "Alterna a mostragem de arquivos invisíveis na janela atual"
 
-#: ../thunar/thunar-window.c:246
+#: ../thunar/thunar-window.c:256
 msgid "The directory currently displayed within this window"
 msgstr "O diretório atualmente mostrado dentro desta janela"
 
-#: ../thunar/thunar-window.c:274
+#: ../thunar/thunar-window.c:284
 msgid "The UI manager used within this window"
 msgstr "O gerenciador de interface de usuário usado dentro desta janela"
 
 #.
 #. * add the side pane options
 #.
-#: ../thunar/thunar-window.c:329
+#: ../thunar/thunar-window.c:342
 msgid "_Favourites"
 msgstr "_Favoritos"
 
-#: ../thunar/thunar-window.c:335 ../thunar/thunar-window.c:358
+#: ../thunar/thunar-window.c:348 ../thunar/thunar-window.c:371
 msgid "_Hidden"
 msgstr "_Invisíveis"
 
 #.
 #. * add the location selector options
 #.
-#: ../thunar/thunar-window.c:344
+#: ../thunar/thunar-window.c:357
 msgid "_Pathbar Style"
 msgstr "E_stilo da Barra de Caminho"
 
-#: ../thunar/thunar-window.c:345
+#: ../thunar/thunar-window.c:358
 msgid "Modern approach with buttons that correspond to folders"
 msgstr "Estilo moderno com botões que correspondem a pastas"
 
-#: ../thunar/thunar-window.c:351
+#: ../thunar/thunar-window.c:364
 msgid "_Toolbar Style"
 msgstr "Es_tilo Barra de Ferramentas"
 
-#: ../thunar/thunar-window.c:352
+#: ../thunar/thunar-window.c:365
 msgid "Traditional approach with location bar and navigation buttons"
 msgstr "Estilo tradicional com barra de endereço e botões de navegação"
 
-#: ../thunar/thunar-window.c:358
+#: ../thunar/thunar-window.c:371
 msgid "Don't display any location selector"
 msgstr "Não mostre qualquer seletor de endereço"
 
 #.
 #. * add view options
 #.
-#: ../thunar/thunar-window.c:367
+#: ../thunar/thunar-window.c:380
 msgid "View as _Icons"
 msgstr "Visualizar como Ícones"
 
-#: ../thunar/thunar-window.c:367
+#: ../thunar/thunar-window.c:380
 msgid "Display folder content in an icon view"
 msgstr "Mostrar conteúdo de pasta em uma visualização de ícone"
 
-#: ../thunar/thunar-window.c:374
+#: ../thunar/thunar-window.c:387
 msgid "View as _Detailed List"
 msgstr "Visualizar como Lista _Detalhada"
 
-#: ../thunar/thunar-window.c:374
+#: ../thunar/thunar-window.c:387
 msgid "Display folder content in a detailed list view"
 msgstr "Mostrar conteúdo de pasta em uma visualização de lista detalhada"
 
 #. display an error to the user
-#: ../thunar/thunar-window.c:868
+#: ../thunar/thunar-window.c:951
 msgid "Failed to open home directory"
 msgstr "Falha em abrir diretório inicial"
 
-#: ../thunar/thunar-window.c:943
+#: ../thunar/thunar-window.c:1026
 msgid ""
 "Thunar is a fast and easy to use file manager\n"
 "for the Xfce Desktop Environment."
@@ -1417,7 +1423,7 @@ msgstr ""
 "Thunar é um gerenciador de arquivos fácil de usar e rápido\n"
 "para o Ambiente de Área de Trabalho Xfce."
 
-#: ../thunar/thunar-window.c:948
+#: ../thunar/thunar-window.c:1031
 msgid "translator-credits"
 msgstr "Créditos de tradutores"
 
@@ -1445,6 +1451,267 @@ msgstr "Residente"
 msgid "Don't unload the plugin from memory"
 msgstr ""
 
+#: ../thunar-uca/thunar-uca-chooser.c:125
+msgid "Custom Actions"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:142
+msgid ""
+"You can configure custom actions that will appear in the\n"
+"file managers context menus for certain kinds of files."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:192
+msgid "Add a new custom action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:202
+#, fuzzy
+msgid "Edit the currently selected action."
+msgstr "O arquivo mostrado atualmente"
+
+#: ../thunar-uca/thunar-uca-chooser.c:212
+#, fuzzy
+msgid "Delete the currently selected action."
+msgstr "Deletar os arquivos selecionados"
+
+#: ../thunar-uca/thunar-uca-chooser.c:222
+msgid "Move the currently selection action up by one row."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:232
+msgid "Move the currently selection action down by one row."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:362
+msgid "Edit Action"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:362
+msgid "Create Action"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-chooser.c:411
+#, fuzzy
+msgid "Failed to save actions to disk."
+msgstr "Falha em carregar aplicação do arquivo %s"
+
+#.
+#. Basic
+#.
+#: ../thunar-uca/thunar-uca-editor.c:136
+msgid "Basic"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:145
+#, fuzzy
+msgid "_Name:"
+msgstr "Nome:"
+
+#: ../thunar-uca/thunar-uca-editor.c:150
+#, fuzzy
+msgid "The name of the action that will be displayed in the context menu."
+msgstr "O texto principal a ser mostrado na barra de status"
+
+#: ../thunar-uca/thunar-uca-editor.c:163
+#, fuzzy
+msgid "_Description:"
+msgstr "_Endereço:"
+
+#: ../thunar-uca/thunar-uca-editor.c:168
+msgid ""
+"The description of the action that will be displayed as tooltip in the "
+"statusbar when selecting the item from the context menu."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:181
+msgid "_Command:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:190
+msgid ""
+"The command (including the necessary parameters) to perform the action. See "
+"the command parameter legend below for a list of supported parameter "
+"variables, which will be substituted when launching the command. When upper-"
+"case letters (e.g. %F, %D, %N) are used, the action will be applicable even "
+"if more than one item is selected. Else the action will only be applicable "
+"if exactly one item is selected."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:201
+msgid "Browse the file system to select an application to use for this action."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:217
+#, fuzzy
+msgid "_Icon:"
+msgstr "_Endereço:"
+
+#. setup a label to tell that no icon was selected
+#: ../thunar-uca/thunar-uca-editor.c:225 ../thunar-uca/thunar-uca-editor.c:770
+msgid "No icon"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:226
+msgid ""
+"Click this button to select an icon file that will be displayed in the "
+"context menu in addition to the action name chosen above."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:257
+msgid ""
+"The following command parameters will be\n"
+"substituted when launching the action:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:295
+#, fuzzy
+msgid "the path to the first selected file"
+msgstr "Visualizar as propriedades do arquivo selecionado"
+
+#: ../thunar-uca/thunar-uca-editor.c:307
+#, fuzzy
+msgid "the paths to all selected files"
+msgstr "Recortar os arquivos selecionados"
+
+#: ../thunar-uca/thunar-uca-editor.c:319
+#, c-format
+msgid "directory containing the file that is passed in %f"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:331
+#, c-format
+msgid "directories containing the files that are passed in %F"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:343
+msgid "the first selected filename (without path)"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:355
+msgid "the selected filenames (without paths)"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:369
+msgid "Appearance Conditions"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:377
+#, fuzzy
+msgid "_File Pattern:"
+msgstr "Padrão:"
+
+#: ../thunar-uca/thunar-uca-editor.c:382
+msgid ""
+"Enter a list of patterns that will be used to determine whether this action "
+"should be displayed for a selected file. If you specify more than one "
+"pattern here, the list items must be separated with semicolons (e.g. *.txt;*."
+"doc)."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:401
+msgid "Appears if selection contains:"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:414
+#, fuzzy
+msgid "_Directories"
+msgstr "Deletando diretórios..."
+
+#: ../thunar-uca/thunar-uca-editor.c:418
+#, fuzzy
+msgid "_Audio Files"
+msgstr "_Copiar Arquivos"
+
+#: ../thunar-uca/thunar-uca-editor.c:422
+#, fuzzy
+msgid "_Image Files"
+msgstr "C_olar Arquivos"
+
+#: ../thunar-uca/thunar-uca-editor.c:426
+#, fuzzy
+msgid "_Text Files"
+msgstr "Recor_tar Arquivos"
+
+#: ../thunar-uca/thunar-uca-editor.c:431
+#, fuzzy
+msgid "_Video Files"
+msgstr "_Copiar Arquivos"
+
+#: ../thunar-uca/thunar-uca-editor.c:435
+#, fuzzy
+msgid "_Other Files"
+msgstr "C_olar Arquivos"
+
+#: ../thunar-uca/thunar-uca-editor.c:452
+msgid ""
+"This page lists the conditions under which the\n"
+"action will appear in the file managers context\n"
+"menus. The file patterns are specified as a list\n"
+"of simple file patterns separated by semicolons\n"
+"(e.g. *.txt;*.doc). For an action to appear in the\n"
+"context menu of a file or folder, atleast one of\n"
+"these patterns must match the name of the file\n"
+"or folder. Additionally, you can specify that the\n"
+"action should only appear for certain kinds of\n"
+"files."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-editor.c:630
+#, fuzzy
+msgid "Select an Icon"
+msgstr "Selecione uma Aplicação"
+
+#: ../thunar-uca/thunar-uca-editor.c:645
+#, fuzzy
+msgid "Image Files"
+msgstr "C_olar Arquivos"
+
+#: ../thunar-uca/thunar-uca-model.c:762
+#, c-format
+msgid "Unknown element <%s>"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:780
+msgid "End element handler called while in root context"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:868
+#, c-format
+msgid "Unknown closing element <%s>"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-model.c:1293
+#, fuzzy
+msgid "Failed to determine save location for uca.xml"
+msgstr "Falha em determinar informação de arquivo para `%s'"
+
+#: ../thunar-uca/thunar-uca-model.c:1409
+msgid "Command not configured"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:155
+msgid "Configure c_ustom actions..."
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:156
+msgid ""
+"Setup custom actions that will appear in the file managers context menus"
+msgstr ""
+
+#: ../thunar-uca/thunar-uca-provider.c:328
+#, fuzzy, c-format
+msgid "Failed to launch action `%s'."
+msgstr "Falha em lançar operação"
+
+#: ../thunar-uca/uca.xml.in.h:1
+msgid "Example for a custom action"
+msgstr ""
+
+#: ../thunar-uca/uca.xml.in.h:2
+msgid "Open Terminal Here"
+msgstr ""
+
 #: ../Thunar.desktop.in.h:1
 msgid "Browse the filesystem with the file manager"
 msgstr "Navegar o sistema de arquivos com o gerenciar de arquivos"
diff --git a/thunar-uca/Makefile.am b/thunar-uca/Makefile.am
new file mode 100644 (file)
index 0000000..e98cc28
--- /dev/null
@@ -0,0 +1,51 @@
+# $Id$
+
+INCLUDES =                                                             \
+       -I$(top_builddir)                                               \
+       -I$(top_srcdir)                                                 \
+       -DBINDIR=\"$(bindir)\"                                          \
+       -DDATADIR=\"$(datadir)\"                                        \
+       -DEXO_API_SUBJECT_TO_CHANGE                                     \
+       -DG_LOG_DOMAIN=\"thunar-uca\"                                   \
+       $(PLATFORM_CPPFLAGS)
+
+extensionsdir = $(libdir)/thunarx-$(THUNAR_VERSION_API)
+extensions_LTLIBRARIES =                                               \
+       thunar-uca.la
+
+thunar_uca_la_SOURCES =                                                        \
+       thunar-uca-chooser.c                                            \
+       thunar-uca-chooser.h                                            \
+       thunar-uca-context.c                                            \
+       thunar-uca-context.h                                            \
+       thunar-uca-editor.c                                             \
+       thunar-uca-editor.h                                             \
+       thunar-uca-model.c                                              \
+       thunar-uca-model.h                                              \
+       thunar-uca-plugin.c                                             \
+       thunar-uca-provider.c                                           \
+       thunar-uca-provider.h
+
+thunar_uca_la_CFLAGS =                                                 \
+       $(EXO_CFLAGS)                                                   \
+       $(PLATFORM_CFLAGS)
+
+thunar_uca_la_LDFLAGS =                                                        \
+       -avoid-version                                                  \
+       -export-dynamic                                                 \
+       -module                                                         \
+       $(PLATFORM_LDFLAGS)
+
+defaultsdir = $(sysconfdir)/xdg/Thunar
+defaults_in_files = uca.xml.in
+defaults_DATA = $(defaults_in_files:.xml.in=.xml)
+@INTLTOOL_XML_RULE@
+
+EXTRA_DIST =                                                           \
+       README                                                          \
+       $(defaults_in_files)
+
+CLEANFILES =                                                           \
+       $(defaults_DATA)
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
diff --git a/thunar-uca/README b/thunar-uca/README
new file mode 100644 (file)
index 0000000..922cbff
--- /dev/null
@@ -0,0 +1,38 @@
+Thunar User Customizable Actions (thunar-uca)
+=============================================
+
+Thunar-uca is an extension to Thunar, which enables sophisticated users to add
+additional actions to the file managers context menus, without having to write
+their own extensions for each and every action they want to use.
+
+By default the thunar-uca extension will be installed, but as with every
+extension, it will slightly increase the resource usage of Thunar (this
+shouldn't be a real problem unless your targeting an embedded system), and
+so you pass `--disable-uca-plugin' to configure and the plugin won't be built
+and installed. Since it is an extension, you can also easily uninstall it
+afterwards by removing the thunar-uca.so file from the lib/thunarx-1/ directory
+of your installation (be sure to quit Thunar before removing files though).
+
+To actually manage the actions open the "Edit" menu in the menu bar of a
+Thunar window and select "Configure Custom Actions...". A dialog will appear
+which lists the currently configured actions.
+
+
+List of valid command parameter variables
+=========================================
+
+  %f   The path of the first selected file.
+
+  %F   The paths to all selected files.
+
+  %u   The URI of the first selected file (using the file:-URI scheme).
+
+  %U   The URIs of all selected files (using the file:-URI scheme).
+
+  %d   The directory of the first selected file.
+
+  %D   The directories to all selected files.
+
+  %n   The name of the first selected file (without the path).
+
+  %N   The names of all selected files (without the paths).
diff --git a/thunar-uca/thunar-uca-chooser.c b/thunar-uca/thunar-uca-chooser.c
new file mode 100644 (file)
index 0000000..8a6d00d
--- /dev/null
@@ -0,0 +1,512 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny@xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib/gi18n-lib.h>
+
+#include <gdk/gdkkeysyms.h>
+
+#include <thunar-uca/thunar-uca-chooser.h>
+#include <thunar-uca/thunar-uca-editor.h>
+#include <thunar-uca/thunar-uca-model.h>
+
+
+
+static void     thunar_uca_chooser_class_init         (ThunarUcaChooserClass  *klass);
+static void     thunar_uca_chooser_init               (ThunarUcaChooser       *uca_chooser);
+static void     thunar_uca_chooser_finalize           (GObject                *object);
+static gboolean thunar_uca_chooser_key_press_event    (GtkWidget              *widget,
+                                                       GdkEventKey            *event);
+static void     thunar_uca_chooser_response           (GtkDialog              *dialog,
+                                                       gint                    response);
+static void     thunar_uca_chooser_exchange           (ThunarUcaChooser       *uca_chooser,
+                                                       GtkTreeSelection       *selection,
+                                                       GtkTreeModel           *model,
+                                                       GtkTreeIter            *iter_a,
+                                                       GtkTreeIter            *iter_b);
+static void     thunar_uca_chooser_open_editor        (ThunarUcaChooser       *uca_chooser,
+                                                       gboolean                edit);
+static void     thunar_uca_chooser_save               (ThunarUcaChooser       *uca_chooser,
+                                                       ThunarUcaModel         *uca_model);
+static void     thunar_uca_chooser_selection_changed  (ThunarUcaChooser       *uca_chooser,
+                                                       GtkTreeSelection       *selection);
+static void     thunar_uca_chooser_add_clicked        (ThunarUcaChooser       *uca_chooser);
+static void     thunar_uca_chooser_edit_clicked       (ThunarUcaChooser       *uca_chooser);
+static void     thunar_uca_chooser_delete_clicked     (ThunarUcaChooser       *uca_chooser);
+static void     thunar_uca_chooser_up_clicked         (ThunarUcaChooser       *uca_chooser);
+static void     thunar_uca_chooser_down_clicked       (ThunarUcaChooser       *uca_chooser);
+
+
+
+struct _ThunarUcaChooserClass
+{
+  GtkDialogClass __parent__;
+};
+
+struct _ThunarUcaChooser
+{
+  GtkDialog __parent__;
+
+  GtkTooltips *tooltips;
+
+  GtkWidget   *treeview;
+  GtkWidget   *add_button;
+  GtkWidget   *edit_button;
+  GtkWidget   *delete_button;
+  GtkWidget   *up_button;
+  GtkWidget   *down_button;
+};
+
+
+
+THUNARX_DEFINE_TYPE (ThunarUcaChooser, thunar_uca_chooser, GTK_TYPE_DIALOG);
+
+
+
+static void
+thunar_uca_chooser_class_init (ThunarUcaChooserClass *klass)
+{
+  GtkDialogClass *gtkdialog_class;
+  GtkWidgetClass *gtkwidget_class;
+  GObjectClass   *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_uca_chooser_finalize;
+
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->key_press_event = thunar_uca_chooser_key_press_event;
+
+  gtkdialog_class = GTK_DIALOG_CLASS (klass);
+  gtkdialog_class->response = thunar_uca_chooser_response;
+}
+
+
+
+static void
+thunar_uca_chooser_init (ThunarUcaChooser *uca_chooser)
+{
+  GtkTreeViewColumn *column;
+  GtkTreeSelection  *selection;
+  GtkCellRenderer   *renderer;
+  ThunarUcaModel    *uca_model;
+  GtkWidget         *image;
+  GtkWidget         *label;
+  GtkWidget         *hbox;
+  GtkWidget         *swin;
+  GtkWidget         *vbox;
+
+  /* configure the dialog window */
+  gtk_dialog_add_button (GTK_DIALOG (uca_chooser), GTK_STOCK_HELP, GTK_RESPONSE_HELP);
+  gtk_dialog_add_button (GTK_DIALOG (uca_chooser), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
+  gtk_dialog_set_default_response (GTK_DIALOG (uca_chooser), GTK_RESPONSE_CLOSE);
+  gtk_dialog_set_has_separator (GTK_DIALOG (uca_chooser), FALSE);
+  gtk_window_set_default_size (GTK_WINDOW (uca_chooser), 500, 350);
+  gtk_window_set_destroy_with_parent (GTK_WINDOW (uca_chooser), TRUE);
+  gtk_window_set_title (GTK_WINDOW (uca_chooser), _("Custom Actions"));
+
+  /* allocate shared tooltips object */
+  uca_chooser->tooltips = gtk_tooltips_new ();
+  g_object_ref (G_OBJECT (uca_chooser->tooltips));
+  gtk_object_sink (GTK_OBJECT (uca_chooser->tooltips));
+
+  hbox = gtk_hbox_new (FALSE, 3);
+  gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (uca_chooser)->vbox), hbox, FALSE, TRUE, 0);
+  gtk_widget_show (hbox);
+
+  image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DND);
+  gtk_misc_set_alignment (GTK_MISC (image), 0.5f, 0.0f);
+  gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
+  gtk_widget_show (image);
+
+  label = gtk_label_new (_("You can configure custom actions that will appear in the\n"
+                           "file managers context menus for certain kinds of files."));
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.5f);
+  gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
+  gtk_widget_show (label);
+
+  hbox = gtk_hbox_new (FALSE, 3);
+  gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (uca_chooser)->vbox), hbox, TRUE, TRUE, 0);
+  gtk_widget_show (hbox);
+
+  swin = gtk_scrolled_window_new (NULL, NULL);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (swin), GTK_SHADOW_IN);
+  gtk_box_pack_start (GTK_BOX (hbox), swin, TRUE, TRUE, 0);
+  gtk_widget_show (swin);
+
+  uca_chooser->treeview = gtk_tree_view_new ();
+  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (uca_chooser->treeview), FALSE);
+  gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (uca_chooser->treeview), TRUE);
+  gtk_container_add (GTK_CONTAINER (swin), uca_chooser->treeview);
+  g_signal_connect_swapped (G_OBJECT (uca_chooser->treeview), "row-activated", G_CALLBACK (thunar_uca_chooser_edit_clicked), uca_chooser);
+  gtk_widget_show (uca_chooser->treeview);
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (uca_chooser->treeview));
+  gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+  g_signal_connect_swapped (G_OBJECT (selection), "changed", G_CALLBACK (thunar_uca_chooser_selection_changed), uca_chooser);
+
+  uca_model = thunar_uca_model_get_default ();
+  gtk_tree_view_set_model (GTK_TREE_VIEW (uca_chooser->treeview), GTK_TREE_MODEL (uca_model));
+  g_object_unref (G_OBJECT (uca_model));
+
+  column = gtk_tree_view_column_new ();
+  gtk_tree_view_column_set_expand (column, TRUE);
+  gtk_tree_view_column_set_resizable (column, FALSE);
+  gtk_tree_view_append_column (GTK_TREE_VIEW (uca_chooser->treeview), column);
+
+  renderer = g_object_new (GTK_TYPE_CELL_RENDERER_PIXBUF, "stock-size", GTK_ICON_SIZE_DND, "xpad", 2, "ypad", 2, NULL);
+  gtk_tree_view_column_pack_start (column, renderer, FALSE);
+  gtk_tree_view_column_set_attributes (column, renderer, "stock-id", THUNAR_UCA_MODEL_COLUMN_STOCK_ID, NULL);
+
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_column_pack_start (column, renderer, TRUE);
+  gtk_tree_view_column_set_attributes (column, renderer, "markup", THUNAR_UCA_MODEL_COLUMN_STOCK_LABEL, NULL);
+
+  vbox = gtk_vbox_new (FALSE, 3);
+  gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
+  gtk_widget_show (vbox);
+
+  uca_chooser->add_button = gtk_button_new ();
+  gtk_tooltips_set_tip (uca_chooser->tooltips, uca_chooser->add_button, _("Add a new custom action."), NULL);
+  gtk_box_pack_start (GTK_BOX (vbox), uca_chooser->add_button, FALSE, FALSE, 0);
+  g_signal_connect_swapped (G_OBJECT (uca_chooser->add_button), "clicked", G_CALLBACK (thunar_uca_chooser_add_clicked), uca_chooser);
+  gtk_widget_show (uca_chooser->add_button);
+
+  image = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_BUTTON);
+  gtk_container_add (GTK_CONTAINER (uca_chooser->add_button), image);
+  gtk_widget_show (image);
+
+  uca_chooser->edit_button = gtk_button_new ();
+  gtk_tooltips_set_tip (uca_chooser->tooltips, uca_chooser->edit_button, _("Edit the currently selected action."), NULL);
+  gtk_box_pack_start (GTK_BOX (vbox), uca_chooser->edit_button, FALSE, FALSE, 0);
+  g_signal_connect_swapped (G_OBJECT (uca_chooser->edit_button), "clicked", G_CALLBACK (thunar_uca_chooser_edit_clicked), uca_chooser);
+  gtk_widget_show (uca_chooser->edit_button);
+
+  image = gtk_image_new_from_stock (GTK_STOCK_EDIT, GTK_ICON_SIZE_BUTTON);
+  gtk_container_add (GTK_CONTAINER (uca_chooser->edit_button), image);
+  gtk_widget_show (image);
+
+  uca_chooser->delete_button = gtk_button_new ();
+  gtk_tooltips_set_tip (uca_chooser->tooltips, uca_chooser->delete_button, _("Delete the currently selected action."), NULL);
+  gtk_box_pack_start (GTK_BOX (vbox), uca_chooser->delete_button, FALSE, FALSE, 0);
+  g_signal_connect_swapped (G_OBJECT (uca_chooser->delete_button), "clicked", G_CALLBACK (thunar_uca_chooser_delete_clicked), uca_chooser);
+  gtk_widget_show (uca_chooser->delete_button);
+
+  image = gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_BUTTON);
+  gtk_container_add (GTK_CONTAINER (uca_chooser->delete_button), image);
+  gtk_widget_show (image);
+
+  uca_chooser->up_button = gtk_button_new ();
+  gtk_tooltips_set_tip (uca_chooser->tooltips, uca_chooser->up_button, _("Move the currently selection action up by one row."), NULL);
+  gtk_box_pack_start (GTK_BOX (vbox), uca_chooser->up_button, FALSE, FALSE, 0);
+  g_signal_connect_swapped (G_OBJECT (uca_chooser->up_button), "clicked", G_CALLBACK (thunar_uca_chooser_up_clicked), uca_chooser);
+  gtk_widget_show (uca_chooser->up_button);
+
+  image = gtk_image_new_from_stock (GTK_STOCK_GO_UP, GTK_ICON_SIZE_BUTTON);
+  gtk_container_add (GTK_CONTAINER (uca_chooser->up_button), image);
+  gtk_widget_show (image);
+
+  uca_chooser->down_button = gtk_button_new ();
+  gtk_tooltips_set_tip (uca_chooser->tooltips, uca_chooser->down_button, _("Move the currently selection action down by one row."), NULL);
+  gtk_box_pack_start (GTK_BOX (vbox), uca_chooser->down_button, FALSE, FALSE, 0);
+  g_signal_connect_swapped (G_OBJECT (uca_chooser->down_button), "clicked", G_CALLBACK (thunar_uca_chooser_down_clicked), uca_chooser);
+  gtk_widget_show (uca_chooser->down_button);
+
+  image = gtk_image_new_from_stock (GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_BUTTON);
+  gtk_container_add (GTK_CONTAINER (uca_chooser->down_button), image);
+  gtk_widget_show (image);
+}
+
+
+
+static void
+thunar_uca_chooser_finalize (GObject *object)
+{
+  ThunarUcaChooser *uca_chooser = THUNAR_UCA_CHOOSER (object);
+
+  /* release the tooltips */
+  g_object_unref (G_OBJECT (uca_chooser->tooltips));
+
+  (*G_OBJECT_CLASS (thunar_uca_chooser_parent_class)->finalize) (object);
+}
+
+
+
+static gboolean
+thunar_uca_chooser_key_press_event (GtkWidget   *widget,
+                                    GdkEventKey *event)
+{
+  /* close chooser window on Esc key press */
+  if (G_UNLIKELY (event->keyval == GDK_Escape))
+    {
+      gtk_dialog_response (GTK_DIALOG (widget), GTK_RESPONSE_CLOSE);
+      return TRUE;
+    }
+
+  return (*GTK_WIDGET_CLASS (thunar_uca_chooser_parent_class)->key_press_event) (widget, event);
+}
+
+
+
+static void
+thunar_uca_chooser_response (GtkDialog *dialog,
+                             gint       response)
+{
+  if (response == GTK_RESPONSE_CLOSE)
+    {
+      gtk_widget_destroy (GTK_WIDGET (dialog));
+    }
+  else if (GTK_DIALOG_CLASS (thunar_uca_chooser_parent_class)->response != NULL)
+    {
+      (*GTK_DIALOG_CLASS (thunar_uca_chooser_parent_class)->response) (dialog, response);
+    }
+}
+
+
+
+static void
+thunar_uca_chooser_selection_changed (ThunarUcaChooser *uca_chooser,
+                                      GtkTreeSelection *selection)
+{
+  GtkTreeModel *model;
+  GtkTreePath  *path = NULL;
+  GtkTreeIter   iter;
+  gboolean      selected;
+
+  g_return_if_fail (THUNAR_UCA_IS_CHOOSER (uca_chooser));
+  g_return_if_fail (GTK_IS_TREE_SELECTION (selection));
+
+  /* check if we have currently selected an item */
+  selected = gtk_tree_selection_get_selected (selection, &model, &iter);
+  if (G_LIKELY (selected))
+    {
+      /* determine the path for the selected iter */
+      path = gtk_tree_model_get_path (model, &iter);
+    }
+
+  /* change sensitivity of "Edit" and "Delete" appropritately */
+  gtk_widget_set_sensitive (uca_chooser->edit_button, selected);
+  gtk_widget_set_sensitive (uca_chooser->delete_button, selected);
+
+  /* change sensitivity of "Move Up" and "Move Down" appropritately */
+  gtk_widget_set_sensitive (uca_chooser->up_button, selected && gtk_tree_path_get_indices (path)[0] > 0);
+  gtk_widget_set_sensitive (uca_chooser->down_button, selected && gtk_tree_path_get_indices (path)[0] < gtk_tree_model_iter_n_children (model, NULL) - 1);
+
+  /* release path (if any) */
+  if (G_LIKELY (path != NULL))
+    gtk_tree_path_free (path);
+}
+
+
+
+static void
+thunar_uca_chooser_exchange (ThunarUcaChooser *uca_chooser,
+                             GtkTreeSelection *selection,
+                             GtkTreeModel     *model,
+                             GtkTreeIter      *iter_a,
+                             GtkTreeIter      *iter_b)
+{
+  g_return_if_fail (THUNAR_UCA_IS_CHOOSER (uca_chooser));
+  g_return_if_fail (GTK_IS_TREE_SELECTION (selection));
+  g_return_if_fail (GTK_IS_TREE_MODEL (model));
+  g_return_if_fail (iter_a != NULL);
+  g_return_if_fail (iter_b != NULL);
+
+  /* perform the move */
+  thunar_uca_model_exchange (THUNAR_UCA_MODEL (model), iter_a, iter_b);
+
+  /* tell the chooser that the selection may have changed */
+  thunar_uca_chooser_selection_changed (uca_chooser, selection);
+
+  /* sync the model to persistent storage */
+  thunar_uca_chooser_save (uca_chooser, THUNAR_UCA_MODEL (model));
+}
+
+
+
+static void
+thunar_uca_chooser_open_editor (ThunarUcaChooser *uca_chooser,
+                                gboolean          edit)
+{
+  GtkTreeSelection *selection;
+  GtkTreeModel     *model;
+  GtkTreeIter       iter;
+  GtkWidget        *editor;
+
+  g_return_if_fail (THUNAR_UCA_IS_CHOOSER (uca_chooser));
+
+  /* allocate the new editor */
+  editor = g_object_new (THUNAR_UCA_TYPE_EDITOR, NULL);
+  gtk_window_set_title (GTK_WINDOW (editor), edit ? _("Edit Action") : _("Create Action"));
+  gtk_window_set_transient_for (GTK_WINDOW (editor), GTK_WINDOW (uca_chooser));
+
+  /* load the editor with the currently selected item (when editing) */
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (uca_chooser->treeview));
+  if (gtk_tree_selection_get_selected (selection, &model, &iter) && edit)
+    thunar_uca_editor_load (THUNAR_UCA_EDITOR (editor), THUNAR_UCA_MODEL (model), &iter);
+
+  /* run the editor */
+  if (gtk_dialog_run (GTK_DIALOG (editor)) == GTK_RESPONSE_OK)
+    {
+      /* append a new iter (when not editing) */
+      if (G_UNLIKELY (!edit))
+        thunar_uca_model_append (THUNAR_UCA_MODEL (model), &iter);
+
+      /* save the editor values to the model */
+      thunar_uca_editor_save (THUNAR_UCA_EDITOR (editor), THUNAR_UCA_MODEL (model), &iter);
+
+      /* hide the editor window */
+      gtk_widget_hide (editor);
+
+      /* sync the model to persistent storage */
+      thunar_uca_chooser_save (uca_chooser, THUNAR_UCA_MODEL (model));
+    }
+
+  /* destroy the editor */
+  gtk_widget_destroy (editor);
+}
+
+
+
+static void
+thunar_uca_chooser_save (ThunarUcaChooser *uca_chooser,
+                         ThunarUcaModel   *uca_model)
+{
+  GtkWidget *dialog;
+  GError    *error = NULL;
+
+  g_return_if_fail (THUNAR_UCA_IS_CHOOSER (uca_chooser));
+  g_return_if_fail (THUNAR_UCA_IS_MODEL (uca_model));
+
+  /* sync the model to persistent storage */
+  if (!thunar_uca_model_save (uca_model, &error))
+    {
+      dialog = gtk_message_dialog_new (GTK_WINDOW (uca_chooser),
+                                       GTK_DIALOG_DESTROY_WITH_PARENT
+                                       | GTK_DIALOG_MODAL,
+                                       GTK_MESSAGE_ERROR,
+                                       GTK_BUTTONS_CLOSE,
+                                       _("Failed to save actions to disk."));
+      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), _("%s."), error->message);
+      gtk_dialog_run (GTK_DIALOG (dialog));
+      gtk_widget_destroy (dialog);
+      g_error_free (error);
+    }
+}
+
+
+
+static void
+thunar_uca_chooser_add_clicked (ThunarUcaChooser *uca_chooser)
+{
+  g_return_if_fail (THUNAR_UCA_IS_CHOOSER (uca_chooser));
+  thunar_uca_chooser_open_editor (uca_chooser, FALSE);
+}
+
+
+
+static void
+thunar_uca_chooser_edit_clicked (ThunarUcaChooser *uca_chooser)
+{
+  g_return_if_fail (THUNAR_UCA_IS_CHOOSER (uca_chooser));
+  thunar_uca_chooser_open_editor (uca_chooser, TRUE);
+}
+
+
+
+static void
+thunar_uca_chooser_delete_clicked (ThunarUcaChooser *uca_chooser)
+{
+  GtkTreeSelection *selection;
+  GtkTreeModel     *model;
+  GtkTreeIter       iter;
+
+  g_return_if_fail (THUNAR_UCA_IS_CHOOSER (uca_chooser));
+
+  /* verify that we have an item selected and determine the iter for that item */
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (uca_chooser->treeview));
+  if (gtk_tree_selection_get_selected (selection, &model, &iter))
+    thunar_uca_model_remove (THUNAR_UCA_MODEL (model), &iter);
+}
+
+
+
+static void
+thunar_uca_chooser_up_clicked (ThunarUcaChooser *uca_chooser)
+{
+  GtkTreeSelection *selection;
+  GtkTreeModel     *model;
+  GtkTreePath      *path;
+  GtkTreeIter       iter_a;
+  GtkTreeIter       iter_b;
+
+  g_return_if_fail (THUNAR_UCA_IS_CHOOSER (uca_chooser));
+
+  /* determine the currently selected item */
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (uca_chooser->treeview));
+  if (gtk_tree_selection_get_selected (selection, &model, &iter_a))
+    {
+      /* determine the tree path to the iter */
+      path = gtk_tree_model_get_path (model, &iter_a);
+      if (gtk_tree_path_prev (path))
+        {
+          /* determine the iter for the previous item */
+          gtk_tree_model_get_iter (model, &iter_b, path);
+
+          /* perform the exchange operation */
+          thunar_uca_chooser_exchange (uca_chooser, selection, model, &iter_a, &iter_b);
+        }
+
+      /* release the path */
+      gtk_tree_path_free (path);
+    }
+}
+
+
+
+static void
+thunar_uca_chooser_down_clicked (ThunarUcaChooser *uca_chooser)
+{
+  GtkTreeSelection *selection;
+  GtkTreeModel     *model;
+  GtkTreeIter       iter_a;
+  GtkTreeIter       iter_b;
+
+  g_return_if_fail (THUNAR_UCA_IS_CHOOSER (uca_chooser));
+
+  /* determine the currently selected item */
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (uca_chooser->treeview));
+  if (gtk_tree_selection_get_selected (selection, &model, &iter_a))
+    {
+      /* determine the iter to the next item */
+      iter_b = iter_a;
+      if (gtk_tree_model_iter_next (model, &iter_b))
+        thunar_uca_chooser_exchange (uca_chooser, selection, model, &iter_a, &iter_b);
+    }
+}
+
+
+
+
diff --git a/thunar-uca/thunar-uca-chooser.h b/thunar-uca/thunar-uca-chooser.h
new file mode 100644 (file)
index 0000000..8fd1dbb
--- /dev/null
@@ -0,0 +1,43 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny@xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_UCA_CHOOSER_H__
+#define __THUNAR_UCA_CHOOSER_H__
+
+#include <thunarx/thunarx.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarUcaChooserClass ThunarUcaChooserClass;
+typedef struct _ThunarUcaChooser      ThunarUcaChooser;
+
+#define THUNAR_UCA_TYPE_CHOOSER             (thunar_uca_chooser_get_type ())
+#define THUNAR_UCA_CHOOSER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_UCA_TYPE_CHOOSER, ThunarUcaChooser))
+#define THUNAR_UCA_CHOOSER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_UCA_TYPE_CHOOSER, ThunarUcaChooserClass))
+#define THUNAR_UCA_IS_CHOOSER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_UCA_TYPE_CHOOSER))
+#define THUNAR_UCA_IS_CHOOSER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_UCA_TYPE_CHOOSER))
+#define THUNAR_UCA_CHOOSER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_UCA_TYPE_CHOOSER, ThunarUcaChooserClass))
+
+GType      thunar_uca_chooser_get_type      (void) G_GNUC_CONST G_GNUC_INTERNAL;
+void       thunar_uca_chooser_register_type (ThunarxProviderPlugin *plugin) G_GNUC_INTERNAL;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_UCA_CHOOSER_H__ */
diff --git a/thunar-uca/thunar-uca-context.c b/thunar-uca/thunar-uca-context.c
new file mode 100644 (file)
index 0000000..c86969d
--- /dev/null
@@ -0,0 +1,146 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny@xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunarx/thunarx.h>
+
+#include <thunar-uca/thunar-uca-context.h>
+
+
+
+struct _ThunarUcaContext
+{
+  gint       ref_count;
+  GList     *files;
+  GtkWidget *window;
+};
+
+
+
+/**
+ * thunar_uca_context_new:
+ * @window : a #GtkWindow.
+ * @files  : a #GList of #ThunarxFileInfo<!---->s.
+ *
+ * Allocates a new #ThunarUcaContext with the given @window and
+ * @files.
+ *
+ * The caller is responsible to free the returned context
+ * using thunar_uca_context_unref().
+ *
+ * Return value: the newly allocated #ThunarUcaContext.
+ **/
+ThunarUcaContext*
+thunar_uca_context_new (GtkWidget *window,
+                        GList     *files)
+{
+  ThunarUcaContext *context;
+
+  context = g_new (ThunarUcaContext, 1);
+  context->ref_count = 1;
+  context->window = window;
+  context->files = thunarx_file_info_list_copy (files);
+
+  /* add a weak reference on the window */
+  if (G_LIKELY (context->window != NULL))
+    g_object_add_weak_pointer (G_OBJECT (context->window), (gpointer) &context->window);
+
+  return context;
+}
+
+
+
+/**
+ * thunar_uca_context_ref:
+ * @context : a #ThunarUcaContext.
+ *
+ * Increases the reference count on @context.
+ *
+ * Return value: reference to @context.
+ **/
+ThunarUcaContext*
+thunar_uca_context_ref (ThunarUcaContext *context)
+{
+  context->ref_count += 1;
+  return context;
+}
+
+
+
+/**
+ * thunar_uca_context_unref:
+ * @context : a #ThunarUcaContext.
+ *
+ * Decreases the reference count on @context
+ * and frees @context once the reference count
+ * drops to zero.
+ **/
+void
+thunar_uca_context_unref (ThunarUcaContext *context)
+{
+  if (--context->ref_count == 0)
+    {
+      /* drop the weak ref on the window */
+      if (G_LIKELY (context->window != NULL))
+        g_object_remove_weak_pointer (G_OBJECT (context->window), (gpointer) &context->window);
+
+      /* release the file infos */
+      thunarx_file_info_list_free (context->files);
+
+      /* remove the context data */
+      g_free (context);
+    }
+}
+
+
+
+/**
+ * thunar_uca_context_get_files:
+ * @context : a #ThunarUcaContext.
+ *
+ * Return value: the #ThunarxFileInfo<!---->s for @context.
+ **/
+GList*
+thunar_uca_context_get_files (const ThunarUcaContext *context)
+{
+  return context->files;
+}
+
+
+
+/**
+ * thunar_uca_context_get_window:
+ * @context : a #ThunarUcaContext.
+ *
+ * Returns the #GtkWindow for @context or %NULL if the
+ * window was destroyed in the meantime.
+ *
+ * Return value: the #GtkWindow for @context.
+ **/
+GtkWidget*
+thunar_uca_context_get_window (const ThunarUcaContext *context)
+{
+  return context->window;
+}
+
+
diff --git a/thunar-uca/thunar-uca-context.h b/thunar-uca/thunar-uca-context.h
new file mode 100644 (file)
index 0000000..083c4d7
--- /dev/null
@@ -0,0 +1,41 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny@xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_UCA_CONTEXT_H__
+#define __THUNAR_UCA_CONTEXT_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarUcaContext ThunarUcaContext;
+
+ThunarUcaContext *thunar_uca_context_new        (GtkWidget              *window,
+                                                 GList                  *files) G_GNUC_INTERNAL;
+
+ThunarUcaContext *thunar_uca_context_ref        (ThunarUcaContext       *context) G_GNUC_INTERNAL;
+void              thunar_uca_context_unref      (ThunarUcaContext       *context) G_GNUC_INTERNAL;
+
+GList            *thunar_uca_context_get_files  (const ThunarUcaContext *context) G_GNUC_INTERNAL;
+GtkWidget        *thunar_uca_context_get_window (const ThunarUcaContext *context) G_GNUC_INTERNAL;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_UCA_CONTEXT_H__ */
diff --git a/thunar-uca/thunar-uca-editor.c b/thunar-uca/thunar-uca-editor.c
new file mode 100644 (file)
index 0000000..6e7b536
--- /dev/null
@@ -0,0 +1,903 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny@xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <glib/gi18n-lib.h>
+
+#include <exo/exo.h>
+
+#include <thunar-uca/thunar-uca-editor.h>
+
+
+
+static void           thunar_uca_editor_class_init      (ThunarUcaEditorClass   *klass);
+static void           thunar_uca_editor_init            (ThunarUcaEditor        *uca_editor);
+static void           thunar_uca_editor_finalize        (GObject                *object);
+static const gchar   *thunar_uca_editor_get_icon_name   (const ThunarUcaEditor  *uca_editor);
+static void           thunar_uca_editor_set_icon_name   (ThunarUcaEditor        *uca_editor,
+                                                         const gchar            *icon_name);
+static ThunarUcaTypes thunar_uca_editor_get_types       (const ThunarUcaEditor  *uca_editor);
+static void           thunar_uca_editor_set_types       (ThunarUcaEditor        *uca_editor,
+                                                         ThunarUcaTypes          types);
+static void           thunar_uca_editor_command_clicked (ThunarUcaEditor        *uca_editor);
+static void           thunar_uca_editor_icon_clicked    (ThunarUcaEditor        *uca_editor);
+
+
+
+struct _ThunarUcaEditorClass
+{
+  GtkDialogClass __parent__;
+};
+
+struct _ThunarUcaEditor
+{
+  GtkDialog __parent__;
+
+  GtkTooltips *tooltips;
+
+  GtkWidget   *name_entry;
+  GtkWidget   *description_entry;
+  GtkWidget   *icon_button;
+  GtkWidget   *command_entry;
+  GtkWidget   *parameter_entry;
+  GtkWidget   *patterns_entry;
+  GtkWidget   *directories_button;
+  GtkWidget   *audio_files_button;
+  GtkWidget   *image_files_button;
+  GtkWidget   *text_files_button;
+  GtkWidget   *video_files_button;
+  GtkWidget   *other_files_button;
+};
+
+
+
+THUNARX_DEFINE_TYPE (ThunarUcaEditor, thunar_uca_editor, GTK_TYPE_DIALOG);
+
+
+
+static void
+thunar_uca_editor_class_init (ThunarUcaEditorClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_uca_editor_finalize;
+}
+
+
+
+static void
+thunar_uca_editor_init (ThunarUcaEditor *uca_editor)
+{
+  AtkRelationSet *relations;
+  PangoAttribute *attribute;
+  PangoAttrList  *attrs_small_bold;
+  PangoAttrList  *attrs_small;
+  AtkRelation    *relation;
+  AtkObject      *object;
+  GtkWidget      *notebook;
+  GtkWidget      *button;
+  GtkWidget      *itable;
+  GtkWidget      *align;
+  GtkWidget      *image;
+  GtkWidget      *label;
+  GtkWidget      *table;
+  GtkWidget      *hbox;
+  GtkWidget      *vbox;
+
+  /* configure the dialog properties */
+  gtk_dialog_add_button (GTK_DIALOG (uca_editor), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+  gtk_dialog_add_button (GTK_DIALOG (uca_editor), GTK_STOCK_OK, GTK_RESPONSE_OK);
+  gtk_dialog_set_default_response (GTK_DIALOG (uca_editor), GTK_RESPONSE_OK);
+  gtk_dialog_set_has_separator (GTK_DIALOG (uca_editor), FALSE);
+  gtk_window_set_destroy_with_parent (GTK_WINDOW (uca_editor), TRUE);
+  gtk_window_set_resizable (GTK_WINDOW (uca_editor), FALSE);
+
+  /* allocate shared tooltips object */
+  uca_editor->tooltips = gtk_tooltips_new ();
+  g_object_ref (G_OBJECT (uca_editor->tooltips));
+  gtk_object_sink (GTK_OBJECT (uca_editor->tooltips));
+
+  notebook = gtk_notebook_new ();
+  gtk_container_set_border_width (GTK_CONTAINER (notebook), 6);
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (uca_editor)->vbox), notebook, TRUE, TRUE, 0);
+  gtk_widget_show (notebook);
+
+  /*
+     Basic
+   */
+  label = gtk_label_new (_("Basic"));
+  table = gtk_table_new (6, 2, FALSE);
+  gtk_table_set_col_spacings (GTK_TABLE (table), 12);
+  gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+  gtk_container_set_border_width (GTK_CONTAINER (table), 12);
+  gtk_notebook_append_page (GTK_NOTEBOOK (notebook), table, label);
+  gtk_widget_show (label);
+  gtk_widget_show (table);
+
+  label = g_object_new (GTK_TYPE_LABEL, "label", _("_Name:"), "use-underline", TRUE, "xalign", 0.0f, NULL);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  uca_editor->name_entry = g_object_new (GTK_TYPE_ENTRY, "activates-default", TRUE, NULL);
+  gtk_tooltips_set_tip (uca_editor->tooltips, uca_editor->name_entry, _("The name of the action that will be displayed in the context menu."), NULL);
+  gtk_table_attach (GTK_TABLE (table), uca_editor->name_entry, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_label_set_mnemonic_widget (GTK_LABEL (label), uca_editor->name_entry);
+  gtk_widget_grab_focus (uca_editor->name_entry);
+  gtk_widget_show (uca_editor->name_entry);
+
+  /* set Atk label relation for the entry */
+  object = gtk_widget_get_accessible (uca_editor->name_entry);
+  relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label));
+  relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR);
+  atk_relation_set_add (relations, relation);
+  g_object_unref (G_OBJECT (relation));
+
+  label = g_object_new (GTK_TYPE_LABEL, "label", _("_Description:"), "use-underline", TRUE, "xalign", 0.0f, NULL);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  uca_editor->description_entry = g_object_new (GTK_TYPE_ENTRY, "activates-default", TRUE, NULL);
+  gtk_tooltips_set_tip (uca_editor->tooltips, uca_editor->description_entry, _("The description of the action that will be displayed as tooltip "
+                                                                               "in the statusbar when selecting the item from the context menu."), NULL);
+  gtk_table_attach (GTK_TABLE (table), uca_editor->description_entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_label_set_mnemonic_widget (GTK_LABEL (label), uca_editor->description_entry);
+  gtk_widget_show (uca_editor->description_entry);
+
+  /* set Atk label relation for the entry */
+  object = gtk_widget_get_accessible (uca_editor->description_entry);
+  relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label));
+  relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR);
+  atk_relation_set_add (relations, relation);
+  g_object_unref (G_OBJECT (relation));
+
+  label = g_object_new (GTK_TYPE_LABEL, "label", _("_Command:"), "use-underline", TRUE, "xalign", 0.0f, NULL);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  hbox = gtk_hbox_new (FALSE, 2);
+  gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (hbox);
+
+  uca_editor->command_entry = g_object_new (GTK_TYPE_ENTRY, "activates-default", TRUE, NULL);
+  gtk_tooltips_set_tip (uca_editor->tooltips, uca_editor->command_entry, _("The command (including the necessary parameters) to perform the action. "
+                                                                           "See the command parameter legend below for a list of supported parameter "
+                                                                           "variables, which will be substituted when launching the command. When "
+                                                                           "upper-case letters (e.g. %F, %D, %N) are used, the action will be applicable "
+                                                                           "even if more than one item is selected. Else the action will only be "
+                                                                           "applicable if exactly one item is selected."), NULL);
+  gtk_box_pack_start (GTK_BOX (hbox), uca_editor->command_entry, TRUE, TRUE, 0);
+  gtk_label_set_mnemonic_widget (GTK_LABEL (label), uca_editor->command_entry);
+  gtk_widget_show (uca_editor->command_entry);
+
+  button = gtk_button_new ();
+  gtk_tooltips_set_tip (uca_editor->tooltips, button, _("Browse the file system to select an application to use for this action."), NULL);
+  gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+  g_signal_connect_swapped (G_OBJECT (button), "clicked", G_CALLBACK (thunar_uca_editor_command_clicked), uca_editor);
+  gtk_widget_show (button);
+
+  image = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_BUTTON);
+  gtk_container_add (GTK_CONTAINER (button), image);
+  gtk_widget_show (image);
+
+  /* set Atk label relation for the entry */
+  object = gtk_widget_get_accessible (uca_editor->command_entry);
+  relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label));
+  relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR);
+  atk_relation_set_add (relations, relation);
+  g_object_unref (G_OBJECT (relation));
+
+  label = g_object_new (GTK_TYPE_LABEL, "label", _("_Icon:"), "use-underline", TRUE, "xalign", 0.0f, NULL);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  align = gtk_alignment_new (0.0f, 0.5f, 0.0f, 0.0f);
+  gtk_table_attach (GTK_TABLE (table), align, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (align);
+
+  uca_editor->icon_button = gtk_button_new_with_label (_("No icon"));
+  gtk_tooltips_set_tip (uca_editor->tooltips, uca_editor->icon_button, _("Click this button to select an icon file that will be displayed "
+                                                                         "in the context menu in addition to the action name chosen above."), NULL);
+  gtk_container_add (GTK_CONTAINER (align), uca_editor->icon_button);
+  g_signal_connect_swapped (G_OBJECT (uca_editor->icon_button), "clicked", G_CALLBACK (thunar_uca_editor_icon_clicked), uca_editor);
+  gtk_label_set_mnemonic_widget (GTK_LABEL (label), uca_editor->icon_button);
+  gtk_widget_show (uca_editor->icon_button);
+
+  /* set Atk label relation for the button */
+  object = gtk_widget_get_accessible (uca_editor->icon_button);
+  relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label));
+  relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR);
+  atk_relation_set_add (relations, relation);
+  g_object_unref (G_OBJECT (relation));
+
+  align = g_object_new (GTK_TYPE_ALIGNMENT, "height-request", 12, NULL);
+  gtk_table_attach (GTK_TABLE (table), align, 0, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (align);
+
+  hbox = gtk_hbox_new (FALSE, 6);
+  gtk_table_attach (GTK_TABLE (table), hbox, 0, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (hbox);
+
+  image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DND);
+  gtk_misc_set_alignment (GTK_MISC (image), 0.5f, 0.0f);
+  gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
+  gtk_widget_show (image);
+
+  vbox = gtk_vbox_new (FALSE, 6);
+  gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
+  gtk_widget_show (vbox);
+
+  label = gtk_label_new (_("The following command parameters will be\n"
+                           "substituted when launching the action:"));
+  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+  gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+  gtk_widget_show (label);
+
+  table = gtk_table_new (2, 2, FALSE);
+  gtk_table_set_col_spacings (GTK_TABLE (table), 6);
+  gtk_table_set_row_spacings (GTK_TABLE (table), 3);
+  gtk_container_set_border_width (GTK_CONTAINER (table), 6);
+  gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);
+  gtk_widget_show (table);
+
+  /* setup the small+bold attribute list */
+  attrs_small_bold = pango_attr_list_new ();
+  attribute = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
+  attribute->start_index = 0;
+  attribute->end_index = -1;
+  pango_attr_list_insert (attrs_small_bold, attribute);
+  attribute = pango_attr_scale_new (PANGO_SCALE_SMALL);
+  attribute->start_index = 0;
+  attribute->end_index = -1;
+  pango_attr_list_insert (attrs_small_bold, attribute);
+
+  /* setup the small attribute list */
+  attrs_small = pango_attr_list_new ();
+  attribute = pango_attr_scale_new (PANGO_SCALE_SMALL);
+  attribute->start_index = 0;
+  attribute->end_index = -1;
+  pango_attr_list_insert (attrs_small, attribute);
+
+  label = gtk_label_new ("%f");
+  gtk_label_set_attributes (GTK_LABEL (label), attrs_small_bold);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  label = gtk_label_new (_("the path to the first selected file"));
+  gtk_label_set_attributes (GTK_LABEL (label), attrs_small);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  label = gtk_label_new ("%F");
+  gtk_label_set_attributes (GTK_LABEL (label), attrs_small_bold);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  label = gtk_label_new (_("the paths to all selected files"));
+  gtk_label_set_attributes (GTK_LABEL (label), attrs_small);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  label = gtk_label_new ("%d");
+  gtk_label_set_attributes (GTK_LABEL (label), attrs_small_bold);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  label = gtk_label_new (_("directory containing the file that is passed in %f"));
+  gtk_label_set_attributes (GTK_LABEL (label), attrs_small);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  label = gtk_label_new ("%D");
+  gtk_label_set_attributes (GTK_LABEL (label), attrs_small_bold);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  label = gtk_label_new (_("directories containing the files that are passed in %F"));
+  gtk_label_set_attributes (GTK_LABEL (label), attrs_small);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  label = gtk_label_new ("%n");
+  gtk_label_set_attributes (GTK_LABEL (label), attrs_small_bold);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 4, 5, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  label = gtk_label_new (_("the first selected filename (without path)"));
+  gtk_label_set_attributes (GTK_LABEL (label), attrs_small);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  label = gtk_label_new ("%N");
+  gtk_label_set_attributes (GTK_LABEL (label), attrs_small_bold);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 5, 6, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  label = gtk_label_new (_("the selected filenames (without paths)"));
+  gtk_label_set_attributes (GTK_LABEL (label), attrs_small);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  /* release the pango attribute lists */
+  pango_attr_list_unref (attrs_small_bold);
+  pango_attr_list_unref (attrs_small);
+
+  /*
+     Appearance Conditions
+   */
+  table = gtk_table_new (3, 2, FALSE);
+  label = gtk_label_new (_("Appearance Conditions"));
+  gtk_table_set_col_spacings (GTK_TABLE (table), 12);
+  gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+  gtk_container_set_border_width (GTK_CONTAINER (table), 12);
+  gtk_notebook_append_page (GTK_NOTEBOOK (notebook), table, label);
+  gtk_widget_show (label);
+  gtk_widget_show (table);
+
+  label = g_object_new (GTK_TYPE_LABEL, "label", _("_File Pattern:"), "use-underline", TRUE, "xalign", 0.0f, NULL);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  uca_editor->patterns_entry = g_object_new (GTK_TYPE_ENTRY, "activates-default", TRUE, "text", "*", NULL);
+  gtk_tooltips_set_tip (uca_editor->tooltips, uca_editor->patterns_entry, _("Enter a list of patterns that will be used to determine "
+                                                                            "whether this action should be displayed for a selected "
+                                                                            "file. If you specify more than one pattern here, the list "
+                                                                            "items must be separated with semicolons (e.g. *.txt;*.doc)."), NULL);
+  gtk_table_attach (GTK_TABLE (table), uca_editor->patterns_entry, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_label_set_mnemonic_widget (GTK_LABEL (label), uca_editor->patterns_entry);
+  gtk_widget_show (uca_editor->patterns_entry);
+
+  /* set Atk label relation for the entry */
+  object = gtk_widget_get_accessible (uca_editor->patterns_entry);
+  relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label));
+  relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR);
+  atk_relation_set_add (relations, relation);
+  g_object_unref (G_OBJECT (relation));
+
+  align = g_object_new (GTK_TYPE_ALIGNMENT, "height-request", 0, NULL);
+  gtk_table_attach (GTK_TABLE (table), align, 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (align);
+
+  label = g_object_new (GTK_TYPE_LABEL, "label", _("Appears if selection contains:"), "xalign", 0.0f, NULL);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  align = g_object_new (GTK_TYPE_ALIGNMENT, "left-padding", 18, NULL);
+  gtk_table_attach (GTK_TABLE (table), align, 0, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (align);
+
+  itable = gtk_table_new (3, 2, TRUE);
+  gtk_table_set_col_spacings (GTK_TABLE (itable), 12);
+  gtk_container_add (GTK_CONTAINER (align), itable);
+  gtk_widget_show (itable);
+
+  uca_editor->directories_button = gtk_check_button_new_with_mnemonic (_("_Directories"));
+  gtk_table_attach (GTK_TABLE (itable), uca_editor->directories_button, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (uca_editor->directories_button);
+
+  uca_editor->audio_files_button = gtk_check_button_new_with_mnemonic (_("_Audio Files"));
+  gtk_table_attach (GTK_TABLE (itable), uca_editor->audio_files_button, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (uca_editor->audio_files_button);
+
+  uca_editor->image_files_button = gtk_check_button_new_with_mnemonic (_("_Image Files"));
+  gtk_table_attach (GTK_TABLE (itable), uca_editor->image_files_button, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (uca_editor->image_files_button);
+
+  uca_editor->text_files_button = gtk_check_button_new_with_mnemonic (_("_Text Files"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (uca_editor->text_files_button), TRUE);
+  gtk_table_attach (GTK_TABLE (itable), uca_editor->text_files_button, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (uca_editor->text_files_button);
+
+  uca_editor->video_files_button = gtk_check_button_new_with_mnemonic (_("_Video Files"));
+  gtk_table_attach (GTK_TABLE (itable), uca_editor->video_files_button, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (uca_editor->video_files_button);
+
+  uca_editor->other_files_button = gtk_check_button_new_with_mnemonic (_("_Other Files"));
+  gtk_table_attach (GTK_TABLE (itable), uca_editor->other_files_button, 1, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (uca_editor->other_files_button);
+
+  align = g_object_new (GTK_TYPE_ALIGNMENT, "height-request", 12, NULL);
+  gtk_table_attach (GTK_TABLE (table), align, 0, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (align);
+
+  hbox = gtk_hbox_new (FALSE, 6);
+  gtk_table_attach (GTK_TABLE (table), hbox, 0, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (hbox);
+
+  image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DND);
+  gtk_misc_set_alignment (GTK_MISC (image), 0.5f, 0.0f);
+  gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
+  gtk_widget_show (image);
+
+  label = gtk_label_new (_("This page lists the conditions under which the\n"
+                           "action will appear in the file managers context\n"
+                           "menus. The file patterns are specified as a list\n"
+                           "of simple file patterns separated by semicolons\n"
+                           "(e.g. *.txt;*.doc). For an action to appear in the\n"
+                           "context menu of a file or folder, atleast one of\n"
+                           "these patterns must match the name of the file\n"
+                           "or folder. Additionally, you can specify that the\n"
+                           "action should only appear for certain kinds of\nfiles."));
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+  gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
+  gtk_widget_show (label);
+}
+
+
+
+static void
+thunar_uca_editor_finalize (GObject *object)
+{
+  ThunarUcaEditor *uca_editor = THUNAR_UCA_EDITOR (object);
+
+  /* release the tooltips */
+  g_object_unref (G_OBJECT (uca_editor->tooltips));
+
+  (*G_OBJECT_CLASS (thunar_uca_editor_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_uca_editor_command_clicked (ThunarUcaEditor *uca_editor)
+{
+  GtkFileFilter *filter;
+  GtkWidget     *chooser;
+  gchar         *filename;
+  gchar         *s;
+
+  g_return_if_fail (THUNAR_UCA_IS_EDITOR (uca_editor));
+
+  chooser = gtk_file_chooser_dialog_new (_("Select an Application"),
+                                         GTK_WINDOW (uca_editor),
+                                         GTK_FILE_CHOOSER_ACTION_OPEN,
+                                         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                         GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+                                         NULL);
+  gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), TRUE);
+
+  /* add file chooser filters */
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("All Files"));
+  gtk_file_filter_add_pattern (filter, "*");
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("Executable Files"));
+  gtk_file_filter_add_mime_type (filter, "application/x-csh");
+  gtk_file_filter_add_mime_type (filter, "application/x-executable");
+  gtk_file_filter_add_mime_type (filter, "application/x-perl");
+  gtk_file_filter_add_mime_type (filter, "application/x-python");
+  gtk_file_filter_add_mime_type (filter, "application/x-ruby");
+  gtk_file_filter_add_mime_type (filter, "application/x-shellscript");
+  gtk_file_filter_add_pattern (filter, "*.pl");
+  gtk_file_filter_add_pattern (filter, "*.py");
+  gtk_file_filter_add_pattern (filter, "*.rb");
+  gtk_file_filter_add_pattern (filter, "*.sh");
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+  gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("Perl Scripts"));
+  gtk_file_filter_add_mime_type (filter, "application/x-perl");
+  gtk_file_filter_add_pattern (filter, "*.pl");
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("Python Scripts"));
+  gtk_file_filter_add_mime_type (filter, "application/x-python");
+  gtk_file_filter_add_pattern (filter, "*.py");
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("Ruby Scripts"));
+  gtk_file_filter_add_mime_type (filter, "application/x-ruby");
+  gtk_file_filter_add_pattern (filter, "*.rb");
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("Shell Scripts"));
+  gtk_file_filter_add_mime_type (filter, "application/x-csh");
+  gtk_file_filter_add_mime_type (filter, "application/x-shellscript");
+  gtk_file_filter_add_pattern (filter, "*.sh");
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+  /* use the bindir as default folder */
+  gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), BINDIR);
+
+  /* setup the currently selected file */
+  filename = gtk_editable_get_chars (GTK_EDITABLE (uca_editor->command_entry), 0, -1);
+  if (G_LIKELY (filename != NULL))
+    {
+      /* use only the first argument */
+      s = strchr (filename, ' ');
+      if (G_UNLIKELY (s != NULL))
+        *s = '\0';
+
+      if (G_LIKELY (*filename != '\0'))
+        gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (chooser), filename);
+      g_free (filename);
+    }
+
+  /* run the chooser dialog */
+  if (gtk_dialog_run (GTK_DIALOG (chooser)) == GTK_RESPONSE_ACCEPT)
+    {
+      filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
+      s = g_strconcat (filename, " %f", NULL);
+      gtk_entry_set_text (GTK_ENTRY (uca_editor->command_entry), s);
+      g_free (filename);
+      g_free (s);
+    }
+
+  gtk_widget_destroy (chooser);
+}
+
+
+
+static void
+update_preview (GtkFileChooser *chooser,
+                GtkWidget      *image)
+{
+  GdkPixbuf *pixbuf;
+  GdkPixbuf *scaled;
+  gchar     *filename;
+  gint       height;
+  gint       width;
+
+  filename = gtk_file_chooser_get_filename (chooser);
+  pixbuf = (filename != NULL) ? gdk_pixbuf_new_from_file (filename, NULL) : NULL;
+  if (G_LIKELY (pixbuf != NULL))
+    {
+      width = gdk_pixbuf_get_width (pixbuf);
+      height = gdk_pixbuf_get_height (pixbuf);
+      if (G_UNLIKELY (width > 128 || height > 128))
+        {
+          scaled = exo_gdk_pixbuf_scale_ratio (pixbuf, 128);
+          g_object_unref (G_OBJECT (pixbuf));
+          pixbuf = scaled;
+        }
+
+      gtk_file_chooser_set_preview_widget_active (chooser, TRUE);
+      gtk_image_set_from_pixbuf (GTK_IMAGE (image), pixbuf);
+      g_object_unref (G_OBJECT (pixbuf));
+    }
+  else
+    {
+      gtk_file_chooser_set_preview_widget_active (chooser, FALSE);
+    }
+
+  g_free (filename);
+}
+
+
+
+static void
+thunar_uca_editor_icon_clicked (ThunarUcaEditor *uca_editor)
+{
+  GtkFileFilter *filter;
+  GtkWidget     *chooser;
+  GtkWidget     *image;
+  gchar        **extensions;
+  gchar        **mime_types;
+  gchar         *filename;
+  gchar         *pattern;
+  GSList        *formats;
+  GSList        *lp;
+  gint           n;
+
+  g_return_if_fail (THUNAR_UCA_IS_EDITOR (uca_editor));
+
+  chooser = gtk_file_chooser_dialog_new (_("Select an Icon"),
+                                         GTK_WINDOW (uca_editor),
+                                         GTK_FILE_CHOOSER_ACTION_OPEN,
+                                         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                         GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+                                         NULL);
+  gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), TRUE);
+
+  /* add file chooser filters */
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("All Files"));
+  gtk_file_filter_add_pattern (filter, "*");
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("Image Files"));
+  formats = gdk_pixbuf_get_formats ();
+  for (lp = formats; lp != NULL; lp = lp->next)
+    {
+      extensions = gdk_pixbuf_format_get_extensions (lp->data);
+      for (n = 0; extensions[n] != NULL; ++n)
+        {
+          pattern = g_strconcat ("*.", extensions[n], NULL);
+          gtk_file_filter_add_pattern (filter, pattern);
+          g_free (pattern);
+        }
+      g_strfreev (extensions);
+
+      mime_types = gdk_pixbuf_format_get_mime_types (lp->data);
+      for (n = 0; mime_types[n] != NULL; ++n)
+        gtk_file_filter_add_mime_type (filter, mime_types[n]);
+      g_strfreev (mime_types);
+    }
+  g_slist_free (formats);
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+  gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+  image = g_object_new (GTK_TYPE_IMAGE, "height-request", 128 + 2 * 12, "width-request", 128 + 2 * 12, NULL);
+  g_signal_connect (G_OBJECT (chooser), "update-preview", G_CALLBACK (update_preview), image);
+  gtk_file_chooser_set_preview_widget_active (GTK_FILE_CHOOSER (chooser), FALSE);
+  gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (chooser), image);
+  gtk_widget_show (image);
+
+  /* use the datadir/pixmaps as default folder */
+  gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), DATADIR "/pixmaps");
+
+  /* setup the currently selected icon file */
+  filename = g_object_get_data (G_OBJECT (uca_editor->icon_button), "thunar-uca-icon-filename");
+  if (G_LIKELY (filename != NULL && *filename != '\0'))
+    gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (chooser), filename);
+
+  /* run the chooser dialog */
+  if (gtk_dialog_run (GTK_DIALOG (chooser)) == GTK_RESPONSE_ACCEPT)
+    {
+      /* remember the selected file for the icon */
+      filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
+      thunar_uca_editor_set_icon_name (uca_editor, filename);
+      g_free (filename);
+    }
+
+  gtk_widget_destroy (chooser);
+}
+
+
+
+static const gchar*
+thunar_uca_editor_get_icon_name (const ThunarUcaEditor *uca_editor)
+{
+  g_return_val_if_fail (THUNAR_UCA_IS_EDITOR (uca_editor), NULL);
+  return g_object_get_data (G_OBJECT (uca_editor->icon_button), "thunar-uca-icon-name");
+}
+
+
+
+static void
+thunar_uca_editor_set_icon_name (ThunarUcaEditor *uca_editor,
+                                 const gchar     *icon_name)
+{
+  GtkIconTheme *icon_theme;
+  GdkPixbuf    *icon_scaled;
+  GdkPixbuf    *icon = NULL;
+  GtkWidget    *image;
+  GtkWidget    *label;
+  gint          icon_height;
+  gint          icon_width;
+
+  g_return_if_fail (THUNAR_UCA_IS_EDITOR (uca_editor));
+
+  /* drop the previous button child */
+  if (GTK_BIN (uca_editor->icon_button)->child != NULL)
+    gtk_widget_destroy (GTK_BIN (uca_editor->icon_button)->child);
+
+  /* try to load the icon */
+  if (G_LIKELY (icon_name != NULL && g_path_is_absolute (icon_name)))
+    {
+      /* load the icon from the file */
+      icon = gdk_pixbuf_new_from_file (icon_name, NULL);
+
+      /* scale down the icon if required */
+      icon_width = gdk_pixbuf_get_width (icon);
+      icon_height = gdk_pixbuf_get_height (icon);
+      if (G_UNLIKELY (icon_width > 48 || icon_height > 48))
+        {
+          icon_scaled = exo_gdk_pixbuf_scale_ratio (icon, 48);
+          g_object_unref (G_OBJECT (icon));
+          icon = icon_scaled;
+        }
+    }
+  else if (icon_name != NULL)
+    {
+      /* determine the appropriate icon theme */
+      if (G_LIKELY (gtk_widget_has_screen (GTK_WIDGET (uca_editor))))
+        icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (uca_editor)));
+      else
+        icon_theme = gtk_icon_theme_get_default ();
+
+      /* try to load the named icon */
+      icon = gtk_icon_theme_load_icon (icon_theme, icon_name, 48, 0, NULL);
+    }
+
+  /* setup the icon button */
+  if (G_LIKELY (icon != NULL))
+    {
+      /* setup an image for the icon */
+      image = gtk_image_new_from_pixbuf (icon);
+      gtk_container_add (GTK_CONTAINER (uca_editor->icon_button), image);
+      gtk_widget_show (image);
+
+      /* remember the name for the icon */
+      g_object_set_data_full (G_OBJECT (uca_editor->icon_button), "thunar-uca-icon-name", g_strdup (icon_name), g_free);
+
+      /* release the icon */
+      g_object_unref (G_OBJECT (icon));
+    }
+  else
+    {
+      /* reset the remembered icon name */
+      g_object_set_data (G_OBJECT (uca_editor->icon_button), "thunar-uca-icon-name", NULL);
+
+      /* setup a label to tell that no icon was selected */
+      label = gtk_label_new (_("No icon"));
+      gtk_container_add (GTK_CONTAINER (uca_editor->icon_button), label);
+      gtk_widget_show (label);
+    }
+}
+
+
+
+static ThunarUcaTypes
+thunar_uca_editor_get_types (const ThunarUcaEditor *uca_editor)
+{
+  ThunarUcaTypes types = 0;
+
+  g_return_val_if_fail (THUNAR_UCA_IS_EDITOR (uca_editor), 0);
+
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (uca_editor->directories_button)))
+    types |= THUNAR_UCA_TYPE_DIRECTORIES;
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (uca_editor->audio_files_button)))
+    types |= THUNAR_UCA_TYPE_AUDIO_FILES;
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (uca_editor->image_files_button)))
+    types |= THUNAR_UCA_TYPE_IMAGE_FILES;
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (uca_editor->text_files_button)))
+    types |= THUNAR_UCA_TYPE_TEXT_FILES;
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (uca_editor->video_files_button)))
+    types |= THUNAR_UCA_TYPE_VIDEO_FILES;
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (uca_editor->other_files_button)))
+    types |= THUNAR_UCA_TYPE_OTHER_FILES;
+
+  return types;
+}
+
+
+
+static void
+thunar_uca_editor_set_types (ThunarUcaEditor *uca_editor,
+                             ThunarUcaTypes   types)
+{
+  g_return_if_fail (THUNAR_UCA_IS_EDITOR (uca_editor));
+
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (uca_editor->directories_button), (types & THUNAR_UCA_TYPE_DIRECTORIES));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (uca_editor->audio_files_button), (types & THUNAR_UCA_TYPE_AUDIO_FILES));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (uca_editor->image_files_button), (types & THUNAR_UCA_TYPE_IMAGE_FILES));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (uca_editor->text_files_button),  (types & THUNAR_UCA_TYPE_TEXT_FILES));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (uca_editor->video_files_button), (types & THUNAR_UCA_TYPE_VIDEO_FILES));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (uca_editor->other_files_button), (types & THUNAR_UCA_TYPE_OTHER_FILES));
+}
+
+
+
+/**
+ * thunar_uca_editor_load:
+ * @uca_editor  : a #ThunarUcaEditor.
+ * @uca_model   : a #ThunarUcaModel.
+ * @iter        : a #GtkTreeIter.
+ *
+ * Loads @uca_editor with the data from @uca_model
+ * at the specified @iter.
+ **/
+void
+thunar_uca_editor_load (ThunarUcaEditor *uca_editor,
+                        ThunarUcaModel  *uca_model,
+                        GtkTreeIter     *iter)
+{
+  ThunarUcaTypes types;
+  gchar         *description;
+  gchar         *patterns;
+  gchar         *command;
+  gchar         *icon;
+  gchar         *name;
+
+  g_return_if_fail (THUNAR_UCA_IS_EDITOR (uca_editor));
+  g_return_if_fail (THUNAR_UCA_IS_MODEL (uca_model));
+  g_return_if_fail (iter != NULL);
+
+  /* determine the current values from the model */
+  gtk_tree_model_get (GTK_TREE_MODEL (uca_model), iter,
+                      THUNAR_UCA_MODEL_COLUMN_DESCRIPTION, &description,
+                      THUNAR_UCA_MODEL_COLUMN_PATTERNS, &patterns,
+                      THUNAR_UCA_MODEL_COLUMN_COMMAND, &command,
+                      THUNAR_UCA_MODEL_COLUMN_TYPES, &types,
+                      THUNAR_UCA_MODEL_COLUMN_ICON, &icon,
+                      THUNAR_UCA_MODEL_COLUMN_NAME, &name,
+                      -1);
+
+  /* setup the new selection */
+  thunar_uca_editor_set_types (uca_editor, types);
+
+  /* setup the new icon */
+  thunar_uca_editor_set_icon_name (uca_editor, icon);
+
+  /* apply the new values */
+  gtk_entry_set_text (GTK_ENTRY (uca_editor->description_entry), (description != NULL) ? description : "");
+  gtk_entry_set_text (GTK_ENTRY (uca_editor->patterns_entry), (patterns != NULL) ? patterns : "");
+  gtk_entry_set_text (GTK_ENTRY (uca_editor->command_entry), (command != NULL) ? command : "");
+  gtk_entry_set_text (GTK_ENTRY (uca_editor->name_entry), (name != NULL) ? name : "");
+
+  /* cleanup */
+  g_free (description);
+  g_free (patterns);
+  g_free (command);
+  g_free (icon);
+  g_free (name);
+}
+
+
+
+/**
+ * thunar_uca_editor_save:
+ * @uca_editor : a #ThunarUcaEditor.
+ * @uca_model  : a #ThunarUcaModel.
+ * @iter       : a #GtkTreeIter.
+ *
+ * Stores the current values from the @uca_editor in
+ * the @uca_model at the item specified by @iter.
+ **/
+void
+thunar_uca_editor_save (ThunarUcaEditor *uca_editor,
+                        ThunarUcaModel  *uca_model,
+                        GtkTreeIter     *iter)
+{
+  g_return_if_fail (THUNAR_UCA_IS_EDITOR (uca_editor));
+  g_return_if_fail (THUNAR_UCA_IS_MODEL (uca_model));
+  g_return_if_fail (iter != NULL);
+
+  thunar_uca_model_update (uca_model, iter,
+                           gtk_entry_get_text (GTK_ENTRY (uca_editor->name_entry)),
+                           gtk_entry_get_text (GTK_ENTRY (uca_editor->description_entry)),
+                           thunar_uca_editor_get_icon_name (uca_editor),
+                           gtk_entry_get_text (GTK_ENTRY (uca_editor->command_entry)),
+                           gtk_entry_get_text (GTK_ENTRY (uca_editor->patterns_entry)),
+                           thunar_uca_editor_get_types (uca_editor));
+}
+
+
diff --git a/thunar-uca/thunar-uca-editor.h b/thunar-uca/thunar-uca-editor.h
new file mode 100644 (file)
index 0000000..c0b8b5d
--- /dev/null
@@ -0,0 +1,50 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny@xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_UCA_EDITOR_H__
+#define __THUNAR_UCA_EDITOR_H__
+
+#include <thunar-uca/thunar-uca-model.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarUcaEditorClass ThunarUcaEditorClass;
+typedef struct _ThunarUcaEditor      ThunarUcaEditor;
+
+#define THUNAR_UCA_TYPE_EDITOR            (thunar_uca_editor_get_type ())
+#define THUNAR_UCA_EDITOR(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_UCA_TYPE_EDITOR, ThunarUcaEditor))
+#define THUNAR_UCA_EDITOR_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_UCA_TYPE_EDITOR, ThunarUcaEditorwClass))
+#define THUNAR_UCA_IS_EDITOR(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_UCA_TYPE_EDITOR)) 
+#define THUNAR_UCA_IS_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_UCA_TYPE_EDITOR))
+#define THUNAR_UCA_EDITOR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_UCA_TYPE_EDITOR, ThunarUcaEditorwClass))
+
+GType thunar_uca_editor_get_type      (void) G_GNUC_CONST G_GNUC_INTERNAL;
+void  thunar_uca_editor_register_type (ThunarxProviderPlugin  *plugin) G_GNUC_INTERNAL;
+
+void  thunar_uca_editor_load          (ThunarUcaEditor        *uca_editor,
+                                       ThunarUcaModel         *uca_model,
+                                       GtkTreeIter            *iter) G_GNUC_INTERNAL;
+void  thunar_uca_editor_save          (ThunarUcaEditor        *uca_editor,
+                                       ThunarUcaModel         *uca_model,
+                                       GtkTreeIter            *iter) G_GNUC_INTERNAL;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_UCA_EDITOR_H__ */
diff --git a/thunar-uca/thunar-uca-model.c b/thunar-uca/thunar-uca-model.c
new file mode 100644 (file)
index 0000000..70c6748
--- /dev/null
@@ -0,0 +1,1566 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny@xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <glib/gi18n-lib.h>
+#include <glib/gstdio.h>
+
+#include <thunar-uca/thunar-uca-model.h>
+#include <thunar-vfs/thunar-vfs.h>
+
+
+
+typedef struct _ThunarUcaModelItem ThunarUcaModelItem;
+
+
+
+typedef enum
+{
+  PARSER_START,
+  PARSER_ACTIONS,
+  PARSER_ACTION,
+  PARSER_ICON,
+  PARSER_NAME,
+  PARSER_COMMAND,
+  PARSER_PATTERNS,
+  PARSER_DESCRIPTION,
+  PARSER_DIRECTORIES,
+  PARSER_AUDIO_FILES,
+  PARSER_IMAGE_FILES,
+  PARSER_OTHER_FILES,
+  PARSER_TEXT_FILES,
+  PARSER_VIDEO_FILES,
+} ParserState;
+
+
+
+static void               thunar_uca_model_class_init       (ThunarUcaModelClass  *klass);
+static void               thunar_uca_model_tree_model_init  (GtkTreeModelIface    *iface);
+static void               thunar_uca_model_init             (ThunarUcaModel       *uca_model);
+static void               thunar_uca_model_finalize         (GObject              *object);
+static GtkTreeModelFlags  thunar_uca_model_get_flags        (GtkTreeModel         *tree_model);
+static gint               thunar_uca_model_get_n_columns    (GtkTreeModel         *tree_model);
+static GType              thunar_uca_model_get_column_type  (GtkTreeModel         *tree_model,
+                                                             gint                  column);
+static gboolean           thunar_uca_model_get_iter         (GtkTreeModel         *tree_model,
+                                                             GtkTreeIter          *iter,
+                                                             GtkTreePath          *path);
+static GtkTreePath       *thunar_uca_model_get_path         (GtkTreeModel         *tree_model,
+                                                             GtkTreeIter          *iter);
+static void               thunar_uca_model_get_value        (GtkTreeModel         *tree_model,
+                                                             GtkTreeIter          *iter,
+                                                             gint                  column,
+                                                             GValue               *value);
+static gboolean           thunar_uca_model_iter_next        (GtkTreeModel         *tree_model,
+                                                             GtkTreeIter          *iter);
+static gboolean           thunar_uca_model_iter_children    (GtkTreeModel         *tree_model,
+                                                             GtkTreeIter          *iter,
+                                                             GtkTreeIter          *parent);
+static gboolean           thunar_uca_model_iter_has_child   (GtkTreeModel         *tree_model,
+                                                             GtkTreeIter          *iter);
+static gint               thunar_uca_model_iter_n_children  (GtkTreeModel         *tree_model,
+                                                             GtkTreeIter          *iter);
+static gboolean           thunar_uca_model_iter_nth_child   (GtkTreeModel         *tree_model,
+                                                             GtkTreeIter          *iter,
+                                                             GtkTreeIter          *parent,
+                                                             gint                  n);
+static gboolean           thunar_uca_model_iter_parent      (GtkTreeModel         *tree_model,
+                                                             GtkTreeIter          *iter,
+                                                             GtkTreeIter          *child);
+static gboolean           thunar_uca_model_load_from_file   (ThunarUcaModel       *uca_model,
+                                                             const gchar          *filename,
+                                                             GError              **error);
+static void               thunar_uca_model_item_reset       (ThunarUcaModelItem   *item);
+static void               thunar_uca_model_item_free        (ThunarUcaModelItem   *item);
+static void               start_element_handler             (GMarkupParseContext  *context,
+                                                             const gchar          *element_name,
+                                                             const gchar         **attribute_names,
+                                                             const gchar         **attribute_values,
+                                                             gpointer              user_data,
+                                                             GError              **error);
+static void               end_element_handler               (GMarkupParseContext  *context,
+                                                             const gchar          *element_name,
+                                                             gpointer              user_data,
+                                                             GError              **error);
+static void               text_handler                      (GMarkupParseContext  *context,
+                                                             const gchar          *text,
+                                                             gsize                 text_len,
+                                                             gpointer              user_data,
+                                                             GError              **error);
+
+
+
+struct _ThunarUcaModelClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarUcaModel
+{
+  GObject __parent__;
+
+  GtkIconFactory *icon_factory;
+
+  GList          *items;
+  gint            stamp;
+};
+
+struct _ThunarUcaModelItem
+{
+  gchar         *name;
+  gchar         *description;
+  gchar         *icon;
+  gchar         *command;
+  gchar        **patterns;
+  ThunarUcaTypes types;
+
+  /* derived attributes */
+  gchar         *stock_id;
+  gboolean       multiple_selection : 1;
+};
+
+typedef XFCE_GENERIC_STACK(ParserState) ParserStack;
+
+typedef struct
+{
+  ParserStack    *stack;
+  ThunarUcaModel *model;
+  const gchar    *locale;
+  GString        *name;
+  gboolean        name_use;
+  guint           name_match;
+  GString        *icon;
+  GString        *command;
+  GString        *patterns;
+  GString        *description;
+  gboolean        description_use;
+  guint           description_match;
+  ThunarUcaTypes  types;
+} Parser;
+
+
+
+static const GMarkupParser markup_parser =
+{
+  start_element_handler,
+  end_element_handler,
+  text_handler,
+  NULL,
+  NULL,
+};
+
+
+
+THUNARX_DEFINE_TYPE_WITH_CODE (ThunarUcaModel,
+                               thunar_uca_model,
+                               G_TYPE_OBJECT,
+                               THUNARX_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
+                                                            thunar_uca_model_tree_model_init));
+
+
+
+static void
+thunar_uca_model_class_init (ThunarUcaModelClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_uca_model_finalize;
+}
+
+
+
+static void
+thunar_uca_model_tree_model_init (GtkTreeModelIface *iface)
+{
+  iface->get_flags = thunar_uca_model_get_flags;
+  iface->get_n_columns = thunar_uca_model_get_n_columns;
+  iface->get_column_type = thunar_uca_model_get_column_type;
+  iface->get_iter = thunar_uca_model_get_iter;
+  iface->get_path = thunar_uca_model_get_path;
+  iface->get_value = thunar_uca_model_get_value;
+  iface->iter_next = thunar_uca_model_iter_next;
+  iface->iter_children = thunar_uca_model_iter_children;
+  iface->iter_has_child = thunar_uca_model_iter_has_child;
+  iface->iter_n_children = thunar_uca_model_iter_n_children;
+  iface->iter_nth_child = thunar_uca_model_iter_nth_child;
+  iface->iter_parent = thunar_uca_model_iter_parent;
+}
+
+
+
+static void
+thunar_uca_model_init (ThunarUcaModel *uca_model)
+{
+  GError *error = NULL;
+  gchar  *filename;
+
+  /* allocate a new icon factory for our action icons
+   * and add it to the default icon factories
+   */
+  uca_model->icon_factory = gtk_icon_factory_new ();
+  gtk_icon_factory_add_default (uca_model->icon_factory);
+
+  /* generate a unique stamp */
+  uca_model->stamp = g_random_int ();
+
+  /* determine the path to the uca.xml config */
+  filename = xfce_resource_lookup (XFCE_RESOURCE_CONFIG, "Thunar/uca.xml");
+  if (G_LIKELY (filename != NULL))
+    {
+      /* try to load the file */
+      if (!thunar_uca_model_load_from_file (uca_model, filename, &error))
+        {
+          g_warning ("Failed to load `%s': %s", filename, error->message);
+          g_error_free (error);
+        }
+
+      /* release the filename */
+      g_free (filename);
+    }
+}
+
+
+
+static void
+thunar_uca_model_finalize (GObject *object)
+{
+  ThunarUcaModel *uca_model = THUNAR_UCA_MODEL (object);
+
+  /* drop our icon factory */
+  gtk_icon_factory_remove_default (uca_model->icon_factory);
+  g_object_unref (G_OBJECT (uca_model->icon_factory));
+
+  /* release all items */
+  g_list_foreach (uca_model->items, (GFunc) thunar_uca_model_item_free, NULL);
+  g_list_free (uca_model->items);
+
+  (*G_OBJECT_CLASS (thunar_uca_model_parent_class)->finalize) (object);
+}
+
+
+
+static GtkTreeModelFlags
+thunar_uca_model_get_flags (GtkTreeModel *tree_model)
+{
+  return GTK_TREE_MODEL_LIST_ONLY;
+}
+
+
+
+static gint
+thunar_uca_model_get_n_columns (GtkTreeModel *tree_model)
+{
+  return THUNAR_UCA_MODEL_N_COLUMNS;
+}
+
+
+
+static GType
+thunar_uca_model_get_column_type (GtkTreeModel *tree_model,
+                                  gint          column)
+{
+  switch (column)
+    {
+    case THUNAR_UCA_MODEL_COLUMN_NAME:
+      return G_TYPE_STRING;
+
+    case THUNAR_UCA_MODEL_COLUMN_DESCRIPTION:
+      return G_TYPE_STRING;
+
+    case THUNAR_UCA_MODEL_COLUMN_ICON:
+      return G_TYPE_STRING;
+
+    case THUNAR_UCA_MODEL_COLUMN_COMMAND:
+      return G_TYPE_STRING;
+
+    case THUNAR_UCA_MODEL_COLUMN_PATTERNS:
+      return G_TYPE_STRING;
+
+    case THUNAR_UCA_MODEL_COLUMN_TYPES:
+      return G_TYPE_UINT;
+
+    case THUNAR_UCA_MODEL_COLUMN_STOCK_ID:
+      return G_TYPE_STRING;
+
+    case THUNAR_UCA_MODEL_COLUMN_STOCK_LABEL:
+      return G_TYPE_STRING;
+
+    default:
+      g_assert_not_reached ();
+      return G_TYPE_INVALID;
+    }
+}
+
+
+
+static gboolean
+thunar_uca_model_get_iter (GtkTreeModel *tree_model,
+                           GtkTreeIter  *iter,
+                           GtkTreePath  *path)
+{
+  ThunarUcaModel *uca_model = THUNAR_UCA_MODEL (tree_model);
+
+  g_return_val_if_fail (THUNAR_UCA_IS_MODEL (uca_model), FALSE);
+  g_return_val_if_fail (gtk_tree_path_get_depth (path) > 0, FALSE);
+
+  iter->stamp = uca_model->stamp;
+  iter->user_data = g_list_nth (uca_model->items, gtk_tree_path_get_indices (path)[0]);
+
+  return (iter->user_data != NULL);
+}
+
+
+
+static GtkTreePath*
+thunar_uca_model_get_path (GtkTreeModel *tree_model,
+                           GtkTreeIter  *iter)
+{
+  ThunarUcaModel *uca_model = THUNAR_UCA_MODEL (tree_model);
+  gint            index;
+
+  g_return_val_if_fail (THUNAR_UCA_IS_MODEL (uca_model), NULL);
+  g_return_val_if_fail (iter->stamp == uca_model->stamp, NULL);
+
+  /* determine the index of the iter */
+  index = g_list_position (uca_model->items, iter->user_data);
+  if (G_UNLIKELY (index < 0))
+    return NULL;
+
+  return gtk_tree_path_new_from_indices (index, -1);
+}
+
+
+
+static void
+thunar_uca_model_get_value (GtkTreeModel *tree_model,
+                            GtkTreeIter  *iter,
+                            gint          column,
+                            GValue       *value)
+{
+  ThunarUcaModelItem *item = ((GList *) iter->user_data)->data;
+  ThunarUcaModel     *uca_model = THUNAR_UCA_MODEL (tree_model);
+  GtkIconSource      *icon_source;
+  GtkIconSet         *icon_set;
+  gchar              *str;
+
+  g_return_if_fail (THUNAR_UCA_IS_MODEL (uca_model));
+  g_return_if_fail (iter->stamp == uca_model->stamp);
+
+  /* initialize the value with the proper type */
+  g_value_init (value, gtk_tree_model_get_column_type (tree_model, column));
+
+  switch (column)
+    {
+    case THUNAR_UCA_MODEL_COLUMN_NAME:
+      g_value_set_static_string (value, item->name);
+      break;
+
+    case THUNAR_UCA_MODEL_COLUMN_DESCRIPTION:
+      g_value_set_static_string (value, item->description);
+      break;
+
+    case THUNAR_UCA_MODEL_COLUMN_ICON:
+      g_value_set_static_string (value, item->icon);
+      break;
+
+    case THUNAR_UCA_MODEL_COLUMN_COMMAND:
+      g_value_set_static_string (value, item->command);
+      break;
+
+    case THUNAR_UCA_MODEL_COLUMN_PATTERNS:
+      str = g_strjoinv (";", item->patterns);
+      g_value_take_string (value, str);
+      break;
+
+    case THUNAR_UCA_MODEL_COLUMN_TYPES:
+      g_value_set_uint (value, item->types);
+      break;
+
+    case THUNAR_UCA_MODEL_COLUMN_STOCK_ID:
+      if (item->stock_id == NULL && item->icon != NULL)
+        {
+          /* allocate a new icon set for the item */
+          icon_set = gtk_icon_set_new ();
+          icon_source = gtk_icon_source_new ();
+          if (g_path_is_absolute (item->icon))
+            gtk_icon_source_set_filename (icon_source, item->icon);
+          else
+            gtk_icon_source_set_icon_name (icon_source, item->icon);
+          gtk_icon_set_add_source (icon_set, icon_source);
+          gtk_icon_source_free (icon_source);
+
+          /* generate a unique stock-id for the icon */
+          item->stock_id = g_strdup_printf ("thunar-uca-%p", item);
+
+          /* register the icon set */
+          gtk_icon_factory_add (uca_model->icon_factory, item->stock_id, icon_set);
+
+          /* cleanup */
+          gtk_icon_set_unref (icon_set);
+        }
+      g_value_set_static_string (value, item->stock_id);
+      break;
+
+    case THUNAR_UCA_MODEL_COLUMN_STOCK_LABEL:
+      str = g_markup_printf_escaped ("<b>%s</b>\n%s", (item->name != NULL) ? item->name : "", (item->description != NULL) ? item->description : "");
+      g_value_take_string (value, str);
+      break;
+
+    default:
+      g_assert_not_reached ();
+    }
+}
+
+
+
+static gboolean
+thunar_uca_model_iter_next (GtkTreeModel *tree_model,
+                            GtkTreeIter  *iter)
+{
+  g_return_val_if_fail (THUNAR_UCA_IS_MODEL (tree_model), FALSE);
+  g_return_val_if_fail (iter->stamp == THUNAR_UCA_MODEL (tree_model)->stamp, FALSE);
+
+  iter->user_data = g_list_next (iter->user_data);
+  return (iter->user_data != NULL);
+}
+
+
+
+static gboolean
+thunar_uca_model_iter_children (GtkTreeModel *tree_model,
+                                GtkTreeIter  *iter,
+                                GtkTreeIter  *parent)
+{
+  ThunarUcaModel *uca_model = THUNAR_UCA_MODEL (tree_model);
+
+  g_return_val_if_fail (THUNAR_UCA_IS_MODEL (uca_model), FALSE);
+
+  if (G_LIKELY (parent == NULL && uca_model->items != NULL))
+    {
+      iter->stamp = uca_model->stamp;
+      iter->user_data = uca_model->items;
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_uca_model_iter_has_child (GtkTreeModel *tree_model,
+                                 GtkTreeIter  *iter)
+{
+  return FALSE;
+}
+
+
+
+static gint
+thunar_uca_model_iter_n_children (GtkTreeModel *tree_model,
+                                  GtkTreeIter  *iter)
+{
+  ThunarUcaModel *uca_model = THUNAR_UCA_MODEL (tree_model);
+
+  g_return_val_if_fail (THUNAR_UCA_IS_MODEL (uca_model), 0);
+
+  return (iter == NULL) ? g_list_length (uca_model->items) : 0;
+}
+
+
+
+static gboolean
+thunar_uca_model_iter_nth_child (GtkTreeModel *tree_model,
+                                 GtkTreeIter  *iter,
+                                 GtkTreeIter  *parent,
+                                 gint          n)
+{
+  ThunarUcaModel *uca_model = THUNAR_UCA_MODEL (tree_model);
+
+  g_return_val_if_fail (THUNAR_UCA_IS_MODEL (uca_model), FALSE);
+
+  if (G_LIKELY (parent != NULL))
+    {
+      iter->stamp = uca_model->stamp;
+      iter->user_data = g_list_nth (uca_model->items, n);
+      return (iter->user_data != NULL);
+    }
+
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_uca_model_iter_parent (GtkTreeModel *tree_model,
+                              GtkTreeIter  *iter,
+                              GtkTreeIter  *child)
+{
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_uca_model_load_from_file (ThunarUcaModel *uca_model,
+                                 const gchar    *filename,
+                                 GError        **error)
+{
+  GMarkupParseContext *context;
+  gboolean             succeed;
+  Parser               parser;
+  gchar               *content;
+  gsize                content_len;
+
+  g_return_val_if_fail (THUNAR_UCA_IS_MODEL (uca_model), FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+  g_return_val_if_fail (g_path_is_absolute (filename), FALSE);
+
+  /* read the file info memory */
+  if (!g_file_get_contents (filename, &content, &content_len, error))
+    return FALSE;
+
+  /* initialize the parser */
+  parser.stack = xfce_stack_new (ParserStack);
+  parser.model = uca_model;
+  parser.locale = setlocale (LC_MESSAGES, NULL);
+  parser.name = g_string_new (NULL);
+  parser.icon = g_string_new (NULL);
+  parser.command = g_string_new (NULL);
+  parser.patterns = g_string_new (NULL);
+  parser.description = g_string_new (NULL);
+  xfce_stack_push (parser.stack, PARSER_START);
+
+  /* parse the file */
+  context = g_markup_parse_context_new (&markup_parser, 0, &parser, NULL);
+  succeed = g_markup_parse_context_parse (context, content, content_len, error)
+         && g_markup_parse_context_end_parse (context, error);
+
+  /* cleanup */
+  g_markup_parse_context_free (context);
+  g_string_free (parser.description, TRUE);
+  g_string_free (parser.patterns, TRUE);
+  g_string_free (parser.command, TRUE);
+  g_string_free (parser.icon, TRUE);
+  g_string_free (parser.name, TRUE);
+  xfce_stack_free (parser.stack);
+  g_free (content);
+
+  return succeed;
+}
+
+
+
+static void
+thunar_uca_model_item_reset (ThunarUcaModelItem *item)
+{
+  /* release the previous values... */
+  g_strfreev (item->patterns);
+  g_free (item->description);
+  g_free (item->stock_id);
+  g_free (item->command);
+  g_free (item->name);
+  g_free (item->icon);
+
+  /* ...and reset the item memory */
+  bzero (item, sizeof (*item));
+}
+
+
+
+static void
+thunar_uca_model_item_free (ThunarUcaModelItem *item)
+{
+  thunar_uca_model_item_reset (item);
+  g_free (item);
+}
+
+
+
+static void
+start_element_handler (GMarkupParseContext *context,
+                       const gchar         *element_name,
+                       const gchar        **attribute_names,
+                       const gchar        **attribute_values,
+                       gpointer             user_data,
+                       GError             **error)
+{
+  Parser *parser = user_data;
+  guint   match, n;
+
+  switch (xfce_stack_top (parser->stack))
+    {
+    case PARSER_START:
+      if (strcmp (element_name, "actions") == 0)
+        xfce_stack_push (parser->stack, PARSER_ACTIONS);
+      else
+        goto unknown_element;
+      break;
+
+    case PARSER_ACTIONS:
+      if (strcmp (element_name, "action") == 0)
+        {
+          parser->name_match = XFCE_LOCALE_NO_MATCH;
+          parser->description_match = XFCE_LOCALE_NO_MATCH;
+          parser->types = 0;
+          xfce_stack_push (parser->stack, PARSER_ACTION);
+        }
+      else
+        goto unknown_element;
+      break;
+
+    case PARSER_ACTION:
+      if (strcmp (element_name, "name") == 0)
+        {
+          for (n = 0; attribute_names[n] != NULL; ++n)
+            if (strcmp (attribute_names[n], "xml:lang") == 0)
+              break;
+
+          if (G_LIKELY (attribute_names[n] == NULL))
+            {
+              parser->name_use = (parser->name_match <= XFCE_LOCALE_NO_MATCH);
+            }
+          else
+            {
+              match = xfce_locale_match (parser->locale, attribute_values[n]);
+              if (parser->name_match < match)
+                {
+                  parser->name_match = match;
+                  parser->name_use = TRUE;
+                }
+              else
+                {
+                  parser->name_use = FALSE;
+                }
+            }
+
+          if (parser->name_use)
+            g_string_truncate (parser->name, 0);
+
+          xfce_stack_push (parser->stack, PARSER_NAME);
+        }
+      else if (strcmp (element_name, "icon") == 0)
+        {
+          g_string_truncate (parser->icon, 0);
+          xfce_stack_push (parser->stack, PARSER_ICON);
+        }
+      else if (strcmp (element_name, "command") == 0)
+        {
+          g_string_truncate (parser->command, 0);
+          xfce_stack_push (parser->stack, PARSER_COMMAND);
+        }
+      else if (strcmp (element_name, "patterns") == 0)
+        {
+          g_string_truncate (parser->patterns, 0);
+          xfce_stack_push (parser->stack, PARSER_PATTERNS);
+        }
+      else if (strcmp (element_name, "description") == 0)
+        {
+          for (n = 0; attribute_names[n] != NULL; ++n)
+            if (strcmp (attribute_names[n], "xml:lang") == 0)
+              break;
+
+          if (G_LIKELY (attribute_names[n] == NULL))
+            {
+              parser->description_use = (parser->description_match <= XFCE_LOCALE_NO_MATCH);
+            }
+          else
+            {
+              match = xfce_locale_match (parser->locale, attribute_values[n]);
+              if (parser->description_match < match)
+                {
+                  parser->description_match = match;
+                  parser->description_use = TRUE;
+                }
+              else
+                {
+                  parser->description_use = FALSE;
+                }
+            }
+
+          if (parser->description_use)
+            g_string_truncate (parser->description, 0);
+
+          xfce_stack_push (parser->stack, PARSER_DESCRIPTION);
+        }
+      else if (strcmp (element_name, "directories") == 0)
+        {
+          parser->types |= THUNAR_UCA_TYPE_DIRECTORIES;
+          xfce_stack_push (parser->stack, PARSER_DIRECTORIES);
+        }
+      else if (strcmp (element_name, "audio-files") == 0)
+        {
+          parser->types |= THUNAR_UCA_TYPE_AUDIO_FILES;
+          xfce_stack_push (parser->stack, PARSER_AUDIO_FILES);
+        }
+      else if (strcmp (element_name, "image-files") == 0)
+        {
+          parser->types |= THUNAR_UCA_TYPE_IMAGE_FILES;
+          xfce_stack_push (parser->stack, PARSER_IMAGE_FILES);
+        }
+      else if (strcmp (element_name, "other-files") == 0)
+        {
+          parser->types |= THUNAR_UCA_TYPE_OTHER_FILES;
+          xfce_stack_push (parser->stack, PARSER_OTHER_FILES);
+        }
+      else if (strcmp (element_name, "text-files") == 0)
+        {
+          parser->types |= THUNAR_UCA_TYPE_TEXT_FILES;
+          xfce_stack_push (parser->stack, PARSER_TEXT_FILES);
+        }
+      else if (strcmp (element_name, "video-files") == 0)
+        {
+          parser->types |= THUNAR_UCA_TYPE_VIDEO_FILES;
+          xfce_stack_push (parser->stack, PARSER_VIDEO_FILES);
+        }
+      else
+        goto unknown_element;
+      break;
+
+    default:
+      goto unknown_element;
+    }
+
+  return;
+
+unknown_element:
+  g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT,
+               _("Unknown element <%s>"), element_name);
+}
+
+
+
+static void
+end_element_handler (GMarkupParseContext *context,
+                     const gchar         *element_name,
+                     gpointer             user_data,
+                     GError             **error)
+{
+  GtkTreeIter iter;
+  Parser     *parser = user_data;
+
+  switch (xfce_stack_top (parser->stack))
+    {
+    case PARSER_START:
+      g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
+                   _("End element handler called while in root context"));
+      return;
+
+    case PARSER_ACTIONS:
+      if (strcmp (element_name, "actions") != 0)
+        goto unknown_element;
+      break;
+
+    case PARSER_ACTION:
+      if (strcmp (element_name, "action") == 0)
+        {
+          thunar_uca_model_append (parser->model, &iter);
+          thunar_uca_model_update (parser->model, &iter,
+                                   parser->name->str,
+                                   parser->description->str,
+                                   parser->icon->str,
+                                   parser->command->str,
+                                   parser->patterns->str,
+                                   parser->types);
+        }
+      else
+        goto unknown_element;
+      break;
+
+    case PARSER_NAME:
+      if (strcmp (element_name, "name") != 0)
+        goto unknown_element;
+      break;
+
+    case PARSER_ICON:
+      if (strcmp (element_name, "icon") != 0)
+        goto unknown_element;
+      break;
+
+    case PARSER_COMMAND:
+      if (strcmp (element_name, "command") != 0)
+        goto unknown_element;
+      break;
+
+    case PARSER_PATTERNS:
+      if (strcmp (element_name, "patterns") != 0)
+        goto unknown_element;
+      break;
+
+    case PARSER_DESCRIPTION:
+      if (strcmp (element_name, "description") != 0)
+        goto unknown_element;
+      break;
+
+    case PARSER_DIRECTORIES:
+      if (strcmp (element_name, "directories") != 0)
+        goto unknown_element;
+      break;
+
+    case PARSER_AUDIO_FILES:
+      if (strcmp (element_name, "audio-files") != 0)
+        goto unknown_element;
+      break;
+
+    case PARSER_IMAGE_FILES:
+      if (strcmp (element_name, "image-files") != 0)
+        goto unknown_element;
+      break;
+
+    case PARSER_OTHER_FILES:
+      if (strcmp (element_name, "other-files") != 0)
+        goto unknown_element;
+      break;
+
+    case PARSER_TEXT_FILES:
+      if (strcmp (element_name, "text-files") != 0)
+        goto unknown_element;
+      break;
+
+    case PARSER_VIDEO_FILES:
+      if (strcmp (element_name, "video-files") != 0)
+        goto unknown_element;
+      break;
+
+    default:
+      goto unknown_element;
+    }
+
+  xfce_stack_pop (parser->stack);
+  return;
+
+unknown_element:
+  g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT,
+               _("Unknown closing element <%s>"), element_name);
+}
+
+
+
+static void
+text_handler (GMarkupParseContext *context,
+              const gchar         *text,
+              gsize                text_len,
+              gpointer             user_data,
+              GError             **error)
+{
+  Parser *parser = user_data;
+
+  switch (xfce_stack_top (parser->stack))
+    {
+    case PARSER_NAME:
+      if (parser->name_use)
+        g_string_append_len (parser->name, text, text_len);
+      break;
+
+    case PARSER_ICON:
+      g_string_append_len (parser->icon, text, text_len);
+      break;
+
+    case PARSER_COMMAND:
+      g_string_append_len (parser->command, text, text_len);
+      break;
+
+    case PARSER_PATTERNS:
+      g_string_append_len (parser->patterns, text, text_len);
+      break;
+
+    case PARSER_DESCRIPTION:
+      if (parser->description_use)
+        g_string_append_len (parser->description, text, text_len);
+      break;
+
+    default:
+      break;
+    }
+}
+
+
+
+/**
+ * thunar_uca_model_get_default:
+ *
+ * Returns a reference to the default shared
+ * #ThunarUcaModel instance. The caller is 
+ * responsible to free the returned instance
+ * using g_object_unref() when no longer 
+ * needed.
+ *
+ * Return value: a reference to the default
+ *               #ThunarUcaModel instance.
+ **/
+ThunarUcaModel*
+thunar_uca_model_get_default (void)
+{
+  static ThunarUcaModel *model = NULL;
+
+  if (model == NULL)
+    {
+      model = g_object_new (THUNAR_UCA_TYPE_MODEL, NULL);
+      g_object_add_weak_pointer (G_OBJECT (model), (gpointer) &model);
+    }
+  else
+    {
+      g_object_ref (G_OBJECT (model));
+    }
+
+  return model;
+}
+
+
+
+static inline ThunarUcaTypes
+types_from_mime_type (const gchar *mime_type)
+{
+  if (strcmp (mime_type, "inode/directory") == 0)
+    return THUNAR_UCA_TYPE_DIRECTORIES;
+  else if (strncmp (mime_type, "audio/", 6) == 0)
+    return THUNAR_UCA_TYPE_AUDIO_FILES;
+  else if (strncmp (mime_type, "image/", 6) == 0)
+    return THUNAR_UCA_TYPE_IMAGE_FILES;
+  else if (strncmp (mime_type, "text/", 5) == 0)
+    return THUNAR_UCA_TYPE_TEXT_FILES;
+  else if (strncmp (mime_type, "video/", 6) == 0)
+    return THUNAR_UCA_TYPE_VIDEO_FILES;
+  else
+    return 0;
+}
+
+
+
+/**
+ * thunar_uca_model_match:
+ * @uca_model  : a #ThunarUcaModel.
+ * @file_infos : a #GList of #ThunarxFileInfo<!---->s.
+ *
+ * Returns the #GtkTreePath<!---->s for the items in @uca_model,
+ * that are defined for the #ThunarxFileInfo<!---->s in the
+ * @file_infos.
+ *
+ * The caller is responsible to free the returned list using
+ * <informalexample><programlisting>
+ * g_list_foreach (list, (GFunc) gtk_tree_path_free, NULL);
+ * g_list_free (list);
+ * </programlisting></informalexample>
+ *
+ * Return value: the list of #GtkTreePath<!---->s to items
+ *               that match @file_infos.
+ **/
+GList*
+thunar_uca_model_match (ThunarUcaModel *uca_model,
+                        GList          *file_infos)
+{
+  typedef struct
+  {
+    const gchar   *name;
+    ThunarUcaTypes types;
+  } ThunarUcaFile;
+
+  ThunarVfsMimeDatabase *mime_database;
+  ThunarUcaModelItem    *item;
+  ThunarUcaFile         *files;
+  ThunarVfsInfo         *info;
+  const gchar           *mime_type;
+  gboolean               matches;
+  GList                 *mime_infos;
+  GList                 *paths = NULL;
+  GList                 *lp, *mp;
+  gint                   n_files;
+  gint                   i, m, n;
+
+  g_return_val_if_fail (THUNAR_UCA_IS_MODEL (uca_model), NULL);
+
+  /* special case to avoid overhead */
+  if (G_UNLIKELY (uca_model->items == NULL))
+    return NULL;
+
+  /* determine the ThunarUcaFile's for the given file_infos */
+  n_files = g_list_length (file_infos);
+  files = g_new (ThunarUcaFile, n_files);
+  for (lp = file_infos, n = 0; lp != NULL; lp = lp->next, ++n)
+    {
+      info = thunarx_file_info_get_vfs_info (lp->data);
+      mime_type = thunar_vfs_mime_info_get_name (info->mime_info);
+      files[n].name = thunar_vfs_path_get_name (info->path);
+      files[n].types = types_from_mime_type (mime_type);
+      if (G_UNLIKELY (files[n].types == 0))
+        {
+          mime_database = thunar_vfs_mime_database_get_default ();
+          mime_infos = thunar_vfs_mime_database_get_infos_for_info (mime_database, info->mime_info);
+          for (mp = mime_infos; mp != NULL; mp = mp->next)
+            {
+              mime_type = thunar_vfs_mime_info_get_name (mp->data);
+              files[n].types |= types_from_mime_type (mime_type);
+              thunar_vfs_mime_info_unref (mp->data);
+            }
+          g_object_unref (G_OBJECT (mime_database));
+          g_list_free (mime_infos);
+        }
+      if (G_UNLIKELY (files[n].types == 0))
+        files[n].types = THUNAR_UCA_TYPE_OTHER_FILES;
+      thunar_vfs_info_unref (info);
+    }
+
+  /* lookup the matching items */
+  for (i = 0, lp = uca_model->items; lp != NULL; ++i, lp = lp->next)
+    {
+      /* check if we can just ignore this item */
+      item = (ThunarUcaModelItem *) lp->data;
+      if (!item->multiple_selection && n_files > 1)
+        continue;
+
+      /* match the specified files */
+      for (n = 0; n < n_files; ++n)
+        {
+          /* verify that we support this type of file */
+          if ((files[n].types & item->types) == 0)
+            break;
+
+          /* atleast on pattern must match the file name */
+          for (m = 0, matches = FALSE; item->patterns[m] != NULL && !matches; ++m)
+            matches = g_pattern_match_simple (item->patterns[m], files[n].name);
+
+          /* no need to continue if none of the patterns match */
+          if (!matches)
+            break;
+        }
+
+      /* add the path if all files match one of the patterns */
+      if (G_UNLIKELY (n == n_files))
+        paths = g_list_append (paths, gtk_tree_path_new_from_indices (i, -1));
+    }
+
+  /* cleanup */
+  g_free (files);
+
+  return paths;
+}
+
+
+
+/**
+ * thunar_uca_model_append:
+ * @uca_model : a #ThunarUcaModel.
+ * @iter      : return location for the new #GtkTreeIter.
+ *
+ * Appends a new item to the @uca_model and returns the
+ * @iter of the new item.
+ **/
+void
+thunar_uca_model_append (ThunarUcaModel *uca_model,
+                         GtkTreeIter    *iter)
+{
+  ThunarUcaModelItem *item;
+  GtkTreePath        *path;
+
+  g_return_if_fail (THUNAR_UCA_IS_MODEL (uca_model));
+  g_return_if_fail (iter != NULL);
+
+  /* append the new item */
+  item = g_new0 (ThunarUcaModelItem, 1);
+  uca_model->items = g_list_append (uca_model->items, item);
+
+  /* determine the tree iter of the new item */
+  iter->stamp = uca_model->stamp;
+  iter->user_data = g_list_last (uca_model->items);
+
+  /* notify listeners about the new item */
+  path = gtk_tree_model_get_path (GTK_TREE_MODEL (uca_model), iter);
+  gtk_tree_model_row_inserted (GTK_TREE_MODEL (uca_model), path, iter);
+  gtk_tree_path_free (path);
+}
+
+
+
+/**
+ * thunar_uca_model_exchange:
+ * @uca_model : a #ThunarUcaModel.
+ * @iter_a    : a #GtkTreeIter.
+ * @iter_b    : a #GtkTreeIter.
+ *
+ * Exchanges the items at @iter_a and @iter_b in
+ * @uca_model.
+ **/
+void
+thunar_uca_model_exchange (ThunarUcaModel *uca_model,
+                           GtkTreeIter    *iter_a,
+                           GtkTreeIter    *iter_b)
+{
+  ThunarUcaModelItem *item;
+  GtkTreePath        *path;
+  GList              *list_a = iter_a->user_data;
+  GList              *list_b = iter_b->user_data;
+  gint               *new_order;
+  gint                n_items;
+  gint                n;
+
+  g_return_if_fail (THUNAR_UCA_IS_MODEL (uca_model));
+  g_return_if_fail (iter_a->stamp == uca_model->stamp);
+  g_return_if_fail (iter_b->stamp == uca_model->stamp);
+
+  /* allocate and initialize the new order array */
+  n_items = g_list_length (uca_model->items);
+  new_order = g_newa (gint, n_items);
+  for (n = 0; n < n_items; ++n)
+    new_order[n] = n;
+
+  /* change new_order appropriately */
+  new_order[g_list_position (uca_model->items, list_a)] = g_list_position (uca_model->items, list_b);
+  new_order[g_list_position (uca_model->items, list_b)] = g_list_position (uca_model->items, list_a);
+
+  /* perform the exchange */
+  item = list_a->data;
+  list_a->data = list_b->data;
+  list_b->data = item;
+
+  /* notify listeners about the new order */
+  path = gtk_tree_path_new ();
+  gtk_tree_model_rows_reordered (GTK_TREE_MODEL (uca_model), path, NULL, new_order);
+  gtk_tree_path_free (path);
+}
+
+
+
+/**
+ * thunar_uca_model_remove:
+ * @uca_model : a #ThunarUcaModel.
+ * @iter      : a #GtkTreeIter.
+ *
+ * Removes the item at the given @iter from the
+ * @uca_model.
+ **/
+void
+thunar_uca_model_remove (ThunarUcaModel *uca_model,
+                         GtkTreeIter    *iter)
+{
+  ThunarUcaModelItem *item;
+  GtkTreePath        *path;
+
+  g_return_if_fail (THUNAR_UCA_IS_MODEL (uca_model));
+  g_return_if_fail (iter->stamp == uca_model->stamp);
+
+  /* determine the path for the item to remove */
+  path = gtk_tree_model_get_path (GTK_TREE_MODEL (uca_model), iter);
+
+  /* remove the node from the list */
+  item = ((GList *) iter->user_data)->data;
+  uca_model->items = g_list_delete_link (uca_model->items, iter->user_data);
+  thunar_uca_model_item_free (item);
+
+  /* notify listeners */
+  gtk_tree_model_row_deleted (GTK_TREE_MODEL (uca_model), path);
+
+  /* cleanup */
+  gtk_tree_path_free (path);
+}
+
+
+
+/**
+ * thunar_uca_model_update:
+ * @uca_model          : a #ThunarUcaModel.
+ * @iter               : the #GtkTreeIter of the item to update.
+ * @name               : the name of the item.
+ * @description        : the description of the item.
+ * @icon               : the icon for the item.
+ * @command            : the command of the item.
+ * @patterns           : the patterns to match files for this item.
+ * @types              : where to apply this item.
+ *
+ * Updates the @uca_model item at @iter with the given values.
+ **/
+void
+thunar_uca_model_update (ThunarUcaModel *uca_model,
+                         GtkTreeIter    *iter,
+                         const gchar    *name,
+                         const gchar    *description,
+                         const gchar    *icon,
+                         const gchar    *command,
+                         const gchar    *patterns,
+                         ThunarUcaTypes  types)
+{
+  ThunarUcaModelItem *item;
+  GtkTreePath        *path;
+  guint               n, m;
+
+  g_return_if_fail (THUNAR_UCA_IS_MODEL (uca_model));
+  g_return_if_fail (iter->stamp == uca_model->stamp);
+
+  /* reset the previous item values */
+  item = ((GList *) iter->user_data)->data;
+  thunar_uca_model_item_reset (item);
+
+  /* setup the new item values */
+  if (G_LIKELY (name != NULL && *name != '\0'))
+    item->name = g_strdup (name);
+  if (G_LIKELY (icon != NULL && *icon != '\0'))
+    item->icon = g_strdup (icon);
+  if (G_LIKELY (command != NULL && *command != '\0'))
+    item->command = g_strdup (command);
+  if (G_LIKELY (description != NULL && *description != '\0'))
+    item->description = g_strdup (description);
+  item->types = types;
+
+  /* setup the patterns */
+  item->patterns = g_strsplit ((patterns != NULL && *patterns != '\0') ? patterns : "*", ";", -1);
+  for (m = n = 0; item->patterns[m] != NULL; ++m)
+    {
+      if (G_UNLIKELY (item->patterns[m][0] == '\0'))
+        g_free (item->patterns[m]);
+      else
+        item->patterns[n++] = g_strstrip (item->patterns[m]);
+    }
+  item->patterns[n] = NULL;
+
+  /* check if this item will work for multiple files */
+  item->multiple_selection = (command != NULL && (strstr (command, "%F") != NULL
+                                               || strstr (command, "%D") != NULL
+                                               || strstr (command, "%N") != NULL
+                                               || strstr (command, "%U") != NULL));
+
+  /* notify listeners about the changed item */
+  path = gtk_tree_model_get_path (GTK_TREE_MODEL (uca_model), iter);
+  gtk_tree_model_row_changed (GTK_TREE_MODEL (uca_model), path, iter);
+  gtk_tree_path_free (path);
+}
+
+
+
+/**
+ * thunar_uca_model_save:
+ * @uca_model : a #ThunarUcaModel.
+ * @error     : return location for errors or %NULL.
+ *
+ * Instructs @uca_model to sync its current state to
+ * persistent storage.
+ *
+ * Return value: %TRUE on success, %FALSE if @error is set.
+ **/
+gboolean
+thunar_uca_model_save (ThunarUcaModel *uca_model,
+                       GError        **error)
+{
+  ThunarUcaModelItem *item;
+  gboolean            result = FALSE;
+  gchar              *tmp_path;
+  gchar              *patterns;
+  gchar              *escaped;
+  gchar              *path;
+  GList              *lp;
+  FILE               *fp;
+  gint                fd;
+
+  g_return_val_if_fail (THUNAR_UCA_IS_MODEL (uca_model), FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+  /* determine the save location */
+  path = xfce_resource_save_location (XFCE_RESOURCE_CONFIG, "Thunar/uca.xml", TRUE);
+  if (G_UNLIKELY (path == NULL))
+    {
+      g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_IO, _("Failed to determine save location for uca.xml"));
+      return FALSE;
+    }
+
+  /* try to open a temporary file */
+  tmp_path = g_strconcat (path, ".XXXXXX", NULL);
+  fd = g_mkstemp (tmp_path);
+  if (G_UNLIKELY (fd < 0))
+    {
+      g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno), g_strerror (errno));
+      goto done;
+    }
+
+  /* wrap the file descriptor into a file pointer */
+  fp = fdopen (fd, "w");
+
+  /* write the header */
+  fprintf (fp, "<?xml encoding=\"UTF-8\" version=\"1.0\"?>\n<actions>");
+
+  /* write the model items */
+  for (lp = uca_model->items; lp != NULL; lp = lp->next)
+    {
+      item = (ThunarUcaModelItem *) lp->data;
+      fprintf (fp, "<action>");
+      patterns = g_strjoinv (";", item->patterns);
+      escaped = g_markup_printf_escaped ("<icon>%s</icon>"
+                                         "<name>%s</name>"
+                                         "<command>%s</command>"
+                                         "<description>%s</description>"
+                                         "<patterns>%s</patterns>",
+                                         (item->icon != NULL) ? item->icon : "",
+                                         (item->name != NULL) ? item->name : "",
+                                         (item->command != NULL) ? item->command : "",
+                                         (item->description != NULL) ? item->description : "",
+                                         patterns);
+      fprintf (fp, "%s", escaped);
+      g_free (patterns);
+      g_free (escaped);
+      if ((item->types & THUNAR_UCA_TYPE_DIRECTORIES) != 0)
+        fprintf (fp, "<directories/>");
+      if ((item->types & THUNAR_UCA_TYPE_AUDIO_FILES) != 0)
+        fprintf (fp, "<audio-files/>");
+      if ((item->types & THUNAR_UCA_TYPE_IMAGE_FILES) != 0)
+        fprintf (fp, "<image-files/>");
+      if ((item->types & THUNAR_UCA_TYPE_OTHER_FILES) != 0)
+        fprintf (fp, "<other-files/>");
+      if ((item->types & THUNAR_UCA_TYPE_TEXT_FILES) != 0)
+        fprintf (fp, "<text-files/>");
+      if ((item->types & THUNAR_UCA_TYPE_VIDEO_FILES) != 0)
+        fprintf (fp, "<video-files/>");
+      fprintf (fp, "</action>");
+    }
+
+  /* write the footer and close the tmp file */
+  fprintf (fp, "</actions>\n");
+  fclose (fp);
+
+  /* rename the file (atomic) */
+  if (g_rename (tmp_path, path) < 0)
+    {
+      g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno), g_strerror (errno));
+      g_unlink (tmp_path);
+    }
+  else
+    {
+      /* yeppa, successful */
+      result = TRUE;
+    }
+
+done:
+  /* cleanup */
+  g_free (tmp_path);
+  g_free (path);
+
+  return result;
+}
+
+
+
+/**
+ * thunar_uca_model_parse_argv:
+ * @uca_model   : a #ThunarUcaModel.
+ * @iter        : the #GtkTreeIter of the item.
+ * @file_infos  : the #GList of #ThunarxFileInfo<!---->s to pass to the item.
+ * @argcp       : return location for number of args.
+ * @argvp       : return location for array of args.
+ * @error       : return location for errors or %NULL.
+ *
+ * Return value: %TRUE on success, %FALSE if @error is set.
+ **/
+gboolean
+thunar_uca_model_parse_argv (ThunarUcaModel *uca_model,
+                             GtkTreeIter    *iter,
+                             GList          *file_infos,
+                             gint           *argcp,
+                             gchar        ***argvp,
+                             GError        **error)
+{
+  ThunarUcaModelItem *item;
+  const gchar        *p;
+  gboolean            result = FALSE;
+  GString            *command_line = g_string_new (NULL);
+  GList              *lp;
+  gchar              *dirname;
+  gchar              *quoted;
+  gchar              *path;
+  gchar              *uri;
+
+  g_return_val_if_fail (THUNAR_UCA_IS_MODEL (uca_model), FALSE);
+  g_return_val_if_fail (iter->stamp == uca_model->stamp, FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+  /* verify that a command is set for the item */
+  item = (ThunarUcaModelItem *) ((GList *) iter->user_data)->data;
+  if (item->command == NULL || *item->command == '\0')
+    {
+      g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, _("Command not configured"));
+      goto done;
+    }
+
+  /* generate the command line */
+  for (p = item->command; *p != '\0'; ++p)
+    {
+      if (p[0] == '%' && p[1] != '\0')
+        {
+          switch (*++p)
+            {
+            case 'f':
+              if (G_LIKELY (file_infos != NULL))
+                {
+                  uri = thunarx_file_info_get_uri (file_infos->data);
+                  path = g_filename_from_uri (uri, NULL, error);
+                  g_free (uri);
+
+                  if (G_UNLIKELY (path == NULL))
+                    goto done;
+
+                  quoted = g_shell_quote (path);
+                  g_string_append (command_line, quoted);
+                  g_free (quoted);
+                  g_free (path);
+                }
+              break;
+
+            case 'F':
+              for (lp = file_infos; lp != NULL; lp = lp->next)
+                {
+                  if (G_LIKELY (lp != file_infos))
+                    g_string_append_c (command_line, ' ');
+
+                  uri = thunarx_file_info_get_uri (lp->data);
+                  path = g_filename_from_uri (uri, NULL, error);
+                  g_free (uri);
+
+                  if (G_UNLIKELY (path == NULL))
+                    goto done;
+
+                  quoted = g_shell_quote (path);
+                  g_string_append (command_line, quoted);
+                  g_free (quoted);
+                  g_free (path);
+                }
+              break;
+
+            case 'u':
+              if (G_LIKELY (file_infos != NULL))
+                {
+                  uri = thunarx_file_info_get_uri (file_infos->data);
+                  quoted = g_shell_quote (uri);
+                  g_string_append (command_line, quoted);
+                  g_free (quoted);
+                  g_free (uri);
+                }
+              break;
+
+            case 'U':
+              for (lp = file_infos; lp != NULL; lp = lp->next)
+                {
+                  if (G_LIKELY (lp != file_infos))
+                    g_string_append_c (command_line, ' ');
+
+                  uri = thunarx_file_info_get_uri (lp->data);
+                  quoted = g_shell_quote (uri);
+                  g_string_append (command_line, quoted);
+                  g_free (quoted);
+                  g_free (uri);
+                }
+              break;
+
+            case 'd':
+              if (G_LIKELY (file_infos != NULL))
+                {
+                  uri = thunarx_file_info_get_uri (file_infos->data);
+                  path = g_filename_from_uri (uri, NULL, error);
+                  g_free (uri);
+
+                  if (G_UNLIKELY (path == NULL))
+                    goto done;
+
+                  dirname = g_path_get_dirname (path);
+                  quoted = g_shell_quote (path);
+                  g_string_append (command_line, quoted);
+                  g_free (dirname);
+                  g_free (quoted);
+                  g_free (path);
+                }
+              break;
+
+            case 'D':
+              for (lp = file_infos; lp != NULL; lp = lp->next)
+                {
+                  if (G_LIKELY (lp != file_infos))
+                    g_string_append_c (command_line, ' ');
+
+                  uri = thunarx_file_info_get_uri (lp->data);
+                  path = g_filename_from_uri (uri, NULL, error);
+                  g_free (uri);
+
+                  if (G_UNLIKELY (path == NULL))
+                    goto done;
+
+                  dirname = g_path_get_dirname (path);
+                  quoted = g_shell_quote (path);
+                  g_string_append (command_line, quoted);
+                  g_free (dirname);
+                  g_free (quoted);
+                  g_free (path);
+                }
+              break;
+
+            case 'n':
+              if (G_LIKELY (file_infos != NULL))
+                {
+                  path = thunarx_file_info_get_name (file_infos->data);
+                  quoted = g_shell_quote (path);
+                  g_string_append (command_line, quoted);
+                  g_free (quoted);
+                  g_free (path);
+                }
+              break;
+
+            case 'N':
+              for (lp = file_infos; lp != NULL; lp = lp->next)
+                {
+                  if (G_LIKELY (lp != file_infos))
+                    g_string_append_c (command_line, ' ');
+
+                  path = thunarx_file_info_get_name (lp->data);
+                  quoted = g_shell_quote (path);
+                  g_string_append (command_line, quoted);
+                  g_free (quoted);
+                  g_free (path);
+                }
+              break;
+
+            case '%':
+              g_string_append_c (command_line, '%');
+              break;
+            }
+        }
+      else
+        {
+          g_string_append_c (command_line, *p);
+        }
+    }
+
+  result = g_shell_parse_argv (command_line->str, argcp, argvp, error);
+
+done:
+  g_string_free (command_line, TRUE);
+  return result;
+}
+
+
diff --git a/thunar-uca/thunar-uca-model.h b/thunar-uca/thunar-uca-model.h
new file mode 100644 (file)
index 0000000..1d95119
--- /dev/null
@@ -0,0 +1,109 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny@xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_UCA_MODEL_H__
+#define __THUNAR_UCA_MODEL_H__
+
+#include <thunarx/thunarx.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarUcaModelClass ThunarUcaModelClass;
+typedef struct _ThunarUcaModel      ThunarUcaModel;
+
+#define THUNAR_UCA_TYPE_MODEL             (thunar_uca_model_get_type ())
+#define THUNAR_UCA_MODEL(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_UCA_TYPE_MODEL, ThunarUcaModel))
+#define THUNAR_UCA_MODEL_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_UCA_TYPE_MODEL, ThunarUcaModelClass))
+#define THUNAR_UCA_IS_MODEL(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_UCA_TYPE_MODEL))
+#define THUNAR_UCA_IS_MODEL_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_UCA_TYPE_MODEL))
+#define THUNAR_UCA_MODEL_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_UCA_TYPE_MODEL, ThunarUcaModelClass))
+
+typedef enum
+{
+  THUNAR_UCA_MODEL_COLUMN_NAME,
+  THUNAR_UCA_MODEL_COLUMN_DESCRIPTION,
+  THUNAR_UCA_MODEL_COLUMN_ICON,
+  THUNAR_UCA_MODEL_COLUMN_COMMAND,
+  THUNAR_UCA_MODEL_COLUMN_PATTERNS,
+  THUNAR_UCA_MODEL_COLUMN_TYPES,
+  THUNAR_UCA_MODEL_COLUMN_STOCK_ID,
+  THUNAR_UCA_MODEL_COLUMN_STOCK_LABEL,
+  THUNAR_UCA_MODEL_N_COLUMNS,
+} ThunarUcaModelColumn;
+
+/**
+ * ThunarUcaTypes:
+ * @THUNAR_UCA_TYPE_DIRECTORIES : directories.
+ * @THUNAR_UCA_TYPE_AUDIO_FILES : audio files.
+ * @THUNAR_UCA_TYPE_IMAGE_FILES : image files.
+ * @THUNAR_UCA_TYPE_OTHER_FILES : other files.
+ * @THUNAR_UCA_TYPE_TEXT_FILES  : text files.
+ * @THUNAR_UCA_TYPE_VIDEO_FILES : video files.
+ **/
+typedef enum /*< flags >*/
+{
+  THUNAR_UCA_TYPE_DIRECTORIES = 1 << 0,
+  THUNAR_UCA_TYPE_AUDIO_FILES = 1 << 1,
+  THUNAR_UCA_TYPE_IMAGE_FILES = 1 << 2,
+  THUNAR_UCA_TYPE_OTHER_FILES = 1 << 3,
+  THUNAR_UCA_TYPE_TEXT_FILES  = 1 << 4,
+  THUNAR_UCA_TYPE_VIDEO_FILES = 1 << 5,
+} ThunarUcaTypes;
+
+GType           thunar_uca_model_get_type       (void) G_GNUC_CONST G_GNUC_INTERNAL;
+void            thunar_uca_model_register_type  (ThunarxProviderPlugin  *plugin) G_GNUC_INTERNAL;
+
+ThunarUcaModel *thunar_uca_model_get_default    (void) G_GNUC_INTERNAL;
+
+GList          *thunar_uca_model_match          (ThunarUcaModel         *uca_model,
+                                                 GList                  *file_infos) G_GNUC_INTERNAL;
+
+void            thunar_uca_model_append         (ThunarUcaModel         *uca_model,
+                                                 GtkTreeIter            *iter) G_GNUC_INTERNAL;
+
+void            thunar_uca_model_exchange       (ThunarUcaModel         *uca_model,
+                                                 GtkTreeIter            *iter_a,
+                                                 GtkTreeIter            *iter_b) G_GNUC_INTERNAL;
+
+void            thunar_uca_model_remove         (ThunarUcaModel         *uca_model,
+                                                 GtkTreeIter            *iter) G_GNUC_INTERNAL;
+
+void            thunar_uca_model_update         (ThunarUcaModel         *uca_model,
+                                                 GtkTreeIter            *iter,
+                                                 const gchar            *name,
+                                                 const gchar            *description,
+                                                 const gchar            *icon,
+                                                 const gchar            *command,
+                                                 const gchar            *patterns,
+                                                 ThunarUcaTypes          types) G_GNUC_INTERNAL;
+
+gboolean        thunar_uca_model_save           (ThunarUcaModel         *uca_model,
+                                                 GError                **error) G_GNUC_INTERNAL;
+
+gboolean        thunar_uca_model_parse_argv     (ThunarUcaModel         *uca_model,
+                                                 GtkTreeIter            *iter,
+                                                 GList                  *file_infos,
+                                                 gint                   *argcp,
+                                                 gchar                ***argvp,
+                                                 GError                **error) G_GNUC_INTERNAL;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_UCA_MODEL_H__ */
diff --git a/thunar-uca/thunar-uca-plugin.c b/thunar-uca/thunar-uca-plugin.c
new file mode 100644 (file)
index 0000000..9953e19
--- /dev/null
@@ -0,0 +1,83 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny@xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar-uca/thunar-uca-chooser.h>
+#include <thunar-uca/thunar-uca-editor.h>
+#include <thunar-uca/thunar-uca-model.h>
+#include <thunar-uca/thunar-uca-provider.h>
+
+
+
+static GType type_list[1];
+
+
+
+G_MODULE_EXPORT void
+thunar_extension_initialize (ThunarxProviderPlugin *plugin)
+{
+  const gchar *mismatch;
+
+  /* verify that the thunarx versions are compatible */
+  mismatch = thunarx_check_version (THUNARX_MAJOR_VERSION, THUNARX_MINOR_VERSION, THUNARX_MICRO_VERSION);   if (G_UNLIKELY (mismatch != NULL))
+    {
+      g_warning ("Version mismatch: %s", mismatch);
+      return;
+    }
+
+#ifndef G_DISABLE_CHECKS
+  g_message ("Initializing ThunarUca extension");
+#endif
+
+  /* register the types provided by this plugin */
+  thunar_uca_chooser_register_type (plugin);
+  thunar_uca_editor_register_type (plugin);
+  thunar_uca_model_register_type (plugin);
+  thunar_uca_provider_register_type (plugin);
+
+  /* setup the plugin provider type list */
+  type_list[0] = THUNAR_UCA_TYPE_PROVIDER;
+}
+
+
+
+G_MODULE_EXPORT void
+thunar_extension_shutdown (void)
+{
+#ifndef G_DISABLE_CHECKS
+  g_message ("Shutting down ThunarUca extension");
+#endif
+}
+
+
+
+G_MODULE_EXPORT void
+thunar_extension_list_types (const GType **types,
+                             gint         *n_types)
+{
+  *types = type_list;
+  *n_types = G_N_ELEMENTS (type_list);
+}
+
+
+
diff --git a/thunar-uca/thunar-uca-provider.c b/thunar-uca/thunar-uca-provider.c
new file mode 100644 (file)
index 0000000..2cfae24
--- /dev/null
@@ -0,0 +1,339 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny@xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib/gi18n-lib.h>
+
+#include <thunar-uca/thunar-uca-chooser.h>
+#include <thunar-uca/thunar-uca-context.h>
+#include <thunar-uca/thunar-uca-model.h>
+#include <thunar-uca/thunar-uca-provider.h>
+
+
+
+static void   thunar_uca_provider_class_init                (ThunarUcaProviderClass           *klass);
+static void   thunar_uca_provider_menu_provider_init        (ThunarxMenuProviderIface         *iface);
+static void   thunar_uca_provider_preferences_provider_init (ThunarxPreferencesProviderIface  *iface);
+static void   thunar_uca_provider_init                      (ThunarUcaProvider                *uca_provider);
+static void   thunar_uca_provider_finalize                  (GObject                          *object);
+static GList *thunar_uca_provider_get_actions               (ThunarxPreferencesProvider       *preferences_provider,
+                                                             GtkWidget                        *window);
+static GList *thunar_uca_provider_get_file_actions          (ThunarxMenuProvider              *menu_provider,
+                                                             GtkWidget                        *window,
+                                                             GList                            *files);
+static GList *thunar_uca_provider_get_folder_actions        (ThunarxMenuProvider              *menu_provider,
+                                                             GtkWidget                        *window,
+                                                             ThunarxFileInfo                  *folder);
+static void   thunar_uca_provider_activated                 (ThunarUcaProvider                *uca_provider,
+                                                             GtkAction                        *action);
+
+
+
+struct _ThunarUcaProviderClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarUcaProvider
+{
+  GObject __parent__;
+
+  ThunarUcaModel *model;
+  gint            last_action_id; /* used to generate unique action names */
+};
+
+
+
+static GQuark thunar_uca_context_quark;
+static GQuark thunar_uca_row_quark;
+
+
+
+THUNARX_DEFINE_TYPE_WITH_CODE (ThunarUcaProvider,
+                               thunar_uca_provider,
+                               G_TYPE_OBJECT,
+                               THUNARX_IMPLEMENT_INTERFACE (THUNARX_TYPE_MENU_PROVIDER,
+                                                            thunar_uca_provider_menu_provider_init)
+                               THUNARX_IMPLEMENT_INTERFACE (THUNARX_TYPE_PREFERENCES_PROVIDER,
+                                                            thunar_uca_provider_preferences_provider_init));
+
+
+
+static void
+thunar_uca_provider_class_init (ThunarUcaProviderClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  /* setup the "thunar-uca-context" and "thunar-uca-row" quarks */
+  thunar_uca_context_quark = g_quark_from_string ("thunar-uca-context");
+  thunar_uca_row_quark = g_quark_from_string ("thunar-uca-row");
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_uca_provider_finalize;
+}
+
+
+
+static void
+thunar_uca_provider_menu_provider_init (ThunarxMenuProviderIface *iface)
+{
+  iface->get_file_actions = thunar_uca_provider_get_file_actions;
+  iface->get_folder_actions = thunar_uca_provider_get_folder_actions;
+}
+
+
+
+static void
+thunar_uca_provider_preferences_provider_init (ThunarxPreferencesProviderIface *iface)
+{
+  iface->get_actions = thunar_uca_provider_get_actions;
+}
+
+
+
+static void
+thunar_uca_provider_init (ThunarUcaProvider *uca_provider)
+{
+  /* grab a reference on the default model */
+  uca_provider->model = thunar_uca_model_get_default ();
+}
+
+
+
+static void
+thunar_uca_provider_finalize (GObject *object)
+{
+  ThunarUcaProvider *uca_provider = THUNAR_UCA_PROVIDER (object);
+
+  /* drop our reference on the model */
+  g_object_unref (G_OBJECT (uca_provider->model));
+
+  (*G_OBJECT_CLASS (thunar_uca_provider_parent_class)->finalize) (object);
+}
+
+
+
+static void
+manage_actions (GtkWindow *window)
+{
+  GtkWidget *dialog;
+
+  dialog = g_object_new (THUNAR_UCA_TYPE_CHOOSER, NULL);
+  gtk_window_set_transient_for (GTK_WINDOW (dialog), window);
+  gtk_widget_show (dialog);
+}
+
+
+
+static GList*
+thunar_uca_provider_get_actions (ThunarxPreferencesProvider *preferences_provider,
+                                 GtkWidget                  *window)
+{
+  GtkAction *action;
+  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);
+  closure = g_cclosure_new_object_swap (G_CALLBACK (manage_actions), G_OBJECT (window));
+  g_signal_connect_closure (G_OBJECT (action), "activate", closure, TRUE);
+
+  return g_list_prepend (NULL, action);
+}
+
+
+
+static GList*
+thunar_uca_provider_get_file_actions (ThunarxMenuProvider *menu_provider,
+                                      GtkWidget           *window,
+                                      GList               *files)
+{
+  GtkTreeRowReference *row;
+  ThunarUcaProvider   *uca_provider = THUNAR_UCA_PROVIDER (menu_provider);
+  ThunarUcaContext    *uca_context = NULL;
+  GtkTreeIter          iter;
+  GtkAction           *action;
+  GList               *actions = NULL;
+  GList               *paths;
+  GList               *lp;
+  gchar               *stock_id;
+  gchar               *tooltip;
+  gchar               *label;
+  gchar               *name;
+
+  paths = thunar_uca_model_match (uca_provider->model, files);
+  for (lp = g_list_last (paths); lp != NULL; lp = lp->prev)
+    {
+      /* try to lookup the tree iter for the specified tree path */
+      if (gtk_tree_model_get_iter (GTK_TREE_MODEL (uca_provider->model), &iter, lp->data))
+        {
+          /* determine the label, tooltip and stock-id for the item */
+          gtk_tree_model_get (GTK_TREE_MODEL (uca_provider->model), &iter,
+                              THUNAR_UCA_MODEL_COLUMN_NAME, &label,
+                              THUNAR_UCA_MODEL_COLUMN_STOCK_ID, &stock_id,
+                              THUNAR_UCA_MODEL_COLUMN_DESCRIPTION, &tooltip,
+                              -1);
+
+          /* generate a unique action name */
+          name = g_strdup_printf ("ThunarUca::action-%d", ++uca_provider->last_action_id);
+
+          /* create the new action with the given parameters */
+          action = gtk_action_new (name, label, tooltip, stock_id);
+
+          /* 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,
+                                   (GDestroyNotify) gtk_tree_row_reference_free);
+
+          /* allocate a new context on-demand */
+          if (G_LIKELY (uca_context == NULL))
+            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);
+
+          /* connect the "activate" signal */
+          g_signal_connect_data (G_OBJECT (action), "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);
+
+          /* cleanup */
+          g_free (stock_id);
+          g_free (tooltip);
+          g_free (label);
+          g_free (name);
+        }
+
+      /* release the tree path */
+      gtk_tree_path_free (lp->data);
+    }
+  g_list_free (paths);
+
+  return actions;
+}
+
+
+
+static GList*
+thunar_uca_provider_get_folder_actions (ThunarxMenuProvider *menu_provider,
+                                        GtkWidget           *window,
+                                        ThunarxFileInfo     *folder)
+{
+  GList files;
+
+  /* fake a file list... */
+  files.data = folder;
+  files.next = NULL;
+  files.prev = NULL;
+
+  /* ...and use the get_file_actions() method */
+  return thunarx_menu_provider_get_file_actions (menu_provider, window, &files);
+}
+
+
+
+static void
+thunar_uca_provider_activated (ThunarUcaProvider *uca_provider,
+                               GtkAction         *action)
+{
+  GtkTreeRowReference *row;
+  ThunarUcaContext    *uca_context;
+  GtkTreePath         *path;
+  GtkTreeIter          iter;
+  GtkWidget           *dialog;
+  GtkWidget           *window;
+  gboolean             succeed;
+  GError              *error = NULL;
+  GList               *files;
+  gchar              **argv;
+  gchar               *working_directory = NULL;
+  gchar               *filename;
+  gchar               *label;
+  gchar               *uri;
+  gint                 argc;
+
+  g_return_if_fail (THUNAR_UCA_IS_PROVIDER (uca_provider));
+  g_return_if_fail (GTK_IS_ACTION (action));
+
+  /* check if the row reference is still valid */
+  row = g_object_get_qdata (G_OBJECT (action), thunar_uca_row_quark);
+  if (G_UNLIKELY (!gtk_tree_row_reference_valid (row)))
+    return;
+
+  /* determine the iterator for the item */
+  path = gtk_tree_row_reference_get_path (row);
+  gtk_tree_model_get_iter (GTK_TREE_MODEL (uca_provider->model), &iter, path);
+  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);
+  window = thunar_uca_context_get_window (uca_context);
+  files = thunar_uca_context_get_files (uca_context);
+
+  /* determine the argc/argv for the item */
+  succeed = thunar_uca_model_parse_argv (uca_provider->model, &iter, files, &argc, &argv, &error);
+  if (G_LIKELY (succeed))
+    {
+      /* determine the working from the first file */
+      if (G_LIKELY (files != NULL))
+        {
+          uri = thunarx_file_info_get_uri (files->data);
+          filename = g_filename_from_uri (uri, NULL, NULL);
+          if (G_LIKELY (filename != NULL))
+            working_directory = g_path_get_dirname (filename);
+          g_free (filename);
+          g_free (uri);
+        }
+
+      /* spawn the command on the window's screen */
+      succeed = gdk_spawn_on_screen (gtk_widget_get_screen (GTK_WIDGET (window)), working_directory,
+                                     argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error);
+
+      /* cleanup */
+      g_free (working_directory);
+      g_strfreev (argv);
+    }
+
+  /* present error message to the user */
+  if (G_UNLIKELY (!succeed))
+    {
+      g_object_get (G_OBJECT (action), "label", &label, NULL);
+      dialog = gtk_message_dialog_new ((GtkWindow *) window,
+                                       GTK_DIALOG_DESTROY_WITH_PARENT
+                                       | GTK_DIALOG_MODAL,
+                                       GTK_MESSAGE_ERROR,
+                                       GTK_BUTTONS_CLOSE,
+                                       _("Failed to launch action `%s'."), label);
+      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), _("%s."), error->message);
+      gtk_dialog_run (GTK_DIALOG (dialog));
+      gtk_widget_destroy (dialog);
+      g_error_free (error);
+      g_free (label);
+    }
+}
+
+
+
+
diff --git a/thunar-uca/thunar-uca-provider.h b/thunar-uca/thunar-uca-provider.h
new file mode 100644 (file)
index 0000000..8831a03
--- /dev/null
@@ -0,0 +1,43 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny@xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_UCA_PROVIDER_H__
+#define __THUNAR_UCA_PROVIDER_H__
+
+#include <thunarx/thunarx.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarUcaProviderClass ThunarUcaProviderClass;
+typedef struct _ThunarUcaProvider      ThunarUcaProvider;
+
+#define THUNAR_UCA_TYPE_PROVIDER            (thunar_uca_provider_get_type ())
+#define THUNAR_UCA_PROVIDER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_UCA_TYPE_PROVIDER, ThunarUcaProvider))
+#define THUNAR_UCA_PROVIDER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_UCA_TYPE_PROVIDER, ThunarUcaProviderClass))
+#define THUNAR_UCA_IS_PROVIDER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_UCA_TYPE_PROVIDER))
+#define THUNAR_UCA_IS_PROVIDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_UCA_TYPE_PROVIDER))
+#define THUNAR_UCA_PROVIDER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_UCA_TYPE_PROVIDER, ThunarUcaProviderClass))
+
+GType thunar_uca_provider_get_type      (void) G_GNUC_CONST G_GNUC_INTERNAL;
+void  thunar_uca_provider_register_type (ThunarxProviderPlugin *plugin) G_GNUC_INTERNAL;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_UCA_PROVIDER_H__ */
diff --git a/thunar-uca/uca.xml.in b/thunar-uca/uca.xml.in
new file mode 100644 (file)
index 0000000..a1c2c06
--- /dev/null
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE actions [
+  <!ELEMENT actions (action)+>
+
+  <!ELEMENT action (icon|patterns|name|command|description|directories|audio-files|image-files|other-files|text-files|video-files)*>
+
+  <!ELEMENT icon (#PCDATA)>
+  <!ELEMENT command (#PCDATA)>
+  <!ELEMENT patterns (#PCDATA)>
+
+  <!ELEMENT name (#PCDATA)>
+  <!ATTLIST name xml:lang CDATA #IMPLIED>
+
+  <!ELEMENT description (#PCDATA)>
+  <!ATTLIST description xml:lang CDATA #IMPLIED>
+
+  <!ELEMENT directories EMPTY>
+  <!ELEMENT audio-files EMPTY>
+  <!ELEMENT image-files EMPTY>
+  <!ELEMENT other-files EMPTY>
+  <!ELEMENT text-files EMPTY>
+  <!ELEMENT video-files EMPTY>
+]>
+
+<!--
+  $Id$
+
+  Copyright (c) 2005 Benedikt Meurer <benny@xfce.org>
+
+  Default thunar-uca configuration file, which gets installed system-wide.
+  This should act more like an example, and is therefore kept simple.
+-->
+
+<actions>
+
+  <action>
+    <icon>Terminal</icon>
+    <patterns>*</patterns>
+    <_name>Open Terminal Here</_name>
+    <command>Terminal --working-directory %f</command>
+    <_description>Example for a custom action</_description>
+    
+    <directories/>
+  </action>
+
+</actions>
index 2b0a4a1..5a7fe8e 100644 (file)
@@ -21,6 +21,8 @@
 #include <config.h>
 #endif
 
+#include <gdk/gdkkeysyms.h>
+
 #include <exo/exo.h>
 
 #include <thunar/thunar-details-view.h>
 
 
 
-static void thunar_preferences_dialog_class_init (ThunarPreferencesDialogClass *klass);
-static void thunar_preferences_dialog_init       (ThunarPreferencesDialog      *dialog);
-static void thunar_preferences_dialog_finalize   (GObject                      *object);
-static void thunar_preferences_dialog_response   (GtkDialog                    *dialog,
-                                                  gint                          response);
+static void     thunar_preferences_dialog_class_init      (ThunarPreferencesDialogClass *klass);
+static void     thunar_preferences_dialog_init            (ThunarPreferencesDialog      *dialog);
+static void     thunar_preferences_dialog_finalize        (GObject                      *object);
+static gboolean thunar_preferences_dialog_key_press_event (GtkWidget                    *widget,
+                                                           GdkEventKey                  *event);
+static void     thunar_preferences_dialog_response        (GtkDialog                    *dialog,
+                                                           gint                          response);
 
 
 
@@ -135,6 +139,7 @@ static void
 thunar_preferences_dialog_class_init (ThunarPreferencesDialogClass *klass)
 {
   GtkDialogClass *gtkdialog_class;
+  GtkWidgetClass *gtkwidget_class;
   GObjectClass   *gobject_class;
 
   /* determine the parent type class */
@@ -143,6 +148,9 @@ thunar_preferences_dialog_class_init (ThunarPreferencesDialogClass *klass)
   gobject_class = G_OBJECT_CLASS (klass);
   gobject_class->finalize = thunar_preferences_dialog_finalize;
 
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->key_press_event = thunar_preferences_dialog_key_press_event;
+
   gtkdialog_class = GTK_DIALOG_CLASS (klass);
   gtkdialog_class->response = thunar_preferences_dialog_response;
 }
@@ -278,6 +286,22 @@ thunar_preferences_dialog_finalize (GObject *object)
 
 
 
+static gboolean
+thunar_preferences_dialog_key_press_event (GtkWidget   *widget,
+                                           GdkEventKey *event)
+{
+  /* close the dialog on Esc */
+  if (G_UNLIKELY (event->keyval == GDK_Escape))
+    {
+      gtk_dialog_response (GTK_DIALOG (widget), GTK_RESPONSE_CLOSE);
+      return TRUE;
+    }
+
+  return (*GTK_WIDGET_CLASS (thunar_preferences_dialog_parent_class)->key_press_event) (widget, event);
+}
+
+
+
 static void
 thunar_preferences_dialog_response (GtkDialog *dialog,
                                     gint       response)
index c9431d3..59a53a0 100644 (file)
@@ -260,7 +260,7 @@ static const GtkActionEntry action_entries[] =
   { "delete", GTK_STOCK_DELETE, N_ ("_Delete Files"), NULL, N_ ("Delete the selected files"), G_CALLBACK (thunar_standard_view_action_delete), },
   { "paste-into-folder", GTK_STOCK_PASTE, N_ ("Paste Files into Folder"), NULL, N_ ("Paste files into the selected folder"), G_CALLBACK (thunar_standard_view_action_paste_into_folder), },
   { "select-all-files", NULL, N_ ("Select _all Files"), "<control>A", N_ ("Select all files in this window"), G_CALLBACK (thunar_standard_view_action_select_all_files), },
-  { "select-by-pattern", NULL, N_ ("Select _by Pattern"), "<control>S", N_ ("Select all files that match a certain pattern"), G_CALLBACK (thunar_standard_view_action_select_by_pattern), },
+  { "select-by-pattern", NULL, N_ ("Select _by Pattern..."), "<control>S", N_ ("Select all files that match a certain pattern"), G_CALLBACK (thunar_standard_view_action_select_by_pattern), },
   { "duplicate", NULL, N_ ("Du_plicate File"), NULL, N_ ("Duplicate each selected file"), G_CALLBACK (thunar_standard_view_action_duplicate), },
   { "make-link", NULL, N_ ("Ma_ke Link"), NULL, N_ ("Create a symbolic link for each selected file"), G_CALLBACK (thunar_standard_view_action_make_link), },
   { "rename", NULL, N_ ("_Rename"), "F2", N_ ("Rename the selected file"), G_CALLBACK (thunar_standard_view_action_rename), },
@@ -1234,7 +1234,7 @@ thunar_standard_view_merge_custom_actions (ThunarStandardView *standard_view,
     }
 
   /* remove the previously determined menu actions from the UI manager */
-  if (G_LIKELY (standard_view->priv->custom_actions != 0))
+  if (G_LIKELY (standard_view->priv->custom_merge_id != 0))
     {
       gtk_ui_manager_remove_ui (standard_view->ui_manager, standard_view->priv->custom_merge_id);
       gtk_ui_manager_ensure_update (standard_view->ui_manager);
index 56fd5c7..e7403a8 100644 (file)
@@ -30,6 +30,7 @@
       <separator />
       <placeholder name="placeholder-edit-alter-actions" />
       <separator />
+      <placeholder name="placeholder-custom-preferences" />
       <menuitem action="preferences" name="preferences" />
     </menu>
 
index b89951d..96fc358 100644 (file)
@@ -64,6 +64,7 @@ static void     thunar_window_set_property                (GObject            *o
                                                            GParamSpec         *pspec);
 static void     thunar_window_realize                     (GtkWidget          *widget);
 static void     thunar_window_unrealize                   (GtkWidget          *widget);
+static void     thunar_window_merge_custom_preferences    (ThunarWindow       *window);
 static void     thunar_window_action_open_new_window      (GtkAction          *action,
                                                            ThunarWindow       *window);
 static void     thunar_window_action_close_all_windows    (GtkAction          *action,
@@ -108,6 +109,8 @@ static void     thunar_window_menu_item_deselected        (GtkWidget          *m
 static void     thunar_window_notify_loading              (ThunarView         *view,
                                                            GParamSpec         *pspec,
                                                            ThunarWindow       *window);
+static gboolean thunar_window_merge_idle                  (gpointer            user_data);
+static void     thunar_window_merge_idle_destroy          (gpointer            user_data);
 
 
 
@@ -120,6 +123,10 @@ struct _ThunarWindow
 {
   GtkWindow __parent__;
 
+  /* support for custom preferences actions */
+  ThunarxProviderFactory *provider_factory;
+  gint                    custom_preferences_merge_id;
+
   ThunarClipboardManager *clipboard;
 
   ThunarPreferences      *preferences;
@@ -147,6 +154,9 @@ struct _ThunarWindow
   ThunarHistory          *history;
 
   ThunarFile             *current_directory;
+
+  /* menu merge idle source */
+  gint                    merge_idle_id;
 };
 
 
@@ -158,7 +168,7 @@ static const GtkActionEntry action_entries[] =
   { "close-all-windows", NULL, N_ ("Close _All Windows"), "<control><shift>W", N_ ("Close all Thunar windows"), G_CALLBACK (thunar_window_action_close_all_windows), },
   { "close", GTK_STOCK_CLOSE, N_ ("_Close&quo