summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Hertzfeld <andy@src.gnome.org>2001-04-13 00:21:10 +0000
committerAndy Hertzfeld <andy@src.gnome.org>2001-04-13 00:21:10 +0000
commit69835b77f7b3114f1c202b0cf88e25c7459b3bd6 (patch)
tree9442d454c21870d15b4a3a1b3f19b16db0453dba
parentc60a70bf37f92241e1d6c5ac8884aca47c4ebe86 (diff)
downloadnautilus-69835b77f7b3114f1c202b0cf88e25c7459b3bd6.tar.gz
implemented "Show/Hide All Annotations", as well as some miscellaneous
implemented "Show/Hide All Annotations", as well as some miscellaneous fixes * libnautilus-extensions/nautilus-canvas-note-item.c: (nautilus_canvas_note_item_set_note_text), (get_arrow_height), (draw_item_aa_text), (nautilus_canvas_note_item_point), (nautilus_canvas_note_item_update): made the arrow height respect the scale factor * libnautilus-extensions/nautilus-icon-canvas-item.c,h: (nautilus_icon_canvas_item_initialize_class), (nautilus_icon_canvas_item_translate), (nautilus_icon_canvas_item_set_show_annotation), (nautilus_icon_canvas_item_event): override the translate method to move the annotation, too * libnautilus-extensions/nautilus-icon-container.c,h: (nautilus_icon_container_is_showing_all_annotations), (nautilus_icon_container_set_show_all_annotations): added a "show all" instance variable and access routines to the icon container * src/file-manager/fm-icon-view.c: (update_annotation_menu_items), (show_annotations_callback), (hide_annotations_callback), (fm_icon_view_merge_menus), (fm_icon_view_update_menus), (icon_container_activate_callback): added menu items for show/hide annotations * src/file-manager/nautilus-icon-view-ui.xml: added menu items and commands
-rw-r--r--ChangeLog33
-rw-r--r--libnautilus-extensions/nautilus-canvas-note-item.c17
-rw-r--r--libnautilus-extensions/nautilus-icon-canvas-item.c85
-rw-r--r--libnautilus-extensions/nautilus-icon-canvas-item.h6
-rw-r--r--libnautilus-extensions/nautilus-icon-container.c25
-rw-r--r--libnautilus-extensions/nautilus-icon-container.h3
-rw-r--r--libnautilus-extensions/nautilus-icon-private.h3
-rw-r--r--libnautilus-private/nautilus-canvas-note-item.c17
-rw-r--r--libnautilus-private/nautilus-icon-canvas-item.c85
-rw-r--r--libnautilus-private/nautilus-icon-canvas-item.h6
-rw-r--r--libnautilus-private/nautilus-icon-container.c25
-rw-r--r--libnautilus-private/nautilus-icon-container.h3
-rw-r--r--libnautilus-private/nautilus-icon-private.h3
-rw-r--r--src/file-manager/fm-icon-view.c47
-rw-r--r--src/file-manager/nautilus-icon-view-ui.xml8
15 files changed, 309 insertions, 57 deletions
diff --git a/ChangeLog b/ChangeLog
index 6f60b23ee..86b608624 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,38 @@
2001-04-12 Andy Hertzfeld <andy@eazel.com>
+ implemented "Show/Hide All Annotations", as well as some
+ miscellaneous fixes
+
+ * libnautilus-extensions/nautilus-canvas-note-item.c:
+ (nautilus_canvas_note_item_set_note_text), (get_arrow_height),
+ (draw_item_aa_text), (nautilus_canvas_note_item_point),
+ (nautilus_canvas_note_item_update):
+ made the arrow height respect the scale factor
+
+ * libnautilus-extensions/nautilus-icon-canvas-item.c,h:
+ (nautilus_icon_canvas_item_initialize_class),
+ (nautilus_icon_canvas_item_translate),
+ (nautilus_icon_canvas_item_set_show_annotation),
+ (nautilus_icon_canvas_item_event):
+ override the translate method to move the annotation, too
+
+ * libnautilus-extensions/nautilus-icon-container.c,h:
+ (nautilus_icon_container_is_showing_all_annotations),
+ (nautilus_icon_container_set_show_all_annotations):
+ added a "show all" instance variable and access routines to
+ the icon container
+
+ * src/file-manager/fm-icon-view.c: (update_annotation_menu_items),
+ (show_annotations_callback), (hide_annotations_callback),
+ (fm_icon_view_merge_menus), (fm_icon_view_update_menus),
+ (icon_container_activate_callback):
+ added menu items for show/hide annotations
+
+ * src/file-manager/nautilus-icon-view-ui.xml:
+ added menu items and commands
+
+2001-04-12 Andy Hertzfeld <andy@eazel.com>
+
keep showing an annotation as long as the mouse remains in
the emblem or in the annotation itself.
diff --git a/libnautilus-extensions/nautilus-canvas-note-item.c b/libnautilus-extensions/nautilus-canvas-note-item.c
index d179d9de4..c07472c55 100644
--- a/libnautilus-extensions/nautilus-canvas-note-item.c
+++ b/libnautilus-extensions/nautilus-canvas-note-item.c
@@ -360,7 +360,6 @@ nautilus_canvas_note_item_set_note_text (NautilusCanvasNoteItem *note_item, cons
note_item->x2 = floor (note_item->x1 + (width / item->canvas->pixels_per_unit) + .5);
note_item->y2 = floor (note_item->y1 + 4.0 + (height / item->canvas->pixels_per_unit) + .5);
-
update_item_bounding_box (note_item);
g_free (display_text);
@@ -674,10 +673,12 @@ nautilus_canvas_note_item_bounds (GnomeCanvasItem *item, double *x1, double *y1,
*y2 = note_item->y2 + hwidth;
}
-/* utility routine to map raw annotation text into text to be displayed */
-/* for now this is pretty naive and only handles free-form text, just returning
- * the first suitable annotation it can find
- */
+/* fetch the height of the arrow scaled to the current coordinates */
+static int
+get_arrow_height (GnomeCanvasItem *item)
+{
+ return ARROW_HEIGHT / item->canvas->pixels_per_unit;
+}
/* utility routine to draw a text string into the passed-in item */
static void
@@ -710,7 +711,7 @@ draw_item_aa_text (GnomeCanvasBuf *buf, GnomeCanvasItem *item, const char *note_
eel_smooth_text_layout_set_line_wrap_width (smooth_text_layout, width - 4);
dest_bounds.x0 = 0;
- dest_bounds.y0 = ARROW_HEIGHT;
+ dest_bounds.y0 = get_arrow_height (item);
dest_bounds.x1 = width;
dest_bounds.y1 = height;
@@ -899,7 +900,7 @@ nautilus_canvas_note_item_point (GnomeCanvasItem *item, double x, double y, int
/* handle the arrow if we're in aa mode */
if (item->canvas->aa) {
old_top = y1;
- y1 += ARROW_HEIGHT;
+ y1 += get_arrow_height (item);
if (y >= old_top && y <= y1) {
arrow_half_width = get_arrow_half_width (x1, x2);
@@ -960,7 +961,7 @@ nautilus_canvas_note_item_update (GnomeCanvasItem *item, double affine[6], ArtSV
if (item->canvas->aa) {
x0 = note_item->x1;
- y0 = note_item->y1 + ARROW_HEIGHT;
+ y0 = note_item->y1 + get_arrow_height (item);
x1 = note_item->x2;
y1 = note_item->y2;
diff --git a/libnautilus-extensions/nautilus-icon-canvas-item.c b/libnautilus-extensions/nautilus-icon-canvas-item.c
index 83c4a4317..c47a986bf 100644
--- a/libnautilus-extensions/nautilus-icon-canvas-item.c
+++ b/libnautilus-extensions/nautilus-icon-canvas-item.c
@@ -50,6 +50,7 @@
#include <eel/eel-gtk-macros.h>
#include <eel/eel-gnome-extensions.h>
#include <eel/eel-graphic-effects.h>
+#include "nautilus-annotation.h"
#include "nautilus-file-utilities.h"
#include "nautilus-icon-factory.h"
#include "nautilus-theme.h"
@@ -193,6 +194,10 @@ static double nautilus_icon_canvas_item_point (GnomeCanvasItem
int cx,
int cy,
GnomeCanvasItem **actual_item);
+static void nautilus_icon_canvas_item_translate (GnomeCanvasItem *item,
+ double dx,
+ double dy);
+
static void nautilus_icon_canvas_item_bounds (GnomeCanvasItem *item,
double *x1,
double *y1,
@@ -299,6 +304,7 @@ nautilus_icon_canvas_item_initialize_class (NautilusIconCanvasItemClass *class)
item_class->point = nautilus_icon_canvas_item_point;
item_class->bounds = nautilus_icon_canvas_item_bounds;
item_class->event = nautilus_icon_canvas_item_event;
+ item_class->translate = nautilus_icon_canvas_item_translate;
nautilus_preferences_add_auto_integer (NAUTILUS_PREFERENCES_CLICK_POLICY,
&click_policy_auto_value);
@@ -366,6 +372,22 @@ nautilus_icon_canvas_item_destroy (GtkObject *object)
EEL_CALL_PARENT (GTK_OBJECT_CLASS, destroy, (object));
}
+/* handle translate calls by moving the annotation, too, if it's showing */
+static void
+nautilus_icon_canvas_item_translate (GnomeCanvasItem *item, double dx, double dy)
+{
+ NautilusIconCanvasItem *icon_item;
+
+ g_message ("in translate, x %f y %f", dx, dy);
+
+ EEL_CALL_PARENT (GNOME_CANVAS_ITEM_CLASS, translate, (item, dx, dy));
+
+ icon_item = NAUTILUS_ICON_CANVAS_ITEM (item);
+ if (icon_item->details->annotation) {
+ gnome_canvas_item_move (icon_item->details->annotation, dx, dy);
+ }
+}
+
/* Currently we require pixbufs in this format (for hit testing).
* Perhaps gdk-pixbuf will be changed so it can do the hit testing
* and we won't have this requirement any more.
@@ -1977,6 +1999,27 @@ nautilus_icon_canvas_item_set_note_state (NautilusIconCanvasItem *icon_item, int
}
}
+/* handle showing or hiding annotations associated with this emblem, if any */
+void
+nautilus_icon_canvas_item_set_show_annotation (NautilusIconCanvasItem *icon_item, gboolean show_flag)
+{
+ NautilusIcon *icon;
+
+ if ((show_flag && icon_item->details->annotation != NULL) ||
+ (!show_flag && icon_item->details->annotation == NULL)) {
+ return;
+ }
+
+ if (show_flag) {
+ /* we need to calculate the emblem_index, but just use a fixed one for now */
+ icon = (NautilusIcon*) icon_item->user_data;
+ if (nautilus_annotation_get_count (NAUTILUS_FILE (icon->data)) > 0) {
+ create_annotation (icon_item, 1);
+ }
+ } else {
+ remove_annotation (icon_item);
+ }
+}
/* handle events */
@@ -2040,15 +2083,21 @@ nautilus_icon_canvas_item_event (GnomeCanvasItem *item, GdkEvent *event)
icon_item->details->is_active = 0;
icon_item->details->is_highlighted_for_drop = FALSE;
- /* if the item has an annotation and the mouse is in it
- * don't reset the note_state
+ /* if we're in "show all annotations" mode, don't respond to
+ * entering or leaving
*/
- gdk_window_get_pointer (GTK_WIDGET (item->canvas)->window, &x, &y, NULL);
- gnome_canvas_window_to_world (item->canvas, x, y, &world_x, &world_y);
- mouse_over_item = gnome_canvas_get_item_at (item->canvas, world_x, world_y);
+ if (!nautilus_icon_container_is_showing_all_annotations (NAUTILUS_ICON_CONTAINER (item->canvas))) {
+
+ /* if the item has an annotation and the mouse is in it
+ * don't reset the note_state
+ */
+ gdk_window_get_pointer (GTK_WIDGET (item->canvas)->window, &x, &y, NULL);
+ gnome_canvas_window_to_world (item->canvas, x, y, &world_x, &world_y);
+ mouse_over_item = gnome_canvas_get_item_at (item->canvas, world_x, world_y);
- if (mouse_over_item == NULL || mouse_over_item != icon_item->details->annotation) {
- nautilus_icon_canvas_item_set_note_state (icon_item, 0);
+ if (mouse_over_item == NULL || mouse_over_item != icon_item->details->annotation) {
+ nautilus_icon_canvas_item_set_note_state (icon_item, 0);
+ }
}
gnome_canvas_item_request_update (item);
@@ -2058,18 +2107,20 @@ nautilus_icon_canvas_item_event (GnomeCanvasItem *item, GdkEvent *event)
case GDK_MOTION_NOTIFY:
motion_event = (GdkEventMotion*) event;
- world_rect.x0 = motion_event->x;
- world_rect.y0 = motion_event->y;
- world_rect.x1 = world_rect.x0 + 1.0;
- world_rect.y1 = world_rect.y0 + 1.0;
+ if (!nautilus_icon_container_is_showing_all_annotations (NAUTILUS_ICON_CONTAINER (item->canvas))) {
+ world_rect.x0 = motion_event->x;
+ world_rect.y0 = motion_event->y;
+ world_rect.x1 = world_rect.x0 + 1.0;
+ world_rect.y1 = world_rect.y0 + 1.0;
- eel_gnome_canvas_world_to_canvas_rectangle
- (GNOME_CANVAS_ITEM (item)->canvas, &world_rect, &hit_rect);
+ eel_gnome_canvas_world_to_canvas_rectangle
+ (GNOME_CANVAS_ITEM (item)->canvas, &world_rect, &hit_rect);
- /* hit-test so we can handle tooltips for emblems */
- nautilus_icon_canvas_item_hit_test_full (icon_item, &hit_rect, &hit_type, &hit_index);
- emblem_state = hit_type == EMBLEM_HIT ? hit_index : 0;
- nautilus_icon_canvas_item_set_note_state (icon_item, emblem_state);
+ /* hit-test so we can handle tooltips for emblems */
+ nautilus_icon_canvas_item_hit_test_full (icon_item, &hit_rect, &hit_type, &hit_index);
+ emblem_state = hit_type == EMBLEM_HIT ? hit_index : 0;
+ nautilus_icon_canvas_item_set_note_state (icon_item, emblem_state);
+ }
return TRUE;
default:
diff --git a/libnautilus-extensions/nautilus-icon-canvas-item.h b/libnautilus-extensions/nautilus-icon-canvas-item.h
index b56c9aefd..08a76b5fc 100644
--- a/libnautilus-extensions/nautilus-icon-canvas-item.h
+++ b/libnautilus-extensions/nautilus-icon-canvas-item.h
@@ -107,8 +107,10 @@ void nautilus_icon_canvas_item_invalidate_label_size (NautilusIconCanvasI
void nautilus_icon_canvas_item_get_icon_rectangle (NautilusIconCanvasItem *item,
ArtDRect *world_rectangle);
void nautilus_icon_canvas_item_update_bounds (NautilusIconCanvasItem *item);
-void nautilus_icon_canvas_item_set_note_state (NautilusIconCanvasItem *icon_item, int new_state);
-
+void nautilus_icon_canvas_item_set_note_state (NautilusIconCanvasItem *icon_item,
+ int new_state);
+void nautilus_icon_canvas_item_set_show_annotation (NautilusIconCanvasItem *icon_item,
+ gboolean show_flag);
void nautilus_icon_canvas_item_set_smooth_font (NautilusIconCanvasItem *item,
EelScalableFont *font);
void nautilus_icon_canvas_item_set_smooth_font_size (NautilusIconCanvasItem *item,
diff --git a/libnautilus-extensions/nautilus-icon-container.c b/libnautilus-extensions/nautilus-icon-container.c
index 3a88d75e9..2e1de1c60 100644
--- a/libnautilus-extensions/nautilus-icon-container.c
+++ b/libnautilus-extensions/nautilus-icon-container.c
@@ -5179,6 +5179,31 @@ nautilus_icon_container_get_note_text (NautilusIconContainer *container,
return note_text;
}
+/* return the state of the show all annotations flag */
+gboolean
+nautilus_icon_container_is_showing_all_annotations (NautilusIconContainer *container)
+{
+ return container->details->show_all_annotations;
+}
+
+/* set the state of the show all annotations flag */
+void
+nautilus_icon_container_set_show_all_annotations (NautilusIconContainer *container,
+ gboolean show_flag)
+{
+ GList *p;
+ NautilusIcon *icon;
+
+ if (container->details->show_all_annotations != show_flag) {
+ container->details->show_all_annotations = show_flag;
+
+ for (p = container->details->icons; p != NULL; p = p->next) {
+ icon = p->data;
+ nautilus_icon_canvas_item_set_show_annotation (icon->item, show_flag);
+ }
+ }
+}
+
/* Return if the icon container is a fixed size */
gboolean
nautilus_icon_container_get_is_fixed_size (NautilusIconContainer *container)
diff --git a/libnautilus-extensions/nautilus-icon-container.h b/libnautilus-extensions/nautilus-icon-container.h
index 4510110ec..e6cbd02f0 100644
--- a/libnautilus-extensions/nautilus-icon-container.h
+++ b/libnautilus-extensions/nautilus-icon-container.h
@@ -183,6 +183,9 @@ gboolean nautilus_icon_container_is_empty (Nautilu
gboolean nautilus_icon_container_is_auto_layout (NautilusIconContainer *container);
void nautilus_icon_container_set_auto_layout (NautilusIconContainer *container,
gboolean auto_layout);
+gboolean nautilus_icon_container_is_showing_all_annotations (NautilusIconContainer *container);
+void nautilus_icon_container_set_show_all_annotations (NautilusIconContainer *container,
+ gboolean show_flag);
gboolean nautilus_icon_container_is_tighter_layout (NautilusIconContainer *container);
void nautilus_icon_container_set_tighter_layout (NautilusIconContainer *container,
gboolean tighter_layout);
diff --git a/libnautilus-extensions/nautilus-icon-private.h b/libnautilus-extensions/nautilus-icon-private.h
index d31a13265..fb7cc9a64 100644
--- a/libnautilus-extensions/nautilus-icon-private.h
+++ b/libnautilus-extensions/nautilus-icon-private.h
@@ -204,6 +204,9 @@ struct NautilusIconContainerDetails {
/* Set to TRUE after first allocation has been done */
gboolean has_been_allocated;
+ /* flag to control showing all the annotations */
+ gboolean show_all_annotations;
+
/* Is the container fixed or resizable */
gboolean is_fixed_size;
diff --git a/libnautilus-private/nautilus-canvas-note-item.c b/libnautilus-private/nautilus-canvas-note-item.c
index d179d9de4..c07472c55 100644
--- a/libnautilus-private/nautilus-canvas-note-item.c
+++ b/libnautilus-private/nautilus-canvas-note-item.c
@@ -360,7 +360,6 @@ nautilus_canvas_note_item_set_note_text (NautilusCanvasNoteItem *note_item, cons
note_item->x2 = floor (note_item->x1 + (width / item->canvas->pixels_per_unit) + .5);
note_item->y2 = floor (note_item->y1 + 4.0 + (height / item->canvas->pixels_per_unit) + .5);
-
update_item_bounding_box (note_item);
g_free (display_text);
@@ -674,10 +673,12 @@ nautilus_canvas_note_item_bounds (GnomeCanvasItem *item, double *x1, double *y1,
*y2 = note_item->y2 + hwidth;
}
-/* utility routine to map raw annotation text into text to be displayed */
-/* for now this is pretty naive and only handles free-form text, just returning
- * the first suitable annotation it can find
- */
+/* fetch the height of the arrow scaled to the current coordinates */
+static int
+get_arrow_height (GnomeCanvasItem *item)
+{
+ return ARROW_HEIGHT / item->canvas->pixels_per_unit;
+}
/* utility routine to draw a text string into the passed-in item */
static void
@@ -710,7 +711,7 @@ draw_item_aa_text (GnomeCanvasBuf *buf, GnomeCanvasItem *item, const char *note_
eel_smooth_text_layout_set_line_wrap_width (smooth_text_layout, width - 4);
dest_bounds.x0 = 0;
- dest_bounds.y0 = ARROW_HEIGHT;
+ dest_bounds.y0 = get_arrow_height (item);
dest_bounds.x1 = width;
dest_bounds.y1 = height;
@@ -899,7 +900,7 @@ nautilus_canvas_note_item_point (GnomeCanvasItem *item, double x, double y, int
/* handle the arrow if we're in aa mode */
if (item->canvas->aa) {
old_top = y1;
- y1 += ARROW_HEIGHT;
+ y1 += get_arrow_height (item);
if (y >= old_top && y <= y1) {
arrow_half_width = get_arrow_half_width (x1, x2);
@@ -960,7 +961,7 @@ nautilus_canvas_note_item_update (GnomeCanvasItem *item, double affine[6], ArtSV
if (item->canvas->aa) {
x0 = note_item->x1;
- y0 = note_item->y1 + ARROW_HEIGHT;
+ y0 = note_item->y1 + get_arrow_height (item);
x1 = note_item->x2;
y1 = note_item->y2;
diff --git a/libnautilus-private/nautilus-icon-canvas-item.c b/libnautilus-private/nautilus-icon-canvas-item.c
index 83c4a4317..c47a986bf 100644
--- a/libnautilus-private/nautilus-icon-canvas-item.c
+++ b/libnautilus-private/nautilus-icon-canvas-item.c
@@ -50,6 +50,7 @@
#include <eel/eel-gtk-macros.h>
#include <eel/eel-gnome-extensions.h>
#include <eel/eel-graphic-effects.h>
+#include "nautilus-annotation.h"
#include "nautilus-file-utilities.h"
#include "nautilus-icon-factory.h"
#include "nautilus-theme.h"
@@ -193,6 +194,10 @@ static double nautilus_icon_canvas_item_point (GnomeCanvasItem
int cx,
int cy,
GnomeCanvasItem **actual_item);
+static void nautilus_icon_canvas_item_translate (GnomeCanvasItem *item,
+ double dx,
+ double dy);
+
static void nautilus_icon_canvas_item_bounds (GnomeCanvasItem *item,
double *x1,
double *y1,
@@ -299,6 +304,7 @@ nautilus_icon_canvas_item_initialize_class (NautilusIconCanvasItemClass *class)
item_class->point = nautilus_icon_canvas_item_point;
item_class->bounds = nautilus_icon_canvas_item_bounds;
item_class->event = nautilus_icon_canvas_item_event;
+ item_class->translate = nautilus_icon_canvas_item_translate;
nautilus_preferences_add_auto_integer (NAUTILUS_PREFERENCES_CLICK_POLICY,
&click_policy_auto_value);
@@ -366,6 +372,22 @@ nautilus_icon_canvas_item_destroy (GtkObject *object)
EEL_CALL_PARENT (GTK_OBJECT_CLASS, destroy, (object));
}
+/* handle translate calls by moving the annotation, too, if it's showing */
+static void
+nautilus_icon_canvas_item_translate (GnomeCanvasItem *item, double dx, double dy)
+{
+ NautilusIconCanvasItem *icon_item;
+
+ g_message ("in translate, x %f y %f", dx, dy);
+
+ EEL_CALL_PARENT (GNOME_CANVAS_ITEM_CLASS, translate, (item, dx, dy));
+
+ icon_item = NAUTILUS_ICON_CANVAS_ITEM (item);
+ if (icon_item->details->annotation) {
+ gnome_canvas_item_move (icon_item->details->annotation, dx, dy);
+ }
+}
+
/* Currently we require pixbufs in this format (for hit testing).
* Perhaps gdk-pixbuf will be changed so it can do the hit testing
* and we won't have this requirement any more.
@@ -1977,6 +1999,27 @@ nautilus_icon_canvas_item_set_note_state (NautilusIconCanvasItem *icon_item, int
}
}
+/* handle showing or hiding annotations associated with this emblem, if any */
+void
+nautilus_icon_canvas_item_set_show_annotation (NautilusIconCanvasItem *icon_item, gboolean show_flag)
+{
+ NautilusIcon *icon;
+
+ if ((show_flag && icon_item->details->annotation != NULL) ||
+ (!show_flag && icon_item->details->annotation == NULL)) {
+ return;
+ }
+
+ if (show_flag) {
+ /* we need to calculate the emblem_index, but just use a fixed one for now */
+ icon = (NautilusIcon*) icon_item->user_data;
+ if (nautilus_annotation_get_count (NAUTILUS_FILE (icon->data)) > 0) {
+ create_annotation (icon_item, 1);
+ }
+ } else {
+ remove_annotation (icon_item);
+ }
+}
/* handle events */
@@ -2040,15 +2083,21 @@ nautilus_icon_canvas_item_event (GnomeCanvasItem *item, GdkEvent *event)
icon_item->details->is_active = 0;
icon_item->details->is_highlighted_for_drop = FALSE;
- /* if the item has an annotation and the mouse is in it
- * don't reset the note_state
+ /* if we're in "show all annotations" mode, don't respond to
+ * entering or leaving
*/
- gdk_window_get_pointer (GTK_WIDGET (item->canvas)->window, &x, &y, NULL);
- gnome_canvas_window_to_world (item->canvas, x, y, &world_x, &world_y);
- mouse_over_item = gnome_canvas_get_item_at (item->canvas, world_x, world_y);
+ if (!nautilus_icon_container_is_showing_all_annotations (NAUTILUS_ICON_CONTAINER (item->canvas))) {
+
+ /* if the item has an annotation and the mouse is in it
+ * don't reset the note_state
+ */
+ gdk_window_get_pointer (GTK_WIDGET (item->canvas)->window, &x, &y, NULL);
+ gnome_canvas_window_to_world (item->canvas, x, y, &world_x, &world_y);
+ mouse_over_item = gnome_canvas_get_item_at (item->canvas, world_x, world_y);
- if (mouse_over_item == NULL || mouse_over_item != icon_item->details->annotation) {
- nautilus_icon_canvas_item_set_note_state (icon_item, 0);
+ if (mouse_over_item == NULL || mouse_over_item != icon_item->details->annotation) {
+ nautilus_icon_canvas_item_set_note_state (icon_item, 0);
+ }
}
gnome_canvas_item_request_update (item);
@@ -2058,18 +2107,20 @@ nautilus_icon_canvas_item_event (GnomeCanvasItem *item, GdkEvent *event)
case GDK_MOTION_NOTIFY:
motion_event = (GdkEventMotion*) event;
- world_rect.x0 = motion_event->x;
- world_rect.y0 = motion_event->y;
- world_rect.x1 = world_rect.x0 + 1.0;
- world_rect.y1 = world_rect.y0 + 1.0;
+ if (!nautilus_icon_container_is_showing_all_annotations (NAUTILUS_ICON_CONTAINER (item->canvas))) {
+ world_rect.x0 = motion_event->x;
+ world_rect.y0 = motion_event->y;
+ world_rect.x1 = world_rect.x0 + 1.0;
+ world_rect.y1 = world_rect.y0 + 1.0;
- eel_gnome_canvas_world_to_canvas_rectangle
- (GNOME_CANVAS_ITEM (item)->canvas, &world_rect, &hit_rect);
+ eel_gnome_canvas_world_to_canvas_rectangle
+ (GNOME_CANVAS_ITEM (item)->canvas, &world_rect, &hit_rect);
- /* hit-test so we can handle tooltips for emblems */
- nautilus_icon_canvas_item_hit_test_full (icon_item, &hit_rect, &hit_type, &hit_index);
- emblem_state = hit_type == EMBLEM_HIT ? hit_index : 0;
- nautilus_icon_canvas_item_set_note_state (icon_item, emblem_state);
+ /* hit-test so we can handle tooltips for emblems */
+ nautilus_icon_canvas_item_hit_test_full (icon_item, &hit_rect, &hit_type, &hit_index);
+ emblem_state = hit_type == EMBLEM_HIT ? hit_index : 0;
+ nautilus_icon_canvas_item_set_note_state (icon_item, emblem_state);
+ }
return TRUE;
default:
diff --git a/libnautilus-private/nautilus-icon-canvas-item.h b/libnautilus-private/nautilus-icon-canvas-item.h
index b56c9aefd..08a76b5fc 100644
--- a/libnautilus-private/nautilus-icon-canvas-item.h
+++ b/libnautilus-private/nautilus-icon-canvas-item.h
@@ -107,8 +107,10 @@ void nautilus_icon_canvas_item_invalidate_label_size (NautilusIconCanvasI
void nautilus_icon_canvas_item_get_icon_rectangle (NautilusIconCanvasItem *item,
ArtDRect *world_rectangle);
void nautilus_icon_canvas_item_update_bounds (NautilusIconCanvasItem *item);
-void nautilus_icon_canvas_item_set_note_state (NautilusIconCanvasItem *icon_item, int new_state);
-
+void nautilus_icon_canvas_item_set_note_state (NautilusIconCanvasItem *icon_item,
+ int new_state);
+void nautilus_icon_canvas_item_set_show_annotation (NautilusIconCanvasItem *icon_item,
+ gboolean show_flag);
void nautilus_icon_canvas_item_set_smooth_font (NautilusIconCanvasItem *item,
EelScalableFont *font);
void nautilus_icon_canvas_item_set_smooth_font_size (NautilusIconCanvasItem *item,
diff --git a/libnautilus-private/nautilus-icon-container.c b/libnautilus-private/nautilus-icon-container.c
index 3a88d75e9..2e1de1c60 100644
--- a/libnautilus-private/nautilus-icon-container.c
+++ b/libnautilus-private/nautilus-icon-container.c
@@ -5179,6 +5179,31 @@ nautilus_icon_container_get_note_text (NautilusIconContainer *container,
return note_text;
}
+/* return the state of the show all annotations flag */
+gboolean
+nautilus_icon_container_is_showing_all_annotations (NautilusIconContainer *container)
+{
+ return container->details->show_all_annotations;
+}
+
+/* set the state of the show all annotations flag */
+void
+nautilus_icon_container_set_show_all_annotations (NautilusIconContainer *container,
+ gboolean show_flag)
+{
+ GList *p;
+ NautilusIcon *icon;
+
+ if (container->details->show_all_annotations != show_flag) {
+ container->details->show_all_annotations = show_flag;
+
+ for (p = container->details->icons; p != NULL; p = p->next) {
+ icon = p->data;
+ nautilus_icon_canvas_item_set_show_annotation (icon->item, show_flag);
+ }
+ }
+}
+
/* Return if the icon container is a fixed size */
gboolean
nautilus_icon_container_get_is_fixed_size (NautilusIconContainer *container)
diff --git a/libnautilus-private/nautilus-icon-container.h b/libnautilus-private/nautilus-icon-container.h
index 4510110ec..e6cbd02f0 100644
--- a/libnautilus-private/nautilus-icon-container.h
+++ b/libnautilus-private/nautilus-icon-container.h
@@ -183,6 +183,9 @@ gboolean nautilus_icon_container_is_empty (Nautilu
gboolean nautilus_icon_container_is_auto_layout (NautilusIconContainer *container);
void nautilus_icon_container_set_auto_layout (NautilusIconContainer *container,
gboolean auto_layout);
+gboolean nautilus_icon_container_is_showing_all_annotations (NautilusIconContainer *container);
+void nautilus_icon_container_set_show_all_annotations (NautilusIconContainer *container,
+ gboolean show_flag);
gboolean nautilus_icon_container_is_tighter_layout (NautilusIconContainer *container);
void nautilus_icon_container_set_tighter_layout (NautilusIconContainer *container,
gboolean tighter_layout);
diff --git a/libnautilus-private/nautilus-icon-private.h b/libnautilus-private/nautilus-icon-private.h
index d31a13265..fb7cc9a64 100644
--- a/libnautilus-private/nautilus-icon-private.h
+++ b/libnautilus-private/nautilus-icon-private.h
@@ -204,6 +204,9 @@ struct NautilusIconContainerDetails {
/* Set to TRUE after first allocation has been done */
gboolean has_been_allocated;
+ /* flag to control showing all the annotations */
+ gboolean show_all_annotations;
+
/* Is the container fixed or resizable */
gboolean is_fixed_size;
diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c
index cd9691f36..76b76630e 100644
--- a/src/file-manager/fm-icon-view.c
+++ b/src/file-manager/fm-icon-view.c
@@ -91,6 +91,8 @@
#define COMMAND_PREFIX "/commands/"
#define COMMAND_RENAME "/commands/Rename"
#define COMMAND_ANNOTATE "/commands/Annotate"
+#define COMMAND_SHOW_ANNOTATIONS "/commands/Show Annotations"
+#define COMMAND_HIDE_ANNOTATIONS "/commands/Hide Annotations"
#define COMMAND_STRETCH_ICON "/commands/Stretch"
#define COMMAND_UNSTRETCH_ICONS "/commands/Unstretch"
#define COMMAND_TIGHTER_LAYOUT "/commands/Tighter Layout"
@@ -423,6 +425,39 @@ annotate_callback (BonoboUIComponent *component, gpointer callback_data, const c
}
static void
+update_annotation_menu_items (FMIconView *icon_view)
+{
+ gboolean is_showing;
+
+ is_showing = nautilus_icon_container_is_showing_all_annotations (get_icon_container (icon_view));
+
+ nautilus_bonobo_set_hidden
+ (icon_view->details->ui, COMMAND_SHOW_ANNOTATIONS, is_showing);
+ nautilus_bonobo_set_hidden
+ (icon_view->details->ui, COMMAND_HIDE_ANNOTATIONS, !is_showing);
+}
+
+static void
+show_annotations_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+{
+ NautilusIconContainer *icon_container;
+
+ icon_container = get_icon_container (FM_ICON_VIEW (callback_data));
+ nautilus_icon_container_set_show_all_annotations (icon_container, TRUE);
+ update_annotation_menu_items ( FM_ICON_VIEW (callback_data));
+}
+
+static void
+hide_annotations_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+{
+ NautilusIconContainer *icon_container;
+
+ icon_container = get_icon_container (FM_ICON_VIEW (callback_data));
+ nautilus_icon_container_set_show_all_annotations (icon_container, FALSE);
+ update_annotation_menu_items ( FM_ICON_VIEW (callback_data));
+}
+
+static void
set_tighter_layout (FMIconView *icon_view, gboolean new_value)
{
fm_icon_view_set_directory_tighter_layout (icon_view,
@@ -1274,6 +1309,8 @@ fm_icon_view_merge_menus (FMDirectoryView *view)
BonoboUIVerb verbs [] = {
BONOBO_UI_VERB ("Rename", rename_icon_callback),
BONOBO_UI_VERB ("Annotate", annotate_callback),
+ BONOBO_UI_VERB ("Show Annotations", show_annotations_callback),
+ BONOBO_UI_VERB ("Hide Annotations", hide_annotations_callback),
BONOBO_UI_VERB ("Icon Text", customize_icon_text_callback),
BONOBO_UI_VERB ("Stretch", show_stretch_handles_callback),
BONOBO_UI_VERB ("Unstretch", unstretch_icons_callback),
@@ -1312,6 +1349,9 @@ fm_icon_view_merge_menus (FMDirectoryView *view)
nautilus_bonobo_set_hidden
(icon_view->details->ui, POPUP_PATH_LAY_OUT, TRUE);
}
+
+ /* show or hide the global annotation items based on the current state */
+ update_annotation_menu_items (icon_view);
update_layout_menus (icon_view);
@@ -1367,7 +1407,8 @@ fm_icon_view_update_menus (FMDirectoryView *view)
nautilus_bonobo_set_sensitive (icon_view->details->ui,
COMMAND_ANNOTATE,
selection_count == 1);
-
+
+
bonobo_ui_component_thaw (icon_view->details->ui, NULL);
nautilus_file_list_free (selection);
@@ -1490,8 +1531,8 @@ icon_container_activate_callback (NautilusIconContainer *container,
if (emblem_index > 0 && file_list != NULL && file_list->next == NULL) {
file = NAUTILUS_FILE (file_list->data);
keyword = get_keyword_by_index (file, emblem_index);
- if (eel_strcmp (keyword, "note") == 0) {
- fm_annotation_window_present (file, FM_DIRECTORY_VIEW (icon_view));
+ if (eel_strcmp (keyword, "note") == 0) {
+ fm_annotation_window_present (file, FM_DIRECTORY_VIEW (icon_view));
g_free (keyword);
return;
}
diff --git a/src/file-manager/nautilus-icon-view-ui.xml b/src/file-manager/nautilus-icon-view-ui.xml
index 26ac06eb9..88f004f89 100644
--- a/src/file-manager/nautilus-icon-view-ui.xml
+++ b/src/file-manager/nautilus-icon-view-ui.xml
@@ -6,6 +6,12 @@
<cmd name="Annotate"
_label="Add Annotation..."
_tip="Add an annotation to this file"/>
+ <cmd name="Show Annotations"
+ _label="Show All Annotations"
+ _tip="Show all of the annotations in this directory"/>
+ <cmd name="Hide Annotations"
+ _label="Hide All Annotations"
+ _tip="Hide all of the annotations in this directory"/>
<cmd name="Icon Text"
_label="Icon Captions..."
_tip="Choose which information appears beneath each icon's name"/>
@@ -150,6 +156,8 @@
type="toggle"/>
</submenu>
<menuitem name="Clean Up" verb="Clean Up"/>
+ <menuitem name="Show All Annotations" verb="Show Annotations"/>
+ <menuitem name="Hide All Annotations" verb="Hide Annotations"/>
</placeholder>
</placeholder>
</popup>