Removed the in_change flag. (completion_idle_callback): Use a temporary
2003-12-03 Federico Mena Quintero <federico@ximian.com> * gtk/gtkfilechooserentry.c (struct _GtkFileChooserEntry): Removed the in_change flag. (completion_idle_callback): Use a temporary list store and re-set it on the completion rather than modifying the old one. We are re-reading the folder anyway, and this gets rid of non-atomicity problems.
This commit is contained in:
committed by
Federico Mena Quintero
parent
2917a471d2
commit
ec3cf84bc1
@ -1,3 +1,12 @@
|
|||||||
|
2003-12-03 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserentry.c (struct _GtkFileChooserEntry): Removed
|
||||||
|
the in_change flag.
|
||||||
|
(completion_idle_callback): Use a temporary list store and re-set
|
||||||
|
it on the completion rather than modifying the old one. We are
|
||||||
|
re-reading the folder anyway, and this gets rid of non-atomicity
|
||||||
|
problems.
|
||||||
|
|
||||||
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
Decouple impl->current_folder from the selection in the folder
|
Decouple impl->current_folder from the selection in the folder
|
||||||
|
|||||||
@ -1,3 +1,12 @@
|
|||||||
|
2003-12-03 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserentry.c (struct _GtkFileChooserEntry): Removed
|
||||||
|
the in_change flag.
|
||||||
|
(completion_idle_callback): Use a temporary list store and re-set
|
||||||
|
it on the completion rather than modifying the old one. We are
|
||||||
|
re-reading the folder anyway, and this gets rid of non-atomicity
|
||||||
|
problems.
|
||||||
|
|
||||||
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
Decouple impl->current_folder from the selection in the folder
|
Decouple impl->current_folder from the selection in the folder
|
||||||
|
|||||||
@ -1,3 +1,12 @@
|
|||||||
|
2003-12-03 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserentry.c (struct _GtkFileChooserEntry): Removed
|
||||||
|
the in_change flag.
|
||||||
|
(completion_idle_callback): Use a temporary list store and re-set
|
||||||
|
it on the completion rather than modifying the old one. We are
|
||||||
|
re-reading the folder anyway, and this gets rid of non-atomicity
|
||||||
|
problems.
|
||||||
|
|
||||||
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
Decouple impl->current_folder from the selection in the folder
|
Decouple impl->current_folder from the selection in the folder
|
||||||
|
|||||||
@ -1,3 +1,12 @@
|
|||||||
|
2003-12-03 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserentry.c (struct _GtkFileChooserEntry): Removed
|
||||||
|
the in_change flag.
|
||||||
|
(completion_idle_callback): Use a temporary list store and re-set
|
||||||
|
it on the completion rather than modifying the old one. We are
|
||||||
|
re-reading the folder anyway, and this gets rid of non-atomicity
|
||||||
|
problems.
|
||||||
|
|
||||||
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
Decouple impl->current_folder from the selection in the folder
|
Decouple impl->current_folder from the selection in the folder
|
||||||
|
|||||||
@ -1,3 +1,12 @@
|
|||||||
|
2003-12-03 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserentry.c (struct _GtkFileChooserEntry): Removed
|
||||||
|
the in_change flag.
|
||||||
|
(completion_idle_callback): Use a temporary list store and re-set
|
||||||
|
it on the completion rather than modifying the old one. We are
|
||||||
|
re-reading the folder anyway, and this gets rid of non-atomicity
|
||||||
|
problems.
|
||||||
|
|
||||||
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
Decouple impl->current_folder from the selection in the folder
|
Decouple impl->current_folder from the selection in the folder
|
||||||
|
|||||||
@ -50,7 +50,6 @@ struct _GtkFileChooserEntry
|
|||||||
|
|
||||||
GtkListStore *completion_store;
|
GtkListStore *completion_store;
|
||||||
|
|
||||||
guint in_change : 1;
|
|
||||||
guint has_completion : 1;
|
guint has_completion : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -243,6 +242,7 @@ completion_idle_callback (GtkFileChooserEntry *chooser_entry)
|
|||||||
GSList *tmp_list;
|
GSList *tmp_list;
|
||||||
gchar *common_prefix = NULL;
|
gchar *common_prefix = NULL;
|
||||||
GtkFilePath *unique_path = NULL;
|
GtkFilePath *unique_path = NULL;
|
||||||
|
GtkListStore *new_store;
|
||||||
|
|
||||||
chooser_entry->completion_idle = NULL;
|
chooser_entry->completion_idle = NULL;
|
||||||
|
|
||||||
@ -261,8 +261,7 @@ completion_idle_callback (GtkFileChooserEntry *chooser_entry)
|
|||||||
&child_paths,
|
&child_paths,
|
||||||
NULL); /* NULL-GError */
|
NULL); /* NULL-GError */
|
||||||
|
|
||||||
chooser_entry->in_change = TRUE;
|
new_store = gtk_list_store_new (1, G_TYPE_STRING);
|
||||||
gtk_list_store_clear (chooser_entry->completion_store);
|
|
||||||
|
|
||||||
for (tmp_list = child_paths; tmp_list; tmp_list = tmp_list->next)
|
for (tmp_list = child_paths; tmp_list; tmp_list = tmp_list->next)
|
||||||
{
|
{
|
||||||
@ -279,8 +278,8 @@ completion_idle_callback (GtkFileChooserEntry *chooser_entry)
|
|||||||
const gchar *display_name = gtk_file_info_get_display_name (info);
|
const gchar *display_name = gtk_file_info_get_display_name (info);
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
|
|
||||||
gtk_list_store_append (chooser_entry->completion_store, &iter);
|
gtk_list_store_append (new_store, &iter);
|
||||||
gtk_list_store_set (chooser_entry->completion_store, &iter,
|
gtk_list_store_set (new_store, &iter,
|
||||||
0, display_name,
|
0, display_name,
|
||||||
-1);
|
-1);
|
||||||
|
|
||||||
@ -312,7 +311,11 @@ completion_idle_callback (GtkFileChooserEntry *chooser_entry)
|
|||||||
gtk_file_info_free (info);
|
gtk_file_info_free (info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
chooser_entry->in_change = FALSE;
|
|
||||||
|
g_object_unref (chooser_entry->completion_store);
|
||||||
|
chooser_entry->completion_store = new_store;
|
||||||
|
gtk_entry_completion_set_model (gtk_entry_get_completion (GTK_ENTRY (chooser_entry)),
|
||||||
|
GTK_TREE_MODEL (new_store));
|
||||||
|
|
||||||
if (unique_path)
|
if (unique_path)
|
||||||
{
|
{
|
||||||
@ -352,8 +355,6 @@ completion_idle_callback (GtkFileChooserEntry *chooser_entry)
|
|||||||
|
|
||||||
if (common_prefix_len > file_part_len)
|
if (common_prefix_len > file_part_len)
|
||||||
{
|
{
|
||||||
chooser_entry->in_change = TRUE;
|
|
||||||
|
|
||||||
pos = total_len - file_part_len;
|
pos = total_len - file_part_len;
|
||||||
gtk_editable_delete_text (editable,
|
gtk_editable_delete_text (editable,
|
||||||
pos, -1);
|
pos, -1);
|
||||||
@ -364,7 +365,6 @@ completion_idle_callback (GtkFileChooserEntry *chooser_entry)
|
|||||||
total_len,
|
total_len,
|
||||||
total_len - file_part_len + common_prefix_len);
|
total_len - file_part_len + common_prefix_len);
|
||||||
|
|
||||||
chooser_entry->in_change = FALSE;
|
|
||||||
chooser_entry->has_completion = TRUE;
|
chooser_entry->has_completion = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -381,12 +381,10 @@ gtk_file_chooser_entry_do_insert_text (GtkEditable *editable,
|
|||||||
gint *position)
|
gint *position)
|
||||||
{
|
{
|
||||||
GtkFileChooserEntry *chooser_entry = GTK_FILE_CHOOSER_ENTRY (editable);
|
GtkFileChooserEntry *chooser_entry = GTK_FILE_CHOOSER_ENTRY (editable);
|
||||||
char *tmp;
|
|
||||||
|
|
||||||
parent_editable_iface->do_insert_text (editable, new_text, new_text_length, position);
|
parent_editable_iface->do_insert_text (editable, new_text, new_text_length, position);
|
||||||
|
|
||||||
if (!chooser_entry->in_change &&
|
if (*position == GTK_ENTRY (editable)->text_length &&
|
||||||
*position == GTK_ENTRY (editable)->text_length &&
|
|
||||||
!chooser_entry->completion_idle)
|
!chooser_entry->completion_idle)
|
||||||
{
|
{
|
||||||
chooser_entry->completion_idle = g_idle_source_new ();
|
chooser_entry->completion_idle = g_idle_source_new ();
|
||||||
@ -574,7 +572,5 @@ _gtk_file_chooser_entry_set_file_part (GtkFileChooserEntry *chooser_entry,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (GTK_IS_FILE_CHOOSER_ENTRY (chooser_entry));
|
g_return_if_fail (GTK_IS_FILE_CHOOSER_ENTRY (chooser_entry));
|
||||||
|
|
||||||
chooser_entry->in_change = TRUE;
|
|
||||||
gtk_entry_set_text (GTK_ENTRY (chooser_entry), file_part);
|
gtk_entry_set_text (GTK_ENTRY (chooser_entry), file_part);
|
||||||
chooser_entry->in_change = FALSE;
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user