summaryrefslogtreecommitdiff
path: root/src/file-manager/fm-icon-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/file-manager/fm-icon-view.c')
-rw-r--r--src/file-manager/fm-icon-view.c45
1 files changed, 44 insertions, 1 deletions
diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c
index 637f4c94b..f7a261c05 100644
--- a/src/file-manager/fm-icon-view.c
+++ b/src/file-manager/fm-icon-view.c
@@ -28,6 +28,7 @@
#include "fm-desktop-icon-view.h"
#include "fm-error-reporting.h"
#include "fm-icon-text-window.h"
+#include <bonobo/bonobo-widget.h>
#include <bonobo/bonobo-ui-util.h>
#include <ctype.h>
#include <errno.h>
@@ -43,6 +44,7 @@
#include <libgnomevfs/gnome-vfs-uri.h>
#include <libgnomevfs/gnome-vfs-utils.h>
#include <libgnomevfs/gnome-vfs-xfer.h>
+#include <libnautilus-extensions/nautilus-annotation.h>
#include <libnautilus-extensions/nautilus-background.h>
#include <libnautilus-extensions/nautilus-bonobo-extensions.h>
#include <libnautilus-extensions/nautilus-directory-background.h>
@@ -1674,6 +1676,38 @@ get_icon_images_callback (NautilusIconContainer *container,
return nautilus_icon_factory_get_icon_for_file (file, modifier, smooth_graphics);
}
+/* return the Bonobo control associated with the icon, if any */
+static void
+get_icon_control_callback (NautilusIconContainer *container,
+ NautilusFile *file,
+ GtkWidget **control,
+ FMIconView *icon_view)
+{
+ Bonobo_UIContainer ui_container;
+ char *control_moniker, *control_data;
+ char *uri, *path;
+ *control = NULL;
+
+ if (nautilus_file_is_nautilus_link (file)) {
+ uri = nautilus_file_get_uri (file);
+ path = gnome_vfs_get_local_path_from_uri (uri);
+ if (path != NULL) {
+ nautilus_link_local_get_component_info (path, &control_moniker, &control_data);
+ if (control_moniker && strlen (control_moniker) > 0) {
+ ui_container = fm_directory_view_get_bonobo_ui_container (FM_DIRECTORY_VIEW (icon_view));
+ *control = bonobo_widget_new_control (control_moniker, ui_container);
+ g_free (control_moniker);
+ }
+ if (control_data && strlen (control_data) > 0) {
+ bonobo_widget_set_property (BONOBO_WIDGET (*control), "configuration", control_data, NULL);
+ g_free (control_data);
+ }
+ g_free (path);
+ }
+ g_free (uri);
+ }
+}
+
static char *
get_icon_uri_callback (NautilusIconContainer *container,
NautilusFile *file,
@@ -1728,6 +1762,7 @@ get_icon_text_callback (NautilusIconContainer *container,
{
char *actual_uri, *path;
char *attribute_names;
+ char *annotations;
char **text_array;
int i , slot_index;
char *attribute_string;
@@ -1738,6 +1773,10 @@ get_icon_text_callback (NautilusIconContainer *container,
g_assert (additional_text != NULL);
g_assert (FM_IS_ICON_VIEW (icon_view));
+ /* fetch the annotations */
+ annotations = nautilus_annotation_get_annotation (file);
+ g_free (annotations);
+
/* In the smallest zoom mode, no text is drawn. */
if (fm_icon_view_get_zoom_level (icon_view) == NAUTILUS_ZOOM_LEVEL_SMALLEST) {
*editable_text = NULL;
@@ -1745,7 +1784,7 @@ get_icon_text_callback (NautilusIconContainer *container,
/* Strip the suffix for nautilus object xml files. */
*editable_text = nautilus_file_get_name (file);
}
-
+
/* Handle link files specially. */
if (nautilus_file_is_nautilus_link (file)) {
/* FIXME bugzilla.eazel.com 2531: Does sync. I/O and works only locally. */
@@ -2049,6 +2088,10 @@ create_icon_container (FMIconView *icon_view)
GTK_SIGNAL_FUNC (get_icon_images_callback),
icon_view);
gtk_signal_connect (GTK_OBJECT (icon_container),
+ "get_icon_control",
+ GTK_SIGNAL_FUNC (get_icon_control_callback),
+ icon_view);
+ gtk_signal_connect (GTK_OBJECT (icon_container),
"get_icon_uri",
GTK_SIGNAL_FUNC (get_icon_uri_callback),
icon_view);