diff options
author | Gene Z. Ragan <gzr@eazel.com> | 2001-02-01 08:36:17 +0000 |
---|---|---|
committer | Gene Ragan <gzr@src.gnome.org> | 2001-02-01 08:36:17 +0000 |
commit | 93ea1a9d6190670f9566001502d0d0fbb3a02ede (patch) | |
tree | 632ff48ebbe395f3c14992d7aa442b55f430e7af /libnautilus-private/nautilus-link.c | |
parent | 5f911e3c17f5067e453b7bcdc5c0707925882d4c (diff) | |
download | nautilus-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.c | 87 |
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); +} + |