pidgin/plugins/pidginrc.c

changeset 16006
b06d526466f9
parent 15884
4de1981757fc
parent 15988
fa9915cd51dd
equal deleted inserted replaced
15951:079275c87868 16006:b06d526466f9
1 /**
2 * @file purplerc.c Purple gtk resource control plugin.
3 *
4 * Copyright (C) 2005 Etan Reisner <deryni@eden.rutgers.edu>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21 #include "internal.h"
22 #include "gtkplugin.h"
23 #include "gtkprefs.h"
24 #include "gtkutils.h"
25 #include "util.h"
26 #include "version.h"
27
28 static guint pref_callback;
29
30 static const char *color_prefs[] = {
31 "/plugins/gtk/purplerc/color/GtkWidget::cursor-color",
32 "/plugins/gtk/purplerc/color/GtkWidget::secondary-cursor-color",
33 "/plugins/gtk/purplerc/color/GtkIMHtml::hyperlink-color"
34 };
35 static const char *color_prefs_set[] = {
36 "/plugins/gtk/purplerc/set/color/GtkWidget::cursor-color",
37 "/plugins/gtk/purplerc/set/color/GtkWidget::secondary-cursor-color",
38 "/plugins/gtk/purplerc/set/color/GtkIMHtml::hyperlink-color"
39 };
40 static const char *color_names[] = {
41 N_("Cursor Color"),
42 N_("Secondary Cursor Color"),
43 N_("Hyperlink Color")
44 };
45 static GtkWidget *color_widgets[G_N_ELEMENTS(color_prefs)];
46
47 static const char *widget_size_prefs[] = {
48 "/plugins/gtk/purplerc/size/GtkTreeView::expander_size",
49 "/plugins/gtk/purplerc/size/GtkTreeView::horizontal_separator"
50 };
51 static const char *widget_size_prefs_set[] = {
52 "/plugins/gtk/purplerc/set/size/GtkTreeView::expander_size",
53 "/plugins/gtk/purplerc/set/size/GtkTreeView::horizontal_separator"
54 };
55 static const char *widget_size_names[] = {
56 N_("GtkTreeView Expander Size"),
57 N_("GtkTreeView Horizontal Separation")
58 };
59 static GtkWidget *widget_size_widgets[G_N_ELEMENTS(widget_size_prefs)];
60
61 static const char *font_prefs[] = {
62 "/plugins/gtk/purplerc/font/*pidgin_conv_entry",
63 "/plugins/gtk/purplerc/font/*pidgin_conv_imhtml",
64 "/plugins/gtk/purplerc/font/*pidginlog_imhtml",
65 "/plugins/gtk/purplerc/font/*pidginrequest_imhtml",
66 "/plugins/gtk/purplerc/font/*pidginnotify_imhtml",
67 };
68 static const char *font_prefs_set[] = {
69 "/plugins/gtk/purplerc/set/font/*pidgin_conv_entry",
70 "/plugins/gtk/purplerc/set/font/*pidgin_conv_imhtml",
71 "/plugins/gtk/purplerc/set/font/*pidginlog_imhtml",
72 "/plugins/gtk/purplerc/set/font/*pidginrequest_imhtml",
73 "/plugins/gtk/purplerc/set/font/*pidginnotify_imhtml",
74 };
75 static const char *font_names[] = {
76 N_("Conversation Entry"),
77 N_("Conversation History"),
78 N_("Log Viewer"),
79 N_("Request Dialog"),
80 N_("Notify Dialog")
81 };
82 static GtkWidget *font_widgets[G_N_ELEMENTS(font_prefs)];
83
84 static const char *widget_bool_prefs[] = {
85 "/plugins/gtk/purplerc/bool/GtkTreeView::indent_expanders",
86 };
87 static const char *widget_bool_prefs_set[] = {
88 "/plugins/gtk/purplerc/set/bool/GtkTreeView::indent_expanders",
89 };
90 static const char *widget_bool_names[] = {
91 N_("GtkTreeView Indent Expanders"),
92 };
93 static GtkWidget *widget_bool_widgets[G_N_ELEMENTS(widget_bool_prefs)];
94
95 static void
96 purplerc_make_changes()
97 {
98 int i;
99 char *prefbase = NULL;
100 #if GTK_CHECK_VERSION(2,4,0)
101 GtkSettings *setting = NULL;
102 #endif
103 GString *style_string = g_string_new("");
104
105 if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-font-name")) {
106 const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-font-name");
107
108 if (pref != NULL && strcmp(pref, ""))
109 g_string_append_printf(style_string, "gtk-font-name = \"%s\"\n", pref);
110 }
111
112 if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name")) {
113 const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-key-theme-name");
114
115 if (pref != NULL && strcmp(pref, ""))
116 g_string_append_printf(style_string, "gtk-key-theme-name = \"%s\"\n", pref);
117 }
118
119 g_string_append(style_string, "style \"purplerc_style\" {\n");
120
121 for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
122 if (purple_prefs_get_bool(color_prefs_set[i])) {
123 const char *pref;
124
125 prefbase = g_path_get_basename(color_prefs[i]);
126 pref = purple_prefs_get_string(color_prefs[i]);
127
128 if (pref != NULL && strcmp(pref, ""))
129 g_string_append_printf(style_string,
130 "%s = \"%s\"\n",
131 prefbase, pref);
132 g_free(prefbase);
133 }
134 }
135
136 for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {
137 if (purple_prefs_get_bool(widget_size_prefs_set[i])) {
138 prefbase = g_path_get_basename(widget_size_prefs[i]);
139 g_string_append_printf(style_string,
140 "%s = %d\n", prefbase,
141 purple_prefs_get_int(widget_size_prefs[i]));
142 g_free(prefbase);
143 }
144 }
145
146 for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
147 if (purple_prefs_get_bool(widget_bool_prefs_set[i])) {
148 prefbase = g_path_get_basename(widget_bool_prefs[i]);
149 g_string_append_printf(style_string,
150 "%s = %d\n", prefbase,
151 purple_prefs_get_bool(widget_bool_prefs[i]));
152 g_free(prefbase);
153 }
154 }
155
156 g_string_append(style_string, "}");
157 g_string_append(style_string, "widget_class \"*\" style \"purplerc_style\"\n");
158
159 for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
160 if (purple_prefs_get_bool(font_prefs_set[i])) {
161 const char *pref;
162
163 prefbase = g_path_get_basename(font_prefs[i]);
164 pref = purple_prefs_get_string(font_prefs[i]);
165
166 if (pref != NULL && strcmp(pref, ""))
167 g_string_append_printf(style_string,
168 "style \"%s_style\"\n"
169 "{font_name = \"%s\"}\n"
170 "widget \"%s\""
171 "style \"%s_style\"\n",
172 prefbase, pref,
173 prefbase, prefbase);
174 g_free(prefbase);
175 }
176 }
177
178 gtk_rc_parse_string(style_string->str);
179 g_string_free(style_string, TRUE);
180
181 #if GTK_CHECK_VERSION(2,4,0)
182 setting = gtk_settings_get_default();
183 gtk_rc_reset_styles(setting);
184 #endif
185 }
186
187 static void
188 purplerc_write(GtkWidget *widget, gpointer data)
189 {
190 int i;
191 GString *style_string = g_string_new("");
192 char *prefbase = NULL;
193
194 if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-font-name")) {
195 const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-font-name");
196
197 if (pref != NULL && strcmp(pref, ""))
198 g_string_append_printf(style_string,
199 "gtk-font-name = \"%s\"\n",
200 pref);
201 }
202
203 if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name")) {
204 const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-key-theme-name");
205
206 if (pref != NULL && strcmp(pref, ""))
207 g_string_append_printf(style_string,
208 "gtk-key-theme-name = \"%s\"\n",
209 pref);
210 }
211
212 g_string_append(style_string, "style \"purplerc_style\" {\n");
213
214 for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
215 if (purple_prefs_get_bool(color_prefs_set[i])) {
216 const char *pref;
217
218 prefbase = g_path_get_basename(color_prefs[i]);
219 pref = purple_prefs_get_string(color_prefs[i]);
220
221 if (pref != NULL && strcmp(pref, ""))
222 g_string_append_printf(style_string,
223 "%s = \"%s\"\n",
224 prefbase, pref);
225 g_free(prefbase);
226 }
227 }
228
229 for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {
230 if (purple_prefs_get_bool(widget_size_prefs_set[i])) {
231 prefbase = g_path_get_basename(widget_size_prefs[i]);
232 g_string_append_printf(style_string,
233 "%s = %d\n", prefbase,
234 purple_prefs_get_int(widget_size_prefs[i]));
235 g_free(prefbase);
236 }
237 }
238
239 for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
240 if (purple_prefs_get_bool(widget_bool_prefs_set[i])) {
241 prefbase = g_path_get_basename(widget_bool_prefs[i]);
242 g_string_append_printf(style_string,
243 "%s = %d\n", prefbase,
244 purple_prefs_get_bool(widget_bool_prefs[i]));
245 g_free(prefbase);
246 }
247 }
248
249 g_string_append(style_string, "}");
250 g_string_append(style_string, "widget_class \"*\" style \"purplerc_style\"\n");
251
252 for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
253 if (purple_prefs_get_bool(font_prefs_set[i])) {
254 const char *pref;
255
256 prefbase = g_path_get_basename(font_prefs[i]);
257 pref = purple_prefs_get_string(font_prefs[i]);
258
259 if (pref != NULL && strcmp(pref, ""))
260 g_string_append_printf(style_string,
261 "style \"%s_style\"\n"
262 "{font_name = \"%s\"}\n"
263 "widget \"%s\""
264 "style \"%s_style\"\n",
265 prefbase, pref,
266 prefbase, prefbase);
267 g_free(prefbase);
268 }
269 }
270
271 purple_util_write_data_to_file("gtkrc-2.0", style_string->str, -1);
272
273 g_string_free(style_string, TRUE);
274 }
275
276 static void
277 purplerc_reread(GtkWidget *widget, gpointer data)
278 {
279 gtk_rc_reparse_all();
280 /* I don't know if this is necessary but if not it shouldn't hurt. */
281 purplerc_make_changes();
282 }
283
284 static void
285 purplerc_pref_changed_cb(const char *name, PurplePrefType type,
286 gconstpointer value, gpointer data)
287 {
288 purplerc_make_changes();
289 }
290
291 static void
292 purplerc_color_response(GtkDialog *color_dialog, gint response, gpointer data)
293 {
294 int subscript = GPOINTER_TO_INT(data);
295
296 if (response == GTK_RESPONSE_OK) {
297 GtkWidget *colorsel = GTK_COLOR_SELECTION_DIALOG(color_dialog)->colorsel;
298 GdkColor color;
299 char colorstr[8];
300
301 gtk_color_selection_get_current_color(GTK_COLOR_SELECTION(colorsel), &color);
302
303 g_snprintf(colorstr, sizeof(colorstr), "#%02X%02X%02X",
304 color.red/256, color.green/256, color.blue/256);
305
306 purple_prefs_set_string(color_prefs[subscript], colorstr);
307 }
308 gtk_widget_destroy(GTK_WIDGET(color_dialog));
309 }
310
311 static void
312 purplerc_set_color(GtkWidget *widget, gpointer data)
313 {
314 GtkWidget *color_dialog = NULL;
315 GdkColor color;
316 char title[128];
317 const char *pref = NULL;
318 int subscript = GPOINTER_TO_INT(data);
319
320 g_snprintf(title, sizeof(title), _("Select Color for %s"),
321 _(color_names[GPOINTER_TO_INT(data)]));
322 color_dialog = gtk_color_selection_dialog_new(_("Select Color"));
323 g_signal_connect(G_OBJECT(color_dialog), "response",
324 G_CALLBACK(purplerc_color_response), data);
325
326 pref = purple_prefs_get_string(color_prefs[subscript]);
327
328 if (pref != NULL && strcmp(pref, "")) {
329 if (gdk_color_parse(pref, &color)) {
330 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(color_dialog)->colorsel), &color);
331 }
332 }
333
334 gtk_window_present(GTK_WINDOW(color_dialog));
335 }
336
337 static void
338 purplerc_font_response(GtkDialog *font_dialog, gint response, gpointer data)
339 {
340 int subscript = GPOINTER_TO_INT(data);
341
342 if (response == GTK_RESPONSE_OK) {
343 char *fontname = NULL;
344
345 fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(font_dialog));
346
347 purple_prefs_set_string(font_prefs[subscript], fontname);
348 g_free(fontname);
349 }
350 gtk_widget_destroy(GTK_WIDGET(font_dialog));
351 }
352
353 static void
354 purplerc_set_font(GtkWidget *widget, gpointer data)
355 {
356 GtkWidget *font_dialog = NULL;
357 char title[128];
358 const char *pref = NULL;
359 int subscript = GPOINTER_TO_INT(data);
360
361 g_snprintf(title, sizeof(title), _("Select Font for %s"),
362 _(font_names[subscript]));
363 font_dialog = gtk_font_selection_dialog_new(title);
364 g_signal_connect(G_OBJECT(font_dialog), "response",
365 G_CALLBACK(purplerc_font_response), data);
366
367 pref = purple_prefs_get_string(font_prefs[subscript]);
368
369 if (pref != NULL && strcmp(pref, "")) {
370 gtk_font_selection_set_font_name(GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(font_dialog)->fontsel), pref);
371 }
372
373 gtk_window_present(GTK_WINDOW(font_dialog));
374 }
375
376 static void
377 purplerc_font_response_special(GtkDialog *font_dialog, gint response,
378 gpointer data)
379 {
380 if (response == GTK_RESPONSE_OK) {
381 char *fontname = NULL;
382
383 fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(font_dialog));
384
385 purple_prefs_set_string("/plugins/gtk/purplerc/gtk-font-name",
386 fontname);
387 g_free(fontname);
388 }
389 gtk_widget_destroy(GTK_WIDGET(font_dialog));
390 }
391
392 static void
393 purplerc_set_font_special(GtkWidget *widget, gpointer data)
394 {
395 GtkWidget *font_dialog = NULL;
396 const char *pref = NULL;
397
398 font_dialog = gtk_font_selection_dialog_new(_("Select Interface Font"));
399 g_signal_connect(G_OBJECT(font_dialog), "response",
400 G_CALLBACK(purplerc_font_response_special), NULL);
401
402 pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-font-name");
403
404 if (pref != NULL && strcmp(pref, "")) {
405 gtk_font_selection_set_font_name(GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(font_dialog)->fontsel), pref);
406 }
407
408 gtk_window_present(GTK_WINDOW(font_dialog));
409 }
410
411 static gboolean
412 purplerc_plugin_load(PurplePlugin *plugin)
413 {
414 purplerc_make_changes();
415
416 pref_callback = purple_prefs_connect_callback(plugin, "/plugins/gtk/purplerc",
417 purplerc_pref_changed_cb, NULL);
418
419 return TRUE;
420 }
421
422 static gboolean
423 purplerc_plugin_unload(PurplePlugin *plugin)
424 {
425 purple_prefs_disconnect_callback(pref_callback);
426
427 return TRUE;
428 }
429
430 static GtkWidget *
431 purplerc_get_config_frame(PurplePlugin *plugin)
432 {
433 /* Note: Intentionally not using the size group argument to the
434 * pidgin_prefs_labeled_* functions they only add the text label to
435 * the size group not the whole thing, which isn't what I want. */
436 int i;
437 char *tmp;
438 GtkWidget *check = NULL, *widget = NULL;
439 GtkSizeGroup *labelsg = NULL, *widgetsg = NULL;
440 GtkWidget *ret = NULL, *frame = NULL, *hbox = NULL, *vbox = NULL;
441
442 ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
443 gtk_container_set_border_width(GTK_CONTAINER(ret), PIDGIN_HIG_BORDER);
444
445 labelsg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
446 widgetsg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
447
448 frame = pidgin_make_frame(ret, _("General"));
449 /* interface font */
450 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
451 gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
452
453 check = pidgin_prefs_checkbox(_("GTK+ Interface Font"),
454 "/plugins/gtk/purplerc/set/gtk-font-name",
455 hbox);
456 gtk_size_group_add_widget(labelsg, check);
457
458 widget = pidgin_pixbuf_button_from_stock("", GTK_STOCK_SELECT_FONT,
459 PIDGIN_BUTTON_HORIZONTAL);
460 gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);
461 gtk_size_group_add_widget(widgetsg, widget);
462 gtk_widget_set_sensitive(widget,
463 purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-font-name"));
464 g_signal_connect(G_OBJECT(check), "toggled",
465 G_CALLBACK(pidgin_toggle_sensitive), widget);
466 g_signal_connect(G_OBJECT(widget), "clicked",
467 G_CALLBACK(purplerc_set_font_special), NULL);
468
469 /* key theme name */
470 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
471 gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
472
473 check = pidgin_prefs_checkbox(_("GTK+ Text Shortcut Theme"),
474 "/plugins/gtk/purplerc/set/gtk-key-theme-name",
475 hbox);
476 gtk_size_group_add_widget(labelsg, check);
477
478 widget = pidgin_prefs_labeled_entry(hbox, "",
479 "/plugins/gtk/purplerc/gtk-key-theme-name",
480 NULL);
481 /*
482 gtk_size_group_add_widget(widgetsg, widget);
483 */
484 gtk_widget_set_sensitive(widget,
485 purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name"));
486 g_signal_connect(G_OBJECT(check), "toggled",
487 G_CALLBACK(pidgin_toggle_sensitive), widget);
488
489 for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
490 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
491 gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
492
493 check = pidgin_prefs_checkbox(_(widget_bool_names[i]),
494 widget_bool_prefs_set[i], hbox);
495 gtk_size_group_add_widget(labelsg, check);
496
497 widget_bool_widgets[i] = pidgin_prefs_checkbox("", widget_bool_prefs[i], hbox);
498 /*
499 gtk_size_group_add_widget(widgetsb, widget_bool_widgets[i]);
500 */
501 gtk_widget_set_sensitive(widget_bool_widgets[i],
502 purple_prefs_get_bool(widget_bool_prefs_set[i]));
503 g_signal_connect(G_OBJECT(check), "toggled",
504 G_CALLBACK(pidgin_toggle_sensitive),
505 widget_bool_widgets[i]);
506 }
507
508 frame = pidgin_make_frame(ret, _("Interface colors"));
509 /* imhtml stuff */
510 for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
511 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
512 gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
513
514 check = pidgin_prefs_checkbox(_(color_names[i]),
515 color_prefs_set[i], hbox);
516 gtk_size_group_add_widget(labelsg, check);
517
518 color_widgets[i] = pidgin_pixbuf_button_from_stock("", GTK_STOCK_SELECT_COLOR, PIDGIN_BUTTON_HORIZONTAL);
519 gtk_size_group_add_widget(widgetsg, color_widgets[i]);
520 gtk_box_pack_start(GTK_BOX(hbox), color_widgets[i], FALSE,
521 FALSE, 0);
522 gtk_widget_set_sensitive(color_widgets[i],
523 purple_prefs_get_bool(color_prefs_set[i]));
524 g_signal_connect(G_OBJECT(check), "toggled",
525 G_CALLBACK(pidgin_toggle_sensitive),
526 color_widgets[i]);
527 g_signal_connect(G_OBJECT(color_widgets[i]), "clicked",
528 G_CALLBACK(purplerc_set_color),
529 GINT_TO_POINTER(i));
530 }
531
532 frame = pidgin_make_frame(ret, _("Widget Sizes"));
533 /* widget size stuff */
534 for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {
535 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
536 gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
537
538 check = pidgin_prefs_checkbox(_(widget_size_names[i]),
539 widget_size_prefs_set[i], hbox);
540 gtk_size_group_add_widget(labelsg, check);
541
542 widget_size_widgets[i] = pidgin_prefs_labeled_spin_button(hbox, "", widget_size_prefs[i], 0, 50, NULL);
543 /*
544 gtk_size_group_add_widget(widgetsg, widget_size_widgets[i]);
545 */
546 gtk_widget_set_sensitive(widget_size_widgets[i],
547 purple_prefs_get_bool(widget_size_prefs_set[i]));
548 g_signal_connect(G_OBJECT(check), "toggled",
549 G_CALLBACK(pidgin_toggle_sensitive),
550 widget_size_widgets[i]);
551 }
552
553 frame = pidgin_make_frame(ret, _("Fonts"));
554 /* imhtml font stuff */
555 for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
556 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
557 gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
558
559 check = pidgin_prefs_checkbox(_(font_names[i]),
560 font_prefs_set[i], hbox);
561 gtk_size_group_add_widget(labelsg, check);
562
563 font_widgets[i] = pidgin_pixbuf_button_from_stock("", GTK_STOCK_SELECT_FONT, PIDGIN_BUTTON_HORIZONTAL);
564 gtk_size_group_add_widget(widgetsg, font_widgets[i]);
565 gtk_box_pack_start(GTK_BOX(hbox), font_widgets[i], FALSE,
566 FALSE, 0);
567 gtk_widget_set_sensitive(font_widgets[i],
568 purple_prefs_get_bool(font_prefs_set[i]));
569 g_signal_connect(G_OBJECT(check), "toggled",
570 G_CALLBACK(pidgin_toggle_sensitive),
571 font_widgets[i]);
572 g_signal_connect(G_OBJECT(font_widgets[i]), "clicked",
573 G_CALLBACK(purplerc_set_font), GINT_TO_POINTER(i));
574 }
575
576 frame = pidgin_make_frame(ret, _("Tools"));
577
578 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
579 gtk_box_pack_start(GTK_BOX(frame), vbox, FALSE, FALSE, 0);
580
581 tmp = g_strdup_printf(_("Write settings to %s%sgtkrc-2.0"), purple_user_dir(), G_DIR_SEPARATOR_S);
582 check = gtk_button_new_with_label(tmp);
583 g_free(tmp);
584 gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
585 gtk_size_group_add_widget(labelsg, check);
586 g_signal_connect(G_OBJECT(check), "clicked", G_CALLBACK(purplerc_write),
587 NULL);
588
589 check = gtk_button_new_with_label(_("Re-read gtkrc files"));
590 gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
591 gtk_size_group_add_widget(labelsg, check);
592 g_signal_connect(G_OBJECT(check), "clicked", G_CALLBACK(purplerc_reread),
593 NULL);
594
595 gtk_widget_show_all(ret);
596 return ret;
597 }
598
599 static PidginPluginUiInfo purplerc_ui_info =
600 {
601 purplerc_get_config_frame,
602 0 /* page_num (Reserved) */
603 };
604
605 static PurplePluginInfo purplerc_info =
606 {
607 PURPLE_PLUGIN_MAGIC,
608 PURPLE_MAJOR_VERSION,
609 PURPLE_MINOR_VERSION,
610 PURPLE_PLUGIN_STANDARD,
611 PIDGIN_PLUGIN_TYPE,
612 0,
613 NULL,
614 PURPLE_PRIORITY_DEFAULT,
615 "purplerc",
616 N_(PIDGIN_NAME " GTK+ Theme Control"),
617 VERSION,
618 N_("Provides access to commonly used gtkrc settings."),
619 N_("Provides access to commonly used gtkrc settings."),
620 "Etan Reisner <deryni@eden.rutgers.edu>",
621 PURPLE_WEBSITE,
622 purplerc_plugin_load,
623 purplerc_plugin_unload,
624 NULL,
625 &purplerc_ui_info,
626 NULL,
627 NULL,
628 NULL
629 };
630
631 static void
632 purplerc_init(PurplePlugin *plugin)
633 {
634 int i;
635
636 purple_prefs_add_none("/plugins");
637 purple_prefs_add_none("/plugins/gtk");
638 purple_prefs_add_none("/plugins/gtk/purplerc");
639 purple_prefs_add_none("/plugins/gtk/purplerc/set");
640
641 purple_prefs_add_string("/plugins/gtk/purplerc/gtk-font-name", "");
642 purple_prefs_add_bool("/plugins/gtk/purplerc/set/gtk-font-name", FALSE);
643
644 purple_prefs_add_string("/plugins/gtk/purplerc/gtk-key-theme-name", "");
645 purple_prefs_add_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name", FALSE);
646
647 purple_prefs_add_none("/plugins/gtk/purplerc/color");
648 purple_prefs_add_none("/plugins/gtk/purplerc/set/color");
649 for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
650 purple_prefs_add_string(color_prefs[i], "");
651 purple_prefs_add_bool(color_prefs_set[i], FALSE);
652 }
653
654 purple_prefs_add_none("/plugins/gtk/purplerc/size");
655 purple_prefs_add_none("/plugins/gtk/purplerc/set/size");
656 for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {
657 purple_prefs_add_int(widget_size_prefs[i], 0);
658 purple_prefs_add_bool(widget_size_prefs_set[i], FALSE);
659 }
660
661 purple_prefs_add_none("/plugins/gtk/purplerc/font");
662 purple_prefs_add_none("/plugins/gtk/purplerc/set/font");
663 for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
664 purple_prefs_add_string(font_prefs[i], "");
665 purple_prefs_add_bool(font_prefs_set[i], FALSE);
666 }
667
668 purple_prefs_add_none("/plugins/gtk/purplerc/bool");
669 purple_prefs_add_none("/plugins/gtk/purplerc/set/bool");
670 for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
671 purple_prefs_add_bool(widget_bool_prefs[i], TRUE);
672 purple_prefs_add_bool(widget_bool_prefs_set[i], FALSE);
673 }
674 }
675
676 PURPLE_INIT_PLUGIN(purplerc, purplerc_init, purplerc_info)

mercurial