[text] Allow key navigation by word
When pressing Ctrl with the left and right arrow keys we should skip to (or select until) the previous and next word, respectively. Fixes bug: http://bugzilla.openedhand.com/show_bug.cgi?id=1713
This commit is contained in:
parent
6a1506bd5f
commit
e860d939f9
@ -1049,7 +1049,7 @@ clutter_text_move_word_forward (ClutterText *self,
|
|||||||
|
|
||||||
pango_layout_get_log_attrs (layout, &log_attrs, &n_attrs);
|
pango_layout_get_log_attrs (layout, &log_attrs, &n_attrs);
|
||||||
|
|
||||||
retval = start - 1;
|
retval = start;
|
||||||
while (retval > 0 && !log_attrs[retval].is_word_end)
|
while (retval > 0 && !log_attrs[retval].is_word_end)
|
||||||
retval += 1;
|
retval += 1;
|
||||||
|
|
||||||
@ -1577,16 +1577,29 @@ clutter_text_real_move_left (ClutterText *self,
|
|||||||
{
|
{
|
||||||
ClutterTextPrivate *priv = self->priv;
|
ClutterTextPrivate *priv = self->priv;
|
||||||
gint pos = priv->position;
|
gint pos = priv->position;
|
||||||
|
gint new_pos = 0;
|
||||||
gint len;
|
gint len;
|
||||||
|
|
||||||
len = priv->n_chars;
|
len = priv->n_chars;
|
||||||
|
|
||||||
if (pos != 0 && len != 0)
|
if (pos != 0 && len != 0)
|
||||||
|
{
|
||||||
|
if (modifiers & CLUTTER_CONTROL_MASK)
|
||||||
{
|
{
|
||||||
if (pos == -1)
|
if (pos == -1)
|
||||||
clutter_text_set_cursor_position (self, len - 1);
|
new_pos = clutter_text_move_word_backward (self, len - 1);
|
||||||
else
|
else
|
||||||
clutter_text_set_cursor_position (self, pos - 1);
|
new_pos = clutter_text_move_word_backward (self, pos - 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pos == -1)
|
||||||
|
new_pos = len - 1;
|
||||||
|
else
|
||||||
|
new_pos = pos - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
clutter_text_set_cursor_position (self, new_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(priv->selectable && (modifiers & CLUTTER_SHIFT_MASK)))
|
if (!(priv->selectable && (modifiers & CLUTTER_SHIFT_MASK)))
|
||||||
@ -1603,14 +1616,25 @@ clutter_text_real_move_right (ClutterText *self,
|
|||||||
{
|
{
|
||||||
ClutterTextPrivate *priv = self->priv;
|
ClutterTextPrivate *priv = self->priv;
|
||||||
gint pos = priv->position;
|
gint pos = priv->position;
|
||||||
|
gint new_pos;
|
||||||
gint len;
|
gint len;
|
||||||
|
|
||||||
len = priv->n_chars;
|
len = priv->n_chars;
|
||||||
|
|
||||||
if (pos != -1 && len !=0)
|
if (pos != -1 && len !=0)
|
||||||
|
{
|
||||||
|
if (modifiers & CLUTTER_CONTROL_MASK)
|
||||||
{
|
{
|
||||||
if (pos != len)
|
if (pos != len)
|
||||||
clutter_text_set_cursor_position (self, pos + 1);
|
new_pos = clutter_text_move_word_forward (self, pos + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pos != len)
|
||||||
|
new_pos = pos + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
clutter_text_set_cursor_position (self, new_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(priv->selectable && (modifiers & CLUTTER_SHIFT_MASK)))
|
if (!(priv->selectable && (modifiers & CLUTTER_SHIFT_MASK)))
|
||||||
@ -1841,16 +1865,34 @@ static inline void
|
|||||||
clutter_text_add_move_binding (ClutterBindingPool *pool,
|
clutter_text_add_move_binding (ClutterBindingPool *pool,
|
||||||
const gchar *action,
|
const gchar *action,
|
||||||
guint key_val,
|
guint key_val,
|
||||||
|
ClutterModifierType additional_modifiers,
|
||||||
GCallback callback)
|
GCallback callback)
|
||||||
{
|
{
|
||||||
clutter_binding_pool_install_action (pool, action,
|
clutter_binding_pool_install_action (pool, action,
|
||||||
key_val, 0,
|
key_val,
|
||||||
|
0,
|
||||||
callback,
|
callback,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
clutter_binding_pool_install_action (pool, action,
|
clutter_binding_pool_install_action (pool, action,
|
||||||
key_val, CLUTTER_SHIFT_MASK,
|
key_val,
|
||||||
|
CLUTTER_SHIFT_MASK,
|
||||||
callback,
|
callback,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
|
|
||||||
|
if (additional_modifiers != 0)
|
||||||
|
{
|
||||||
|
clutter_binding_pool_install_action (pool, action,
|
||||||
|
key_val,
|
||||||
|
additional_modifiers,
|
||||||
|
callback,
|
||||||
|
NULL, NULL);
|
||||||
|
clutter_binding_pool_install_action (pool, action,
|
||||||
|
key_val,
|
||||||
|
CLUTTER_SHIFT_MASK |
|
||||||
|
additional_modifiers,
|
||||||
|
callback,
|
||||||
|
NULL, NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -2305,44 +2347,44 @@ clutter_text_class_init (ClutterTextClass *klass)
|
|||||||
binding_pool = clutter_binding_pool_get_for_class (klass);
|
binding_pool = clutter_binding_pool_get_for_class (klass);
|
||||||
|
|
||||||
clutter_text_add_move_binding (binding_pool, "move-left",
|
clutter_text_add_move_binding (binding_pool, "move-left",
|
||||||
CLUTTER_Left,
|
CLUTTER_Left, CLUTTER_CONTROL_MASK,
|
||||||
G_CALLBACK (clutter_text_real_move_left));
|
G_CALLBACK (clutter_text_real_move_left));
|
||||||
clutter_text_add_move_binding (binding_pool, "move-left",
|
clutter_text_add_move_binding (binding_pool, "move-left",
|
||||||
CLUTTER_KP_Left,
|
CLUTTER_KP_Left, CLUTTER_CONTROL_MASK,
|
||||||
G_CALLBACK (clutter_text_real_move_left));
|
G_CALLBACK (clutter_text_real_move_left));
|
||||||
clutter_text_add_move_binding (binding_pool, "move-right",
|
clutter_text_add_move_binding (binding_pool, "move-right",
|
||||||
CLUTTER_Right,
|
CLUTTER_Right, CLUTTER_CONTROL_MASK,
|
||||||
G_CALLBACK (clutter_text_real_move_right));
|
G_CALLBACK (clutter_text_real_move_right));
|
||||||
clutter_text_add_move_binding (binding_pool, "move-right",
|
clutter_text_add_move_binding (binding_pool, "move-right",
|
||||||
CLUTTER_KP_Right,
|
CLUTTER_KP_Right, CLUTTER_CONTROL_MASK,
|
||||||
G_CALLBACK (clutter_text_real_move_right));
|
G_CALLBACK (clutter_text_real_move_right));
|
||||||
clutter_text_add_move_binding (binding_pool, "move-up",
|
clutter_text_add_move_binding (binding_pool, "move-up",
|
||||||
CLUTTER_Up,
|
CLUTTER_Up, 0,
|
||||||
G_CALLBACK (clutter_text_real_move_up));
|
G_CALLBACK (clutter_text_real_move_up));
|
||||||
clutter_text_add_move_binding (binding_pool, "move-up",
|
clutter_text_add_move_binding (binding_pool, "move-up",
|
||||||
CLUTTER_KP_Up,
|
CLUTTER_KP_Up, 0,
|
||||||
G_CALLBACK (clutter_text_real_move_up));
|
G_CALLBACK (clutter_text_real_move_up));
|
||||||
clutter_text_add_move_binding (binding_pool, "move-down",
|
clutter_text_add_move_binding (binding_pool, "move-down",
|
||||||
CLUTTER_Down,
|
CLUTTER_Down, 0,
|
||||||
G_CALLBACK (clutter_text_real_move_down));
|
G_CALLBACK (clutter_text_real_move_down));
|
||||||
clutter_text_add_move_binding (binding_pool, "move-down",
|
clutter_text_add_move_binding (binding_pool, "move-down",
|
||||||
CLUTTER_KP_Down,
|
CLUTTER_KP_Down, 0,
|
||||||
G_CALLBACK (clutter_text_real_move_down));
|
G_CALLBACK (clutter_text_real_move_down));
|
||||||
|
|
||||||
clutter_text_add_move_binding (binding_pool, "line-start",
|
clutter_text_add_move_binding (binding_pool, "line-start",
|
||||||
CLUTTER_Home,
|
CLUTTER_Home, 0,
|
||||||
G_CALLBACK (clutter_text_real_line_start));
|
G_CALLBACK (clutter_text_real_line_start));
|
||||||
clutter_text_add_move_binding (binding_pool, "line-start",
|
clutter_text_add_move_binding (binding_pool, "line-start",
|
||||||
CLUTTER_KP_Home,
|
CLUTTER_KP_Home, 0,
|
||||||
G_CALLBACK (clutter_text_real_line_start));
|
G_CALLBACK (clutter_text_real_line_start));
|
||||||
clutter_text_add_move_binding (binding_pool, "line-start",
|
clutter_text_add_move_binding (binding_pool, "line-start",
|
||||||
CLUTTER_Begin,
|
CLUTTER_Begin, 0,
|
||||||
G_CALLBACK (clutter_text_real_line_start));
|
G_CALLBACK (clutter_text_real_line_start));
|
||||||
clutter_text_add_move_binding (binding_pool, "line-end",
|
clutter_text_add_move_binding (binding_pool, "line-end",
|
||||||
CLUTTER_End,
|
CLUTTER_End, 0,
|
||||||
G_CALLBACK (clutter_text_real_line_end));
|
G_CALLBACK (clutter_text_real_line_end));
|
||||||
clutter_text_add_move_binding (binding_pool, "line-end",
|
clutter_text_add_move_binding (binding_pool, "line-end",
|
||||||
CLUTTER_KP_End,
|
CLUTTER_KP_End, 0,
|
||||||
G_CALLBACK (clutter_text_real_line_end));
|
G_CALLBACK (clutter_text_real_line_end));
|
||||||
|
|
||||||
clutter_binding_pool_install_action (binding_pool, "select-all",
|
clutter_binding_pool_install_action (binding_pool, "select-all",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user