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

📄 settings.c

📁 The major functionality added in this release includes: - Rootless mode in X11 - Widget Templt
💻 C
📖 第 1 页 / 共 5 页
字号:
	gtk_container_add (GTK_CONTAINER (frame), label);	gtk_widget_show (label);	/* vbox for the tab */	vbox = gtk_vbox_new (FALSE, 2);	gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);	gtk_container_add (GTK_CONTAINER (vvbox), vbox);	gtk_widget_show (vbox);	/* label on the tree */	titles[0] = tree_label;	*node = gtk_ctree_insert_node (GTK_CTREE (ctree), parent, NULL, titles, 0,											 NULL, NULL, NULL, NULL, FALSE, FALSE);	gtk_ctree_node_set_row_data (GTK_CTREE (ctree), *node,										  (gpointer) page_index);	/* call the draw func if there is one */	if (draw_func)		draw_func (sess, vbox);	/* append page and return */	gtk_notebook_append_page (GTK_NOTEBOOK (book), vvbox, NULL);	return vbox;}/* Util functions and main callbacks */static intsettings_closegui (GtkWidget * wid, struct session *sess){	if (sess->setup)	{		free (sess->setup);		sess->setup = 0;	}	return 0;}static voidsettings_filereq_done (GtkWidget * entry, void *data2, char *file){	if (file)	{		if (file[0])			gtk_entry_set_text (GTK_ENTRY (entry), file);		free (file);	}}static voidsettings_openfiledialog (GtkWidget * button, GtkWidget * entry){	gtkutil_file_req (_("Choose File"), settings_filereq_done, entry, 0,							FALSE);/*#ifdef USE_IMLIB   gtkutil_file_req (_ ("Choose Picture"), settings_filereq_done, entry, 0, FALSE);#else   gtkutil_file_req (_ ("Choose XPM"), settings_filereq_done, entry, 0, FALSE);#endif*/}static voidsettings_fontok (GtkWidget * ok_button, GtkWidget * entry){	gchar *fontname;	if (GTK_IS_WIDGET (entry))	{		fontname =			gtk_font_selection_dialog_get_font_name (GTK_FONT_SELECTION_DIALOG																  (fontdialog));		if (fontname && fontname[0])			gtk_entry_set_text (GTK_ENTRY (entry), fontname);	}	gtk_widget_destroy (fontdialog);}static voidsettings_fontdialogdestroy (GtkWidget * dialog, gpointer unused){	fontdialog = NULL;}static voidsettings_openfontdialog (GtkWidget * button, GtkWidget * entry){	GtkFontSelectionDialog *dialog;	if (fontdialog)	{		gdk_window_show (GTK_WIDGET (fontdialog)->window);		return;	}	dialog = (GtkFontSelectionDialog *)				gtk_font_selection_dialog_new (_("Select Font"));	gtk_signal_connect (GTK_OBJECT (dialog->ok_button), "clicked",							  GTK_SIGNAL_FUNC (settings_fontok), entry);	gtk_signal_connect (GTK_OBJECT (dialog), "destroy",							  GTK_SIGNAL_FUNC (settings_fontdialogdestroy), 0);	gtk_signal_connect (GTK_OBJECT (dialog->cancel_button), "clicked",							  GTK_SIGNAL_FUNC (gtkutil_destroy), dialog);	gtk_font_selection_dialog_set_font_name (dialog,							  gtk_entry_get_text (GTK_ENTRY (entry)));	gtk_widget_show (GTK_WIDGET (dialog));	fontdialog = (GtkWidget *)dialog;}static voidexpand_homedir_inplace (char *file){	char *new_file = expand_homedir (file);	strcpy (file, new_file);	free (new_file);}#define GETINT(x) gtk_spin_button_get_value_as_int((GtkSpinButton*)sess->setup->x)#define GETSTR(x,y) strcpy(x,gtk_entry_get_text((GtkEntry*)sess->setup->y))static voidsettings_ok_clicked (GtkWidget * wid, struct session *sess){	int noapply = FALSE;	int fontchange = FALSE;	int fontdialogchange = FALSE;	struct session *s;	GdkPixmap *old_pix;	GtkStyle *new_style;	GSList *list;	/* get all the spinbutton and GtkEntry values into our structure */	GETSTR (sess->setup->prefs.dcc_ip_str, entry_dcc_ip_str);	GETSTR (sess->setup->prefs.hostname, entry_hostname);	GETSTR (sess->setup->prefs.proxy_host, entry_proxy_host);	sess->setup->prefs.proxy_port = GETINT (entry_proxy_port);	sess->setup->prefs.first_dcc_send_port = GETINT (entry_dcc_send_port_first);	sess->setup->prefs.last_dcc_send_port = GETINT (entry_dcc_send_port_last);	GETSTR (sess->setup->prefs.background, background);	expand_homedir_inplace (sess->setup->prefs.background);	GETSTR (sess->setup->prefs.background_dialog, background_dialog);	expand_homedir_inplace (sess->setup->prefs.background_dialog);	GETSTR (sess->setup->prefs.soundcmd, entry_soundcmd);	GETSTR (sess->setup->prefs.sounddir, entry_sounddir);	GETSTR (sess->setup->prefs.dnsprogram, entry_dnsprogram);	GETSTR (sess->setup->prefs.bluestring, entry_bluestring);	GETSTR (sess->setup->prefs.doubleclickuser, entry_doubleclickuser);	GETSTR (sess->setup->prefs.awayreason, entry_away);	GETSTR (sess->setup->prefs.quitreason, entry_quit);	GETSTR (sess->setup->prefs.partreason, entry_part);	GETSTR (sess->setup->prefs.logmask, logmask_entry);	GETSTR (sess->setup->prefs.timestamp_log_format, logtimestamp_entry);	GETSTR (sess->setup->prefs.nick_suffix, entry_nick_suffix);	GETSTR (sess->setup->prefs.stamp_format, entry_stamp_format);	sess->setup->prefs.max_lines = GETINT (entry_max_lines);	sess->setup->prefs.notify_timeout = GETINT (entry_timeout);	sess->setup->prefs.recon_delay = GETINT (entry_recon_delay);	sscanf (gtk_entry_get_text ((GtkEntry *) sess->setup->entry_permissions),			  "%o", &sess->setup->prefs.dccpermissions);	sess->setup->prefs.dcc_blocksize = GETINT (entry_dcc_blocksize);	sess->setup->prefs.dccstalltimeout = GETINT (entry_dccstalltimeout);	sess->setup->prefs.dcctimeout = GETINT (entry_dcctimeout);	GETSTR (sess->setup->prefs.dccdir, entry_dccdir);	expand_homedir_inplace (sess->setup->prefs.dccdir);	GETSTR (sess->setup->prefs.font_normal, font_normal);	GETSTR (sess->setup->prefs.dialog_font_normal, dialog_font_normal);	sess->setup->prefs.mainwindow_left = GETINT (entry_mainw_left);	sess->setup->prefs.mainwindow_top = GETINT (entry_mainw_top);	sess->setup->prefs.mainwindow_width = GETINT (entry_mainw_width);	sess->setup->prefs.mainwindow_height = GETINT (entry_mainw_height);#ifdef USE_TRANS	GETSTR (sess->setup->prefs.trans_file, entry_trans_file);	if (sess->setup->prefs.use_trans)	{		if (load_trans_table (sess->setup->prefs.trans_file) == 0)		{			gtkutil_simpledialog (_("Failed to load translation table."));			sess->setup->prefs.use_trans = 0;		}	}#endif	if (sess->setup->prefs.notify_timeout != prefs.notify_timeout)	{		if (notify_tag)		{			fe_timeout_remove (notify_tag);			notify_tag = 0;		}		if (sess->setup->prefs.notify_timeout)			notify_tag =				fe_timeout_add (sess->setup->prefs.notify_timeout * 1000,									 notify_checklist, 0);	}	if (prefs.use_fontset != sess->setup->prefs.use_fontset)	{		/* force font reloading */		prefs.font_normal[0] = 0;		prefs.dialog_font_normal[0] = 0;		prefs.use_fontset = sess->setup->prefs.use_fontset;	}	if (strcmp (prefs.font_normal, sess->setup->prefs.font_normal) != 0)	{		gdk_font_unref (font_normal);		font_normal = my_font_load (sess->setup->prefs.font_normal);		fontchange = TRUE;	}	if (strcmp		 (prefs.dialog_font_normal, sess->setup->prefs.dialog_font_normal) != 0)	{		gdk_font_unref (dialog_font_normal);		dialog_font_normal =			my_font_load (sess->setup->prefs.dialog_font_normal);		fontdialogchange = TRUE;	}	if (prefs.tabchannels != sess->setup->prefs.tabchannels)		noapply = TRUE;	if (prefs.paned_userlist != sess->setup->prefs.paned_userlist)		noapply = TRUE;	if (prefs.chanmodebuttons != sess->setup->prefs.chanmodebuttons)		noapply = TRUE;	if (prefs.treeview != sess->setup->prefs.treeview)		noapply = TRUE;	if (prefs.nu_color != sess->setup->prefs.nu_color)		noapply = TRUE;	if (prefs.panel_vbox != sess->setup->prefs.panel_vbox)		noapply = TRUE;	if (prefs.auto_indent != sess->setup->prefs.auto_indent)		noapply = TRUE;	memcpy (&prefs, &sess->setup->prefs, sizeof (struct xchatprefs));	if (main_window)		maingui_set_tab_pos (prefs.tabs_position);	old_pix = channelwin_pix;	list = sess_list;	channelwin_pix = pixmap_load_from_file (prefs.background);	while (list)	{		s = (struct session *) list->data;		if (s->type == SESS_DIALOG)		{			fe_dlgbuttons_update (s);		}		else if (s->type != SESS_SHELL)		{			GTK_XTEXT (s->gui->textgad)->tint_red = prefs.tint_red;			GTK_XTEXT (s->gui->textgad)->tint_green = prefs.tint_green;			GTK_XTEXT (s->gui->textgad)->tint_blue = prefs.tint_blue;			gtk_xtext_set_background (GTK_XTEXT (s->gui->textgad),											  channelwin_pix,											  prefs.transparent, prefs.tint);			if (!prefs.indent_nicks)				GTK_XTEXT (s->gui->textgad)->indent = 0;			else if (GTK_XTEXT (s->gui->textgad)->indent == 0)				GTK_XTEXT (s->gui->textgad)->indent =					prefs.indent_pixels * prefs.indent_nicks;			GTK_XTEXT (s->gui->textgad)->wordwrap = prefs.wordwrap;			GTK_XTEXT (s->gui->textgad)->max_lines = prefs.max_lines;			GTK_XTEXT (s->gui->textgad)->separator = prefs.show_separator;			if (fontchange)				gtk_xtext_set_font (GTK_XTEXT (s->gui->textgad), font_normal, 0);			if (prefs.timestamp && prefs.indent_nicks)				GTK_XTEXT (s->gui->textgad)->time_stamp = TRUE;			else				GTK_XTEXT (s->gui->textgad)->time_stamp = FALSE;			gtk_xtext_refresh (GTK_XTEXT (s->gui->textgad), 0);			fe_buttons_update (s);		}		list = list->next;	}	if (old_pix)		gdk_pixmap_unref (old_pix);	old_pix = dialogwin_pix;	list = sess_list;	dialogwin_pix = pixmap_load_from_file (prefs.background_dialog);	while (list)	{		s = (struct session *) list->data;		if (s->type == SESS_DIALOG)		{			GTK_XTEXT (s->gui->textgad)->tint_red = prefs.dialog_tint_red;			GTK_XTEXT (s->gui->textgad)->tint_green = prefs.dialog_tint_green;			GTK_XTEXT (s->gui->textgad)->tint_blue = prefs.dialog_tint_blue;			gtk_xtext_set_background (GTK_XTEXT (s->gui->textgad),											  dialogwin_pix,											  prefs.dialog_transparent,											  prefs.dialog_tint);			if (!prefs.dialog_indent_nicks)				GTK_XTEXT (s->gui->textgad)->indent = 0;			else if (GTK_XTEXT (s->gui->textgad)->indent == 0)				GTK_XTEXT (s->gui->textgad)->indent =					prefs.dialog_indent_pixels * prefs.dialog_indent_nicks;			GTK_XTEXT (s->gui->textgad)->wordwrap = prefs.dialog_wordwrap;			GTK_XTEXT (s->gui->textgad)->max_lines = prefs.max_lines;			GTK_XTEXT (s->gui->textgad)->separator = prefs.dialog_show_separator;			if (fontdialogchange)				gtk_xtext_set_font (GTK_XTEXT (s->gui->textgad), dialog_font_normal,									  0);			if (prefs.timestamp && prefs.dialog_indent_nicks)				GTK_XTEXT (s->gui->textgad)->time_stamp = TRUE;			else				GTK_XTEXT (s->gui->textgad)->time_stamp = FALSE;			gtk_xtext_refresh (GTK_XTEXT (s->gui->textgad), 0);		}		list = list->next;	}	if (old_pix)		gdk_pixmap_unref (old_pix);	/* update the font in inputgad_style */	if (fontchange && prefs.style_inputbox)	{		new_style = create_inputgad_style ();		list = sess_list;		while (list)		{			s = list->data;			switch (s->type)			{			case SESS_CHANNEL:			case SESS_DIALOG:			case SESS_SERVER:				gtk_widget_set_style (s->gui->inputgad, new_style);			}			list = list->next;		}		gtk_style_unref (inputgad_style);		inputgad_style = new_style;	}	if (wid)		gtk_widget_destroy (sess->setup->settings_window);	else		gtk_widget_set_sensitive (sess->setup->cancel_button, FALSE);	if (noapply)		gtkutil_simpledialog (_("The following prefs do not take effect\n"									 "immediately, you will have to close the\n"									 "window and re-open it:\n\n"									 " - Channel Tabs\n"									 " - Channel Mode Buttons\n"									 " - Userlist Buttons\n"									 " - Disable Paned Userlist\n"									 " - Notify User color\n"									 " - Layout for a vertical panel\n"									 " - Auto Indent"));}static voidsettings_apply_clicked (GtkWidget * wid, struct session *sess){	settings_ok_clicked (0, sess);}static voidsettings_color_clicked (GtkWidget * igad, GtkWidget * colgad, int *colset){	GtkStyle *stylefg = gtk_style_new ();	char buf[16];	int col = atoi (gtk_entry_get_text (GTK_ENTRY (igad)));	if (col < 0 || col > 15)		col = 0;	sprintf (buf, "%d", col);	gtk_entry_set_text (GTK_ENTRY (igad), buf);	stylefg->bg[0] = colors[col];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -