forked from AuroraMiddleware/gtk
filechooserentry: Get rid of RefreshMode
Instead, pass the text to use to refresh_current_folder_and_file_part(). This also gets rid of the problem introduced earlier that the position is not properly updated in do_insert_text() and therefor the completion is wrong.
This commit is contained in:
parent
45d54fcba6
commit
132c42ccbd
@ -141,13 +141,8 @@ static gboolean completion_match_func (GtkEntryCompletion *comp,
|
||||
GtkTreeIter *iter,
|
||||
gpointer data);
|
||||
|
||||
typedef enum {
|
||||
REFRESH_UP_TO_CURSOR_POSITION,
|
||||
REFRESH_WHOLE_TEXT
|
||||
} RefreshMode;
|
||||
|
||||
static RefreshStatus refresh_current_folder_and_file_part (GtkFileChooserEntry *chooser_entry,
|
||||
RefreshMode refresh_mode);
|
||||
const char *text);
|
||||
static void finished_loading_cb (GtkFileSystemModel *model,
|
||||
GError *error,
|
||||
GtkFileChooserEntry *chooser_entry);
|
||||
@ -750,6 +745,7 @@ gtk_file_chooser_entry_do_insert_text (GtkEditable *editable,
|
||||
gint *position)
|
||||
{
|
||||
GtkFileChooserEntry *chooser_entry = GTK_FILE_CHOOSER_ENTRY (editable);
|
||||
char *text;
|
||||
|
||||
parent_editable_iface->do_insert_text (editable, new_text, new_text_length, position);
|
||||
|
||||
@ -757,7 +753,9 @@ gtk_file_chooser_entry_do_insert_text (GtkEditable *editable,
|
||||
return;
|
||||
|
||||
remove_completion_feedback (chooser_entry);
|
||||
refresh_current_folder_and_file_part (chooser_entry, REFRESH_UP_TO_CURSOR_POSITION);
|
||||
text = gtk_editable_get_chars (editable, 0, *position);
|
||||
refresh_current_folder_and_file_part (chooser_entry, text);
|
||||
g_free (text);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1083,9 +1081,12 @@ start_explicit_completion (GtkFileChooserEntry *chooser_entry)
|
||||
{
|
||||
RefreshStatus status;
|
||||
gboolean is_error;
|
||||
char *feedback_msg;
|
||||
char *feedback_msg, *text;
|
||||
|
||||
status = refresh_current_folder_and_file_part (chooser_entry, REFRESH_UP_TO_CURSOR_POSITION);
|
||||
text = gtk_editable_get_chars (GTK_EDITABLE (chooser_entry),
|
||||
0, gtk_editable_get_position (GTK_EDITABLE (chooser_entry)));
|
||||
status = refresh_current_folder_and_file_part (chooser_entry, text);
|
||||
g_free (text);
|
||||
|
||||
is_error = FALSE;
|
||||
|
||||
@ -1225,7 +1226,7 @@ static void
|
||||
commit_completion_and_refresh (GtkFileChooserEntry *chooser_entry)
|
||||
{
|
||||
/* Here we ignore the result of refresh_current_folder_and_file_part(); there is nothing we can do with it */
|
||||
refresh_current_folder_and_file_part (chooser_entry, REFRESH_WHOLE_TEXT);
|
||||
refresh_current_folder_and_file_part (chooser_entry, gtk_entry_get_text (GTK_ENTRY (chooser_entry)));
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1404,11 +1405,8 @@ reload_current_folder (GtkFileChooserEntry *chooser_entry,
|
||||
|
||||
static RefreshStatus
|
||||
refresh_current_folder_and_file_part (GtkFileChooserEntry *chooser_entry,
|
||||
RefreshMode refresh_mode)
|
||||
const gchar * text)
|
||||
{
|
||||
GtkEditable *editable;
|
||||
gint end_pos;
|
||||
gchar *text;
|
||||
GFile *folder_file;
|
||||
gchar *file_part;
|
||||
gsize total_len, file_part_len;
|
||||
@ -1416,25 +1414,6 @@ refresh_current_folder_and_file_part (GtkFileChooserEntry *chooser_entry,
|
||||
GError *error;
|
||||
RefreshStatus result;
|
||||
|
||||
editable = GTK_EDITABLE (chooser_entry);
|
||||
|
||||
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_get_text_length (GTK_ENTRY (chooser_entry));
|
||||
break;
|
||||
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
return REFRESH_INVALID_INPUT;
|
||||
}
|
||||
|
||||
text = gtk_editable_get_chars (editable, 0, end_pos);
|
||||
|
||||
error = NULL;
|
||||
if (!gtk_file_chooser_entry_parse (chooser_entry,
|
||||
text, &folder_file, &file_part, &error))
|
||||
@ -1473,8 +1452,6 @@ refresh_current_folder_and_file_part (GtkFileChooserEntry *chooser_entry,
|
||||
chooser_entry->file_part = file_part;
|
||||
chooser_entry->file_part_pos = file_part_pos;
|
||||
|
||||
g_free (text);
|
||||
|
||||
if (result == REFRESH_OK)
|
||||
{
|
||||
result = reload_current_folder (chooser_entry, folder_file);
|
||||
|
Loading…
Reference in New Issue
Block a user