[PATCH 1/4] editor, keyboard: Add support for arrow keys

Kristian Høgsberg hoegsberg at gmail.com
Tue Sep 25 07:25:45 PDT 2012


On Mon, Sep 17, 2012 at 03:28:07PM +0200, Jan Arne Petersen wrote:
> From: Jan Arne Petersen <jpetersen at openismus.com>
> 
> Add support for arrow keys on the virtual keyboard and make it possible
> to move around the cursor in the editor example.

All four patches applied, thanks.

Kristian

> ---
>  clients/editor.c   | 19 ++++++++++++++++---
>  clients/keyboard.c | 32 ++++++++++++++++++++++++++++----
>  2 files changed, 44 insertions(+), 7 deletions(-)
> 
> diff --git a/clients/editor.c b/clients/editor.c
> index 301cbe2..5ad1aa2 100644
> --- a/clients/editor.c
> +++ b/clients/editor.c
> @@ -288,13 +288,12 @@ text_model_key(void *data,
>                 uint32_t key,
>                 uint32_t state)
>  {
> +	struct text_entry *entry = data;
>  	const char *state_label;
> -	const char *key_label;
> +	const char *key_label = "released";
>  
>  	if (state == WL_KEYBOARD_KEY_STATE_PRESSED) {
>  		state_label = "pressed";
> -	} else {
> -		state_label = "released";
>  	}
>  
>  	switch (key) {
> @@ -304,6 +303,20 @@ text_model_key(void *data,
>  		case XKB_KEY_KP_Enter:
>  			key_label = "Enter";
>  			break;
> +		case XKB_KEY_Left:
> +			if (entry->cursor > 0) {
> +				entry->cursor--;
> +				entry->anchor = entry->cursor;
> +				widget_schedule_redraw(entry->widget);
> +			}
> +			break;
> +		case XKB_KEY_Right:
> +			if (entry->cursor < strlen(entry->text)) {
> +				entry->cursor++;
> +				entry->anchor = entry->cursor;
> +				widget_schedule_redraw(entry->widget);
> +			}
> +			break;
>  		default:
>  			key_label = "Unknown";
>  	}
> diff --git a/clients/keyboard.c b/clients/keyboard.c
> index c90c5b2..bf0e9f0 100644
> --- a/clients/keyboard.c
> +++ b/clients/keyboard.c
> @@ -47,7 +47,11 @@ enum key_type {
>  	keytype_space,
>  	keytype_switch,
>  	keytype_symbols,
> -	keytype_tab
> +	keytype_tab,
> +	keytype_arrow_up,
> +	keytype_arrow_left,
> +	keytype_arrow_right,
> +	keytype_arrow_down
>  };
>  
>  struct key {
> @@ -96,9 +100,13 @@ static const struct key keys[] = {
>  	{ keytype_default, ".", ".", 1},
>  	{ keytype_switch, "ABC", "abc", 1},
>  
> -	{ keytype_symbols, "?123", "?123", 2},
> -	{ keytype_space, "", "", 8},
> -	{ keytype_symbols, "?123", "?123", 2}
> +	{ keytype_symbols, "?123", "?123", 1},
> +	{ keytype_space, "", "", 6},
> +	{ keytype_arrow_up, "/\\", "/\\", 1},
> +	{ keytype_arrow_left, "<", "<", 1},
> +	{ keytype_arrow_right, ">", ">", 1},
> +	{ keytype_arrow_down, "\\/", "\\/", 1},
> +	{ keytype_symbols, "?123", "?123", 1}
>  };
>  
>  static const unsigned int columns = 12;
> @@ -255,6 +263,22 @@ keyboard_handle_key(struct keyboard *keyboard, const struct key *key)
>  			input_method_context_key(keyboard->keyboard->context,
>  						 XKB_KEY_Tab, WL_KEYBOARD_KEY_STATE_PRESSED);
>  			break;
> +		case keytype_arrow_up:
> +			input_method_context_key(keyboard->keyboard->context,
> +						 XKB_KEY_Up, WL_KEYBOARD_KEY_STATE_PRESSED);
> +			break;
> +		case keytype_arrow_left:
> +			input_method_context_key(keyboard->keyboard->context,
> +						 XKB_KEY_Left, WL_KEYBOARD_KEY_STATE_PRESSED);
> +			break;
> +		case keytype_arrow_right:
> +			input_method_context_key(keyboard->keyboard->context,
> +						 XKB_KEY_Right, WL_KEYBOARD_KEY_STATE_PRESSED);
> +			break;
> +		case keytype_arrow_down:
> +			input_method_context_key(keyboard->keyboard->context,
> +						 XKB_KEY_Down, WL_KEYBOARD_KEY_STATE_PRESSED);
> +			break;
>  	}
>  }
>  
> -- 
> 1.7.11.4
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list