gtk+ r19833 - trunk/gtk
- From: federico svn gnome org
- To: svn-commits-list gnome org
- Subject: gtk+ r19833 - trunk/gtk
- Date: Thu, 13 Mar 2008 00:40:17 +0000 (GMT)
Author: federico
Date: Thu Mar 13 00:40:16 2008
New Revision: 19833
URL: http://svn.gnome.org/viewvc/gtk+?rev=19833&view=rev
Log:
Refresh the file part when it gets requested and when activating the entry
Signed-off-by: Federico Mena Quintero <federico gnu org>
Modified:
trunk/gtk/gtkfilechooserentry.c
Modified: trunk/gtk/gtkfilechooserentry.c
==============================================================================
--- trunk/gtk/gtkfilechooserentry.c (original)
+++ trunk/gtk/gtkfilechooserentry.c Thu Mar 13 00:40:16 2008
@@ -128,7 +128,13 @@
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);
@@ -675,7 +681,7 @@
{
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)
{
@@ -734,8 +740,6 @@
(GTK_WIDGET_HAS_FOCUS (widget)) &&
(! control_pressed))
{
- gint pos = 0;
-
if (chooser_entry->has_completion)
{
gboolean has_selection;
@@ -782,7 +786,9 @@
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);
}
@@ -1010,10 +1016,12 @@
}
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;
@@ -1021,12 +1029,27 @@
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);
@@ -1036,20 +1059,20 @@
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);
@@ -1077,7 +1100,7 @@
{
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)
{
@@ -1296,6 +1319,9 @@
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;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]