diff options
author | Benjamin Otte <otte@redhat.com> | 2011-11-06 03:52:41 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2011-12-16 20:09:13 +0100 |
commit | 132c42ccbd5deab5b24d28e23f387c7966d80d35 (patch) | |
tree | 0e20387606bc1697bdd9f2c134dd982e1006a941 /gtk/gtkfilechooserentry.c | |
parent | 45d54fcba62371dcbc1cc4e82797a0eb5aa72747 (diff) | |
download | gtk+-132c42ccbd5deab5b24d28e23f387c7966d80d35.tar.gz |
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.
Diffstat (limited to 'gtk/gtkfilechooserentry.c')
-rw-r--r-- | gtk/gtkfilechooserentry.c | 47 |
1 files changed, 12 insertions, 35 deletions
diff --git a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c index af28d80e5d..7a9b363f0a 100644 --- a/gtk/gtkfilechooserentry.c +++ b/gtk/gtkfilechooserentry.c @@ -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); |