Refactor navigation handling

This commit is contained in:
Alexander Butenko 2012-01-07 20:07:14 -04:00 committed by Christian Dywan
parent 43952508eb
commit 9445539c48

View file

@ -237,6 +237,7 @@ formhistory_editbox_key_pressed_cb (WebKitDOMElement* element,
glong key; glong key;
GtkTreePath* path; GtkTreePath* path;
const gchar* keyword; const gchar* keyword;
gint matches;
/* FIXME: Priv is still set after module is disabled */ /* FIXME: Priv is still set after module is disabled */
if (!priv) if (!priv)
@ -245,17 +246,12 @@ formhistory_editbox_key_pressed_cb (WebKitDOMElement* element,
if (priv->completion_timeout > 0) if (priv->completion_timeout > 0)
g_source_remove (priv->completion_timeout); g_source_remove (priv->completion_timeout);
g_object_get (element, "value", &keyword, NULL);
priv->element = element; priv->element = element;
key = webkit_dom_ui_event_get_key_code (WEBKIT_DOM_UI_EVENT (dom_event)); key = webkit_dom_ui_event_get_key_code (WEBKIT_DOM_UI_EVENT (dom_event));
/* Ignore some control chars */ /* Ignore some control chars */
if (key < 20 && key != 8) if (key < 20 && key != 8)
return; return;
gint matches = gtk_tree_model_iter_n_children (priv->completion_model, NULL);
switch (key) switch (key)
{ {
/* ESC key*/ /* ESC key*/
@ -276,27 +272,29 @@ formhistory_editbox_key_pressed_cb (WebKitDOMElement* element,
case 38: case 38:
/* Down key */ /* Down key */
case 40: case 40:
if (gtk_widget_get_visible (priv->popup))
{
if (key == 38)
{
if (priv->selection_index == -1)
priv->selection_index = matches - 1;
else
priv->selection_index = MAX (priv->selection_index - 1, 1);
}
else
{
priv->selection_index = MIN (priv->selection_index + 1, matches -1);
}
path = gtk_tree_path_new_from_indices (priv->selection_index, -1); if (!gtk_widget_get_visible (priv->popup))
gtk_tree_view_set_cursor (GTK_TREE_VIEW (priv->treeview), path, NULL, FALSE); {
formhistory_suggestion_set (path, priv); formhistory_suggestions_show (priv);
gtk_tree_path_free (path); return;
}
matches = gtk_tree_model_iter_n_children (priv->completion_model, NULL);
if (key == 38)
{
if (priv->selection_index == -1)
priv->selection_index = matches - 1;
else
priv->selection_index = MAX (priv->selection_index - 1, 1);
} }
else else
formhistory_suggestions_show (priv); {
priv->selection_index = MIN (priv->selection_index + 1, matches -1);
}
path = gtk_tree_path_new_from_indices (priv->selection_index, -1);
gtk_tree_view_set_cursor (GTK_TREE_VIEW (priv->treeview), path, NULL, FALSE);
formhistory_suggestion_set (path, priv);
gtk_tree_path_free (path);
return; return;
break; break;
/* PgUp, PgDn, Ins */ /* PgUp, PgDn, Ins */
@ -306,6 +304,7 @@ formhistory_editbox_key_pressed_cb (WebKitDOMElement* element,
break; break;
} }
g_object_get (element, "value", &keyword, NULL);
if (!(keyword && *keyword && *keyword != ' ')) if (!(keyword && *keyword && *keyword != ' '))
{ {
formhistory_suggestions_hide_cb (element, dom_event, priv); formhistory_suggestions_hide_cb (element, dom_event, priv);