Re: [PATCH] rename looses focus after directory change
- From: Nelson Benítez <gnel cenobioracing com>
- To: Alexander Larsson <alexl redhat com>
- Cc: nautilus-list gnome org
- Subject: Re: [PATCH] rename looses focus after directory change
- Date: Sun, 03 Dec 2006 13:42:26 +0000
Alexander Larsson escribió:
> On Tue, 2006-11-28 at 22:32 +0000, Nelson Benítez wrote:
>> Hi, I've put a patch for http://bugs.gnome.org/318373 , which is just
>> extending for icon view what was done for list view in
>> http://bugs.gnome.org/87701 , because icon view suffers the same problem
>> when you're renaming and files are added/removed in that directory...
>> Patch attached.
>
> This causes a weird dependency from libnautilus-private to the main
> binary. You need to handle this like the other cases in
> nautilus-icon-view by using doing a signal. See e.g.
> nautilus_icon_container_get_icon_text().
Ok, I've re-done it following _get_icon_text() way (which seems it's
calling a method on the base class instead of using a signal). Patch
attached.
Index: libnautilus-private/nautilus-icon-container.c
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-icon-container.c,v
retrieving revision 1.425
diff -p -u -r1.425 nautilus-icon-container.c
--- libnautilus-private/nautilus-icon-container.c 30 Nov 2006 11:10:31 -0000 1.425
+++ libnautilus-private/nautilus-icon-container.c 3 Dec 2006 13:16:13 -0000
@@ -5566,6 +5566,28 @@ nautilus_icon_container_get_icon_text (N
}
static void
+nautilus_icon_container_freeze_updates (NautilusIconContainer *container)
+{
+ NautilusIconContainerClass *klass;
+
+ klass = NAUTILUS_ICON_CONTAINER_GET_CLASS (container);
+ g_return_if_fail (klass->freeze_updates != NULL);
+
+ klass->freeze_updates (container);
+}
+
+static void
+nautilus_icon_container_unfreeze_updates (NautilusIconContainer *container)
+{
+ NautilusIconContainerClass *klass;
+
+ klass = NAUTILUS_ICON_CONTAINER_GET_CLASS (container);
+ g_return_if_fail (klass->freeze_updates != NULL);
+
+ klass->unfreeze_updates (container);
+}
+
+static void
nautilus_icon_container_start_monitor_top_left (NautilusIconContainer *container,
NautilusIconData *data,
gconstpointer client,
@@ -6926,6 +6948,9 @@ nautilus_icon_container_start_renaming_s
}
details->original_text = g_strdup (editable_text);
+
+ /* Freeze updates so files added while renaming don't cause rename to loose focus, bug #318373 */
+ nautilus_icon_container_freeze_updates (container);
/* Create text renaming widget, if it hasn't been created already.
* We deal with the broken icon text item widget by keeping it around
@@ -7022,6 +7047,8 @@ end_renaming_mode (NautilusIconContainer
/* We are not in renaming mode */
container->details->renaming = FALSE;
nautilus_icon_canvas_item_set_renaming (icon->item, FALSE);
+
+ nautilus_icon_container_unfreeze_updates (container);
if (commit) {
set_pending_icon_to_reveal (container, icon);
Index: libnautilus-private/nautilus-icon-container.h
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-icon-container.h,v
retrieving revision 1.95
diff -p -u -r1.95 nautilus-icon-container.h
--- libnautilus-private/nautilus-icon-container.h 6 Nov 2006 19:09:59 -0000 1.95
+++ libnautilus-private/nautilus-icon-container.h 3 Dec 2006 13:16:13 -0000
@@ -146,6 +146,8 @@ typedef struct {
int (* compare_icons_by_name) (NautilusIconContainer *container,
NautilusIconData *icon_a,
NautilusIconData *icon_b);
+ void (* freeze_updates) (NautilusIconContainer *container);
+ void (* unfreeze_updates) (NautilusIconContainer *container);
void (* start_monitor_top_left) (NautilusIconContainer *container,
NautilusIconData *data,
gconstpointer client,
Index: src/file-manager/fm-icon-container.c
===================================================================
RCS file: /cvs/gnome/nautilus/src/file-manager/fm-icon-container.c,v
retrieving revision 1.20
diff -p -u -r1.20 fm-icon-container.c
--- src/file-manager/fm-icon-container.c 16 May 2006 12:29:40 -0000 1.20
+++ src/file-manager/fm-icon-container.c 3 Dec 2006 13:16:14 -0000
@@ -468,6 +468,24 @@ fm_icon_container_compare_icons_by_name
}
static void
+fm_icon_container_freeze_updates (NautilusIconContainer *container)
+{
+ FMIconView *icon_view;
+ icon_view = get_icon_view (container);
+ g_return_if_fail (icon_view != NULL);
+ fm_directory_view_freeze_updates (FM_DIRECTORY_VIEW (icon_view));
+}
+
+static void
+fm_icon_container_unfreeze_updates (NautilusIconContainer *container)
+{
+ FMIconView *icon_view;
+ icon_view = get_icon_view (container);
+ g_return_if_fail (icon_view != NULL);
+ fm_directory_view_unfreeze_updates (FM_DIRECTORY_VIEW (icon_view));
+}
+
+static void
fm_icon_container_dispose (GObject *object)
{
FMIconContainer *icon_container;
@@ -495,6 +513,8 @@ fm_icon_container_class_init (FMIconCont
ic_class->compare_icons = fm_icon_container_compare_icons;
ic_class->compare_icons_by_name = fm_icon_container_compare_icons_by_name;
+ ic_class->freeze_updates = fm_icon_container_freeze_updates;
+ ic_class->unfreeze_updates = fm_icon_container_unfreeze_updates;
G_OBJECT_CLASS (klass)->dispose = fm_icon_container_dispose;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]