mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-05 16:20:10 +00:00
Stubs to give feedback when doing explicit completion
Signed-off-by: Federico Mena Quintero <federico@gnu.org> svn path=/trunk/; revision=19834
This commit is contained in:
parent
1510b02c75
commit
47ddc0c86f
@ -385,6 +385,12 @@ clear_completions (GtkFileChooserEntry *chooser_entry)
|
|||||||
chooser_entry->load_complete_action = LOAD_COMPLETE_NOTHING;
|
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
|
/* This function will append a directory separator to paths to
|
||||||
* display_name iff the path associated with it is a directory.
|
* display_name iff the path associated with it is a directory.
|
||||||
* maybe_append_separator_to_path will g_free the display_name and
|
* maybe_append_separator_to_path will g_free the display_name and
|
||||||
@ -427,10 +433,11 @@ maybe_append_separator_to_path (GtkFileChooserEntry *chooser_entry,
|
|||||||
* to the current contents of the entry. Also, if there's one and only one such
|
* to the current contents of the entry. Also, if there's one and only one such
|
||||||
* path, stores it in unique_path_ret.
|
* path, stores it in unique_path_ret.
|
||||||
*/
|
*/
|
||||||
static void
|
static gboolean
|
||||||
find_common_prefix (GtkFileChooserEntry *chooser_entry,
|
find_common_prefix (GtkFileChooserEntry *chooser_entry,
|
||||||
gchar **common_prefix_ret,
|
gchar **common_prefix_ret,
|
||||||
GtkFilePath **unique_path_ret)
|
GtkFilePath **unique_path_ret,
|
||||||
|
GError **error)
|
||||||
{
|
{
|
||||||
GtkEditable *editable;
|
GtkEditable *editable;
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
@ -455,7 +462,7 @@ find_common_prefix (GtkFileChooserEntry *chooser_entry,
|
|||||||
text_up_to_cursor,
|
text_up_to_cursor,
|
||||||
&parsed_folder_path,
|
&parsed_folder_path,
|
||||||
&parsed_file_part,
|
&parsed_file_part,
|
||||||
NULL); /* NULL-GError */
|
error);
|
||||||
|
|
||||||
printf ("Text up to cursor: \"%s\"\n", text_up_to_cursor);
|
printf ("Text up to cursor: \"%s\"\n", text_up_to_cursor);
|
||||||
printf ("parsed_folder_path: \"%s\"\nparsed_file_part: \"%s\"\n",
|
printf ("parsed_folder_path: \"%s\"\nparsed_file_part: \"%s\"\n",
|
||||||
@ -465,7 +472,7 @@ find_common_prefix (GtkFileChooserEntry *chooser_entry,
|
|||||||
g_free (text_up_to_cursor);
|
g_free (text_up_to_cursor);
|
||||||
|
|
||||||
if (!parsed)
|
if (!parsed)
|
||||||
return;
|
return FALSE;
|
||||||
|
|
||||||
g_assert (parsed_folder_path != NULL
|
g_assert (parsed_folder_path != NULL
|
||||||
&& chooser_entry->current_folder_path != NULL
|
&& chooser_entry->current_folder_path != NULL
|
||||||
@ -516,19 +523,46 @@ find_common_prefix (GtkFileChooserEntry *chooser_entry,
|
|||||||
|
|
||||||
gtk_file_path_free (parsed_folder_path);
|
gtk_file_path_free (parsed_folder_path);
|
||||||
g_free (parsed_file_part);
|
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 */
|
/* 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,
|
append_common_prefix (GtkFileChooserEntry *chooser_entry,
|
||||||
gboolean highlight)
|
gboolean highlight,
|
||||||
|
gboolean show_errors)
|
||||||
{
|
{
|
||||||
gchar *common_prefix;
|
gchar *common_prefix;
|
||||||
GtkFilePath *unique_path;
|
GtkFilePath *unique_path;
|
||||||
|
GError *error;
|
||||||
|
CommonPrefixResult result;
|
||||||
|
gboolean have_result;
|
||||||
|
|
||||||
clear_completions (chooser_entry);
|
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)
|
if (unique_path)
|
||||||
{
|
{
|
||||||
@ -536,6 +570,13 @@ append_common_prefix (GtkFileChooserEntry *chooser_entry,
|
|||||||
unique_path,
|
unique_path,
|
||||||
common_prefix);
|
common_prefix);
|
||||||
gtk_file_path_free (unique_path);
|
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",
|
printf ("common prefix: \"%s\"\n",
|
||||||
@ -574,6 +615,18 @@ append_common_prefix (GtkFileChooserEntry *chooser_entry,
|
|||||||
gtk_editable_set_position (GTK_EDITABLE (chooser_entry), pos);
|
gtk_editable_set_position (GTK_EDITABLE (chooser_entry), pos);
|
||||||
|
|
||||||
g_free (common_prefix);
|
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 @@ gtk_file_chooser_entry_grab_focus (GtkWidget *widget)
|
|||||||
static void
|
static void
|
||||||
explicitly_complete (GtkFileChooserEntry *chooser_entry)
|
explicitly_complete (GtkFileChooserEntry *chooser_entry)
|
||||||
{
|
{
|
||||||
|
CommonPrefixResult result;
|
||||||
|
|
||||||
g_assert (chooser_entry->current_folder != NULL);
|
g_assert (chooser_entry->current_folder != NULL);
|
||||||
g_assert (gtk_file_folder_is_finished_loading (chooser_entry->current_folder));
|
g_assert (gtk_file_folder_is_finished_loading (chooser_entry->current_folder));
|
||||||
|
|
||||||
@ -665,7 +720,27 @@ explicitly_complete (GtkFileChooserEntry *chooser_entry)
|
|||||||
* - If there are no matches at all, beep and bring up a tooltip
|
* - If there are no matches at all, beep and bring up a tooltip
|
||||||
* - If the suggestion window is already up, scroll it
|
* - 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
|
/* 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 @@ start_explicit_completion (GtkFileChooserEntry *chooser_entry)
|
|||||||
|
|
||||||
printf ("We don't have a current_folder_path - means the user typed something bogus\n");
|
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 */
|
/* FIXME: present a tooltip to tell the user that his folder is invalid */
|
||||||
|
|
||||||
chooser_entry->load_complete_action = LOAD_COMPLETE_NOTHING;
|
chooser_entry->load_complete_action = LOAD_COMPLETE_NOTHING;
|
||||||
@ -706,6 +781,8 @@ start_explicit_completion (GtkFileChooserEntry *chooser_entry)
|
|||||||
{
|
{
|
||||||
printf ("File folder is not yet loaded; will do explicit completion later\n");
|
printf ("File folder is not yet loaded; will do explicit completion later\n");
|
||||||
chooser_entry->load_complete_action = LOAD_COMPLETE_EXPLICIT_COMPLETION;
|
chooser_entry->load_complete_action = LOAD_COMPLETE_EXPLICIT_COMPLETION;
|
||||||
|
|
||||||
|
/* FIXME: here, Emacs would say, "Making completion list..." */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -891,6 +968,8 @@ finish_folder_load (GtkFileChooserEntry *chooser_entry)
|
|||||||
{
|
{
|
||||||
populate_completion_store (chooser_entry);
|
populate_completion_store (chooser_entry);
|
||||||
perform_load_complete_action (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 */
|
/* Callback when the current folder finishes loading */
|
||||||
@ -924,6 +1003,8 @@ load_directory_get_folder_callback (GtkFileSystemHandle *handle,
|
|||||||
* tooltip to say that the folder could not be loaded.
|
* tooltip to say that the folder could not be loaded.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* FIXME: if error, remove the current tooltip ("making completion list") */
|
||||||
|
|
||||||
if (cancelled || error)
|
if (cancelled || error)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
@ -1092,7 +1173,7 @@ autocomplete (GtkFileChooserEntry *chooser_entry)
|
|||||||
|
|
||||||
printf ("Doing autocompletion since our folder is finished loading\n");
|
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
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user