summaryrefslogtreecommitdiff
path: root/libnautilus-private/nautilus-icon-container.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnautilus-private/nautilus-icon-container.c')
-rw-r--r--libnautilus-private/nautilus-icon-container.c43
1 files changed, 36 insertions, 7 deletions
diff --git a/libnautilus-private/nautilus-icon-container.c b/libnautilus-private/nautilus-icon-container.c
index 187b54427..984e20679 100644
--- a/libnautilus-private/nautilus-icon-container.c
+++ b/libnautilus-private/nautilus-icon-container.c
@@ -46,6 +46,7 @@
#include <gtk/gtksignal.h>
#include <gtk/gtklayout.h>
#include <libgnomeui/gnome-canvas-rect-ellipse.h>
+#include <libnautilus/nautilus-clipboard.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
@@ -136,7 +137,6 @@ static gboolean is_renaming (NautilusIconContainer *contain
static gboolean is_renaming_pending (NautilusIconContainer *container);
static void process_pending_icon_to_rename (NautilusIconContainer *container);
-
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusIconContainer,
nautilus_icon_container,
GNOME_TYPE_CANVAS)
@@ -160,6 +160,7 @@ enum {
GET_STORED_ICON_POSITION,
ICON_POSITION_CHANGED,
ICON_TEXT_CHANGED,
+ RENAMING_ICON,
LAYOUT_CHANGED,
MOVE_COPY_ITEMS,
CREATE_NAUTILUS_LINKS,
@@ -2897,6 +2898,15 @@ nautilus_icon_container_initialize_class (NautilusIconContainerClass *class)
GTK_TYPE_NONE, 2,
GTK_TYPE_POINTER,
GTK_TYPE_STRING);
+ signals[RENAMING_ICON]
+ = gtk_signal_new ("renaming_icon",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (NautilusIconContainerClass,
+ renaming_icon),
+ gtk_marshal_NONE__POINTER,
+ GTK_TYPE_NONE, 1,
+ GTK_TYPE_POINTER);
signals[GET_ICON_IMAGES]
= gtk_signal_new ("get_icon_images",
GTK_RUN_LAST,
@@ -4499,6 +4509,7 @@ nautilus_icon_container_start_renaming_selected_item (NautilusIconContainer *con
g_assert (!has_multiple_selection (container));
+
if (!icon_is_positioned (icon)) {
set_pending_icon_to_rename (container, icon);
return;
@@ -4516,14 +4527,15 @@ nautilus_icon_container_start_renaming_selected_item (NautilusIconContainer *con
details->original_text = g_strdup (editable_text);
- /* Create text renaming widget */
+ /* Create text renaming widget, if it hasn't been created already.
+ We deal with the broken icon text item widget by keeping it around
+ so its contents can still be cut and pasted as part of the clipboard */
+ g_assert (details->rename_widget == NULL);
details->rename_widget = NAUTILUS_ICON_TEXT_ITEM
(gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (container)),
nautilus_icon_text_item_get_type (),
NULL));
- /* Connect the text item to the clipboard */
-
-
+
/* Determine widget position widget in container */
font = details->label_font[details->zoom_level];
max_text_width = floor (nautilus_icon_canvas_item_get_max_text_width (icon->item));
@@ -4542,7 +4554,9 @@ nautilus_icon_container_start_renaming_selected_item (NautilusIconContainer *con
font, /* font */
editable_text, /* text */
TRUE); /* allocate local copy */
-
+
+ /* FIXME: These callbacks don't have any side effects.
+ They should be removed */
/* Set up the signals */
gtk_signal_connect (GTK_OBJECT (details->rename_widget), "editing_started",
GTK_SIGNAL_FUNC (editing_started), container);
@@ -4551,6 +4565,12 @@ nautilus_icon_container_start_renaming_selected_item (NautilusIconContainer *con
nautilus_icon_text_item_start_editing (details->rename_widget);
nautilus_icon_container_update_icon (container, icon);
+ gtk_signal_emit (GTK_OBJECT (container),
+ signals[RENAMING_ICON],
+ nautilus_icon_text_item_get_renaming_editable (details->rename_widget));
+
+
+
/* We are in renaming mode */
details->renaming = TRUE;
@@ -4585,16 +4605,25 @@ end_renaming_mode (NautilusIconContainer *container, gboolean commit)
hide_rename_widget (container, icon);
}
+/* FIXME: We're not exactly hiding this widget, we're destroying it!
+ Perhaps hide_rename_widget isn't the right name */
static void
hide_rename_widget (NautilusIconContainer *container, NautilusIcon *icon)
{
nautilus_icon_text_item_stop_editing (container->details->rename_widget, TRUE);
+
+ /* Destroy the old persistent rename editable */
+ if (container->details->rename_editable) {
+ gtk_object_destroy (GTK_OBJECT (container->details->rename_editable));
+ }
+ container->details->rename_editable =
+ nautilus_icon_text_item_get_renaming_editable (container->details->rename_widget);
/* Destroy renaming widget */
- /* FIXME bugzilla.eazel.com 2480: Is a destroy really sufficient here? Who does the unref? */
gtk_object_destroy (GTK_OBJECT (container->details->rename_widget));
container->details->rename_widget = NULL;
+
g_free (container->details->original_text);
/* We are not in renaming mode */