diff options
author | dequis <dx@dxzone.com.ar> | 2014-10-26 00:12:30 -0300 |
---|---|---|
committer | dequis <dx@dxzone.com.ar> | 2014-10-26 00:33:20 -0300 |
commit | 1edfcedda1105d79fa6b92d77a8fb60f296abe1e (patch) | |
tree | cb5761abf330015f65ec8a7738575e041becf5a9 /src/fe-common/irc | |
parent | 65a2ff645926259f04c2683f742a6f7ad0bbc86d (diff) | |
download | irssi-1edfcedda1105d79fa6b92d77a8fb60f296abe1e.zip |
Receive 'self messages' in the right query window
Original patch by hondza <sedaj2@gmail.com>, from FS#833. I applied
several needed style changes, and rebased to current HEAD.
This implements the IRCv3.2 self-message extension partially (we can't
announce its support through CAP yet). This is also the format used by
the 'privmsg' znc module, and is already implemented by several other
clients.
Diffstat (limited to 'src/fe-common/irc')
-rw-r--r-- | src/fe-common/irc/fe-irc-messages.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/fe-common/irc/fe-irc-messages.c b/src/fe-common/irc/fe-irc-messages.c index 0c83a531..e0849c75 100644 --- a/src/fe-common/irc/fe-irc-messages.c +++ b/src/fe-common/irc/fe-irc-messages.c @@ -160,6 +160,7 @@ static void sig_message_irc_action(IRC_SERVER_REC *server, const char *msg, const char *oldtarget; char *freemsg = NULL; int level; + int own = FALSE; oldtarget = target; target = skip_target(IRC_SERVER(server), target); @@ -174,10 +175,12 @@ static void sig_message_irc_action(IRC_SERVER_REC *server, const char *msg, level | MSGLEVEL_NO_ACT)) level |= MSGLEVEL_NO_ACT; - if (ischannel(*target)) + if (ischannel(*target)) { item = irc_channel_find(server, target); - else - item = privmsg_get_query(SERVER(server), nick, FALSE, level); + } else { + own = (!strcmp(nick, server->nick)); + item = privmsg_get_query(SERVER(server), own ? nick : target, FALSE, level); + } if (settings_get_bool("emphasis")) msg = freemsg = expand_emphasis(item, msg); @@ -195,11 +198,19 @@ static void sig_message_irc_action(IRC_SERVER_REC *server, const char *msg, nick, oldtarget, msg); } } else { - /* private action */ - printformat(server, nick, MSGLEVEL_ACTIONS | MSGLEVEL_MSGS, - item == NULL ? IRCTXT_ACTION_PRIVATE : - IRCTXT_ACTION_PRIVATE_QUERY, - nick, address == NULL ? "" : address, msg); + if (own) { + /* own action bounced */ + printformat(server, target, + MSGLEVEL_ACTIONS | MSGLEVEL_MSGS, + item != NULL && oldtarget == target ? IRCTXT_OWN_ACTION : IRCTXT_OWN_ACTION_TARGET, + server->nick, msg, oldtarget); + } else { + /* private action */ + printformat(server, nick, MSGLEVEL_ACTIONS | MSGLEVEL_MSGS, + item == NULL ? IRCTXT_ACTION_PRIVATE : + IRCTXT_ACTION_PRIVATE_QUERY, + nick, address == NULL ? "" : address, msg); + } } g_free_not_null(freemsg); |