GtkFilePath *path,
gchar *display_name);
-static void refresh_current_folder_and_file_part (GtkFileChooserEntry *chooser_entry);
+typedef enum {
+ REFRESH_UP_TO_CURSOR_POSITION,
+ REFRESH_WHOLE_TEXT
+} RefreshMode;
+
+static void refresh_current_folder_and_file_part (GtkFileChooserEntry *chooser_entry,
+ RefreshMode refresh_mode);
static void finished_loading_cb (GtkFileFolder *folder,
gpointer data);
static void autocomplete (GtkFileChooserEntry *chooser_entry);
{
printf ("Starting explicit completion - refreshing current folder\n");
- refresh_current_folder_and_file_part (chooser_entry);
+ refresh_current_folder_and_file_part (chooser_entry, REFRESH_UP_TO_CURSOR_POSITION);
if (!chooser_entry->current_folder_path)
{
(GTK_WIDGET_HAS_FOCUS (widget)) &&
(! control_pressed))
{
- gint pos = 0;
-
if (chooser_entry->has_completion)
{
gboolean has_selection;
gtk_editable_set_position (GTK_EDITABLE (entry),
entry->text_length);
}
-
+
+ refresh_current_folder_and_file_part (chooser_entry, REFRESH_WHOLE_TEXT);
+
GTK_ENTRY_CLASS (_gtk_file_chooser_entry_parent_class)->activate (entry);
}
}
static void
-refresh_current_folder_and_file_part (GtkFileChooserEntry *chooser_entry)
+refresh_current_folder_and_file_part (GtkFileChooserEntry *chooser_entry,
+ RefreshMode refresh_mode)
{
GtkEditable *editable;
- gchar *text_up_to_cursor;
+ gint end_pos;
+ gchar *text;
GtkFilePath *folder_path;
gchar *file_part;
gsize total_len, file_part_len;
editable = GTK_EDITABLE (chooser_entry);
- text_up_to_cursor = gtk_editable_get_chars (editable, 0, gtk_editable_get_position (editable));
+ switch (refresh_mode)
+ {
+ case REFRESH_UP_TO_CURSOR_POSITION:
+ end_pos = gtk_editable_get_position (editable);
+ break;
+
+ case REFRESH_WHOLE_TEXT:
+ end_pos = GTK_ENTRY (chooser_entry)->text_length;
+ break;
+
+ default:
+ g_assert_not_reached ();
+ return;
+ }
+
+ text = gtk_editable_get_chars (editable, 0, end_pos);
if (!chooser_entry->file_system ||
!chooser_entry->base_folder ||
!gtk_file_system_parse (chooser_entry->file_system,
- chooser_entry->base_folder, text_up_to_cursor,
+ chooser_entry->base_folder, text,
&folder_path, &file_part, NULL)) /* NULL-GError */
{
folder_path = gtk_file_path_copy (chooser_entry->base_folder);
else
{
file_part_len = strlen (file_part);
- total_len = strlen (text_up_to_cursor);
+ total_len = strlen (text);
if (total_len > file_part_len)
- file_part_pos = g_utf8_strlen (text_up_to_cursor, total_len - file_part_len);
+ file_part_pos = g_utf8_strlen (text, total_len - file_part_len);
else
file_part_pos = 0;
}
printf ("Parsed text \"%s\", file_part=\"%s\", file_part_pos=%d, folder_path=\"%s\"\n",
- text_up_to_cursor,
+ text,
file_part,
file_part_pos,
folder_path ? (char *) folder_path : "(NULL)");
- g_free (text_up_to_cursor);
+ g_free (text);
g_free (chooser_entry->file_part);
{
printf ("Starting autocompletion\n");
- refresh_current_folder_and_file_part (chooser_entry);
+ refresh_current_folder_and_file_part (chooser_entry, REFRESH_UP_TO_CURSOR_POSITION);
if (!chooser_entry->current_folder)
{
gtk_editable_set_position (GTK_EDITABLE (chooser_entry),
GTK_ENTRY (chooser_entry)->text_length);
}
+
+ refresh_current_folder_and_file_part (chooser_entry, REFRESH_WHOLE_TEXT);
+
return chooser_entry->file_part;
}