1
0
mirror of https://github.com/irssi/irssi.git synced 2024-12-04 14:46:39 -05:00

properly restore the saved text dest

This commit is contained in:
ailin-nemui 2020-07-04 18:19:37 +02:00
parent 964c067b1e
commit 0cc1e4b7cd
6 changed files with 36 additions and 22 deletions

View File

@ -246,7 +246,7 @@ FE common
"gui print text", WINDOW_REC, int fg, int bg, int flags, char *text, TEXT_DEST_REC
(Can be used to determine when all "gui print text"s are sent (not required))
"gui print text finished", WINDOW_REC
"gui print text finished", WINDOW_REC, TEXT_DEST_REC
* Provides signals:
@ -353,7 +353,7 @@ gui-readline.c:
gui-printtext.c:
"beep"
"gui print text after finished", WINDOW_REC, LINE_REC *line, LINE_REC *prev_line
"gui print text after finished", WINDOW_REC, LINE_REC *line, LINE_REC *prev_line, TEXT_DEST_REC
textbuffer-view.c
"gui textbuffer line removed", TEXTBUFFER_VIEW_REC *view, LINE_REC *line, LINE_REC *prev_line

View File

@ -6,7 +6,7 @@
#define IRSSI_GLOBAL_CONFIG "irssi.conf" /* config file name in /etc/ */
#define IRSSI_HOME_CONFIG "config" /* config file name in ~/.irssi/ */
#define IRSSI_ABI_VERSION 29
#define IRSSI_ABI_VERSION 30
#define DEFAULT_SERVER_ADD_PORT 6667
#define DEFAULT_SERVER_ADD_TLS_PORT 6697

View File

@ -442,7 +442,7 @@ static void sig_print_text(TEXT_DEST_REC *dest, const char *text)
format_send_to_gui(dest, str);
g_free(str);
signal_emit_id(signal_gui_print_text_finished, 1, dest->window);
signal_emit_id(signal_gui_print_text_finished, 2, dest->window, dest);
}
static void sig_print_format(THEME_REC *theme, const char *module, TEXT_DEST_REC *dest,

View File

@ -158,7 +158,8 @@ void gui_printtext_after_time(TEXT_DEST_REC *dest, LINE_REC *prev, const char *s
gui->insert_after_time = time;
format_send_to_gui(dest, str);
gui->use_insert_after = FALSE;
signal_emit("gui print text after finished", 3, dest->window, gui->insert_after, prev);
signal_emit("gui print text after finished", 4, dest->window, gui->insert_after, prev,
dest);
}
void gui_printtext_after(TEXT_DEST_REC *dest, LINE_REC *prev, const char *str)
@ -376,7 +377,7 @@ static void sig_gui_print_text(WINDOW_REC *window, void *fgcolor,
gui->insert_after = insert_after;
}
static void sig_gui_printtext_finished(WINDOW_REC *window)
static void sig_gui_printtext_finished(WINDOW_REC *window, TEXT_DEST_REC *dest)
{
TEXT_BUFFER_VIEW_REC *view;
LINE_REC *insert_after;

View File

@ -42,6 +42,7 @@ void textbuffer_format_rec_free(TEXT_BUFFER_FORMAT_REC *rec)
i_refstr_release(rec->server_tag);
i_refstr_release(rec->target);
i_refstr_release(rec->nick);
i_refstr_release(rec->address);
if (rec->nargs >= 1) {
i_refstr_release(rec->args[0]);
}
@ -54,17 +55,13 @@ void textbuffer_format_rec_free(TEXT_BUFFER_FORMAT_REC *rec)
g_slice_free(TEXT_BUFFER_FORMAT_REC, rec);
}
static TEXT_BUFFER_FORMAT_REC *format_rec_new(const char *module, const char *format_tag,
const char *server_tag, const char *target,
const char *nick, int nargs, const char **args)
static TEXT_BUFFER_FORMAT_REC *format_rec_new(const char *module, const char *format_tag, int nargs,
const char **args)
{
int n;
TEXT_BUFFER_FORMAT_REC *ret = g_slice_new0(TEXT_BUFFER_FORMAT_REC);
ret->module = i_refstr_intern(module);
ret->format = i_refstr_intern(format_tag);
ret->server_tag = i_refstr_intern(server_tag);
ret->target = i_refstr_intern(target);
ret->nick = i_refstr_intern(nick);
ret->nargs = nargs;
ret->args = g_new0(char *, nargs);
if (nargs >= 1) {
@ -76,6 +73,19 @@ static TEXT_BUFFER_FORMAT_REC *format_rec_new(const char *module, const char *fo
return ret;
}
static void format_rec_set_dest(TEXT_BUFFER_FORMAT_REC *rec, const TEXT_DEST_REC *dest)
{
i_refstr_release(rec->server_tag);
i_refstr_release(rec->target);
i_refstr_release(rec->nick);
i_refstr_release(rec->address);
rec->server_tag = i_refstr_intern(dest->server_tag);
rec->target = i_refstr_intern(dest->target);
rec->nick = i_refstr_intern(dest->nick);
rec->address = i_refstr_intern(dest->address);
rec->flags = dest->flags & ~PRINT_FLAG_FORMAT;
}
static LINE_INFO_REC *store_lineinfo_tmp(TEXT_DEST_REC *dest)
{
GUI_WINDOW_REC *gui;
@ -132,11 +142,10 @@ static void sig_print_format(THEME_REC *theme, const char *module, TEXT_DEST_REC
formatnum = GPOINTER_TO_INT(formatnump);
formats = g_hash_table_lookup(default_formats, module);
info->format = format_rec_new(module, formats[formatnum].tag, dest->server_tag,
dest->target, dest->nick, formats[formatnum].params, args);
info->format =
format_rec_new(module, formats[formatnum].tag, formats[formatnum].params, args);
special_push_collector(&info->format->expando_cache);
info->format->flags = dest->flags;
dest->flags |= PRINT_FLAG_FORMAT;
signal_continue(5, theme, module, dest, formatnump, args);
@ -155,11 +164,9 @@ static void sig_print_noformat(TEXT_DEST_REC *dest, const char *text)
special_push_collector(NULL);
info = store_lineinfo_tmp(dest);
info->format = format_rec_new(NULL, NULL, dest->server_tag, dest->target, dest->nick, 2,
(const char *[]){ NULL, text });
info->format = format_rec_new(NULL, NULL, 2, (const char *[]){ NULL, text });
special_push_collector(&info->format->expando_cache);
info->format->flags = dest->flags;
dest->flags |= PRINT_FLAG_FORMAT;
signal_continue(2, dest, text);
@ -182,7 +189,7 @@ static GSList *reverse_collector(GSList *a1)
return c1;
}
static void sig_gui_print_text_finished(WINDOW_REC *window)
static void sig_gui_print_text_finished(WINDOW_REC *window, TEXT_DEST_REC *dest)
{
GUI_WINDOW_REC *gui;
LINE_REC *insert_after;
@ -202,6 +209,7 @@ static void sig_gui_print_text_finished(WINDOW_REC *window)
return;
info->format->expando_cache = reverse_collector(info->format->expando_cache);
format_rec_set_dest(info->format, dest);
info->level |= MSGLEVEL_FORMAT;
@ -290,12 +298,16 @@ char *textbuffer_line_get_text(TEXT_BUFFER_REC *buffer, LINE_REC *line)
curr = line;
line = NULL;
format_rec = curr->info.format;
format_create_dest(
format_rec = curr->info.format;
format_create_dest_tag(
&dest,
format_rec->server_tag != NULL ? server_find_tag(format_rec->server_tag) : NULL,
format_rec->target, curr->info.level & ~MSGLEVEL_FORMAT, buffer->window);
format_rec->server_tag, format_rec->target, curr->info.level & ~MSGLEVEL_FORMAT,
buffer->window);
dest.nick = format_rec->nick;
dest.address = format_rec->address;
dest.flags = format_rec->flags;
theme = window_get_theme(dest.window);

View File

@ -9,6 +9,7 @@ typedef struct _TEXT_BUFFER_FORMAT_REC {
char *server_tag;
char *target;
char *nick;
char *address;
char **args;
int nargs;
GSList *expando_cache;