[gtk+] filechooserentry: Get rid of RefreshMode



commit 132c42ccbd5deab5b24d28e23f387c7966d80d35
Author: Benjamin Otte <otte redhat com>
Date:   Sun Nov 6 03:52:41 2011 +0100

    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.

 gtk/gtkfilechooserentry.c |   47 +++++++++++---------------------------------
 1 files changed, 12 insertions(+), 35 deletions(-)
---
diff --git a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c
index af28d80..7a9b363 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);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]