comparison src/gtkprefs.c @ 5551:51699de873af

[gaim-migrate @ 5952] gtkprefs.c compiles. Still, many bugs. DO NOT UPDATE! :D committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Thu, 29 May 2003 23:31:48 +0000
parents b18c2a37cc96
children 7b36d02031a2
comparison
equal deleted inserted replaced
5550:b18c2a37cc96 5551:51699de873af
59 #define PROXYUSER 3 59 #define PROXYUSER 3
60 #define PROXYPASS 4 60 #define PROXYPASS 4
61 61
62 static GtkWidget *tree_v = NULL; 62 static GtkWidget *tree_v = NULL;
63 static GtkWidget *prefs_away_menu = NULL; 63 static GtkWidget *prefs_away_menu = NULL;
64 static GtkWidget *fontseld = NULL;
65 64
66 static GtkListStore *prefs_away_store = NULL; 65 static GtkListStore *prefs_away_store = NULL;
67 66
68 static int sound_row_sel = 0; 67 static int sound_row_sel = 0;
69 static char *last_sound_dir = NULL; 68 static char *last_sound_dir = NULL;
90 static GtkTreeIter *prefs_notebook_add_page(const char*, GdkPixbuf*, 89 static GtkTreeIter *prefs_notebook_add_page(const char*, GdkPixbuf*,
91 GtkWidget*, GtkTreeIter*, 90 GtkWidget*, GtkTreeIter*,
92 GtkTreeIter*, int); 91 GtkTreeIter*, int);
93 static GtkWidget *prefs_checkbox(const char *, const char *, GtkWidget *); 92 static GtkWidget *prefs_checkbox(const char *, const char *, GtkWidget *);
94 static GtkWidget *prefs_labeled_spin_button(GtkWidget *, const gchar *, 93 static GtkWidget *prefs_labeled_spin_button(GtkWidget *, const gchar *,
95 const char *key, int, int, 94 char *key, int, int,
96 GtkSizeGroup *); 95 GtkSizeGroup *);
97 static GtkWidget *prefs_dropdown(GtkWidget *, const gchar *, GaimPrefType type, 96 static GtkWidget *prefs_dropdown(GtkWidget *, const gchar *, GaimPrefType type,
98 const char *, ...); 97 const char *, ...);
99 static GtkWidget *prefs_dropdown_from_list(GtkWidget *, const gchar *, 98 static GtkWidget *prefs_dropdown_from_list(GtkWidget *, const gchar *,
100 GaimPrefType type, 99 GaimPrefType type,
101 const char *, int, GList *); 100 const char *, GList *);
102 static GtkWidget *show_color_pref(GtkWidget *, gboolean); 101 static GtkWidget *show_color_pref(GtkWidget *, gboolean);
103 static void delete_prefs(GtkWidget *, void *); 102 static void delete_prefs(GtkWidget *, void *);
104 static void update_plugin_list(void *data); 103 static void update_plugin_list(void *data);
105 104
106 #ifndef _WIN32 105 #ifndef _WIN32
119 118
120 gaim_prefs_set_int(key, value); 119 gaim_prefs_set_int(key, value);
121 } 120 }
122 121
123 static GtkWidget * 122 static GtkWidget *
124 prefs_labeled_spin_button(GtkWidget *box, const gchar *title, const char *key, 123 prefs_labeled_spin_button(GtkWidget *box, const gchar *title, char *key,
125 int min, int max, GtkSizeGroup *sg) 124 int min, int max, GtkSizeGroup *sg)
126 { 125 {
127 GtkWidget *hbox; 126 GtkWidget *hbox;
128 GtkWidget *label; 127 GtkWidget *label;
129 GtkWidget *spin; 128 GtkWidget *spin;
160 } 159 }
161 160
162 static void 161 static void
163 dropdown_set(GObject *w, const char *key) 162 dropdown_set(GObject *w, const char *key)
164 { 163 {
165 int opt = GPOINTER_TO_INT(g_object_get_data(w, "value")); 164 const char *bool_key;
166 int clear = GPOINTER_TO_INT(g_object_get_data(w, "clear")); 165 const char *str_value;
167 166 int int_value;
168 if (option == (int*)&sort_method) { 167 GaimPrefType type;
169 /* Hack city -- Population: Sean Egan */ 168
170 char *name = (char*)opt; 169 type = GPOINTER_TO_INT(g_object_get_data(w, "type"));
171 gaim_gtk_blist_sort_method_set(name); 170
172 return; 171 if (type == GAIM_PREF_INT) {
173 } 172 int_value = GPOINTER_TO_INT(g_object_get_data(w, "value"));
174 if (clear != -1) { 173
175 *option = *option & ~clear; 174 gaim_prefs_set_int(key, int_value);
176 *option = *option | opt; 175 }
177 } else { 176 else if (type == GAIM_PREF_STRING) {
178 gaim_debug(GAIM_DEBUG_MISC, "dropdown_set", "HELLO %d\n", opt); 177 str_value = (const char *)g_object_get_data(w, "value");
179 *option = opt; 178
180 } 179 gaim_prefs_set_string(key, str_value);
181 180 }
181 else if (type == GAIM_PREF_BOOLEAN) {
182 bool_key = (const char *)g_object_get_data(w, "value");
183
184 if (!strcmp(key, bool_key))
185 return;
186
187 gaim_prefs_set_bool(key, FALSE);
188 gaim_prefs_set_bool(bool_key, TRUE);
189 }
190
191 #if 0
182 if (option == (int*)&global_proxy_info.proxytype) { 192 if (option == (int*)&global_proxy_info.proxytype) {
183 if (opt == PROXY_NONE) 193 if (opt == PROXY_NONE)
184 gtk_widget_set_sensitive(prefs_proxy_frame, FALSE); 194 gtk_widget_set_sensitive(prefs_proxy_frame, FALSE);
185 else 195 else
186 gtk_widget_set_sensitive(prefs_proxy_frame, TRUE); 196 gtk_widget_set_sensitive(prefs_proxy_frame, TRUE);
210 // } else if (option == (int*)&blist_options) { 220 // } else if (option == (int*)&blist_options) {
211 // set_blist_tab(); 221 // set_blist_tab();
212 } else if (option == (int *)&conv_placement_option) { 222 } else if (option == (int *)&conv_placement_option) {
213 gaim_conv_placement_set_active(conv_placement_option); 223 gaim_conv_placement_set_active(conv_placement_option);
214 } 224 }
225 #endif
215 } 226 }
216 227
217 static GtkWidget * 228 static GtkWidget *
218 prefs_dropdown_from_list(GtkWidget *box, const gchar *title, GaimPrefType type, 229 prefs_dropdown_from_list(GtkWidget *box, const gchar *title, GaimPrefType type,
219 const char *key, GList *menuitems) 230 const char *key, GList *menuitems)
220 { 231 {
221 GtkWidget *dropdown, *opt, *menu; 232 GtkWidget *dropdown, *opt, *menu;
222 GtkWidget *label; 233 GtkWidget *label;
223 GtkWidget *hbox; 234 GtkWidget *hbox;
224 gchar *text; 235 gchar *text;
225 const char *bool_key; 236 const char *bool_key = NULL;
226 const char *stored_str; 237 const char *stored_str = NULL;
227 int stored_int; 238 int stored_int = 0;
228 int int_value; 239 int int_value = 0;
229 const char *str_value; 240 const char *str_value = NULL;
230 int o = 0; 241 int o = 0;
231 242
232 g_return_val_if_fail(menuitems != NULL, NULL); 243 g_return_val_if_fail(menuitems != NULL, NULL);
233 244
234 hbox = gtk_hbox_new(FALSE, 5); 245 hbox = gtk_hbox_new(FALSE, 5);
251 262
252 while (menuitems != NULL && (text = (char *) menuitems->data) != NULL) { 263 while (menuitems != NULL && (text = (char *) menuitems->data) != NULL) {
253 menuitems = g_list_next(menuitems); 264 menuitems = g_list_next(menuitems);
254 g_return_val_if_fail(menuitems != NULL, NULL); 265 g_return_val_if_fail(menuitems != NULL, NULL);
255 266
256 if (type == GAIM_PREF_INT) 267 menuitems = g_list_next(menuitems);
268
269 opt = gtk_menu_item_new_with_label(text);
270
271 g_object_set_data(G_OBJECT(opt), "type", GINT_TO_POINTER(type));
272
273 if (type == GAIM_PREF_INT) {
257 int_value = GPOINTER_TO_INT(menuitems->data); 274 int_value = GPOINTER_TO_INT(menuitems->data);
258 else if (type == GAIM_PREF_STRING) 275 g_object_set_data(G_OBJECT(opt), "value",
276 GINT_TO_POINTER(int_value));
277 }
278 else if (type == GAIM_PREF_STRING) {
259 str_value = (const char *)menuitems->data; 279 str_value = (const char *)menuitems->data;
260 else if (type == GAIM_PREF_BOOL) 280
281 g_object_set_data(G_OBJECT(opt), "value", (char *)str_value);
282 }
283 else if (type == GAIM_PREF_BOOLEAN) {
261 bool_key = (const char *)menuitems->data; 284 bool_key = (const char *)menuitems->data;
262 285
263 menuitems = g_list_next(menuitems); 286 g_object_set_data(G_OBJECT(opt), "value", (char *)bool_key);
264 287 }
265 opt = gtk_menu_item_new_with_label(text); 288
266 g_object_set_data(G_OBJECT(opt), "value", GINT_TO_POINTER(value));
267 g_object_set_data(G_OBJECT(opt), "clear", GINT_TO_POINTER(clear));
268 g_signal_connect(G_OBJECT(opt), "activate", 289 g_signal_connect(G_OBJECT(opt), "activate",
269 G_CALLBACK(dropdown_set), (void *)option); 290 G_CALLBACK(dropdown_set), (char *)key);
291
270 gtk_widget_show(opt); 292 gtk_widget_show(opt);
271 gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt); 293 gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt);
272 294
273 if (clear > -1 && 295 if ((type == GAIM_PREF_INT && stored_int == int_value) ||
274 ((type == GAIM_PREF_INT && stored_int == int_value) || 296 (type == GAIM_PREF_STRING && !strcmp(stored_str, str_value)) ||
275 (type == GAIM_PREF_STRING && !strcmp(stored_str, str_value)) || 297 (type == GAIM_PREF_BOOLEAN && gaim_prefs_get_bool(bool_key))) {
276 (type == GAIM_PREF_BOOL && gaim_prefs_get_bool(bool_key)))) {
277 298
278 gtk_menu_set_active(GTK_MENU(menu), o); 299 gtk_menu_set_active(GTK_MENU(menu), o);
279 } 300 }
280
281 #if 0
282 if (option == (int*)sort_method) {
283 /* Now Entering Hacksville, Estd. May 17, 2003 */
284 gtk_menu_set_active(GTK_MENU(menu), clear);
285 } else if (((clear > -1) && ((*option & clear) == value)) || *option == value) {
286 gtk_menu_set_active(GTK_MENU(menu), o);
287 }
288 #endif
289 301
290 o++; 302 o++;
291 } 303 }
292 304
293 gtk_option_menu_set_menu(GTK_OPTION_MENU(dropdown), menu); 305 gtk_option_menu_set_menu(GTK_OPTION_MENU(dropdown), menu);
294 gtk_box_pack_start(GTK_BOX(hbox), dropdown, FALSE, FALSE, 0); 306 gtk_box_pack_start(GTK_BOX(hbox), dropdown, FALSE, FALSE, 0);
295 gtk_widget_show(dropdown); 307 gtk_widget_show(dropdown);
308
296 return label; 309 return label;
297 } 310 }
298 311
299 static GtkWidget * 312 static GtkWidget *
300 prefs_dropdown(GtkWidget *box, const gchar *title, GaimPrefType type, 313 prefs_dropdown(GtkWidget *box, const gchar *title, GaimPrefType type,
305 GtkWidget *dropdown = NULL; 318 GtkWidget *dropdown = NULL;
306 char *name; 319 char *name;
307 int int_value; 320 int int_value;
308 const char *str_value; 321 const char *str_value;
309 322
310 va_start(ap, clear); 323 va_start(ap, key);
311 while ((name = va_arg(ap, char *)) != NULL) { 324 while ((name = va_arg(ap, char *)) != NULL) {
312 325
313 menuitems = g_list_prepend(menuitems, name); 326 menuitems = g_list_prepend(menuitems, name);
314 327
315 if (type == GAIM_PREF_INT) { 328 if (type == GAIM_PREF_INT) {
316 int_value = va_arg(ap, int); 329 int_value = va_arg(ap, int);
317 menuitems = g_list_prepend(menuitems, GINT_TO_POINTER(int_value)); 330 menuitems = g_list_prepend(menuitems, GINT_TO_POINTER(int_value));
318 } 331 }
319 else { 332 else {
320 str_value = va_arg(ap, const char *); 333 str_value = va_arg(ap, const char *);
321 menuitems = g_list_prepend(menuitems, str_value); 334 menuitems = g_list_prepend(menuitems, (char *)str_value);
322 } 335 }
323 } 336 }
324 va_end(ap); 337 va_end(ap);
325 338
326 g_return_val_if_fail(menuitems != NULL, NULL); 339 g_return_val_if_fail(menuitems != NULL, NULL);
327 340
328 menuitems = g_list_reverse(menuitems); 341 menuitems = g_list_reverse(menuitems);
329 342
330 dropdown = prefs_dropdown_from_list(box, title, type, key, 343 dropdown = prefs_dropdown_from_list(box, title, type, key, menuitems);
331 clear, menuitems);
332 344
333 g_list_free(menuitems); 345 g_list_free(menuitems);
334 346
335 return dropdown; 347 return dropdown;
336 } 348 }
337 349
338 350 static void
339 static void delete_prefs(GtkWidget *asdf, void *gdsa) { 351 delete_prefs(GtkWidget *asdf, void *gdsa)
352 {
340 GList *l; 353 GList *l;
341 GaimPlugin *plug; 354 GaimPlugin *plug;
342 355
343 gaim_plugins_unregister_probe_notify_cb(update_plugin_list); 356 gaim_plugins_unregister_probe_notify_cb(update_plugin_list);
344 357
851 864
852 GtkWidget *list_page() { 865 GtkWidget *list_page() {
853 GtkWidget *ret; 866 GtkWidget *ret;
854 GtkWidget *vbox; 867 GtkWidget *vbox;
855 GtkWidget *button, *warn_checkbox, *idle_checkbox; 868 GtkWidget *button, *warn_checkbox, *idle_checkbox;
856 int r = 0;
857 gboolean fnd = FALSE; 869 gboolean fnd = FALSE;
858 GList *l= NULL; 870 GList *l= NULL;
859 GSList *sl = gaim_gtk_blist_sort_methods; 871 GSList *sl = gaim_gtk_blist_sort_methods;
860 ret = gtk_vbox_new(FALSE, 18); 872 ret = gtk_vbox_new(FALSE, 18);
861 gtk_container_set_border_width (GTK_CONTAINER (ret), 12); 873 gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
866 l = g_list_append(l, ((struct gaim_gtk_blist_sort_method*)sl->data)->name); 878 l = g_list_append(l, ((struct gaim_gtk_blist_sort_method*)sl->data)->name);
867 l = g_list_append(l, ((struct gaim_gtk_blist_sort_method*)sl->data)->name); 879 l = g_list_append(l, ((struct gaim_gtk_blist_sort_method*)sl->data)->name);
868 if (!fnd && !gaim_utf8_strcasecmp(((struct gaim_gtk_blist_sort_method*)sl->data)->name, sort_method)) 880 if (!fnd && !gaim_utf8_strcasecmp(((struct gaim_gtk_blist_sort_method*)sl->data)->name, sort_method))
869 fnd = TRUE; 881 fnd = TRUE;
870 sl = sl->next; 882 sl = sl->next;
871 if (!fnd) r++;
872 } 883 }
873 884
874 prefs_dropdown_from_list(vbox, _("Sorting:"), GAIM_PREF_STRING, 885 prefs_dropdown_from_list(vbox, _("Sorting:"), GAIM_PREF_STRING,
875 "/gaim/gtk/blist/sort_type", r, l); 886 "/gaim/gtk/blist/sort_type", l);
876 887
877 g_list_free(l); 888 g_list_free(l);
878 889
879 vbox = gaim_gtk_make_frame (ret, _("Buddy List Toolbar")); 890 vbox = gaim_gtk_make_frame (ret, _("Buddy List Toolbar"));
880 prefs_dropdown(vbox, _("Show _buttons as:"), GAIM_PREFS_INT, 891 prefs_dropdown(vbox, _("Show _buttons as:"), GAIM_PREF_INT,
881 "/gaim/gtk/blist/button_style", 892 "/gaim/gtk/blist/button_style",
882 _("Pictures"), GAIM_BUTTON_IMAGE, 893 _("Pictures"), GAIM_BUTTON_IMAGE,
883 _("Text"), GAIM_BUTTON_TEXT, 894 _("Text"), GAIM_BUTTON_TEXT,
884 _("Pictures and text"), GAIM_BUTTON_TEXT_IMAGE, 895 _("Pictures and text"), GAIM_BUTTON_TEXT_IMAGE,
885 _("None"), GAIM_BUTTON_NONE, 896 _("None"), GAIM_BUTTON_NONE,
977 } 988 }
978 989
979 GtkWidget *im_page() { 990 GtkWidget *im_page() {
980 GtkWidget *ret; 991 GtkWidget *ret;
981 GtkWidget *vbox; 992 GtkWidget *vbox;
982 GtkWidget *typingbutton, *widge; 993 GtkWidget *widge;
983 GtkSizeGroup *sg; 994 GtkSizeGroup *sg;
984 995
985 ret = gtk_vbox_new(FALSE, 18); 996 ret = gtk_vbox_new(FALSE, 18);
986 gtk_container_set_border_width (GTK_CONTAINER (ret), 12); 997 gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
987 998
1023 "/core/conversations/im/show_login", vbox); 1034 "/core/conversations/im/show_login", vbox);
1024 prefs_checkbox(_("Show a_liases in tabs/titles"), 1035 prefs_checkbox(_("Show a_liases in tabs/titles"),
1025 "/core/conversations/use_alias_for_title", vbox); 1036 "/core/conversations/use_alias_for_title", vbox);
1026 1037
1027 vbox = gaim_gtk_make_frame (ret, _("Typing Notification")); 1038 vbox = gaim_gtk_make_frame (ret, _("Typing Notification"));
1028 typingbutton = prefs_checkbox(_("Notify buddies that you are _typing to them"), 1039 prefs_checkbox(_("Notify buddies that you are _typing to them"),
1029 "/core/conversations/im/send_typing", vbox); 1040 "/core/conversations/im/send_typing", vbox);
1030 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(typingbutton), !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(typingbutton)));
1031 misc_options ^= OPT_MISC_STEALTH_TYPING;
1032 1041
1033 gtk_widget_show_all(ret); 1042 gtk_widget_show_all(ret);
1034 return ret; 1043 return ret;
1035 } 1044 }
1036 1045
1095 1104
1096 ret = gtk_vbox_new(FALSE, 18); 1105 ret = gtk_vbox_new(FALSE, 18);
1097 gtk_container_set_border_width (GTK_CONTAINER (ret), 12); 1106 gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
1098 1107
1099 vbox = gaim_gtk_make_frame (ret, _("Proxy Type")); 1108 vbox = gaim_gtk_make_frame (ret, _("Proxy Type"));
1100 prefs_dropdown(vbox, _("Proxy _type:"), "/core/proxy/type", 1109 prefs_dropdown(vbox, _("Proxy _type:"), GAIM_PREF_STRING,
1101 _("No proxy"), PROXY_NONE, 1110 "/core/proxy/type",
1102 "SOCKS 4", PROXY_SOCKS4, 1111 _("No proxy"), "none",
1103 "SOCKS 5", PROXY_SOCKS5, 1112 "SOCKS 4", "socks4",
1104 "HTTP", PROXY_HTTP, 1113 "SOCKS 5", "socks5",
1114 "HTTP", "http",
1105 NULL); 1115 NULL);
1106 1116
1107 vbox = gaim_gtk_make_frame(ret, _("Proxy Server")); 1117 vbox = gaim_gtk_make_frame(ret, _("Proxy Server"));
1108 prefs_proxy_frame = vbox; 1118 prefs_proxy_frame = vbox;
1109 1119
1217 browsers = g_list_prepend(browsers, GINT_TO_POINTER(BROWSER_MANUAL)); 1227 browsers = g_list_prepend(browsers, GINT_TO_POINTER(BROWSER_MANUAL));
1218 browsers = g_list_prepend(browsers, _("Manual")); 1228 browsers = g_list_prepend(browsers, _("Manual"));
1219 for (i = 0; i < num_possible_browsers; i++) { 1229 for (i = 0; i < num_possible_browsers; i++) {
1220 if (program_is_valid(possible_browsers[i].command)) { 1230 if (program_is_valid(possible_browsers[i].command)) {
1221 browsers = g_list_prepend(browsers, 1231 browsers = g_list_prepend(browsers,
1222 possible_browsers[i].id); 1232 possible_browsers[i].command);
1223 browsers = g_list_prepend(browsers, possible_browsers[i].name); 1233 browsers = g_list_prepend(browsers, possible_browsers[i].name);
1224 } 1234 }
1225 } 1235 }
1226 1236
1227 return browsers; 1237 return browsers;
1241 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); 1251 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
1242 vbox = gaim_gtk_make_frame (ret, _("Browser Selection")); 1252 vbox = gaim_gtk_make_frame (ret, _("Browser Selection"));
1243 1253
1244 browsers = get_available_browsers(); 1254 browsers = get_available_browsers();
1245 if (browsers != NULL) { 1255 if (browsers != NULL) {
1246 label = prefs_dropdown_from_list(vbox,_("_Browser"), 1256 label = prefs_dropdown_from_list(vbox,_("_Browser"), GAIM_PREF_STRING,
1247 "/gaim/gtk/browsers/browser", 1257 "/gaim/gtk/browsers/browser",
1248 browsers); 1258 browsers);
1249 1259
1250 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); 1260 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
1251 gtk_size_group_add_widget(sg, label); 1261 gtk_size_group_add_widget(sg, label);
1291 "/gaim/gtk/logging/log_ims", vbox); 1301 "/gaim/gtk/logging/log_ims", vbox);
1292 prefs_checkbox(_("Strip _HTML from logs"), 1302 prefs_checkbox(_("Strip _HTML from logs"),
1293 "/gaim/gtk/logging/strip_html", vbox); 1303 "/gaim/gtk/logging/strip_html", vbox);
1294 1304
1295 vbox = gaim_gtk_make_frame (ret, _("System Logs")); 1305 vbox = gaim_gtk_make_frame (ret, _("System Logs"));
1296 prefs_checkbox(_("Log when buddies _sign on/sign off"), &logging_options, OPT_LOG_BUDDY_SIGNON, 1306 prefs_checkbox(_("Log when buddies _sign on/sign off"),
1297 vbox); 1307 "/gaim/gtk/logging/log_signon_signoff", vbox);
1298 prefs_checkbox(_("Log when buddies become _idle/un-idle"), &logging_options, OPT_LOG_BUDDY_IDLE, 1308 prefs_checkbox(_("Log when buddies become _idle/un-idle"),
1299 vbox); 1309 "/gaim/gtk/logging/log_idle_state", vbox);
1300 prefs_checkbox(_("Log when buddies go away/come _back"), &logging_options, OPT_LOG_BUDDY_AWAY, vbox); 1310 prefs_checkbox(_("Log when buddies go away/come _back"),
1301 prefs_checkbox(_("Log your _own signons/idleness/awayness"), &logging_options, OPT_LOG_MY_SIGNON, 1311 "/gaim/gtk/logging/log_away_state", vbox);
1302 vbox); 1312 prefs_checkbox(_("Log your _own signons/idleness/awayness"),
1303 prefs_checkbox(_("I_ndividual log file for each buddy's signons"), &logging_options, 1313 "/gaim/gtk/logging/log_own_states", vbox);
1304 OPT_LOG_INDIVIDUAL, vbox); 1314 prefs_checkbox(_("I_ndividual log file for each buddy's signons"),
1315 "/gaim/gtk/logging/individual_logs", vbox);
1305 1316
1306 gtk_widget_show_all(ret); 1317 gtk_widget_show_all(ret);
1307 return ret; 1318 return ret;
1308 } 1319 }
1309 1320
1332 gtk_container_set_border_width (GTK_CONTAINER (ret), 12); 1343 gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
1333 1344
1334 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); 1345 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
1335 1346
1336 vbox = gaim_gtk_make_frame (ret, _("Sound Options")); 1347 vbox = gaim_gtk_make_frame (ret, _("Sound Options"));
1337 prefs_checkbox(_("_No sounds when you log in"), &sound_options, OPT_SOUND_SILENT_SIGNON, vbox); 1348 prefs_checkbox(_("_No sounds when you log in"),
1338 prefs_checkbox(_("_Sounds while away"), &sound_options, OPT_SOUND_WHEN_AWAY, vbox); 1349 "/gaim/gtk/sound/silent_signon", vbox);
1350 prefs_checkbox(_("_Sounds while away"),
1351 "/gaim/gtk/sound/while_away", vbox);
1339 1352
1340 #ifndef _WIN32 1353 #ifndef _WIN32
1341 vbox = gaim_gtk_make_frame (ret, _("Sound Method")); 1354 vbox = gaim_gtk_make_frame (ret, _("Sound Method"));
1342 dd = prefs_dropdown(vbox, _("_Method"), NULL, GAIM_PREF_BOOL, 1355 dd = prefs_dropdown(vbox, _("_Method"), GAIM_PREF_STRING,
1343 _("Console beep"), "/core/sound/use_beep", 1356 "/gaim/gtk/sound/sound_method",
1357 _("Console beep"), "beep",
1344 #ifdef USE_AO 1358 #ifdef USE_AO
1345 _("Automatic"), "/core/sound/use_sys_default", 1359 _("Automatic"), "automatic",
1346 "ESD", "/core/sound/use_esd", 1360 "ESD", "esd",
1347 "Arts", "/core/sound/use_arts", 1361 "Arts", "arts",
1348 #endif 1362 #endif
1349 #ifdef USE_NAS_AUDIO 1363 #ifdef USE_NAS_AUDIO
1350 "NAS", "/core/sound/use_nas", 1364 "NAS", "nas",
1351 #endif 1365 #endif
1352 _("Command"), "/core/sound/use_custom", 1366 _("Command"), "custom_command",
1353 NULL); 1367 NULL);
1354 gtk_size_group_add_widget(sg, dd); 1368 gtk_size_group_add_widget(sg, dd);
1355 gtk_misc_set_alignment(GTK_MISC(dd), 0, 0); 1369 gtk_misc_set_alignment(GTK_MISC(dd), 0, 0);
1356 1370
1357 hbox = gtk_hbox_new(FALSE, 5); 1371 hbox = gtk_hbox_new(FALSE, 5);
1371 cmd = gaim_sound_get_command(); 1385 cmd = gaim_sound_get_command();
1372 if(cmd) 1386 if(cmd)
1373 gtk_entry_set_text(GTK_ENTRY(sndcmd), cmd); 1387 gtk_entry_set_text(GTK_ENTRY(sndcmd), cmd);
1374 gtk_widget_set_size_request(sndcmd, 75, -1); 1388 gtk_widget_set_size_request(sndcmd, 75, -1);
1375 1389
1376 gtk_widget_set_sensitive(sndcmd, (sound_options & OPT_SOUND_CMD)); 1390 gtk_widget_set_sensitive(sndcmd,
1391 !strcmp(gaim_prefs_get_string("/gaim/gtk/sound/sound_method"),
1392 "command"));
1393
1377 gtk_box_pack_start(GTK_BOX(hbox), sndcmd, TRUE, TRUE, 5); 1394 gtk_box_pack_start(GTK_BOX(hbox), sndcmd, TRUE, TRUE, 5);
1378 g_signal_connect(G_OBJECT(sndcmd), "changed", 1395 g_signal_connect(G_OBJECT(sndcmd), "changed",
1379 G_CALLBACK(sound_cmd_yeah), NULL); 1396 G_CALLBACK(sound_cmd_yeah), NULL);
1380 #endif /* _WIN32 */ 1397 #endif /* _WIN32 */
1381 gtk_widget_show_all(ret); 1398 gtk_widget_show_all(ret);
1759 1776
1760 gtk_widget_show_all(ret); 1777 gtk_widget_show_all(ret);
1761 return ret; 1778 return ret;
1762 } 1779 }
1763 1780
1764 static void event_toggled (GtkCellRendererToggle *cell, gchar *pth, gpointer data) 1781 static void
1782 event_toggled(GtkCellRendererToggle *cell, gchar *pth, gpointer data)
1765 { 1783 {
1766 GtkTreeModel *model = (GtkTreeModel *)data; 1784 GtkTreeModel *model = (GtkTreeModel *)data;
1767 GtkTreeIter iter; 1785 GtkTreeIter iter;
1768 GtkTreePath *path = gtk_tree_path_new_from_string(pth); 1786 GtkTreePath *path = gtk_tree_path_new_from_string(pth);
1787 const char *pref;
1769 gint soundnum; 1788 gint soundnum;
1770 1789
1771 gtk_tree_model_get_iter (model, &iter, path); 1790 gtk_tree_model_get_iter (model, &iter, path);
1772 gtk_tree_model_get (model, &iter, 2, &soundnum, -1); 1791 gtk_tree_model_get (model, &iter,
1773 1792 0, &pref,
1774 sound_options ^= gaim_sound_get_event_option(soundnum); 1793 2, &soundnum,
1775 gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, sound_options & gaim_sound_get_event_option(soundnum), -1); 1794 -1);
1795
1796 gaim_prefs_set_bool(pref, gtk_cell_renderer_toggle_get_active(cell));
1797
1798 gtk_list_store_set(GTK_LIST_STORE (model), &iter,
1799 0, !gtk_cell_renderer_toggle_get_active(cell));
1776 1800
1777 gtk_tree_path_free(path); 1801 gtk_tree_path_free(path);
1778 } 1802 }
1779 1803
1780 static void test_sound(GtkWidget *button, gpointer i_am_NULL) 1804 static void
1781 { 1805 test_sound(GtkWidget *button, gpointer i_am_NULL)
1782 guint32 tmp_sound = sound_options; 1806 {
1783 if (!(sound_options & OPT_SOUND_WHEN_AWAY)) 1807 const char *pref;
1784 sound_options ^= OPT_SOUND_WHEN_AWAY; 1808 gboolean temp_value1, temp_value2;
1785 if (!(sound_options & gaim_sound_get_event_option(sound_row_sel))) 1809
1786 sound_options ^= gaim_sound_get_event_option(sound_row_sel); 1810 pref = gaim_sound_get_event_option(sound_row_sel);
1811
1812 temp_value1 = gaim_prefs_get_bool("/gaim/gtk/sound/while_away");
1813 temp_value2 = gaim_prefs_get_bool(pref);
1814
1815 if (!temp_value1) gaim_prefs_set_bool("/gaim/gtk/sound/while_away", TRUE);
1816 if (!temp_value2) gaim_prefs_set_bool(pref, TRUE);
1817
1787 gaim_sound_play_event(sound_row_sel); 1818 gaim_sound_play_event(sound_row_sel);
1788 1819
1789 sound_options = tmp_sound; 1820 if (!temp_value1) gaim_prefs_set_bool("/gaim/gtk/sound/while_away", FALSE);
1790 } 1821 if (!temp_value2) gaim_prefs_set_bool(pref, FALSE);
1791 1822 }
1792 static void reset_sound(GtkWidget *button, gpointer i_am_also_NULL) 1823
1824 static void
1825 reset_sound(GtkWidget *button, gpointer i_am_also_NULL)
1793 { 1826 {
1794 /* This just resets a sound file back to default */ 1827 /* This just resets a sound file back to default */
1795 gaim_sound_set_event_file(sound_row_sel, NULL); 1828 gaim_sound_set_event_file(sound_row_sel, NULL);
1796 1829
1797 gtk_entry_set_text(GTK_ENTRY(sound_entry), "(default)"); 1830 gtk_entry_set_text(GTK_ENTRY(sound_entry), "(default)");
1908 1941
1909 gtk_box_pack_start(GTK_BOX(ret), sw, TRUE, TRUE, 0); 1942 gtk_box_pack_start(GTK_BOX(ret), sw, TRUE, TRUE, 0);
1910 event_store = gtk_list_store_new (3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_UINT); 1943 event_store = gtk_list_store_new (3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_UINT);
1911 1944
1912 for (j=0; j < GAIM_NUM_SOUNDS; j++) { 1945 for (j=0; j < GAIM_NUM_SOUNDS; j++) {
1913 guint opt = gaim_sound_get_event_option(j); 1946 const char *pref = gaim_sound_get_event_option(j);
1914 if (opt == 0) 1947
1948 if (pref == NULL)
1915 continue; 1949 continue;
1916 1950
1917 gtk_list_store_append (event_store, &iter); 1951 gtk_list_store_append (event_store, &iter);
1918 gtk_list_store_set(event_store, &iter, 1952 gtk_list_store_set(event_store, &iter,
1919 0, sound_options & opt, 1953 0, pref,
1920 1, gettext(gaim_sound_get_event_label(j)), 1954 1, _(gaim_sound_get_event_label(j)),
1921 2, j, -1); 1955 2, j, -1);
1922 } 1956 }
1923 1957
1924 event_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(event_store)); 1958 event_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(event_store));
1925 1959
2291 2325
2292 gtk_tree_view_expand_all (GTK_TREE_VIEW(tree_v)); 2326 gtk_tree_view_expand_all (GTK_TREE_VIEW(tree_v));
2293 gtk_widget_show(prefs); 2327 gtk_widget_show(prefs);
2294 } 2328 }
2295 2329
2296 static void set_misc_option(GtkWidget *w, int option) 2330 #if 0
2297 { 2331 static void set_misc_option(GtkWidget *w, const char *key)
2298 misc_options ^= option; 2332 {
2299 2333
2300 if(option == OPT_MISC_USE_SERVER_ALIAS) { 2334 if(option == OPT_MISC_USE_SERVER_ALIAS) {
2301 /* XXX blist reset the aliases here */ 2335 /* XXX blist reset the aliases here */
2302 gaim_conversation_foreach(gaim_conversation_autoset_title); 2336 gaim_conversation_foreach(gaim_conversation_autoset_title);
2303 } 2337 }
2393 away_options ^= option; 2427 away_options ^= option;
2394 2428
2395 if (option == OPT_AWAY_QUEUE) 2429 if (option == OPT_AWAY_QUEUE)
2396 toggle_away_queue(); 2430 toggle_away_queue();
2397 } 2431 }
2432 #endif
2398 2433
2399 static void 2434 static void
2400 set_bool_pref(GtkWidget *w, const char *key) 2435 set_bool_pref(GtkWidget *w, const char *key)
2401 { 2436 {
2402 gaim_prefs_set_bool(key, 2437 gaim_prefs_set_bool(key,
2403 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))); 2438 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)));
2404 } 2439 }
2405 2440
2406 static GtkWidget * 2441 static GtkWidget *
2407 prefs_checkbox(const char *text, guint *options, int option, GtkWidget *page) 2442 prefs_checkbox(const char *text, const char *key, GtkWidget *page)
2408 { 2443 {
2409 GtkWidget *button; 2444 GtkWidget *button;
2410 2445
2411 button = gtk_check_button_new_with_mnemonic(text); 2446 button = gtk_check_button_new_with_mnemonic(text);
2412 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), 2447 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
2413 gaim_prefs_get_bool(key)); 2448 gaim_prefs_get_bool(key));
2414 2449
2415 gtk_box_pack_start(GTK_BOX(page), button, FALSE, FALSE, 0); 2450 gtk_box_pack_start(GTK_BOX(page), button, FALSE, FALSE, 0);
2416 2451
2417 g_signal_connect(G_OBJECT(button), "clicked", 2452 g_signal_connect(G_OBJECT(button), "clicked",
2418 G_CALLBACK(set_bool_pref), key); 2453 G_CALLBACK(set_bool_pref), (char *)key);
2419 2454
2420 gtk_widget_show(button); 2455 gtk_widget_show(button);
2421 2456
2422 return button; 2457 return button;
2423 } 2458 }
2462 } 2497 }
2463 } 2498 }
2464 2499
2465 void apply_color_dlg(GtkWidget *w, gpointer d) 2500 void apply_color_dlg(GtkWidget *w, gpointer d)
2466 { 2501 {
2502 char buf[8];
2503
2467 if ((int)d == 1) { 2504 if ((int)d == 1) {
2505 GdkColor fgcolor;
2506
2468 gtk_color_selection_get_current_color(GTK_COLOR_SELECTION 2507 gtk_color_selection_get_current_color(GTK_COLOR_SELECTION
2469 (GTK_COLOR_SELECTION_DIALOG(fgcseld)->colorsel), 2508 (GTK_COLOR_SELECTION_DIALOG(fgcseld)->colorsel),
2470 &fgcolor); 2509 &fgcolor);
2510
2511 g_snprintf(buf, sizeof(buf), "#%02x%02x%02x",
2512 fgcolor.red, fgcolor.green, fgcolor.blue);
2513
2514 gaim_prefs_set_string("/gaim/gtk/conversations/fgcolor", buf);
2515
2471 destroy_colorsel(NULL, (void *)1); 2516 destroy_colorsel(NULL, (void *)1);
2472 update_color(NULL, pref_fg_picture); 2517 update_color(NULL, pref_fg_picture);
2473 } else { 2518 } else {
2519 GdkColor bgcolor;
2520
2474 gtk_color_selection_get_current_color(GTK_COLOR_SELECTION 2521 gtk_color_selection_get_current_color(GTK_COLOR_SELECTION
2475 (GTK_COLOR_SELECTION_DIALOG(bgcseld)->colorsel), 2522 (GTK_COLOR_SELECTION_DIALOG(bgcseld)->colorsel),
2476 &bgcolor); 2523 &bgcolor);
2524
2525 g_snprintf(buf, sizeof(buf), "#%02x%02x%02x",
2526 bgcolor.red, bgcolor.green, bgcolor.blue);
2527
2528 gaim_prefs_set_string("/gaim/gtk/conversations/bgcolor", buf);
2529
2477 destroy_colorsel(NULL, (void *)0); 2530 destroy_colorsel(NULL, (void *)0);
2478 update_color(NULL, pref_bg_picture); 2531 update_color(NULL, pref_bg_picture);
2479 } 2532 }
2480 gaim_conversation_foreach(gaim_gtkconv_update_font_colors); 2533 gaim_conversation_foreach(gaim_gtkconv_update_font_colors);
2481 } 2534 }
2532 /* more stuff stolen from X-Chat */ 2585 /* more stuff stolen from X-Chat */
2533 GtkWidget *swid; 2586 GtkWidget *swid;
2534 GdkColor c; 2587 GdkColor c;
2535 GtkStyle *style; 2588 GtkStyle *style;
2536 c.pixel = 0; 2589 c.pixel = 0;
2590
2537 if (fgc) { 2591 if (fgc) {
2538 if (gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_fgcolor")) { 2592 if (gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_fgcolor")) {
2593 GdkColor fgcolor;
2594
2595 gdk_color_parse(
2596 gaim_prefs_get_string("/gaim/gtk/conversations/fgcolor"),
2597 &fgcolor);
2598
2539 c.red = fgcolor.red; 2599 c.red = fgcolor.red;
2540 c.blue = fgcolor.blue; 2600 c.blue = fgcolor.blue;
2541 c.green = fgcolor.green; 2601 c.green = fgcolor.green;
2542 } else { 2602 } else {
2543 c.red = 0; 2603 c.red = 0;
2544 c.blue = 0; 2604 c.blue = 0;
2545 c.green = 0; 2605 c.green = 0;
2546 } 2606 }
2547 } else { 2607 } else {
2548 if (gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_bgcolor")) { 2608 if (gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_bgcolor")) {
2609 GdkColor bgcolor;
2610
2611 gdk_color_parse(
2612 gaim_prefs_get_string("/gaim/gtk/conversations/bgcolor"),
2613 &bgcolor);
2614
2549 c.red = bgcolor.red; 2615 c.red = bgcolor.red;
2550 c.blue = bgcolor.blue; 2616 c.blue = bgcolor.blue;
2551 c.green = bgcolor.green; 2617 c.green = bgcolor.green;
2552 } else { 2618 } else {
2553 c.red = 0xffff; 2619 c.red = 0xffff;
2568 return swid; 2634 return swid;
2569 } 2635 }
2570 2636
2571 void apply_font_dlg(GtkWidget *w, GtkWidget *f) 2637 void apply_font_dlg(GtkWidget *w, GtkWidget *f)
2572 { 2638 {
2573 int i = 0; 2639 char *fontname, *c;
2574 char *fontname; 2640
2575 2641 fontname =
2576 fontname = g_strdup(gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(f))); 2642 gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(f));
2643
2577 destroy_fontsel(0, 0); 2644 destroy_fontsel(0, 0);
2578 2645
2579 while(fontname[i] && !isdigit(fontname[i]) && i < sizeof(fontface)) { 2646 for (c = fontname; *c != '\0'; c++) {
2580 fontface[i] = fontname[i]; 2647 if (isdigit(*c)) {
2581 i++; 2648 *(--c) = '\0';
2582 } 2649 break;
2583 2650 }
2584 fontface[i] = 0; 2651 }
2652
2653 gaim_prefs_set_string("/gaim/gtk/conversations/font_face", fontname);
2654
2585 g_free(fontname); 2655 g_free(fontname);
2586 2656
2587 gaim_conversation_foreach(gaim_gtkconv_update_font_face); 2657 gaim_conversation_foreach(gaim_gtkconv_update_font_face);
2588 } 2658 }
2589 2659
2686 gaim_prefs_add_none("/gaim/gtk/idle"); 2756 gaim_prefs_add_none("/gaim/gtk/idle");
2687 gaim_prefs_add_string("/gaim/gtk/idle/reporting_method", "system"); 2757 gaim_prefs_add_string("/gaim/gtk/idle/reporting_method", "system");
2688 2758
2689 /* Logging */ 2759 /* Logging */
2690 gaim_prefs_add_none("/gaim/gtk/logging"); 2760 gaim_prefs_add_none("/gaim/gtk/logging");
2691 gaim_prefs_add_string("/gaim/gtk/logging/log_ims", TRUE); 2761 gaim_prefs_add_bool("/gaim/gtk/logging/log_ims", TRUE);
2692 gaim_prefs_add_string("/gaim/gtk/logging/log_chats", TRUE); 2762 gaim_prefs_add_bool("/gaim/gtk/logging/log_chats", TRUE);
2693 gaim_prefs_add_string("/gaim/gtk/logging/strip_html", TRUE); 2763 gaim_prefs_add_bool("/gaim/gtk/logging/strip_html", TRUE);
2764 gaim_prefs_add_bool("/gaim/gtk/logging/log_signon_signoff", TRUE);
2765 gaim_prefs_add_bool("/gaim/gtk/logging/log_idle_state", TRUE);
2766 gaim_prefs_add_bool("/gaim/gtk/logging/log_away_state", TRUE);
2767 gaim_prefs_add_bool("/gaim/gtk/logging/log_own_states", TRUE);
2768 gaim_prefs_add_bool("/gaim/gtk/logging/individual_logs", FALSE);
2694 2769
2695 /* Smiley Themes */ 2770 /* Smiley Themes */
2696 gaim_prefs_add_none("/gaim/gtk/smileys"); 2771 gaim_prefs_add_none("/gaim/gtk/smileys");
2697 gaim_prefs_add_string("/gaim/gtk/smileys/theme", ""); 2772 gaim_prefs_add_string("/gaim/gtk/smileys/theme", "");
2698 2773
2706 gaim_prefs_add_bool("/gaim/gtk/sound/join_chat", FALSE); 2781 gaim_prefs_add_bool("/gaim/gtk/sound/join_chat", FALSE);
2707 gaim_prefs_add_bool("/gaim/gtk/sound/left_chat", FALSE); 2782 gaim_prefs_add_bool("/gaim/gtk/sound/left_chat", FALSE);
2708 gaim_prefs_add_bool("/gaim/gtk/sound/send_chat_msg", FALSE); 2783 gaim_prefs_add_bool("/gaim/gtk/sound/send_chat_msg", FALSE);
2709 gaim_prefs_add_bool("/gaim/gtk/sound/chat_msg_recv", FALSE); 2784 gaim_prefs_add_bool("/gaim/gtk/sound/chat_msg_recv", FALSE);
2710 gaim_prefs_add_bool("/gaim/gtk/sound/nick_said", FALSE); 2785 gaim_prefs_add_bool("/gaim/gtk/sound/nick_said", FALSE);
2711 } 2786 gaim_prefs_add_bool("/gaim/gtk/sound/silent_signon", TRUE);
2712 2787 gaim_prefs_add_bool("/gaim/gtk/sound/while_away", TRUE);
2788 gaim_prefs_add_string("/gaim/gtk/sound/command", "");
2789 gaim_prefs_add_string("/gaim/gtk/sound/sound_method", "automatic");
2790 }
2791