diff options
author | Maciej Stachowiak <mstachow@src.gnome.org> | 2001-02-02 11:29:19 +0000 |
---|---|---|
committer | Maciej Stachowiak <mstachow@src.gnome.org> | 2001-02-02 11:29:19 +0000 |
commit | c3e579691a86ee8f07bcbe19b8278c016ab690db (patch) | |
tree | 5e0e076662e1ff4f62bec46118fc4fc7d6706ccd | |
parent | 4e770718e6bb7d0ddc5cfbfbea1e2434eb9d6e26 (diff) | |
download | nautilus-c3e579691a86ee8f07bcbe19b8278c016ab690db.tar.gz |
reviewed by: Pavel Cisler <pavel@eazel.com>
Fix bug 4678 (Clicking on a Nautilus link file in tree view causes
Nautilus cannot handle item type error box).
* components/tree/nautilus-tree-view.c:
(nautilus_tree_view_destroy), (got_activation_uri_callback),
(cancel_possible_activation), (tree_select_row_callback): Activate
activation URI instead of file URI to support Nautilus links
properly. If the link resolves to a "command:" URI, however,
silently ignore it to avoid giving an ugly error message because
per John Sullivan, selecting things in the tree view should not
launch apps.
* components/tree/nautilus-tree-view-private.h: Added
activation_uri_wait_file field to details struct.
* data/top/Computer, data/top/Services: Updated to new nautilus
link format.
-rw-r--r-- | ChangeLog | 22 | ||||
-rw-r--r-- | components/tree/nautilus-tree-view-private.h | 2 | ||||
-rw-r--r-- | components/tree/nautilus-tree-view.c | 82 | ||||
-rw-r--r-- | data/top/Computer | 2 | ||||
-rw-r--r-- | data/top/Services | 2 |
5 files changed, 92 insertions, 18 deletions
@@ -1,3 +1,25 @@ +2001-02-01 Maciej Stachowiak <mjs@eazel.com> + + reviewed by: Pavel Cisler <pavel@eazel.com> + + Fix bug 4678 (Clicking on a Nautilus link file in tree view causes + Nautilus cannot handle item type error box). + + * components/tree/nautilus-tree-view.c: + (nautilus_tree_view_destroy), (got_activation_uri_callback), + (cancel_possible_activation), (tree_select_row_callback): Activate + activation URI instead of file URI to support Nautilus links + properly. If the link resolves to a "command:" URI, however, + silently ignore it to avoid giving an ugly error message because + per John Sullivan, selecting things in the tree view should not + launch apps. + + * components/tree/nautilus-tree-view-private.h: Added + activation_uri_wait_file field to details struct. + + * data/top/Computer, data/top/Services: Updated to new nautilus + link format. + 2001-02-02 Robey Pointer <robey@eazel.com> * components/services/install/nautilus-view/nautilus-service-instal diff --git a/components/tree/nautilus-tree-view-private.h b/components/tree/nautilus-tree-view-private.h index b0982f93f..4addfc4ef 100644 --- a/components/tree/nautilus-tree-view-private.h +++ b/components/tree/nautilus-tree-view-private.h @@ -73,6 +73,8 @@ struct NautilusTreeViewDetails { gboolean got_first_size_allocate; + NautilusFile *activation_uri_wait_file; + NautilusTreeViewDndDetails *dnd; }; diff --git a/components/tree/nautilus-tree-view.c b/components/tree/nautilus-tree-view.c index b26bf83ea..b022fa9d8 100644 --- a/components/tree/nautilus-tree-view.c +++ b/components/tree/nautilus-tree-view.c @@ -37,6 +37,7 @@ #include <libnautilus-extensions/nautilus-gtk-macros.h> #include <libnautilus-extensions/nautilus-glib-extensions.h> #include <libnautilus-extensions/nautilus-file.h> +#include <libnautilus-extensions/nautilus-file-attributes.h> #include <libnautilus-extensions/nautilus-file-utilities.h> #include <libnautilus-extensions/nautilus-string.h> #include <libnautilus-extensions/nautilus-icon-factory.h> @@ -93,12 +94,13 @@ static void tree_select_row_callback (NautilusCTree *tree, static void size_allocate_callback (NautilusCTree *tree, GtkAllocation *allocation, gpointer data); - - static void nautilus_tree_view_load_uri (NautilusTreeView *view, const char *uri); -static void nautilus_tree_view_update_all_icons (NautilusTreeView *view); +static void nautilus_tree_view_update_all_icons (NautilusTreeView *view); +static void got_activation_uri_callback (NautilusFile *file, + gpointer callback_data); +static void cancel_possible_activation (NautilusTreeView *view); static void nautilus_tree_view_initialize_class (NautilusTreeViewClass *klass); @@ -106,6 +108,7 @@ static void nautilus_tree_view_initialize (NautilusTreeView *view); static void nautilus_tree_view_destroy (GtkObject *object); + NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusTreeView, nautilus_tree_view, GTK_TYPE_SCROLLED_WINDOW) @@ -761,6 +764,8 @@ nautilus_tree_view_destroy (GtkObject *object) view = NAUTILUS_TREE_VIEW (object); + cancel_possible_activation (view); + if (view->details->pending_idle_id != 0) { gtk_idle_remove (view->details->pending_idle_id); } @@ -1188,26 +1193,71 @@ ctree_show_node (NautilusCTree *tree, static void +got_activation_uri_callback (NautilusFile *file, + gpointer callback_data) +{ + char *uri; + NautilusTreeView *view; + + view = NAUTILUS_TREE_VIEW (callback_data); + + if (file == view->details->activation_uri_wait_file) { + uri = nautilus_file_get_activation_uri (file); + + if (uri != NULL && + nautilus_strcmp (view->details->current_main_view_uri, uri) != 0 && + strncmp (uri, "command:", strlen ("command:")) != 0) { + nautilus_view_open_location_in_this_window + (NAUTILUS_VIEW (view->details->nautilus_view), uri); + g_free (view->details->selected_uri); + view->details->selected_uri = g_strdup (uri); + } + + ctree_show_node (NAUTILUS_CTREE (view->details->tree), + file_to_view_node (view, file)); + + g_free (uri); + + nautilus_file_unref (view->details->activation_uri_wait_file); + view->details->activation_uri_wait_file = NULL; + } +} + +static void +cancel_possible_activation (NautilusTreeView *view) +{ + if (view->details->activation_uri_wait_file != NULL) { + nautilus_file_cancel_call_when_ready + (view->details->activation_uri_wait_file, + got_activation_uri_callback, + view); + nautilus_file_unref (view->details->activation_uri_wait_file); + } + + view->details->activation_uri_wait_file = NULL; +} + +static void tree_select_row_callback (NautilusCTree *tree, NautilusCTreeNode *node, gint column, NautilusTreeView *view) { - char *uri; - - uri = nautilus_file_get_uri (nautilus_tree_view_node_to_file (view, node)); - - if (uri != NULL && - nautilus_strcmp (view->details->current_main_view_uri, uri) != 0) { - nautilus_view_open_location_in_this_window (NAUTILUS_VIEW (view->details->nautilus_view), uri); - - g_free (view->details->selected_uri); - view->details->selected_uri = g_strdup (uri); - } + GList *attributes; - ctree_show_node (tree, node); + cancel_possible_activation (view); - g_free (uri); + view->details->activation_uri_wait_file = nautilus_tree_view_node_to_file (view, + node); + nautilus_file_ref (view->details->activation_uri_wait_file); + + attributes = g_list_prepend (NULL, NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI); + + nautilus_file_call_when_ready (view->details->activation_uri_wait_file, + attributes, + got_activation_uri_callback, + view); + } static NautilusCTreeNode * diff --git a/data/top/Computer b/data/top/Computer index 5b7bfdc99..3aa737b3f 100644 --- a/data/top/Computer +++ b/data/top/Computer @@ -1,2 +1,2 @@ <?xml version="1.0"?> -<NAUTILUS_OBJECT NAUTILUS_LINK="Nautilus Link" CUSTOM_ICON="computer" LINK="hardware:overview"/> +<nautilus_object nautilus_link="Nautilus Link" custom_icon="computer" link="hardware:overview"/> diff --git a/data/top/Services b/data/top/Services index 7196c57ca..ff4cc302e 100644 --- a/data/top/Services +++ b/data/top/Services @@ -1,2 +1,2 @@ <?xml version="1.0"?> -<NAUTILUS_OBJECT NAUTILUS_LINK="Nautilus Link" CUSTOM_ICON="hand" LINK="eazel:summary"/> +<nautilus_object nautilus_link="Nautilus Link" custom_icon="hand" link="eazel:"/> |