From a79074da271777825b74a95f3ac593be7d75a7d4 Mon Sep 17 00:00:00 2001 From: Jasper Huijsmans Date: Thu, 27 Dec 2007 22:48:19 +0100 Subject: [PATCH 2/4] Support executables and regular files. Add support for DND of executables and regular files on the configuration dialog. --- plugins/launcher/launcher-dnd.c | 60 +++++++++++++++++++++++++++++++++++++++ 1 files changed, 60 insertions(+), 0 deletions(-) diff --git a/plugins/launcher/launcher-dnd.c b/plugins/launcher/launcher-dnd.c index ced1e81..8079a10 100644 --- a/plugins/launcher/launcher-dnd.c +++ b/plugins/launcher/launcher-dnd.c @@ -32,6 +32,20 @@ launcher_dnd_test_desktop_file (const char *file) return (g_str_has_suffix (file, ".desktop")); } +/* regular executables */ +static inline gboolean +launcher_dnd_test_executable (const char *file) +{ + return (g_file_test (file, G_FILE_TEST_IS_EXECUTABLE)); // && g_path_is_absolute (path) +} + +/* other files: use exo-open */ +static inline gboolean +launcher_dnd_test_exo_open (const char *file) +{ + return (g_file_test (file, G_FILE_TEST_EXISTS)); +} + /* * Update LauncherEntry */ @@ -123,6 +137,38 @@ launcher_dnd_handle_desktop_file (const char *file, return TRUE; } +/* regular executables */ +static gboolean +launcher_dnd_handle_executable (const char *file, + LauncherEntry *entry) +{ + /* executable */ + g_free (entry->exec); + entry->exec = g_strdup (file); + + /* name */ + g_free (entry->name); + entry->name = g_path_get_basename (file); + + return TRUE; +} + +/* other files: use exo-open */ +static gboolean +launcher_dnd_handle_exo_open (const char *file, + LauncherEntry *entry) +{ + /* executable */ + g_free (entry->exec); + entry->exec = g_strconcat ("exo-open ", file, NULL); + + /* name */ + g_free (entry->name); + entry->name = g_path_get_basename (file); + + return TRUE; +} + /* * Public Interface */ @@ -142,6 +188,20 @@ launcher_dnd_update_entry (const char *file, DBG("create launcher from desktop file: %s\n", entry_created ? "success" : "failed"); } + else if (launcher_dnd_test_executable (file)) + { + /* regular executable */ + entry_created = launcher_dnd_handle_executable (file, entry); + + DBG("create launcher from executable file: %s", entry_created ? "success" : "failed"); + } + else if (launcher_dnd_test_exo_open (file)) + { + /* last resort: use exo-open */ + entry_created = launcher_dnd_handle_exo_open (file, entry); + + DBG("create launcher from regular file: %s", entry_created ? "success" : "failed"); + } return entry_created; } -- 1.5.3.7