📄 settings.c
字号:
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 + -