void inbound_away (server *serv, char *nick, char *msg, const message_tags_data *tags_data) { struct away_msg *away = server_away_find_message (serv, nick); session *sess = NULL; GSList *list; if (away && !strcmp (msg, away->message)) /* Seen the msg before? */ { if (prefs.hex_away_show_once && !serv->inside_whois) return; } else { server_away_save_message (serv, nick, msg); } if (prefs.hex_irc_whois_front) sess = serv->front_session; else { if (!serv->inside_whois) sess = find_session_from_nick (nick, serv); if (!sess) sess = serv->server_session; } /* possibly hide the output */ if (!serv->inside_whois || !serv->skip_next_whois) EMIT_SIGNAL_TIMESTAMP (XP_TE_WHOIS5, sess, nick, msg, NULL, NULL, 0, tags_data->timestamp); list = sess_list; while (list) { sess = list->data; if (sess->server == serv) userlist_set_away (sess, nick, TRUE); list = list->next; } }
void menu_nickmenu (session *sess, GdkEventButton *event, char *nick, int num_sel) { char buf[512]; char *real, *fmt; struct User *user; struct away_msg *away; GtkWidget *submenu, *menu = gtk_menu_new (); if (str_copy) free (str_copy); str_copy = strdup (nick); submenu_list = 0; /* first time through, might not be 0 */ /* more than 1 nick selected? */ if (num_sel > 1) { snprintf (buf, sizeof (buf), "%d nicks selected.", num_sel); menu_quick_item (0, buf, menu, 0, 0, 0); menu_quick_item (0, 0, menu, XCMENU_SHADED, 0, 0); } else { user = userlist_find (sess, nick); /* lasttalk is channel specific */ if (!user) user = userlist_find_global (current_sess->server, nick); if (user) { submenu = menu_quick_sub (nick, menu, NULL, XCMENU_DOLIST, -1); /* let the translators tweak this if need be */ fmt = _("<tt><b>%-11s</b></tt> %s"); if (user->realname) { real = g_markup_escape_text (user->realname, -1); snprintf (buf, sizeof (buf), fmt, _("Real Name:"), real); g_free (real); } else { snprintf (buf, sizeof (buf), fmt, _("Real Name:"), _("Unknown")); } menu_quick_item (0, buf, submenu, XCMENU_MARKUP, 0, 0); snprintf (buf, sizeof (buf), fmt, _("User:"******"Unknown")); menu_quick_item (0, buf, submenu, XCMENU_MARKUP, 0, 0); snprintf (buf, sizeof (buf), fmt, _("Server:"), user->servername ? user->servername : _("Unknown")); menu_quick_item (0, buf, submenu, XCMENU_MARKUP, 0, 0); if (user->away) { away = server_away_find_message (current_sess->server, nick); if (away) { char *msg = strip_color (away->message ? away->message : _("Unknown"), -1, STRIP_ALL); real = g_markup_escape_text (msg, -1); free (msg); snprintf (buf, sizeof (buf), fmt, _("Away Msg:"), real); g_free (real); menu_quick_item (0, buf, submenu, XCMENU_MARKUP, 0, 0); } } if (user->lasttalk) { char min[96]; snprintf (min, sizeof (min), _("%u minutes ago"), (unsigned int) ((time (0) - user->lasttalk) / 60)); snprintf (buf, sizeof (buf), fmt, _("Last Msg:"), min); } else { snprintf (buf, sizeof (buf), fmt, _("Last Msg:"), _("Unknown")); } menu_quick_item (0, buf, submenu, XCMENU_MARKUP, 0, 0); menu_quick_endsub (); menu_quick_item (0, 0, menu, XCMENU_SHADED, 0, 0); } } if (num_sel > 1) menu_create (menu, popup_list, NULL, FALSE); else menu_create (menu, popup_list, str_copy, FALSE); if (num_sel == 0) /* xtext click */ menu_add_plugin_items (menu, "\x5$NICK", str_copy); else /* userlist treeview click */ menu_add_plugin_items (menu, "\x5$NICK", NULL); menu_popup (menu, event, NULL); }