| |
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) |