summaryrefslogtreecommitdiff
path: root/libnautilus-private/nautilus-link.c
diff options
context:
space:
mode:
authorGene Z. Ragan <gzr@eazel.com>2001-02-01 08:36:17 +0000
committerGene Ragan <gzr@src.gnome.org>2001-02-01 08:36:17 +0000
commit93ea1a9d6190670f9566001502d0d0fbb3a02ede (patch)
tree632ff48ebbe395f3c14992d7aa442b55f430e7af /libnautilus-private/nautilus-link.c
parent5f911e3c17f5067e453b7bcdc5c0707925882d4c (diff)
downloadnautilus-93ea1a9d6190670f9566001502d0d0fbb3a02ede.tar.gz
Additional work on first time druid gmc to nautilus conversion routines.
2001-02-01 Gene Z. Ragan <gzr@eazel.com> Additional work on first time druid gmc to nautilus conversion routines. * src/nautilus-first-time-druid.c: (druid_finished), (convert_gmc_desktop_icons), (transition_value_changed): Make gmc link to Nautilus link conversion more complete * libnautilus-extensions/nautilus-gnome-extensions.c: * libnautilus-extensions/nautilus-gnome-extensions.h: (nautilus_gnome_get_terminal_path): New utility routine to return path to an installed terminal application (nautilus_gnome_open_terminal): Call above function * libnautilus-extensions/nautilus-link.c: * libnautilus-extensions/nautilus-link.h: (nautilus_link_local_create), (nautilus_link_local_create_from_gnome_entry): New function to create a nautilus link from .desktop entry data It's hard to be hated by millions. Make gmc to nautilus link transition much better. We now can support converted .desktop links that require a terminal. Also, get rid of gnome-vfs symlinks and use the command: specifier to launch instead. This was not possible earlier, but due to a recent bug fix by me, we can now use this specifier in a Nautilus link. * src/file-manager/fm-desktop-icon-view.c: (create_mount_link), (icon_view_create_nautilus_links), (update_home_link_and_delete_copies), (update_trash_link_and_delete_copies):
Diffstat (limited to 'libnautilus-private/nautilus-link.c')
-rw-r--r--libnautilus-private/nautilus-link.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/libnautilus-private/nautilus-link.c b/libnautilus-private/nautilus-link.c
index 2b5cb80b5..bddcc36e1 100644
--- a/libnautilus-private/nautilus-link.c
+++ b/libnautilus-private/nautilus-link.c
@@ -31,12 +31,15 @@
#include "nautilus-file.h"
#include "nautilus-file-attributes.h"
#include "nautilus-global-preferences.h"
+#include "nautilus-gnome-extensions.h"
#include "nautilus-metadata.h"
#include "nautilus-preferences.h"
+#include "nautilus-stock-dialogs.h"
#include "nautilus-string.h"
#include "nautilus-xml-extensions.h"
#include <gnome-xml/parser.h>
#include <gnome-xml/xmlmemory.h>
+#include <libgnome/gnome-i18n.h>
#include <libgnome/gnome-util.h>
#include <libgnomevfs/gnome-vfs-mime.h>
#include <libgnomevfs/gnome-vfs.h>
@@ -99,6 +102,7 @@ nautilus_link_local_create (const char *directory_path,
const char *name,
const char *image,
const char *target_uri,
+ const GdkPoint *point,
NautilusLinkType type)
{
xmlDocPtr output_document;
@@ -107,6 +111,8 @@ nautilus_link_local_create (const char *directory_path,
int result;
char *uri;
GList dummy_list;
+ NautilusFileChangesQueuePositionSetting item;
+
g_return_val_if_fail (directory_path != NULL, FALSE);
g_return_val_if_fail (name != NULL, FALSE);
@@ -145,6 +151,19 @@ nautilus_link_local_create (const char *directory_path,
dummy_list.next = NULL;
dummy_list.prev = NULL;
nautilus_directory_notify_files_added (&dummy_list);
+
+ if (point != NULL) {
+ item.point.x = point->x;
+ item.point.y = point->y;
+ item.uri = uri;
+
+ dummy_list.data = &item;
+ dummy_list.next = NULL;
+ dummy_list.prev = NULL;
+
+ nautilus_directory_schedule_position_setting (&dummy_list);
+ }
+
g_free (uri);
g_free (path);
@@ -471,3 +490,71 @@ nautilus_link_local_is_trash_link (const char *path)
{
return nautilus_link_local_get_link_type (path) == NAUTILUS_LINK_TRASH;
}
+
+
+void
+nautilus_link_local_create_from_gnome_entry (GnomeDesktopEntry *entry, const char *dest_path, const GdkPoint *position)
+{
+ const char *icon_name;
+ char *launch_string, *terminal_path;
+ char *arguments, *temp_str;
+ gboolean create_link;
+ int index;
+
+ if (entry == NULL || dest_path == NULL) {
+ return;
+ }
+
+ terminal_path = nautilus_gnome_get_terminal_path ();
+ if (terminal_path == NULL) {
+ return;
+ }
+
+ create_link = TRUE;
+
+ /* Extract arguments from exec array */
+ for (index = 0, arguments = NULL; index < entry->exec_length; ++index) {
+ if (arguments == NULL) {
+ arguments = g_strdup (entry->exec[index]);
+ } else {
+ temp_str = arguments;
+ arguments = g_strdup_printf ("%s %s", temp_str, entry->exec[index]);
+ g_free (temp_str);
+ }
+ }
+
+ if (strcmp (entry->type, "Application") == 0) {
+ if (entry->terminal) {
+ if (strstr (terminal_path, "gnome-terminal") != NULL) {
+ /* gnome-terminal takes different arguments */
+ launch_string = g_strdup_printf ("command:%s '-x %s'", terminal_path, arguments);
+ } else {
+ launch_string = g_strdup_printf ("command:%s '-e %s'", terminal_path, arguments);
+ }
+ } else {
+ launch_string = g_strdup_printf ("command:%s", arguments);
+ }
+ } else if (strcmp (entry->type, "URL") == 0) {
+ launch_string = g_strdup_printf ("command:%s", arguments);
+ } else {
+ /* Unknown .desktop file type */
+ launch_string = NULL;
+ create_link = TRUE;
+ }
+
+ if (entry->icon != NULL) {
+ icon_name = entry->icon;
+ } else {
+ icon_name = "gnome-unknown.png";
+ }
+
+ if (create_link) {
+ nautilus_link_local_create (dest_path, entry->name, icon_name,
+ launch_string, position, NAUTILUS_LINK_GENERIC);
+ }
+
+ g_free (launch_string);
+ g_free (arguments);
+ g_free (terminal_path);
+}
+