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

📄 pidginrc.c

📁 Linux下的多协议即时通讯程序源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/** * @file purplerc.c Purple gtk resource control plugin. * * Copyright (C) 2005 Etan Reisner <deryni@eden.rutgers.edu> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "internal.h"#include "gtkplugin.h"#include "gtkprefs.h"#include "gtkutils.h"#include "util.h"#include "version.h"static guint pref_callback;static const char *color_prefs[] = {	"/plugins/gtk/purplerc/color/GtkWidget::cursor-color",	"/plugins/gtk/purplerc/color/GtkWidget::secondary-cursor-color",	"/plugins/gtk/purplerc/color/GtkIMHtml::hyperlink-color"};static const char *color_prefs_set[] = {	"/plugins/gtk/purplerc/set/color/GtkWidget::cursor-color",	"/plugins/gtk/purplerc/set/color/GtkWidget::secondary-cursor-color",	"/plugins/gtk/purplerc/set/color/GtkIMHtml::hyperlink-color"};static const char *color_names[] = {	N_("Cursor Color"),	N_("Secondary Cursor Color"),	N_("Hyperlink Color")};static GtkWidget *color_widgets[G_N_ELEMENTS(color_prefs)];static const char *widget_size_prefs[] = {	"/plugins/gtk/purplerc/size/GtkTreeView::horizontal_separator"};static const char *widget_size_prefs_set[] = {	"/plugins/gtk/purplerc/set/size/GtkTreeView::horizontal_separator"};static const char *widget_size_names[] = {	N_("GtkTreeView Horizontal Separation")};static GtkWidget *widget_size_widgets[G_N_ELEMENTS(widget_size_prefs)];static const char *font_prefs[] = {	"/plugins/gtk/purplerc/font/*pidgin_conv_entry",	"/plugins/gtk/purplerc/font/*pidgin_conv_imhtml",	"/plugins/gtk/purplerc/font/*pidgin_log_imhtml",	"/plugins/gtk/purplerc/font/*pidgin_request_imhtml",	"/plugins/gtk/purplerc/font/*pidgin_notify_imhtml",};static const char *font_prefs_set[] = {	"/plugins/gtk/purplerc/set/font/*pidgin_conv_entry",	"/plugins/gtk/purplerc/set/font/*pidgin_conv_imhtml",	"/plugins/gtk/purplerc/set/font/*pidgin_log_imhtml",	"/plugins/gtk/purplerc/set/font/*pidgin_request_imhtml",	"/plugins/gtk/purplerc/set/font/*pidgin_notify_imhtml",};static const char *font_names[] = {	N_("Conversation Entry"),	N_("Conversation History"),	N_("Log Viewer"),	N_("Request Dialog"),	N_("Notify Dialog")};static GtkWidget *font_widgets[G_N_ELEMENTS(font_prefs)];/*static const char *widget_bool_prefs[] = {};static const char *widget_bool_prefs_set[] = {};static const char *widget_bool_names[] = {};static GtkWidget *widget_bool_widgets[G_N_ELEMENTS(widget_bool_prefs)];*/static voidpurplerc_make_changes(){	int i;	char *prefbase = NULL;#if GTK_CHECK_VERSION(2,4,0)	GtkSettings *setting = NULL;#endif	GString *style_string = g_string_new("");	if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-font-name")) {		const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-font-name");		if (pref != NULL && strcmp(pref, ""))			g_string_append_printf(style_string, "gtk-font-name = \"%s\"\n", pref);	}	if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name")) {		const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-key-theme-name");		if (pref != NULL && strcmp(pref, ""))			g_string_append_printf(style_string, "gtk-key-theme-name = \"%s\"\n", pref);	}	g_string_append(style_string, "style \"purplerc_style\" {\n");	for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {		if (purple_prefs_get_bool(color_prefs_set[i])) {			const char *pref;			prefbase = g_path_get_basename(color_prefs[i]);			pref = purple_prefs_get_string(color_prefs[i]);			if (pref != NULL && strcmp(pref, ""))			    g_string_append_printf(style_string,			                           "%s = \"%s\"\n",			                           prefbase, pref);			g_free(prefbase);		}	}	for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {		if (purple_prefs_get_bool(widget_size_prefs_set[i])) {			prefbase = g_path_get_basename(widget_size_prefs[i]);			g_string_append_printf(style_string,			                       "%s = %d\n", prefbase,			                       purple_prefs_get_int(widget_size_prefs[i]));			g_free(prefbase);		}	}	/*	for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {		if (purple_prefs_get_bool(widget_bool_prefs_set[i])) {			prefbase = g_path_get_basename(widget_bool_prefs[i]);			g_string_append_printf(style_string,			                       "%s = %d\n", prefbase,			                       purple_prefs_get_bool(widget_bool_prefs[i]));			g_free(prefbase);		}	}	*/	g_string_append(style_string, "}");	g_string_append(style_string, "widget_class \"*\" style \"purplerc_style\"\n");	for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {		if (purple_prefs_get_bool(font_prefs_set[i])) {			const char *pref;			prefbase = g_path_get_basename(font_prefs[i]);			pref = purple_prefs_get_string(font_prefs[i]);			if (pref != NULL && strcmp(pref, ""))				g_string_append_printf(style_string,				                       "style \"%s_style\"\n"				                       "{font_name = \"%s\"}\n"				                       "widget \"%s\" "				                       "style \"%s_style\"\n",				                       prefbase, pref,				                       prefbase, prefbase);			g_free(prefbase);		}	}	gtk_rc_parse_string(style_string->str);	g_string_free(style_string, TRUE);#if GTK_CHECK_VERSION(2,4,0)	setting = gtk_settings_get_default();	gtk_rc_reset_styles(setting);#endif}static voidpurplerc_write(GtkWidget *widget, gpointer data){	int i;	GString *style_string = g_string_new("");	char *prefbase = NULL;	if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-font-name")) {		const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-font-name");		if (pref != NULL && strcmp(pref, ""))			g_string_append_printf(style_string,			                       "gtk-font-name = \"%s\"\n",			                       pref);	}	if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name")) {		const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-key-theme-name");		if (pref != NULL && strcmp(pref, ""))			g_string_append_printf(style_string,			                       "gtk-key-theme-name = \"%s\"\n",			                       pref);	}	g_string_append(style_string, "style \"purplerc_style\" {\n");	for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {		if (purple_prefs_get_bool(color_prefs_set[i])) {			const char *pref;			prefbase = g_path_get_basename(color_prefs[i]);			pref = purple_prefs_get_string(color_prefs[i]);			if (pref != NULL && strcmp(pref, ""))			    g_string_append_printf(style_string,			                           "%s = \"%s\"\n",			                           prefbase, pref);			g_free(prefbase);		}	}	for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {		if (purple_prefs_get_bool(widget_size_prefs_set[i])) {			prefbase = g_path_get_basename(widget_size_prefs[i]);			g_string_append_printf(style_string,			                       "%s = %d\n", prefbase,			                       purple_prefs_get_int(widget_size_prefs[i]));			g_free(prefbase);		}	}	/*	for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {		if (purple_prefs_get_bool(widget_bool_prefs_set[i])) {			prefbase = g_path_get_basename(widget_bool_prefs[i]);			g_string_append_printf(style_string,			                       "%s = %d\n", prefbase,			                       purple_prefs_get_bool(widget_bool_prefs[i]));			g_free(prefbase);		}	}	*/	g_string_append(style_string, "}");	g_string_append(style_string, "widget_class \"*\" style \"purplerc_style\"\n");	for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {		if (purple_prefs_get_bool(font_prefs_set[i])) {			const char *pref;			prefbase = g_path_get_basename(font_prefs[i]);			pref = purple_prefs_get_string(font_prefs[i]);			if (pref != NULL && strcmp(pref, ""))				g_string_append_printf(style_string,				                       "style \"%s_style\"\n"				                       "{font_name = \"%s\"}\n"				                       "widget \"%s\" "				                       "style \"%s_style\"\n",				                       prefbase, pref,				                       prefbase, prefbase);			g_free(prefbase);		}	}	purple_util_write_data_to_file("gtkrc-2.0", style_string->str, -1);	g_string_free(style_string, TRUE);}static voidpurplerc_reread(GtkWidget *widget, gpointer data){	gtk_rc_reparse_all();	/* I don't know if this is necessary but if not it shouldn't hurt. */	purplerc_make_changes();}static voidpurplerc_pref_changed_cb(const char *name, PurplePrefType type,                       gconstpointer value, gpointer data){	purplerc_make_changes();}static voidpurplerc_color_response(GtkDialog *color_dialog, gint response, gpointer data){	int subscript = GPOINTER_TO_INT(data);	if (response == GTK_RESPONSE_OK) {		GtkWidget *colorsel = GTK_COLOR_SELECTION_DIALOG(color_dialog)->colorsel;		GdkColor color;		char colorstr[8];		gtk_color_selection_get_current_color(GTK_COLOR_SELECTION(colorsel), &color);		g_snprintf(colorstr, sizeof(colorstr), "#%02X%02X%02X",		           color.red/256, color.green/256, color.blue/256);		purple_prefs_set_string(color_prefs[subscript], colorstr);	}	gtk_widget_destroy(GTK_WIDGET(color_dialog));}static voidpurplerc_set_color(GtkWidget *widget, gpointer data){	GtkWidget *color_dialog = NULL;	GdkColor color;	char title[128];	const char *pref = NULL;	int subscript = GPOINTER_TO_INT(data);	g_snprintf(title, sizeof(title), _("Select Color for %s"),	           _(color_names[GPOINTER_TO_INT(data)]));	color_dialog = gtk_color_selection_dialog_new(_("Select Color"));	g_signal_connect(G_OBJECT(color_dialog), "response",	                 G_CALLBACK(purplerc_color_response), data);	pref = purple_prefs_get_string(color_prefs[subscript]);	if (pref != NULL && strcmp(pref, "")) {		if (gdk_color_parse(pref, &color)) {			gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(color_dialog)->colorsel), &color);		}	}	gtk_window_present(GTK_WINDOW(color_dialog));}static voidpurplerc_font_response(GtkDialog *font_dialog, gint response, gpointer data){	int subscript = GPOINTER_TO_INT(data);	if (response == GTK_RESPONSE_OK) {		char *fontname = NULL;		fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(font_dialog));		purple_prefs_set_string(font_prefs[subscript], fontname);

⌨️ 快捷键说明

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