session * new_ircwindow (server *serv, char *name, int type, int focus) { session *sess; switch (type) { case SESS_SERVER: serv = server_new (); if (prefs.hex_gui_tab_server) sess = session_new (serv, name, SESS_SERVER, focus); else sess = session_new (serv, name, SESS_CHANNEL, focus); serv->server_session = sess; serv->front_session = sess; break; case SESS_DIALOG: sess = session_new (serv, name, type, focus); break; default: /* case SESS_CHANNEL: case SESS_NOTICES: case SESS_SNOTICES:*/ sess = session_new (serv, name, type, focus); break; } irc_init (sess); chanopt_load (sess); scrollback_load (sess); if (sess->scrollwritten && sess->scrollback_replay_marklast) sess->scrollback_replay_marklast (sess); if (type == SESS_DIALOG) { struct User *user; log_open_or_close (sess); user = userlist_find_global (serv, name); if (user && user->hostname) set_topic (sess, user->hostname, user->hostname); } plugin_emit_dummy_print (sess, "Open Context"); return sess; }
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); }