📄 serverlist.c
字号:
if (first_autoconnect) { connect_auto (conn, sess); first_autoconnect = 0; } else connect_auto (conn, NULL);}/* * serverlist_autoconnect: [PUBLIC] * called from xchat.c if the user has selected that he/she wants autoconnect */static voidserverlist_autoconnect (struct session *sess){ first_autoconnect = 1; gtk_ctree_pre_recursive (GTK_CTREE (sltree), NULL, GTK_CTREE_FUNC (autoconnect_parser), sess);}/* * connectnew_clicked: * called when the user clicks the connect new button */static voidconnectnew_clicked (GtkWidget * wid, struct session *sess){ GtkCTreeNode *selected; struct slentry *conn; struct slentry myconn; server *serv; selected = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (sltree)->row_list, GTK_CLIST (sltree)->focus_row)); if (!selected) return; conn = gtk_ctree_node_get_row_data (GTK_CTREE (sltree), selected); if (conn->server[0] == 0) return; memcpy (&myconn, conn, sizeof (myconn)); sess = new_ircwindow (NULL, NULL, SESS_SERVER); serv = sess->server; close_server_list (FALSE); strcpy (sess->server->password, myconn.password); strcpy (sess->willjoinchannel, myconn.channel); if (myconn.nick[0] == 0) strcpy (sess->server->nick, prefs.nick1); else strcpy (sess->server->nick, myconn.nick); serv->dont_use_proxy = (myconn.flags & DONT_USE_PROXY) ? TRUE : FALSE;#ifdef USE_OPENSSL serv->use_ssl = (myconn.flags & USE_SSL) ? TRUE : FALSE; serv->accept_invalid_cert = (myconn.flags & ACCEPT_INVALID_CERT) ? TRUE : FALSE;#endif if (myconn.eom_cmd[0]) { if (serv->eom_cmd) free (serv->eom_cmd); serv->eom_cmd = strdup (myconn.eom_cmd); } connect_server (sess, myconn.server, myconn.port, FALSE);}/* * connect_clicked: * called when the user clicks the connect button */static voidconnect_clicked (GtkWidget * wid, struct session *sess){ GtkCTreeNode *selected; struct slentry *conn; struct slentry myconn; server *serv; /* clueless user filter! */ if (!strcmp ("root", gtk_entry_get_text ((GtkEntry *) nick1gad))) { gtkutil_simpledialog (_("Cannot use \"root\" as a nickname,\n" "please change that first.")); return; } if (sess == NULL) { connectnew_clicked (wid, NULL); return; } selected = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (sltree)->row_list, GTK_CLIST (sltree)->focus_row)); if (!selected) return; conn = gtk_ctree_node_get_row_data (GTK_CTREE (sltree), selected); if (conn->server[0] == 0) return; memcpy (&myconn, conn, sizeof (myconn)); strcpy (sess->server->password, conn->password); strcpy (sess->willjoinchannel, conn->channel); close_server_list (FALSE); serv = sess->server; if (myconn.nick[0] == 0) { if (strcmp (sess->server->nick, prefs.nick1)) { fe_set_nick (sess->server, prefs.nick1); strcpy (sess->server->nick, prefs.nick1); } } else { if (strcmp (sess->server->nick, myconn.nick)) { fe_set_nick (sess->server, myconn.nick); strcpy (sess->server->nick, myconn.nick); } } serv->dont_use_proxy = (myconn.flags & DONT_USE_PROXY) ? TRUE : FALSE;#ifdef USE_OPENSSL serv->use_ssl = (myconn.flags & USE_SSL) ? TRUE : FALSE; serv->accept_invalid_cert = (myconn.flags & ACCEPT_INVALID_CERT) ? TRUE : FALSE;#endif if (myconn.eom_cmd[0]) { if (serv->eom_cmd) free (serv->eom_cmd); serv->eom_cmd = strdup (myconn.eom_cmd); } connect_server (sess, myconn.server, myconn.port, FALSE);}/* * row_selected: * called when the user clicks on a row, checks if connect button should be clickable */static voidrow_selected (GtkCTree * tree, gint row, gint col, GdkEventButton * even, gpointer sess){ GtkCTreeNode *selected = 0; struct slentry *conn; selected = gtk_ctree_node_nth (GTK_CTREE (sltree), row); if (!is_group (selected)) { conn = gtk_ctree_node_get_row_data (GTK_CTREE (sltree), selected); gtk_entry_set_text (GTK_ENTRY (quickview), conn->channel); gtk_widget_set_sensitive (button_conn, TRUE); gtk_widget_set_sensitive (button_connnew, TRUE); if (even && even->type == GDK_2BUTTON_PRESS) connect_clicked (0, (struct session *) sess); }}/* * row_unselected: * makes sure you can't click the connect button if no row is selected */static voidrow_unselected (GtkCTree * tree, GtkCTreeNode * row, gint col){ gtk_widget_set_sensitive (button_connnew, FALSE); gtk_widget_set_sensitive (button_conn, FALSE); gtk_entry_set_text (GTK_ENTRY (quickview), "");}/* * group_collapse: * called when a group is collapsed and sets port = 0 on that group data to make sure * that xchat "remembers" it's state */static voidgroup_collapse (GtkCTree * tree, GtkCTreeNode * node){ struct slentry *temporary; if (!closing_list) { temporary = gtk_ctree_node_get_row_data (GTK_CTREE (sltree), GTK_CTREE_NODE (node)); if (temporary && (!strcmp (temporary->server, "SUB"))) temporary->port = 0; }}/* * group_expand: * same as above, just port = 1 instead */static voidgroup_expand (GtkCTree * tree, GtkCTreeNode * node){ struct slentry *temporary; if (!closing_list) { temporary = gtk_ctree_node_get_row_data (GTK_CTREE (sltree), GTK_CTREE_NODE (node)); if (temporary && (!strcmp (temporary->server, "SUB"))) temporary->port = 1; }}static intserverlist_close_cb (GtkWidget *wid, gpointer unused){ close_server_list (FALSE); if (sess_list == NULL) xchat_exit (); return 0;}/* * open_server_list [PUBLIC] * * called by xchat.c to open the server list GUI * */intfe_open_serverlist (session *sess, int auto_connect, int dont_show){ GtkWidget *scroll; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *wid1, *wid2, *wid3, *wid4; int ret; if (slwin) { gdk_window_show (slwin->window); return FALSE; } slwin = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (slwin), _("X-Chat: Server List")); gtk_signal_connect (GTK_OBJECT (slwin), "delete_event", GTK_SIGNAL_FUNC (serverlist_close_cb), 0); gtk_window_set_policy (GTK_WINDOW (slwin), TRUE, TRUE, FALSE); gtk_window_set_wmclass (GTK_WINDOW (slwin), "servlist", "X-Chat"); wins_set_icon (slwin); gtk_container_border_width (GTK_CONTAINER (slwin), 5); vbox = gtk_vbox_new (FALSE, 1); gtk_container_add (GTK_CONTAINER (slwin), vbox); /* NICKNAME ETC. */ /* boxes */ wid1 = gtk_frame_new (_("User info:")); wid3 = gtk_hbox_new (0, 0); gtk_widget_set_usize (wid3, 602, 0); gtk_container_add (GTK_CONTAINER (wid1), wid3); gtk_widget_show (wid3); wid2 = gtk_vbox_new (0, 0); gtk_container_set_border_width (GTK_CONTAINER (wid2), 4); gtk_container_add (GTK_CONTAINER (wid3), wid2); gtk_box_pack_start (GTK_BOX (vbox), wid1, FALSE, FALSE, 0); gtk_widget_show (wid1); gtk_widget_show (wid2); /* hbox */ hbox = gtk_hbox_new (0, 2); gtk_box_pack_start (GTK_BOX (wid2), hbox, FALSE, TRUE, 3); gtk_widget_show (hbox); /* nickboxes */ gtkutil_label_new (_("Nicknames:"), hbox); nick1gad = gtkutil_entry_new (63, hbox, 0, 0); gtk_entry_set_text (GTK_ENTRY (nick1gad), prefs.nick1); nick2gad = gtkutil_entry_new (63, hbox, 0, 0); gtk_entry_set_text (GTK_ENTRY (nick2gad), prefs.nick2); nick3gad = gtkutil_entry_new (63, hbox, 0, 0); gtk_entry_set_text (GTK_ENTRY (nick3gad), prefs.nick3); hbox = gtk_hbox_new (0, 2); gtk_box_pack_start (GTK_BOX (wid2), hbox, FALSE, TRUE, 3); gtk_widget_show (hbox); /* nameboxes */ gtkutil_label_new (_("Realname:"), hbox); realnamegad = gtkutil_entry_new (63, hbox, 0, 0); gtk_entry_set_text (GTK_ENTRY (realnamegad), prefs.realname); gtkutil_label_new (_("Username:"), hbox); usernamegad = gtkutil_entry_new (63, hbox, 0, 0); gtk_entry_set_text (GTK_ENTRY (usernamegad), prefs.username); /* X-CHAT ICON */ wid4 = gtk_pixmap_new (pix_xchat, mask_xchat); gtk_box_pack_start (GTK_BOX (wid3), wid4, FALSE, TRUE, 4); gtk_widget_show (wid4); /* THE ACTUAL SERVERLIST */ scroll = gtk_scrolled_window_new (0, 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_widget_set_usize (GTK_WIDGET (scroll), 450, 240); gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0); gtk_widget_show (scroll); sltree = gtk_ctree_new (1, 0); gtk_clist_freeze (GTK_CLIST (sltree)); gtk_ctree_set_line_style (GTK_CTREE (sltree), GTK_CTREE_LINES_SOLID); gtk_ctree_set_expander_style (GTK_CTREE (sltree), GTK_CTREE_EXPANDER_SQUARE); gtk_clist_set_reorderable (GTK_CLIST (sltree), TRUE); gtk_clist_set_selection_mode (GTK_CLIST (sltree), GTK_SELECTION_BROWSE); gtk_widget_show (sltree); gtk_signal_connect (GTK_OBJECT (GTK_CLIST (sltree)), "select_row", GTK_SIGNAL_FUNC (row_selected), sess); gtk_signal_connect (GTK_OBJECT (sltree), "tree_unselect_row", GTK_SIGNAL_FUNC (row_unselected), 0); gtk_container_add (GTK_CONTAINER (scroll), sltree); gtk_clist_thaw (GTK_CLIST (sltree)); wid1 = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox), wid1, FALSE, FALSE, 8); gtk_widget_show (wid1); /* START BUTTON ROWS */ hbox = gtk_hbox_new (FALSE, 8); wid2 = gtk_vbox_new (FALSE, 7); gtk_box_pack_start (GTK_BOX (hbox), wid2, TRUE, TRUE, 0); gtk_widget_show (wid2); /* quickview, shows which channels we're gonna join */ quickview = gtk_entry_new (); gtk_entry_set_editable (GTK_ENTRY (quickview), FALSE); gtk_box_pack_start (GTK_BOX (wid2), quickview, TRUE, TRUE, 0); if (prefs.channelbox) gtk_widget_show (quickview); /* hbox1 */ wid1 = gtk_hbox_new (FALSE, 2); gtk_box_pack_end (GTK_BOX (wid2), wid1, FALSE, FALSE, 0); /* FIRST "NORMAL" BUTTON */ button_conn = gtkutil_button (slwin, GNOME_STOCK_PIXMAP_REFRESH, _("Connect"), connect_clicked, sess, wid1); button_connnew = gtkutil_button (slwin, GNOME_STOCK_PIXMAP_REFRESH, _("Connect New"), connectnew_clicked, sess, wid1); wid4 = gtk_vseparator_new (); gtk_box_pack_start (GTK_BOX (wid1), wid4, 0, 0, 2); gtk_widget_show (wid4); if (sess == NULL) gtk_widget_hide (button_connnew);#ifdef USE_GNOME /* VERY NICE GRAPHICAL BUTTON 1 */ wid4 = gtk_hbox_new (0, 0); gtk_widget_show (wid4); wid3 = gtk_button_new (); gtk_signal_connect (GTK_OBJECT (wid3), "clicked", GTK_SIGNAL_FUNC (new_server_clicked), sess); gtk_widget_show (wid3); scroll = gtk_pixmap_new (pix_server, mask_server); gtk_container_add (GTK_CONTAINER (wid4), scroll); gtk_widget_show (scroll); scroll = gtk_label_new (_("New Server")); gtk_widget_show (scroll); gtk_container_add (GTK_CONTAINER (wid4), scroll); gtk_container_add (GTK_CONTAINER (wid3), wid4); gtk_container_add (GTK_CONTAINER (wid1), wid3); /* VERY NICE GRAPHICAL BUTTON 2 */ wid4 = gtk_hbox_new (0, 0); gtk_widget_show (wid4); wid3 = gtk_button_new (); gtk_signal_connect (GTK_OBJECT (wid3), "clicked", GTK_SIGNAL_FUNC (new_group_clicked), sess); gtk_widget_show (wid3); scroll = gtk_pixmap_new (pix_globe, mask_globe); gtk_container_add (GTK_CONTAINER (wid4), scroll); gtk_widget_show (scroll); scroll = gtk_label_new (_("New Group")); gtk_widget_show (scroll); gtk_container_add (GTK_CONTAINER (wid4), scroll); gtk_container_add (GTK_CONTAINER (wid3), wid4); gtk_container_add (GTK_CONTAINER (wid1), wid3);#else gtkutil_button (slwin, 0, _("New Server"), new_server_clicked, 0, wid1); gtkutil_button (slwin, 0, _("New Group"), new_group_clicked, 0, wid1);#endif /* 2 MORE "NORMAL" BUTTONS */ gtkutil_button (slwin, GNOME_STOCK_PIXMAP_CUT, _("Delete"), delete_server_clicked, 0, wid1); gtkutil_button (slwin, GNOME_STOCK_PIXMAP_PREFERENCES, _("Edit"), edit_entry_clicked, 0, wid1); gtk_widget_set_sensitive (button_conn, FALSE); gtk_widget_set_sensitive (button_connnew, FALSE); gtk_widget_show (wid1); wid1 = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (wid2), wid1, FALSE, FALSE, 0); wid3 = gtk_check_button_new_with_label (_("Skip MOTD")); gtk_signal_connect (GTK_OBJECT (wid3), "toggled", GTK_SIGNAL_FUNC (skip_motd), 0); gtk_box_pack_start (GTK_BOX (wid1), wid3, TRUE, FALSE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wid3), (prefs.skipmotd)); gtk_widget_show (wid3); add_tip (wid3, _("Don't display the message-of-the-day when logging in")); button_chan_new = gtk_check_button_new_with_label (_("Show channels")); gtk_box_pack_start (GTK_BOX (wid1), button_chan_new, TRUE, FALSE, 0); gtk_widget_show (button_chan_new); gtk_signal_connect (GTK_OBJECT (button_chan_new), "toggled", GTK_SIGNAL_FUNC (channelbox_toggled), 0); wid3 = gtk_check_button_new_with_label (_("No ServerList on startup")); gtk_signal_connect (GTK_OBJECT (wid3), "toggled", GTK_SIGNAL_FUNC (no_servlist), 0); gtk_box_pack_start (GTK_BOX (wid1), wid3, TRUE, FALSE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wid3), prefs.skipserverlist); gtk_widget_show (wid3); gtk_widget_show (wid1); /* END OF BOXES */ load_serverentrys (1); /* select first row */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button_chan_new), (prefs.channelbox)); gtk_signal_connect (GTK_OBJECT (sltree), "tree_expand", GTK_SIGNAL_FUNC (group_expand), 0); gtk_signal_connect (GTK_OBJECT (sltree), "tree_collapse", GTK_SIGNAL_FUNC (group_collapse), 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); gtk_widget_show (vbox); ret = FALSE; if (auto_connect && some_are_auto) { serverlist_autoconnect (sess); ret = TRUE; } if (dont_show) close_server_list (TRUE); else gtk_widget_show (slwin); return ret;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -