?? pidginrc.c
字號:
/** * @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 + -