mirror of
https://github.com/Tha14/toxic.git
synced 2024-11-23 02:03:02 +01:00
fix backspace bug
This commit is contained in:
parent
bba81ac884
commit
62239a1fda
25
src/chat.c
25
src/chat.c
@ -547,8 +547,11 @@ static void chat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr)
|
|||||||
int x, y, y2, x2;
|
int x, y, y2, x2;
|
||||||
getyx(self->window, y, x);
|
getyx(self->window, y, x);
|
||||||
getmaxyx(self->window, y2, x2);
|
getmaxyx(self->window, y2, x2);
|
||||||
int cur_len = 0; /* widechar len of current char */
|
|
||||||
int len = MAX(0, wcslen(ctx->line)); /* widechar len of line */
|
if (x2 <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int cur_len = 0; /* widechar size of current char */
|
||||||
int x2_is_odd = x2 % 2 != 0;
|
int x2_is_odd = x2 % 2 != 0;
|
||||||
|
|
||||||
if (ltr) { /* char is printable */
|
if (ltr) { /* char is printable */
|
||||||
@ -576,9 +579,9 @@ static void chat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr)
|
|||||||
del_char_buf_bck(ctx);
|
del_char_buf_bck(ctx);
|
||||||
|
|
||||||
if (x == 0) {
|
if (x == 0) {
|
||||||
wmove(self->window, y, x2 - cur_len);
|
|
||||||
ctx->start = ctx->start >= x2 ? ctx->start - x2 : 0;
|
ctx->start = ctx->start >= x2 ? ctx->start - x2 : 0;
|
||||||
ctx->pos = ctx->start + x2 - 1;
|
int new_x = ctx->start == 0 ? ctx->pos : x2 - cur_len;
|
||||||
|
wmove(self->window, y, new_x);
|
||||||
} else {
|
} else {
|
||||||
wmove(self->window, y, x - cur_len);
|
wmove(self->window, y, x - cur_len);
|
||||||
}
|
}
|
||||||
@ -621,8 +624,8 @@ static void chat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr)
|
|||||||
else if (key == KEY_END || key == T_KEY_C_E) { /* END/C-e key: move cursor to end of line */
|
else if (key == KEY_END || key == T_KEY_C_E) { /* END/C-e key: move cursor to end of line */
|
||||||
if (ctx->pos != ctx->len) {
|
if (ctx->pos != ctx->len) {
|
||||||
ctx->pos = ctx->len;
|
ctx->pos = ctx->len;
|
||||||
ctx->start = x2 * (len / x2);
|
ctx->start = x2 * (ctx->len / x2);
|
||||||
mv_curs_end(self->window, len, y2, x2);
|
mv_curs_end(self->window, ctx->len, y2, x2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -662,16 +665,14 @@ static void chat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr)
|
|||||||
|
|
||||||
else if (key == KEY_UP) { /* fetches previous item in history */
|
else if (key == KEY_UP) { /* fetches previous item in history */
|
||||||
fetch_hist_item(ctx, MOVE_UP);
|
fetch_hist_item(ctx, MOVE_UP);
|
||||||
len = wcslen(ctx->line);
|
ctx->start = x2 * (ctx->len / x2);
|
||||||
ctx->start = x2 * (len / x2);
|
mv_curs_end(self->window, ctx->len, y2, x2);
|
||||||
mv_curs_end(self->window, len, y2, x2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (key == KEY_DOWN) { /* fetches next item in history */
|
else if (key == KEY_DOWN) { /* fetches next item in history */
|
||||||
fetch_hist_item(ctx, MOVE_DOWN);
|
fetch_hist_item(ctx, MOVE_DOWN);
|
||||||
len = wcslen(ctx->line);
|
ctx->start = x2 * (ctx->len / x2);
|
||||||
ctx->start = x2 * (len / x2);
|
mv_curs_end(self->window, ctx->len, y2, x2);
|
||||||
mv_curs_end(self->window, len, y2, x2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (key == '\t') { /* TAB key: completes command */
|
else if (key == '\t') { /* TAB key: completes command */
|
||||||
|
@ -389,8 +389,11 @@ static void groupchat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr)
|
|||||||
int x, y, y2, x2;
|
int x, y, y2, x2;
|
||||||
getyx(self->window, y, x);
|
getyx(self->window, y, x);
|
||||||
getmaxyx(self->window, y2, x2);
|
getmaxyx(self->window, y2, x2);
|
||||||
|
|
||||||
|
if (x2 <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
int cur_len = 0; /* widechar len of current char */
|
int cur_len = 0; /* widechar len of current char */
|
||||||
int len = MAX(0, wcslen(ctx->line)); /* widechar len of line */
|
|
||||||
int x2_is_odd = x2 % 2 != 0;
|
int x2_is_odd = x2 % 2 != 0;
|
||||||
|
|
||||||
if (ltr) { /* char is printable */
|
if (ltr) { /* char is printable */
|
||||||
@ -416,9 +419,9 @@ static void groupchat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr)
|
|||||||
del_char_buf_bck(ctx);
|
del_char_buf_bck(ctx);
|
||||||
|
|
||||||
if (x == 0) {
|
if (x == 0) {
|
||||||
wmove(self->window, y, x2 - cur_len);
|
|
||||||
ctx->start = ctx->start >= x2 ? ctx->start - x2 : 0;
|
ctx->start = ctx->start >= x2 ? ctx->start - x2 : 0;
|
||||||
ctx->pos = ctx->start + x2 - 1;
|
int new_x = ctx->start == 0 ? ctx->pos : x2 - cur_len;
|
||||||
|
wmove(self->window, y, new_x);
|
||||||
} else {
|
} else {
|
||||||
wmove(self->window, y, x - cur_len);
|
wmove(self->window, y, x - cur_len);
|
||||||
}
|
}
|
||||||
@ -461,8 +464,8 @@ static void groupchat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr)
|
|||||||
else if (key == KEY_END || key == T_KEY_C_E) { /* END/C-e key: move cursor to end of line */
|
else if (key == KEY_END || key == T_KEY_C_E) { /* END/C-e key: move cursor to end of line */
|
||||||
if (ctx->pos != ctx->len) {
|
if (ctx->pos != ctx->len) {
|
||||||
ctx->pos = ctx->len;
|
ctx->pos = ctx->len;
|
||||||
ctx->start = x2 * (len / x2);
|
ctx->start = x2 * (ctx->len / x2);
|
||||||
mv_curs_end(self->window, len, y2, x2);
|
mv_curs_end(self->window, ctx->len, y2, x2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -502,16 +505,14 @@ static void groupchat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr)
|
|||||||
|
|
||||||
else if (key == KEY_UP) { /* fetches previous item in history */
|
else if (key == KEY_UP) { /* fetches previous item in history */
|
||||||
fetch_hist_item(ctx, MOVE_UP);
|
fetch_hist_item(ctx, MOVE_UP);
|
||||||
len = wcslen(ctx->line);
|
ctx->start = x2 * (ctx->len / x2);
|
||||||
ctx->start = x2 * (len / x2);
|
mv_curs_end(self->window, ctx->len, y2, x2);
|
||||||
mv_curs_end(self->window, len, y2, x2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (key == KEY_DOWN) { /* fetches next item in history */
|
else if (key == KEY_DOWN) { /* fetches next item in history */
|
||||||
fetch_hist_item(ctx, MOVE_DOWN);
|
fetch_hist_item(ctx, MOVE_DOWN);
|
||||||
len = wcslen(ctx->line);
|
ctx->start = x2 * (ctx->len / x2);
|
||||||
ctx->start = x2 * (len / x2);
|
mv_curs_end(self->window, ctx->len, y2, x2);
|
||||||
mv_curs_end(self->window, len, y2, x2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (key == '\t') { /* TAB key: completes peer name */
|
else if (key == '\t') { /* TAB key: completes peer name */
|
||||||
|
Loading…
Reference in New Issue
Block a user