summaryrefslogtreecommitdiff
path: root/thunar-volman
diff options
context:
space:
mode:
authorJannis Pohlmann <jannis@xfce.org>2010-07-20 12:25:59 +0200
committerJannis Pohlmann <jannis@xfce.org>2010-07-25 19:42:29 +0200
commitfef3c1273d39bfb04c818d379d43db09a5c0323b (patch)
tree821a80befca5c9874dd391413afad557de5c93cd /thunar-volman
parent269de460833d282df34812bbaffc7f8b0dbe67bf (diff)
downloadthunar-volman-fef3c1273d39bfb04c818d379d43db09a5c0323b.tar.gz
Implement autorun support (requires .autorun, autorun or autorun.sh).
This is the first step towards support of the Desktop Application Autostart Specification. The next step is autoopen support.
Diffstat (limited to 'thunar-volman')
-rw-r--r--thunar-volman/tvm-block-device.c61
-rw-r--r--thunar-volman/tvm-run.c2
2 files changed, 61 insertions, 2 deletions
diff --git a/thunar-volman/tvm-block-device.c b/thunar-volman/tvm-block-device.c
index 42ed5f4..7c999e9 100644
--- a/thunar-volman/tvm-block-device.c
+++ b/thunar-volman/tvm-block-device.c
@@ -34,6 +34,7 @@
#include <thunar-volman/tvm-context.h>
#include <thunar-volman/tvm-device.h>
#include <thunar-volman/tvm-gio-extensions.h>
+#include <thunar-volman/tvm-prompt.h>
#include <thunar-volman/tvm-run.h>
@@ -125,9 +126,16 @@ tvm_block_device_autorun (TvmContext *context,
GError **error)
{
gboolean autoplay;
+ gboolean autorun;
gboolean result = FALSE;
GError *err = NULL;
+ GFile *mount_point;
+ gchar **argv;
gchar *autoplay_command;
+ gchar *message;
+ gchar *mount_path;
+ guint n;
+ gint response;
g_return_val_if_fail (context != NULL, FALSE);
g_return_val_if_fail (G_IS_MOUNT (mount), FALSE);
@@ -162,7 +170,58 @@ tvm_block_device_autorun (TvmContext *context,
}
}
- return TRUE;
+ /* check if autorun is enabled */
+ autorun = xfconf_channel_get_bool (context->channel, "/autorun/enabled", FALSE);
+ if (autorun)
+ {
+ /* Autostart files according to the Desktop Application Autostart
+ * Specification */
+ static const gchar *autorun_files[] = { ".autorun", "autorun", "autorun.sh" };
+ for (n = 0; n < G_N_ELEMENTS (autorun_files); ++n)
+ {
+ /* check if one of the autorun files is present and executable */
+ if (tvm_file_test (mount, autorun_files[n], G_FILE_TEST_IS_EXECUTABLE)
+ && tvm_file_test (mount, autorun_files[n], G_FILE_TEST_IS_REGULAR))
+ {
+ /* prompt the user to execute the file */
+ message = g_strdup_printf (_("Would you like to allow \"%s\" to run?"),
+ autorun_files[n]);
+ response = tvm_prompt (context, "gnome-fs-executable",
+ _("Auto-Run Confirmation"),
+ _("Auto-Run capability detected"), message,
+ _("Ig_nore"), GTK_RESPONSE_CANCEL,
+ _("_Allow Auto-Run"), TVM_RESPONSE_AUTORUN,
+ NULL);
+ g_free (message);
+
+ /* check if we should autorun */
+ if (response == TVM_RESPONSE_AUTORUN)
+ {
+ /* determine the mount point as a string */
+ mount_point = g_mount_get_root (mount);
+ mount_path = g_file_get_path (mount_point);
+ g_object_unref (mount_point);
+
+ /* prepare argv to launch the autorun file */
+ argv = g_new0 (gchar *, 2);
+ argv[0] = g_build_filename (mount_path, autorun_files[n], NULL);
+ argv[1] = NULL;
+
+ /* try to launch the autorun file */
+ result = g_spawn_async (mount_path, argv, NULL, 0, NULL, NULL, NULL,
+ error);
+
+ /* free strings */
+ g_strfreev (argv);
+ g_free (mount_path);
+
+ return result;
+ }
+ }
+ }
+ }
+
+ return FALSE;
}
diff --git a/thunar-volman/tvm-run.c b/thunar-volman/tvm-run.c
index 571047d..112dfa1 100644
--- a/thunar-volman/tvm-run.c
+++ b/thunar-volman/tvm-run.c
@@ -172,7 +172,7 @@ tvm_run_burn_software (TvmContext *context,
if (!autoburn)
{
g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
- _("Autoburning of blank CDs/DVDs is disabled"));
+ _("Autoburning of blank CDs and DVDs is disabled"));
return FALSE;
}