comparison plugins/gaimrc.c @ 12973:e25a2315d9e3

[gaim-migrate @ 15326] GtkTreeView::indent_expanders is a boolean value not an integer, so change gaimrc to match. Also fix how changing settings works, all settings should be instant-apply-on-change for gtk > 2.4, and will either work better or worse than they did before with gtk < 2.4 (I'm not sure and don't have anywhere to test.) committer: Tailor Script <tailor@pidgin.im>
author Etan Reisner <pidgin@unreliablesource.net>
date Sat, 21 Jan 2006 00:46:36 +0000
parents ff267281e882
children b553326bc468
comparison
equal deleted inserted replaced
12972:bbf068a15a53 12973:e25a2315d9e3
44 }; 44 };
45 static GtkWidget *color_widgets[G_N_ELEMENTS(color_prefs)]; 45 static GtkWidget *color_widgets[G_N_ELEMENTS(color_prefs)];
46 46
47 static const char *widget_size_prefs[] = { 47 static const char *widget_size_prefs[] = {
48 "/plugins/gtk/gaimrc/size/GtkTreeView::expander_size", 48 "/plugins/gtk/gaimrc/size/GtkTreeView::expander_size",
49 "/plugins/gtk/gaimrc/size/GtkTreeView::indent_expanders",
50 "/plugins/gtk/gaimrc/size/GtkTreeView::horizontal_separator" 49 "/plugins/gtk/gaimrc/size/GtkTreeView::horizontal_separator"
51 }; 50 };
52 static const char *widget_size_prefs_set[] = { 51 static const char *widget_size_prefs_set[] = {
53 "/plugins/gtk/gaimrc/set/size/GtkTreeView::expander_size", 52 "/plugins/gtk/gaimrc/set/size/GtkTreeView::expander_size",
54 "/plugins/gtk/gaimrc/set/size/GtkTreeView::indent_expanders",
55 "/plugins/gtk/gaimrc/set/size/GtkTreeView::horizontal_separator" 53 "/plugins/gtk/gaimrc/set/size/GtkTreeView::horizontal_separator"
56 }; 54 };
57 static const char *widget_size_names[] = { 55 static const char *widget_size_names[] = {
58 N_("GtkTreeView Expander Size"), 56 N_("GtkTreeView Expander Size"),
59 N_("GtkTreeView Expander Indentation"),
60 N_("GtkTreeView Horizontal Separation") 57 N_("GtkTreeView Horizontal Separation")
61 }; 58 };
62 static GtkWidget *widget_size_widgets[G_N_ELEMENTS(widget_size_prefs)]; 59 static GtkWidget *widget_size_widgets[G_N_ELEMENTS(widget_size_prefs)];
63 60
64 static const char *font_prefs[] = { 61 static const char *font_prefs[] = {
82 N_("Request Dialog"), 79 N_("Request Dialog"),
83 N_("Notify Dialog") 80 N_("Notify Dialog")
84 }; 81 };
85 static GtkWidget *font_widgets[G_N_ELEMENTS(font_prefs)]; 82 static GtkWidget *font_widgets[G_N_ELEMENTS(font_prefs)];
86 83
84 static const char *widget_bool_prefs[] = {
85 "/plugins/gtk/gaimrc/bool/GtkTreeView::indent_expanders",
86 };
87 static const char *widget_bool_prefs_set[] = {
88 "/plugins/gtk/gaimrc/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
87 static void 95 static void
88 gaimrc_make_changes() 96 gaimrc_make_changes()
89 { 97 {
90 int i; 98 int i;
99 char *prefbase = NULL;
100 #if GTK_CHECK_VERSION(2,4,0)
101 GtkSettings *setting = NULL;
102 #endif
91 GString *style_string = g_string_new(""); 103 GString *style_string = g_string_new("");
92 char *prefbase = NULL;
93 104
94 if (gaim_prefs_get_bool("/plugins/gtk/gaimrc/set/gtk-font-name")) { 105 if (gaim_prefs_get_bool("/plugins/gtk/gaimrc/set/gtk-font-name")) {
95 const char *pref = gaim_prefs_get_string("/plugins/gtk/gaimrc/gtk-font-name"); 106 const char *pref = gaim_prefs_get_string("/plugins/gtk/gaimrc/gtk-font-name");
96 g_string_append_printf(style_string, "gtk-font-name = \"%s\"\n", pref); 107 g_string_append_printf(style_string, "gtk-font-name = \"%s\"\n", pref);
97 } 108 }
117 if (gaim_prefs_get_bool(widget_size_prefs_set[i])) { 128 if (gaim_prefs_get_bool(widget_size_prefs_set[i])) {
118 prefbase = g_path_get_basename(widget_size_prefs[i]); 129 prefbase = g_path_get_basename(widget_size_prefs[i]);
119 g_string_append_printf(style_string, 130 g_string_append_printf(style_string,
120 "%s = %d\n", prefbase, 131 "%s = %d\n", prefbase,
121 gaim_prefs_get_int(widget_size_prefs[i])); 132 gaim_prefs_get_int(widget_size_prefs[i]));
133 g_free(prefbase);
134 }
135 }
136
137 for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
138 if (gaim_prefs_get_bool(widget_bool_prefs_set[i])) {
139 prefbase = g_path_get_basename(widget_bool_prefs[i]);
140 g_string_append_printf(style_string,
141 "%s = %d\n", prefbase,
142 gaim_prefs_get_bool(widget_bool_prefs[i]));
122 g_free(prefbase); 143 g_free(prefbase);
123 } 144 }
124 } 145 }
125 146
126 g_string_append(style_string, "}"); 147 g_string_append(style_string, "}");
139 g_free(prefbase); 160 g_free(prefbase);
140 } 161 }
141 } 162 }
142 163
143 gtk_rc_parse_string(style_string->str); 164 gtk_rc_parse_string(style_string->str);
144
145 g_string_free(style_string, TRUE); 165 g_string_free(style_string, TRUE);
166
167 #if GTK_CHECK_VERSION(2,4,0)
168 setting = gtk_settings_get_default();
169 gtk_rc_reset_styles(setting);
170 #endif
146 } 171 }
147 172
148 static void 173 static void
149 gaimrc_write(GtkWidget *widget, gpointer data) 174 gaimrc_write(GtkWidget *widget, gpointer data)
150 { 175 {
178 if (gaim_prefs_get_bool(widget_size_prefs_set[i])) { 203 if (gaim_prefs_get_bool(widget_size_prefs_set[i])) {
179 prefbase = g_path_get_basename(widget_size_prefs[i]); 204 prefbase = g_path_get_basename(widget_size_prefs[i]);
180 g_string_append_printf(style_string, 205 g_string_append_printf(style_string,
181 "%s = %d\n", prefbase, 206 "%s = %d\n", prefbase,
182 gaim_prefs_get_int(widget_size_prefs[i])); 207 gaim_prefs_get_int(widget_size_prefs[i]));
208 g_free(prefbase);
209 }
210 }
211
212 for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
213 if (gaim_prefs_get_bool(widget_bool_prefs_set[i])) {
214 prefbase = g_path_get_basename(widget_bool_prefs[i]);
215 g_string_append_printf(style_string,
216 "%s = %d\n", prefbase,
217 gaim_prefs_get_bool(widget_bool_prefs[i]));
183 g_free(prefbase); 218 g_free(prefbase);
184 } 219 }
185 } 220 }
186 221
187 g_string_append(style_string, "}"); 222 g_string_append(style_string, "}");
208 243
209 static void 244 static void
210 gaimrc_reread(GtkWidget *widget, gpointer data) 245 gaimrc_reread(GtkWidget *widget, gpointer data)
211 { 246 {
212 gtk_rc_reparse_all(); 247 gtk_rc_reparse_all();
213 /* I don't know if this is necessary but it shouldn't hurt. */ 248 /* I don't know if this is necessary but if not it shouldn't hurt. */
214 gaimrc_make_changes(); 249 gaimrc_make_changes();
215 } 250 }
216 251
217 static void 252 static void
218 gaimrc_pref_changed_cb(const char *name, GaimPrefType type, 253 gaimrc_pref_changed_cb(const char *name, GaimPrefType type,
219 gconstpointer value, gpointer data) 254 gconstpointer value, gpointer data)
220 { 255 {
221 GString *style_string = g_string_new(""); 256 gaimrc_make_changes();
222 char *prefbase = NULL;
223
224 prefbase = g_path_get_basename(name);
225
226 if (strncmp(name, "/plugins/gtk/gaimrc/color", 25) == 0) {
227 g_string_printf(style_string,
228 "style \"gaimrc_style\" { %s = \"%s\" }"
229 "widget_class \"*\" style \"gaimrc_style\"",
230 prefbase, (char *)value);
231 } else if (strncmp(name, "/plugins/gtk/gaimrc/size", 24) == 0) {
232 g_string_printf(style_string,
233 "style \"gaimrc_style\" { %s = \"%d\" }"
234 "widget_class \"*\" style \"gaimrc_style\"",
235 prefbase, GPOINTER_TO_INT(value));
236 } else if (strncmp(name, "/plugins/gtk/gaimrc/font", 24) == 0) {
237 g_string_printf(style_string, "style \"%s_style\""
238 "{ font_name = \"%s\" } widget \"%s\""
239 "style \"%s_style\"",
240 prefbase, (char *)value, prefbase, prefbase);
241 } else if (strncmp(name, "/plugins/gtk/gaimrc/set", 23) == 0) {
242 if (value)
243 gaimrc_make_changes();
244 g_string_free(style_string, TRUE);
245 g_free(prefbase);
246
247 return;
248 } else {
249 g_string_printf(style_string, "%s = \"%s\"",
250 prefbase, (char *)value);
251 }
252 gtk_rc_parse_string(style_string->str);
253
254 g_string_free(style_string, TRUE);
255 g_free(prefbase);
256 } 257 }
257 258
258 static void 259 static void
259 gaimrc_color_response(GtkDialog *color_dialog, gint response, gpointer data) 260 gaimrc_color_response(GtkDialog *color_dialog, gint response, gpointer data)
260 { 261 {
449 */ 450 */
450 gtk_widget_set_sensitive(widget, 451 gtk_widget_set_sensitive(widget,
451 gaim_prefs_get_bool("/plugins/gtk/gaimrc/set/gtk-key-theme-name")); 452 gaim_prefs_get_bool("/plugins/gtk/gaimrc/set/gtk-key-theme-name"));
452 g_signal_connect(G_OBJECT(check), "toggled", 453 g_signal_connect(G_OBJECT(check), "toggled",
453 G_CALLBACK(gaim_gtk_toggle_sensitive), widget); 454 G_CALLBACK(gaim_gtk_toggle_sensitive), widget);
455
456 for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
457 hbox = gtk_hbox_new(FALSE, GAIM_HIG_CAT_SPACE);
458 gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
459
460 check = gaim_gtk_prefs_checkbox(_(widget_bool_names[i]),
461 widget_bool_prefs_set[i], hbox);
462 gtk_size_group_add_widget(labelsg, check);
463
464 widget_bool_widgets[i] = gaim_gtk_prefs_checkbox("", widget_bool_prefs[i], hbox);
465 /*
466 gtk_size_group_add_widget(widgetsb, widget_bool_widgets[i]);
467 */
468 gtk_widget_set_sensitive(widget_bool_widgets[i],
469 gaim_prefs_get_bool(widget_bool_prefs_set[i]));
470 g_signal_connect(G_OBJECT(check), "toggled",
471 G_CALLBACK(gaim_gtk_toggle_sensitive),
472 widget_bool_widgets[i]);
473 }
454 474
455 frame = gaim_gtk_make_frame(ret, "Interface colors"); 475 frame = gaim_gtk_make_frame(ret, "Interface colors");
456 /* imhtml stuff */ 476 /* imhtml stuff */
457 for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) { 477 for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
458 hbox = gtk_hbox_new(FALSE, GAIM_HIG_CAT_SPACE); 478 hbox = gtk_hbox_new(FALSE, GAIM_HIG_CAT_SPACE);
518 font_widgets[i]); 538 font_widgets[i]);
519 g_signal_connect(G_OBJECT(font_widgets[i]), "clicked", 539 g_signal_connect(G_OBJECT(font_widgets[i]), "clicked",
520 G_CALLBACK(gaimrc_set_font), GINT_TO_POINTER(i)); 540 G_CALLBACK(gaimrc_set_font), GINT_TO_POINTER(i));
521 } 541 }
522 542
523 frame = gaim_gtk_make_frame(ret, "General"); 543 frame = gaim_gtk_make_frame(ret, _("Tools"));
524 544
525 vbox = gtk_vbox_new(FALSE, GAIM_HIG_CAT_SPACE); 545 vbox = gtk_vbox_new(FALSE, GAIM_HIG_CAT_SPACE);
526 gtk_box_pack_start(GTK_BOX(frame), vbox, FALSE, FALSE, 0); 546 gtk_box_pack_start(GTK_BOX(frame), vbox, FALSE, FALSE, 0);
527 547
528 tmp = g_strdup_printf(_("Write settings to %s%sgtkrc-2.0"), gaim_user_dir(), G_DIR_SEPARATOR_S); 548 tmp = g_strdup_printf(_("Write settings to %s%sgtkrc-2.0"), gaim_user_dir(), G_DIR_SEPARATOR_S);
609 gaim_prefs_add_none("/plugins/gtk/gaimrc/set/font"); 629 gaim_prefs_add_none("/plugins/gtk/gaimrc/set/font");
610 for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) { 630 for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
611 gaim_prefs_add_string(font_prefs[i], ""); 631 gaim_prefs_add_string(font_prefs[i], "");
612 gaim_prefs_add_bool(font_prefs_set[i], FALSE); 632 gaim_prefs_add_bool(font_prefs_set[i], FALSE);
613 } 633 }
634
635 gaim_prefs_add_none("/plugins/gtk/gaimrc/bool");
636 gaim_prefs_add_none("/plugins/gtk/gaimrc/set/bool");
637 for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
638 gaim_prefs_add_bool(widget_bool_prefs[i], TRUE);
639 gaim_prefs_add_bool(widget_bool_prefs_set[i], FALSE);
640 }
614 } 641 }
615 642
616 GAIM_INIT_PLUGIN(gaimrc, gaimrc_init, gaimrc_info) 643 GAIM_INIT_PLUGIN(gaimrc, gaimrc_init, gaimrc_info)