gtk+ r19834 - trunk/gtk
- From: federico svn gnome org
- To: svn-commits-list gnome org
- Subject: gtk+ r19834 - trunk/gtk
- Date: Thu, 13 Mar 2008 00:40:37 +0000 (GMT)
Author: federico
Date: Thu Mar 13 00:40:37 2008
New Revision: 19834
URL: http://svn.gnome.org/viewvc/gtk+?rev=19834&view=rev
Log:
Stubs to give feedback when doing explicit completion
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:37 2008
@@ -385,6 +385,12 @@
chooser_entry->load_complete_action = LOAD_COMPLETE_NOTHING;
}
+static void
+beep (GtkFileChooserEntry *chooser_entry)
+{
+ gdk_display_beep (gtk_widget_get_display (GTK_WIDGET (chooser_entry)));
+}
+
/* This function will append a directory separator to paths to
* display_name iff the path associated with it is a directory.
* maybe_append_separator_to_path will g_free the display_name and
@@ -427,10 +433,11 @@
* to the current contents of the entry. Also, if there's one and only one such
* path, stores it in unique_path_ret.
*/
-static void
+static gboolean
find_common_prefix (GtkFileChooserEntry *chooser_entry,
gchar **common_prefix_ret,
- GtkFilePath **unique_path_ret)
+ GtkFilePath **unique_path_ret,
+ GError **error)
{
GtkEditable *editable;
GtkTreeIter iter;
@@ -455,7 +462,7 @@
text_up_to_cursor,
&parsed_folder_path,
&parsed_file_part,
- NULL); /* NULL-GError */
+ error);
printf ("Text up to cursor: \"%s\"\n", text_up_to_cursor);
printf ("parsed_folder_path: \"%s\"\nparsed_file_part: \"%s\"\n",
@@ -465,7 +472,7 @@
g_free (text_up_to_cursor);
if (!parsed)
- return;
+ return FALSE;
g_assert (parsed_folder_path != NULL
&& chooser_entry->current_folder_path != NULL
@@ -516,19 +523,46 @@
gtk_file_path_free (parsed_folder_path);
g_free (parsed_file_part);
+
+ return TRUE;
}
+typedef enum {
+ PREFIX_APPENDED,
+ UNIQUE_PREFIX_APPENDED,
+ INVALID_INPUT,
+ NO_COMMON_PREFIX
+} CommonPrefixResult;
+
/* Finds a common prefix based on the contents of the entry and mandatorily appends it */
-static void
+static CommonPrefixResult
append_common_prefix (GtkFileChooserEntry *chooser_entry,
- gboolean highlight)
+ gboolean highlight,
+ gboolean show_errors)
{
gchar *common_prefix;
GtkFilePath *unique_path;
+ GError *error;
+ CommonPrefixResult result;
+ gboolean have_result;
clear_completions (chooser_entry);
- find_common_prefix (chooser_entry, &common_prefix, &unique_path);
+ error = NULL;
+ if (!find_common_prefix (chooser_entry, &common_prefix, &unique_path, &error))
+ {
+ if (show_errors)
+ {
+ beep (chooser_entry);
+ /* FIXME: display the error somehow */
+ }
+
+ g_error_free (error);
+
+ return INVALID_INPUT;
+ }
+
+ have_result = FALSE;
if (unique_path)
{
@@ -536,6 +570,13 @@
unique_path,
common_prefix);
gtk_file_path_free (unique_path);
+
+ if (common_prefix)
+ result = UNIQUE_PREFIX_APPENDED;
+ else
+ result = INVALID_INPUT;
+
+ have_result = TRUE;
}
printf ("common prefix: \"%s\"\n",
@@ -574,6 +615,18 @@
gtk_editable_set_position (GTK_EDITABLE (chooser_entry), pos);
g_free (common_prefix);
+
+ if (have_result)
+ return result;
+ else
+ return PREFIX_APPENDED;
+ }
+ else
+ {
+ if (have_result)
+ return result;
+ else
+ return NO_COMMON_PREFIX;
}
}
@@ -655,6 +708,8 @@
static void
explicitly_complete (GtkFileChooserEntry *chooser_entry)
{
+ CommonPrefixResult result;
+
g_assert (chooser_entry->current_folder != NULL);
g_assert (gtk_file_folder_is_finished_loading (chooser_entry->current_folder));
@@ -665,7 +720,27 @@
* - If there are no matches at all, beep and bring up a tooltip
* - If the suggestion window is already up, scroll it
*/
- append_common_prefix (chooser_entry, FALSE);
+ result = append_common_prefix (chooser_entry, FALSE, TRUE);
+
+ switch (result)
+ {
+ case PREFIX_APPENDED:
+ break;
+
+ case UNIQUE_PREFIX_APPENDED:
+ break;
+
+ case INVALID_INPUT:
+ break;
+
+ case NO_COMMON_PREFIX:
+ /* FIXME: pop up the suggestion window */
+ /* FIXME: we need to distinguish between "no match" and "many matches" */
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
/* FIXME: this bit of code is commented out for reference; this is how we used to force the suggestion window to pop up
*
@@ -689,7 +764,7 @@
printf ("We don't have a current_folder_path - means the user typed something bogus\n");
- gdk_display_beep (gtk_widget_get_display (GTK_WIDGET (chooser_entry)));
+ beep (chooser_entry);
/* FIXME: present a tooltip to tell the user that his folder is invalid */
chooser_entry->load_complete_action = LOAD_COMPLETE_NOTHING;
@@ -706,6 +781,8 @@
{
printf ("File folder is not yet loaded; will do explicit completion later\n");
chooser_entry->load_complete_action = LOAD_COMPLETE_EXPLICIT_COMPLETION;
+
+ /* FIXME: here, Emacs would say, "Making completion list..." */
}
}
@@ -891,6 +968,8 @@
{
populate_completion_store (chooser_entry);
perform_load_complete_action (chooser_entry);
+
+ gtk_widget_set_tooltip_text (GTK_WIDGET (chooser_entry), NULL);
}
/* Callback when the current folder finishes loading */
@@ -924,6 +1003,8 @@
* tooltip to say that the folder could not be loaded.
*/
+ /* FIXME: if error, remove the current tooltip ("making completion list") */
+
if (cancelled || error)
goto out;
@@ -1092,7 +1173,7 @@
printf ("Doing autocompletion since our folder is finished loading\n");
- append_common_prefix (chooser_entry, TRUE);
+ append_common_prefix (chooser_entry, TRUE, FALSE);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]