1
0
mirror of https://github.com/Tha14/toxic.git synced 2024-11-16 03:03:02 +01:00

Fix UI bugs & format

This fixes a bug where lines would sometimes be incorrectly marked as unread, as well as
a bug where inbound messages would sometimes be coloured incorrectly
This commit is contained in:
jfreegman 2017-06-01 16:46:12 -04:00
parent c4ace288af
commit 0136f22076
No known key found for this signature in database
GPG Key ID: 3627F3144076AE63
12 changed files with 51 additions and 25 deletions

View File

@ -103,9 +103,8 @@ void api_send(const char *msg)
strncpy((char *) self_window->chatwin->line, msg, sizeof(self_window->chatwin->line)); strncpy((char *) self_window->chatwin->line, msg, sizeof(self_window->chatwin->line));
add_line_to_hist(self_window->chatwin); add_line_to_hist(self_window->chatwin);
line_info_add(self_window, timefrmt, name, NULL, OUT_MSG, 0, 0, "%s", msg); int id = line_info_add(self_window, timefrmt, name, NULL, OUT_MSG, 0, 0, "%s", msg);
cqueue_add(self_window->chatwin->cqueue, msg, strlen(msg), OUT_MSG, cqueue_add(self_window->chatwin->cqueue, msg, strlen(msg), OUT_MSG, id);
self_window->chatwin->hst->line_end->id + 1);
free(name); free(name);
} }

View File

@ -895,8 +895,8 @@ static void send_action(ToxWindow *self, ChatContext *ctx, Tox *m, char *action)
char timefrmt[TIME_STR_SIZE]; char timefrmt[TIME_STR_SIZE];
get_time_str(timefrmt, sizeof(timefrmt)); get_time_str(timefrmt, sizeof(timefrmt));
line_info_add(self, timefrmt, selfname, NULL, OUT_ACTION, 0, 0, "%s", action); int id = line_info_add(self, timefrmt, selfname, NULL, OUT_ACTION, 0, 0, "%s", action);
cqueue_add(ctx->cqueue, action, strlen(action), OUT_ACTION, ctx->hst->line_end->id + 1); cqueue_add(ctx->cqueue, action, strlen(action), OUT_ACTION, id);
} }
static void chat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr) static void chat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr)
@ -947,6 +947,7 @@ static void chat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr)
else if (wcsncmp(ctx->line, L"/run \"", wcslen(L"/run \"")) == 0) { else if (wcsncmp(ctx->line, L"/run \"", wcslen(L"/run \"")) == 0) {
diff = dir_match(self, m, ctx->line, L"/run"); diff = dir_match(self, m, ctx->line, L"/run");
} }
#endif #endif
else if (wcsncmp(ctx->line, L"/status ", wcslen(L"/status ")) == 0) { else if (wcsncmp(ctx->line, L"/status ", wcslen(L"/status ")) == 0) {
@ -1001,8 +1002,8 @@ static void chat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr)
char timefrmt[TIME_STR_SIZE]; char timefrmt[TIME_STR_SIZE];
get_time_str(timefrmt, sizeof(timefrmt)); get_time_str(timefrmt, sizeof(timefrmt));
line_info_add(self, timefrmt, selfname, NULL, OUT_MSG, 0, 0, "%s", line); int id = line_info_add(self, timefrmt, selfname, NULL, OUT_MSG, 0, 0, "%s", line);
cqueue_add(ctx->cqueue, line, strlen(line), OUT_MSG, ctx->hst->line_end->id + 1); cqueue_add(ctx->cqueue, line, strlen(line), OUT_MSG, id);
} }
} }

View File

@ -198,8 +198,10 @@ void execute(WINDOW *w, ToxWindow *self, Tox *m, const char *input, int mode)
return; return;
#ifdef PYTHON #ifdef PYTHON
if (do_plugin_command(num_args, args) == 0) if (do_plugin_command(num_args, args) == 0)
return; return;
#endif #endif
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid command."); line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid command.");

View File

@ -265,7 +265,8 @@ static void groupchat_onGroupMessage(ToxWindow *self, Tox *m, uint32_t groupnum,
write_to_log(msg, nick, ctx->log, false); write_to_log(msg, nick, ctx->log, false);
} }
static void groupchat_onGroupTitleChange(ToxWindow *self, Tox *m, uint32_t groupnum, uint32_t peernum, const char *title, static void groupchat_onGroupTitleChange(ToxWindow *self, Tox *m, uint32_t groupnum, uint32_t peernum,
const char *title,
size_t length) size_t length)
{ {
ChatContext *ctx = self->chatwin; ChatContext *ctx = self->chatwin;
@ -559,6 +560,7 @@ static void groupchat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr)
else if (wcsncmp(ctx->line, L"/run \"", wcslen(L"/run \"")) == 0) { else if (wcsncmp(ctx->line, L"/run \"", wcslen(L"/run \"")) == 0) {
diff = dir_match(self, m, ctx->line, L"/run"); diff = dir_match(self, m, ctx->line, L"/run");
} }
#endif #endif
else { else {

View File

@ -343,6 +343,7 @@ static void help_draw_contacts(ToxWindow *self)
void help_onKey(ToxWindow *self, wint_t key) void help_onKey(ToxWindow *self, wint_t key)
{ {
int height; int height;
switch (key) { switch (key) {
case 'x': case 'x':
case T_KEY_ESC: case T_KEY_ESC:
@ -380,6 +381,7 @@ void help_onKey(ToxWindow *self, wint_t key)
break; break;
#ifdef PYTHON #ifdef PYTHON
case 'p': case 'p':
help_init_window(self, 4 + num_registered_handlers(), help_max_width()); help_init_window(self, 4 + num_registered_handlers(), help_max_width());
self->help->type = HELP_PLUGIN; self->help->type = HELP_PLUGIN;
@ -433,6 +435,7 @@ void help_onDraw(ToxWindow *self)
break; break;
#ifdef PYTHON #ifdef PYTHON
case HELP_PLUGIN: case HELP_PLUGIN:
help_draw_plugin(self); help_draw_plugin(self);
break; break;

View File

@ -129,17 +129,21 @@ static struct line_info *line_info_ret_queue(struct history *hst)
return line; return line;
} }
/* creates new line_info line and puts it in the queue. */ /* creates new line_info line and puts it in the queue.
void line_info_add(ToxWindow *self, const char *timestr, const char *name1, const char *name2, uint8_t type, *
* Returns the id of the new line.
* Returns -1 on failure.
*/
int line_info_add(ToxWindow *self, const char *timestr, const char *name1, const char *name2, uint8_t type,
uint8_t bold, uint8_t colour, const char *msg, ...) uint8_t bold, uint8_t colour, const char *msg, ...)
{ {
if (!self) if (!self)
return; return -1;
struct history *hst = self->chatwin->hst; struct history *hst = self->chatwin->hst;
if (hst->queue_sz >= MAX_LINE_INFO_QUEUE) if (hst->queue_sz >= MAX_LINE_INFO_QUEUE)
return; return -1;
struct line_info *new_line = calloc(1, sizeof(struct line_info)); struct line_info *new_line = calloc(1, sizeof(struct line_info));
@ -222,6 +226,7 @@ void line_info_add(ToxWindow *self, const char *timestr, const char *name1, cons
len += strlen(new_line->name2); len += strlen(new_line->name2);
} }
new_line->id = hst->line_end->id + 1 + hst->queue_sz;
new_line->len = len; new_line->len = len;
new_line->type = type; new_line->type = type;
new_line->bold = bold; new_line->bold = bold;
@ -230,6 +235,8 @@ void line_info_add(ToxWindow *self, const char *timestr, const char *name1, cons
new_line->timestamp = get_unix_time(); new_line->timestamp = get_unix_time();
hst->queue[hst->queue_sz++] = new_line; hst->queue[hst->queue_sz++] = new_line;
return new_line->id;
} }
/* adds a single queue item to hst if possible. only called once per call to line_info_print() */ /* adds a single queue item to hst if possible. only called once per call to line_info_print() */
@ -244,10 +251,10 @@ static void line_info_check_queue(ToxWindow *self)
if (hst->start_id > user_settings->history_size) if (hst->start_id > user_settings->history_size)
line_info_root_fwd(hst); line_info_root_fwd(hst);
line->id = hst->line_end->id + 1;
line->prev = hst->line_end; line->prev = hst->line_end;
hst->line_end->next = line; hst->line_end->next = line;
hst->line_end = line; hst->line_end = line;
hst->line_end->id = line->id;
int y, y2, x, x2; int y, y2, x, x2;
getmaxyx(self->window, y2, x2); getmaxyx(self->window, y2, x2);

View File

@ -74,8 +74,12 @@ struct history {
int queue_sz; int queue_sz;
}; };
/* creates new line_info line and puts it in the queue. */ /* creates new line_info line and puts it in the queue.
void line_info_add(ToxWindow *self, const char *timestr, const char *name1, const char *name2, uint8_t type, *
* Returns the id of the new line.
* Returns -1 on failure.
*/
int line_info_add(ToxWindow *self, const char *timestr, const char *name1, const char *name2, uint8_t type,
uint8_t bold, uint8_t colour, const char *msg, ...); uint8_t bold, uint8_t colour, const char *msg, ...);
/* Prints a section of history starting at line_start */ /* Prints a section of history starting at line_start */

View File

@ -42,8 +42,12 @@ void cqueue_cleanup(struct chat_queue *q)
free(q); free(q);
} }
void cqueue_add(struct chat_queue *q, const char *msg, size_t len, uint8_t type, uint32_t line_id) void cqueue_add(struct chat_queue *q, const char *msg, size_t len, uint8_t type, int line_id)
{ {
if (line_id < 0) {
return;
}
struct cqueue_msg *new_m = malloc(sizeof(struct cqueue_msg)); struct cqueue_msg *new_m = malloc(sizeof(struct cqueue_msg));
if (new_m == NULL) if (new_m == NULL)

View File

@ -40,7 +40,7 @@ struct chat_queue {
}; };
void cqueue_cleanup(struct chat_queue *q); void cqueue_cleanup(struct chat_queue *q);
void cqueue_add(struct chat_queue *q, const char *msg, size_t len, uint8_t type, uint32_t line_id); void cqueue_add(struct chat_queue *q, const char *msg, size_t len, uint8_t type, int line_id);
/* Tries to send the oldest unsent message in queue. */ /* Tries to send the oldest unsent message in queue. */
void cqueue_try_send(ToxWindow *self, Tox *m); void cqueue_try_send(ToxWindow *self, Tox *m);

View File

@ -230,6 +230,7 @@ static void prompt_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr)
#ifdef PYTHON #ifdef PYTHON
else if (wcsncmp(ctx->line, L"/run \"", wcslen(L"/run \"")) == 0) else if (wcsncmp(ctx->line, L"/run \"", wcslen(L"/run \"")) == 0)
diff = dir_match(self, m, ctx->line, L"/run"); diff = dir_match(self, m, ctx->line, L"/run");
#endif #endif
else if (wcsncmp(ctx->line, L"/status ", wcslen(L"/status ")) == 0) { else if (wcsncmp(ctx->line, L"/status ", wcslen(L"/status ")) == 0) {

View File

@ -114,6 +114,7 @@ static time_t last_signal_time;
static void catch_SIGINT(int sig) static void catch_SIGINT(int sig)
{ {
time_t cur_time = get_unix_time(); time_t cur_time = get_unix_time();
if (difftime(cur_time, last_signal_time) <= 1) { if (difftime(cur_time, last_signal_time) <= 1) {
Winthread.sig_exit_toxic = 1; Winthread.sig_exit_toxic = 1;
} else { } else {
@ -646,6 +647,7 @@ static Tox *load_tox(char *data_path, struct Tox_Options *tox_opts, TOX_ERR_NEW
while (true) { while (true) {
fflush(stdout); // Flush before prompts so the user sees the question/message fflush(stdout); // Flush before prompts so the user sees the question/message
if (pweval) { if (pweval) {
pwlen = password_eval(user_password.pass, sizeof(user_password.pass)); pwlen = password_eval(user_password.pass, sizeof(user_password.pass));
} else { } else {
@ -1021,6 +1023,7 @@ static void parse_args(int argc, char *argv[])
case 'v': case 'v':
print_version(); print_version();
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
case 'h': case 'h':
default: default:
print_usage(); print_usage();