Hi Bill, > It looks like the text actually has the bytes "Enter" at the newlines, rather than, say, a '\n'?
In fact, it is '\r' (carriage return) rather than '\n' (new line). In renders correctly with Pango, though, and would paste gracefully to other clients such as weston-terminal. The only problem would be if we made weston-terminal save its text buffer directly to a file, in which case most text editors would display an uninterpreted special character. Note that we do not do that yet, though. Regards, Manuel 2014-04-21 21:49 GMT+02:00 Bill Spitzak <[email protected]>: > It looks like the text actually has the bytes "Enter" at the newlines, > rather than, say, a '\n'? > > > On 04/18/2014 03:52 AM, Manuel Bachmann wrote: > > This fixes : > https://bugs.freedesktop.org/show_bug.cgi?id=77496 > > Regards, > Manuel > > > 2014-04-18 12:50 GMT+02:00 Manuel Bachmann < > [email protected]>: > >> The editor will now insert new lines and tabulations when >> pressing the corresponding keys on the virtual keyboard. >> >> The Up and Down arrows can be used to navigate through >> lines. >> >> Signed-off-by: Manuel Bachmann <[email protected]> >> --- >> clients/editor.c | 97 >> ++++++++++++++++++++++++++++++++++++++++++++++++------ >> 1 file changed, 87 insertions(+), 10 deletions(-) >> >> diff --git a/clients/editor.c b/clients/editor.c >> index 76e2346..4c5c427 100644 >> --- a/clients/editor.c >> +++ b/clients/editor.c >> @@ -110,6 +110,47 @@ utf8_next_char(const char *p) >> return NULL; >> } >> >> +static void >> +move_up(const char *p, uint32_t *cursor) >> +{ >> + const char *posr, *posr_i; >> + char text[16]; >> + >> + xkb_keysym_to_utf8(XKB_KEY_Return, text, sizeof(text)); >> + >> + posr = strstr(p, text); >> + while (posr) { >> + if (*cursor > (unsigned)(posr-p)) { >> + posr_i = strstr(posr+1, text); >> + if (!posr_i || !(*cursor > (unsigned)(posr_i-p))) >> { >> + *cursor = posr-p; >> + break; >> + } >> + posr = posr_i; >> + } else { >> + break; >> + } >> + } >> +} >> + >> +static void >> +move_down(const char *p, uint32_t *cursor) >> +{ >> + const char *posr; >> + char text[16]; >> + >> + xkb_keysym_to_utf8(XKB_KEY_Return, text, sizeof(text)); >> + >> + posr = strstr(p, text); >> + while (posr) { >> + if (*cursor <= (unsigned)(posr-p)) { >> + *cursor = posr-p + 1; >> + break; >> + } >> + posr = strstr(posr+1, text); >> + } >> +} >> + >> static void text_entry_redraw_handler(struct widget *widget, void *data); >> static void text_entry_button_handler(struct widget *widget, >> struct input *input, uint32_t time, >> @@ -374,6 +415,23 @@ text_input_keysym(void *data, >> return; >> } >> >> + if (key == XKB_KEY_Up || >> + key == XKB_KEY_Down) { >> + if (state != WL_KEYBOARD_KEY_STATE_RELEASED) >> + return; >> + >> + if (key == XKB_KEY_Up) >> + move_up(entry->text, &entry->cursor); >> + else >> + move_down(entry->text, &entry->cursor); >> + >> + if (!(modifiers & entry->keysym.shift_mask)) >> + entry->anchor = entry->cursor; >> + widget_schedule_redraw(entry->widget); >> + >> + return; >> + } >> + >> if (key == XKB_KEY_BackSpace) { >> const char *start, *end; >> >> @@ -395,17 +453,20 @@ text_input_keysym(void *data, >> return; >> } >> >> - switch (key) { >> - case XKB_KEY_Tab: >> - key_label = "Tab"; >> - break; >> - case XKB_KEY_KP_Enter: >> - case XKB_KEY_Return: >> - key_label = "Enter"; >> - break; >> - } >> + if (key == XKB_KEY_Tab || >> + key == XKB_KEY_KP_Enter || >> + key == XKB_KEY_Return) { >> + char text[16]; >> + >> + if (state != WL_KEYBOARD_KEY_STATE_RELEASED) >> + return; >> + >> + xkb_keysym_to_utf8(key, text, sizeof(text)); >> >> - fprintf(stderr, "%s key was %s.\n", key_label, state_label); >> + text_entry_insert_at_cursor(entry, text, 0, 0); >> + >> + return; >> + } >> } >> >> static void >> @@ -1208,6 +1269,22 @@ key_handler(struct window *window, >> widget_schedule_redraw(entry->widget); >> } >> break; >> + case XKB_KEY_Up: >> + text_entry_commit_and_reset(entry); >> + >> + move_up(entry->text, &entry->cursor); >> + if (!(input_get_modifiers(input) & >> MOD_SHIFT_MASK)) >> + entry->anchor = entry->cursor; >> + widget_schedule_redraw(entry->widget); >> + break; >> + case XKB_KEY_Down: >> + text_entry_commit_and_reset(entry); >> + >> + move_down(entry->text, &entry->cursor); >> + if (!(input_get_modifiers(input) & >> MOD_SHIFT_MASK)) >> + entry->anchor = entry->cursor; >> + widget_schedule_redraw(entry->widget); >> + break; >> case XKB_KEY_Escape: >> break; >> default: >> -- >> 1.7.10.4 >> >> > > > -- > Regards, > > > > *Manuel BACHMANN Tizen Project VANNES-FR* > > > _______________________________________________ > wayland-devel mailing > [email protected]http://lists.freedesktop.org/mailman/listinfo/wayland-devel > > > > _______________________________________________ > wayland-devel mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/wayland-devel > > -- Regards, *Manuel BACHMANN Tizen Project VANNES-FR*
_______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
