summaryrefslogtreecommitdiff
path: root/gtk/gtkentry.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2007-09-08 05:38:58 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2007-09-08 05:38:58 +0000
commit5067b99881a8c2c448c131dc7ed1bef657eeeecd (patch)
tree018a7ef2cdf3189b077e884a4e91e69e43ca5457 /gtk/gtkentry.c
parent54139b8806d67ba3b2b97629ab0efc28654cf866 (diff)
downloadgtk+-5067b99881a8c2c448c131dc7ed1bef657eeeecd.tar.gz
Apply a number of patches by Xan Lopez to improve the interaction between
2007-09-08 Matthias Clasen <mclasen@redhat.com> * gtk/gtkentrycompletion.c: * gtk/gtkentry.c: Apply a number of patches by Xan Lopez to improve the interaction between actions and inline selection. (#471132) svn path=/trunk/; revision=18761
Diffstat (limited to 'gtk/gtkentry.c')
-rw-r--r--gtk/gtkentry.c75
1 files changed, 46 insertions, 29 deletions
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index d9a600d505..a7e0eb2cbb 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -5849,6 +5849,14 @@ gtk_entry_completion_key_press (GtkWidget *widget,
{
gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (completion->priv->tree_view)));
gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (completion->priv->action_view)));
+
+ if (completion->priv->inline_selection &&
+ completion->priv->completion_prefix)
+ {
+ gtk_entry_set_text (GTK_ENTRY (completion->priv->entry),
+ completion->priv->completion_prefix);
+ gtk_editable_set_position (GTK_EDITABLE (widget), -1);
+ }
}
else if (completion->priv->current_selected < matches)
{
@@ -5870,6 +5878,9 @@ gtk_entry_completion_key_press (GtkWidget *widget,
if (!gtk_tree_selection_get_selected (sel, &model, &iter))
return FALSE;
+ if (completion->priv->completion_prefix == NULL)
+ completion->priv->completion_prefix = g_strdup (gtk_entry_get_text (GTK_ENTRY (completion->priv->entry)));
+
g_signal_emit_by_name (completion, "cursor_on_match", model,
&iter, &entry_set);
}
@@ -5881,6 +5892,14 @@ gtk_entry_completion_key_press (GtkWidget *widget,
path = gtk_tree_path_new_from_indices (completion->priv->current_selected - matches, -1);
gtk_tree_view_set_cursor (GTK_TREE_VIEW (completion->priv->action_view),
path, NULL, FALSE);
+
+ if (completion->priv->inline_selection &&
+ completion->priv->completion_prefix)
+ {
+ gtk_entry_set_text (GTK_ENTRY (completion->priv->entry),
+ completion->priv->completion_prefix);
+ gtk_editable_set_position (GTK_EDITABLE (widget), -1);
+ }
}
gtk_tree_path_free (path);
@@ -5893,16 +5912,12 @@ gtk_entry_completion_key_press (GtkWidget *widget,
event->keyval == GDK_Right ||
event->keyval == GDK_KP_Right)
{
- GtkTreeSelection *sel;
- GtkTreeIter iter;
- GtkTreeModel *model = NULL;
gboolean retval = TRUE;
_gtk_entry_reset_im_context (GTK_ENTRY (widget));
_gtk_entry_completion_popdown (completion);
- sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (completion->priv->tree_view));
- if (!gtk_tree_selection_get_selected (sel, &model, &iter))
+ if (completion->priv->current_selected < 0)
{
retval = FALSE;
goto keypress_completion_out;
@@ -5959,6 +5974,8 @@ keypress_completion_out:
event->keyval == GDK_KP_Enter ||
event->keyval == GDK_Return)
{
+ gboolean retval = TRUE;
+
_gtk_entry_reset_im_context (GTK_ENTRY (widget));
_gtk_entry_completion_popdown (completion);
@@ -5970,34 +5987,31 @@ keypress_completion_out:
gboolean entry_set;
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (completion->priv->tree_view));
- if (!gtk_tree_selection_get_selected (sel, &model, &iter))
- return FALSE;
-
- g_signal_handler_block (widget, completion->priv->changed_id);
- g_signal_emit_by_name (completion, "match_selected",
- model, &iter, &entry_set);
- g_signal_handler_unblock (widget, completion->priv->changed_id);
-
- if (!entry_set)
+ if (gtk_tree_selection_get_selected (sel, &model, &iter))
{
- gchar *str = NULL;
+ g_signal_handler_block (widget, completion->priv->changed_id);
+ g_signal_emit_by_name (completion, "match_selected",
+ model, &iter, &entry_set);
+ g_signal_handler_unblock (widget, completion->priv->changed_id);
- gtk_tree_model_get (model, &iter,
- completion->priv->text_column, &str,
- -1);
+ if (!entry_set)
+ {
+ gchar *str = NULL;
- gtk_entry_set_text (GTK_ENTRY (widget), str);
+ gtk_tree_model_get (model, &iter,
+ completion->priv->text_column, &str,
+ -1);
- /* move the cursor to the end */
- gtk_editable_set_position (GTK_EDITABLE (widget), -1);
+ gtk_entry_set_text (GTK_ENTRY (widget), str);
- g_free (str);
- }
+ /* move the cursor to the end */
+ gtk_editable_set_position (GTK_EDITABLE (widget), -1);
- g_free (completion->priv->completion_prefix);
- completion->priv->completion_prefix = NULL;
-
- return TRUE;
+ g_free (str);
+ }
+ }
+ else
+ retval = FALSE;
}
else if (completion->priv->current_selected - matches >= 0)
{
@@ -6010,9 +6024,12 @@ keypress_completion_out:
g_signal_emit_by_name (completion, "action_activated",
gtk_tree_path_get_indices (path)[0]);
gtk_tree_path_free (path);
-
- return TRUE;
}
+
+ g_free (completion->priv->completion_prefix);
+ completion->priv->completion_prefix = NULL;
+
+ return retval;
}
return FALSE;