File gtk-filesel-dirchanged-fix.patch of Package gtk
diff --exclude=Makefile.in -Nrc -x *~ gtk+-1.2.10.orig/gtk/gtkfilesel.c gtk+-1.2.10/gtk/gtkfilesel.c
*** gtk+-1.2.10.orig/gtk/gtkfilesel.c Tue Sep 25 13:32:32 2001
--- gtk+-1.2.10/gtk/gtkfilesel.c Tue Sep 25 13:44:11 2001
***************
*** 2337,2342 ****
--- 2337,2343 ----
(GtkSignalFunc) gtk_button_clicked,
GTK_OBJECT (filesel->ok_button));
gtk_box_pack_start (GTK_BOX (entry_vbox), filesel->selection_entry, TRUE, TRUE, 0);
+ gtk_object_set_data (GTK_OBJECT (filesel->selection_entry), "last_entry_was_dir_selection", (gpointer) FALSE);
gtk_widget_show (filesel->selection_entry);
if (!cmpl_state_okay (filesel->cmpl_state))
***************
*** 2974,2982 ****
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (event != NULL, FALSE);
if (event->keyval == GDK_Tab)
{
- fs = GTK_FILE_SELECTION (user_data);
text = gtk_entry_get_text (GTK_ENTRY (fs->selection_entry));
text = g_strdup (text);
--- 2975,2985 ----
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (event != NULL, FALSE);
+ fs = GTK_FILE_SELECTION (user_data);
+ gtk_object_set_data (GTK_OBJECT (fs->selection_entry), "last_entry_was_dir_selection", (gpointer) FALSE);
+
if (event->keyval == GDK_Tab)
{
text = gtk_entry_get_text (GTK_ENTRY (fs->selection_entry));
text = g_strdup (text);
***************
*** 3129,3134 ****
--- 3132,3138 ----
else
gtk_entry_set_text (GTK_ENTRY (fs->selection_entry), filename);
+ gtk_object_set_data (GTK_OBJECT (fs->selection_entry), "last_entry_was_dir_selection", (gpointer) FALSE);
g_free (filename);
}
}
***************
*** 3142,3147 ****
--- 3146,3153 ----
{
GtkFileSelection *fs = NULL;
gchar *filename, *temp = NULL;
+ const gchar *entry_text;
+ gboolean last_entry_was_dir_selection;
g_return_if_fail (GTK_IS_CLIST (widget));
***************
*** 3152,3157 ****
--- 3158,3167 ----
gtk_clist_get_text (GTK_CLIST (fs->dir_list), row, 0, &temp);
filename = g_strdup (temp);
+ entry_text = gtk_entry_get_text (GTK_ENTRY (fs->selection_entry));
+ last_entry_was_dir_selection = (gboolean) gtk_object_get_data (GTK_OBJECT (fs->selection_entry),
+ "last_entry_was_dir_selection");
+
if (filename)
{
if (bevent)
***************
*** 3162,3175 ****
break;
default:
! gtk_entry_set_text (GTK_ENTRY (fs->selection_entry), filename);
break;
}
! else
! gtk_entry_set_text (GTK_ENTRY (fs->selection_entry), filename);
g_free (filename);
}
}
static void
--- 3172,3195 ----
break;
default:
! if (!entry_text || !strlen (entry_text) || last_entry_was_dir_selection)
! {
! gtk_entry_set_text (GTK_ENTRY (fs->selection_entry), filename);
! last_entry_was_dir_selection = TRUE;
! }
break;
}
! else if (!entry_text || !strlen (entry_text) || last_entry_was_dir_selection)
! {
! gtk_entry_set_text (GTK_ENTRY (fs->selection_entry), filename);
! last_entry_was_dir_selection = TRUE;
! }
g_free (filename);
}
+
+ gtk_object_set_data (GTK_OBJECT (fs->selection_entry), "last_entry_was_dir_selection",
+ (gpointer) last_entry_was_dir_selection);
}
static void
***************
*** 3312,3318 ****
}
else
{
! if (fs->selection_entry)
gtk_entry_set_text (GTK_ENTRY (fs->selection_entry), "");
}
--- 3332,3343 ----
}
else
{
! gboolean last_entry_was_dir_selection;
!
! last_entry_was_dir_selection = (gboolean) gtk_object_get_data (GTK_OBJECT (fs->selection_entry),
! "last_entry_was_dir_selection");
!
! if (fs->selection_entry && last_entry_was_dir_selection)
gtk_entry_set_text (GTK_ENTRY (fs->selection_entry), "");
}