⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serverlist.c

📁 The major functionality added in this release includes: - Rootless mode in X11 - Widget Templt
💻 C
📖 第 1 页 / 共 3 页
字号:
	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 + -