diff --git a/Makefile b/Makefile
index 5a19bca..22b2891 100644
--- a/Makefile
+++ b/Makefile
@@ -247,6 +247,8 @@ endif
install qubes-rpc/qvm-copy-to-vm.gnome $(DESTDIR)$(LIBDIR)/qubes
install qubes-rpc/qvm-move-to-vm.kde $(DESTDIR)$(LIBDIR)/qubes
install qubes-rpc/qvm-move-to-vm.gnome $(DESTDIR)$(LIBDIR)/qubes
+ install qubes-rpc/qvm-actions.sh $(DESTDIR)$(LIBDIR)/qubes
+ install -m 0644 misc/uca_qubes.xml $(DESTDIR)$(LIBDIR)/qubes
install qubes-rpc/xdg-icon $(DESTDIR)$(LIBDIR)/qubes
install qubes-rpc/{vm-file-editor,qfile-agent,qopen-in-vm} $(DESTDIR)$(LIBDIR)/qubes
install qubes-rpc/qubes-open $(DESTDIR)$(BINDIR)
diff --git a/misc/uca_qubes.xml b/misc/uca_qubes.xml
new file mode 100644
index 0000000..f158e3c
--- /dev/null
+++ b/misc/uca_qubes.xml
@@ -0,0 +1,72 @@
+
+ folder-copy
+ Copy to VM
+ 1507455450991127-4
+ /usr/lib/qubes/qvm-actions.sh copy %F
+
+ *
+
+
+
+
+
+
+
+
+ folder-move
+ Move to VM
+ 1507455437157027-3
+ /usr/lib/qubes/qvm-actions.sh move %F
+
+ *
+
+
+
+
+
+
+
+
+ document-open
+ Open in VM
+ 1507455471075266-5
+ /usr/lib/qubes/qvm-actions.sh openvm %F
+
+ *
+
+
+
+
+
+
+
+ gtk-convert
+ Convert in DisposableVM
+ 1507455488971315-6
+ /usr/lib/qubes/qvm-actions.sh p %F
+
+ *.pdf
+
+
+
+ gtk-convert
+ Convert in DisposableVM
+ 1507455503129941-7
+ /usr/lib/qubes/qvm-actions.sh img %F
+
+ *
+
+
+
+ document-open
+ Open in DisposableVM
+ 1507455559234996-8
+ /usr/lib/qubes/qvm-actions.sh opendvm %F
+
+ *
+
+
+
+
+
+
diff --git a/qubes-rpc/qvm-actions.sh b/qubes-rpc/qvm-actions.sh
new file mode 100755
index 0000000..789dd12
--- /dev/null
+++ b/qubes-rpc/qvm-actions.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+# Allow us to handle filenames with spaces using newline separator from Thunar
+IFS='
+'
+
+# Check if at least two arguments are provided: actions + file(s)
+if [ "$#" -le 1 ]; then
+ echo "Not enough arguments provided. Aborting..."
+fi
+
+# File(s)
+files=${*:2}
+
+# copy and move handle a list of files where other actions don't
+case $1 in
+ copy)
+ qvm-copy-to-vm '$default' $files | zenity --notification --text="Copying files..." --timeout 3
+ ;;
+ move)
+ qvm-move-to-vm '$default' $files | zenity --notification --text="Moving files..." --timeout 3
+ ;;
+ img)
+ for file in $files
+ do
+ /usr/lib/qubes/qvm-convert-img.gnome $file
+ done
+ ;;
+ pdf)
+ for file in $files
+ do
+ /usr/lib/qubes/qvm-convert-pdf.gnome $file
+ done
+ ;;
+ openvm)
+ for file in $files
+ do
+ qvm-open-in-vm '$default' $file | zenity --notification --text "Opening $file in VM..." --timeout 3 &
+ done
+ ;;
+ opendvm)
+ for file in $files
+ do
+ qvm-open-in-dvm $files | zenity --notification --text "Opening $file in DisposableVM..." --timeout 3 &
+ done
+ ;;
+ *)
+ echo "Unknown action. Aborting..."
+ exit 1
+ ;;
+esac
diff --git a/rpm_spec/core-agent.spec b/rpm_spec/core-agent.spec
index 76251e2..978e4f2 100644
--- a/rpm_spec/core-agent.spec
+++ b/rpm_spec/core-agent.spec
@@ -268,6 +268,13 @@ switching from user to root. Since all the user data in a VM is accessible
already from normal user account, there is not much more to guard there. Qubes
VM is a single user system.
+%package thunar
+Summary: Thunar support for Qubes VM tools
+Requires: Thunar
+
+%description thunar
+Thunar support for Qubes VM tools
+
%define _builddir %(pwd)
%define kde_service_dir /usr/share/kde4/services
@@ -463,6 +470,22 @@ sed 's/^net.ipv4.ip_forward.*/#\0/' -i /etc/sysctl.conf
%post qrexec
%systemd_post qubes-qrexec-agent.service
+%post thunar
+# There is no system-wide Thunar custom actions. There is only a default
+# file and a user file created from the default one. Qubes actions need
+# to be placed after all already defined actions and before
+# the end of file.
+if [ "$1" = 1 ]; then
+ if [ -f /etc/xdg/Thunar/uca.xml ] ; then
+ cp -p /etc/xdg/Thunar/uca.xml{,.bak}
+ sed -i '$e cat /usr/lib/qubes/uca_qubes.xml' /etc/xdg/Thunar/uca.xml
+ fi
+ if [ -f /home/user/.config/Thunar/uca.xml ] ; then
+ cp -p /home/user/.config/Thunar/uca.xml{,.bak}
+ sed -i '$e cat /usr/lib/qubes/uca_qubes.xml' /home/user/.config/Thunar/uca.xml
+ fi
+fi
+
%preun
if [ "$1" = 0 ] ; then
# no more packages left
@@ -484,6 +507,18 @@ fi
%preun qrexec
%systemd_preun qubes-qrexec-agent.service
+%postun thunar
+if [ "$1" = 0 ]; then
+ if [ -f /etc/xdg/Thunar/uca.xml ] ; then
+ mv /etc/xdg/Thunar/uca.xml{,.uninstall}
+ mv /etc/xdg/Thunar/uca.xml{.bak,}
+ fi
+ if [ -f /home/user/.config/Thunar/uca.xml ] ; then
+ mv /home/user/.config/Thunar/uca.xml{,.uninstall}
+ mv /home/user/.config/Thunar/uca.xml{.bak,}
+ fi
+fi
+
%postun
if [ $1 -eq 0 ] ; then
/usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
@@ -674,6 +709,10 @@ rm -f %{name}-%{version}
/usr/share/nautilus-python/extensions/qvm_move_nautilus.py*
/usr/share/nautilus-python/extensions/qvm_dvm_nautilus.py*
+%files thunar
+/usr/lib/qubes/qvm-actions.sh
+/usr/lib/qubes/uca_qubes.xml
+
%files dom0-updates
%dir %attr(0775,user,user) /var/lib/qubes/dom0-updates
/usr/lib/qubes/qubes-download-dom0-updates.sh