src/prefs.c

Tue, 27 May 2003 03:38:52 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Tue, 27 May 2003 03:38:52 +0000
changeset 5537
812794b97b08
parent 5534
53d28743cc68
child 5539
a13dd0ba205a
permissions
-rw-r--r--

[gaim-migrate @ 5937]
This is:
-AIM over OSCAR use Christian's new, kick ass
gaim_notify_email stuff for new mail notification. This
should be good, but it's kind of a pain to test. Let me
know if you have any problems

-Minor fix to the translation README

-2 minor changes to the doxygen of 2 major header files
(this means you'll have to recompile a lot of files :-) )

-If your global proxy setting is "No Proxy" and your global
proxy host is empty, but $http_proxy is set to something,
gaim used to switch your global proxy setting to "HTTP." It
no longer does this. This makes more sense to me. If you
disagree, please let me know--this is open to debate, and
what not. Also, the use of environmental proxy settings
will be changed a bit in the next day or two

1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1 /*
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2 * gaim
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3 *
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
4 * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
5 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
9 * (at your option) any later version.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
10 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
14 * GNU General Public License for more details.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
15 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
19 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
20 */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
21
349
6f7d28b0f98d [gaim-migrate @ 359]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 340
diff changeset
22 #ifdef HAVE_CONFIG_H
2090
bab8b7e309db [gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2074
diff changeset
23 #include <config.h>
349
6f7d28b0f98d [gaim-migrate @ 359]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 340
diff changeset
24 #endif
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
25
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
26 #include <string.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
27 #include <stdio.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
28 #include <stdlib.h>
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
29 #include <sys/stat.h>
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
30 #include <sys/types.h>
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
31 #include <glib.h>
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
32 #include "prefs.h"
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
33 #include "debug.h"
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
34 #include "util.h"
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
35
4026
4ec5559caae9 [gaim-migrate @ 4230]
Herman Bloggs <herman@bluedigits.com>
parents: 4010
diff changeset
36 #ifdef _WIN32
4ec5559caae9 [gaim-migrate @ 4230]
Herman Bloggs <herman@bluedigits.com>
parents: 4010
diff changeset
37 #include "win32dep.h"
4ec5559caae9 [gaim-migrate @ 4230]
Herman Bloggs <herman@bluedigits.com>
parents: 4010
diff changeset
38 #endif
4ec5559caae9 [gaim-migrate @ 4230]
Herman Bloggs <herman@bluedigits.com>
parents: 4010
diff changeset
39
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
40 struct pref_cb {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
41 GaimPrefCallback func;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
42 gpointer data;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
43 guint id;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
44 };
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
45
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
46 struct gaim_pref {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
47 GaimPrefType type;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
48 char *name;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
49 union {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
50 gpointer generic;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
51 gboolean boolean;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
52 int integer;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
53 char *string;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
54 } value;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
55 GSList *callbacks;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
56 struct gaim_pref *parent;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
57 struct gaim_pref *sibling;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
58 struct gaim_pref *first_child;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
59 };
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
60
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
61 static GHashTable *prefs_hash = NULL;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
62
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
63 static struct gaim_pref prefs = { GAIM_PREF_NONE, NULL, {NULL}, NULL,
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
64 NULL, NULL, NULL };
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
65
5534
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
66 static guint prefs_save_timer = 0;
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
67 static gboolean prefs_is_loaded = FALSE;
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
68
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
69
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
70 static gboolean prefs_save_callback(gpointer who_cares) {
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
71 gaim_prefs_sync();
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
72 prefs_save_timer = 0;
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
73 return FALSE;
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
74 }
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
75
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
76 static void schedule_prefs_save() {
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
77 if(!prefs_save_timer)
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
78 prefs_save_timer = g_timeout_add(5000, prefs_save_callback, NULL);
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
79 }
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
80
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
81 static void prefs_save_cb(const char *name, GaimPrefType type, gpointer val,
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
82 gpointer user_data) {
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
83
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
84 if(!prefs_is_loaded)
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
85 return;
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
86
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
87 gaim_debug(GAIM_DEBUG_MISC, "prefs", "%s changed, scheduling save.\n", name);
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
88
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
89 schedule_prefs_save();
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
90 }
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
91
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
92 void gaim_prefs_init() {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
93 prefs_hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
94
5534
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
95 gaim_prefs_connect_callback("/", prefs_save_cb, NULL);
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
96
5529
4a9fd5f1a400 [gaim-migrate @ 5929]
Christian Hammond <chipx86@chipx86.com>
parents: 5458
diff changeset
97 gaim_prefs_add_none("/core");
4a9fd5f1a400 [gaim-migrate @ 5929]
Christian Hammond <chipx86@chipx86.com>
parents: 5458
diff changeset
98
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
99 /* XXX: this is where you would want to put prefs declarations */
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
100 }
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
101
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
102 static char *pref_full_name(struct gaim_pref *pref) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
103 GString *name;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
104 struct gaim_pref *parent;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
105 if(!pref)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
106 return NULL;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
107
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
108 if(pref == &prefs)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
109 return g_strdup("/");
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
110
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
111 name = g_string_new(pref->name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
112 parent = pref->parent;
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
113
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
114 for(parent = pref->parent; parent && parent->name; parent = parent->parent) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
115 name = g_string_prepend_c(name, '/');
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
116 name = g_string_prepend(name, parent->name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
117 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
118 g_string_free(name, FALSE);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
119 return name->str;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
120 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
121
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
122 static struct gaim_pref *find_pref(const char *name)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
123 {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
124 if(!name || name[0] != '/') {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
125 return NULL;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
126 } else if(name[1] == '\0') {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
127 return &prefs;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
128 } else {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
129 return g_hash_table_lookup(prefs_hash, name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
130 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
131 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
132
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
133 static struct gaim_pref *find_pref_parent(const char *name)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
134 {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
135 char *parent_name = g_path_get_dirname(name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
136 struct gaim_pref *ret = &prefs;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
137
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
138 if(strcmp(parent_name, "/")) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
139 ret = find_pref(parent_name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
140 }
1026
fa6230b217bc [gaim-migrate @ 1036]
bryner
parents: 1006
diff changeset
141
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
142 g_free(parent_name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
143 return ret;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
144 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
145
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
146 static void free_pref_value(struct gaim_pref *pref) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
147 switch(pref->type) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
148 case GAIM_PREF_BOOLEAN:
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
149 pref->value.boolean = FALSE;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
150 case GAIM_PREF_INT:
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
151 pref->value.integer = 0;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
152 break;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
153 case GAIM_PREF_STRING:
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
154 g_free(pref->value.string);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
155 pref->value.string = NULL;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
156 break;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
157 case GAIM_PREF_NONE:
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
158 break;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
159 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
160 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
161
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
162 static struct gaim_pref *add_pref(GaimPrefType type, const char *name) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
163 struct gaim_pref *parent;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
164 struct gaim_pref *me;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
165 struct gaim_pref *sibling;
5458
b360ef43126d [gaim-migrate @ 5846]
Christian Hammond <chipx86@chipx86.com>
parents: 5451
diff changeset
166 char *my_name;
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
167
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
168 parent = find_pref_parent(name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
169
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
170 if(!parent)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
171 return NULL;
1525
b4ece1a718cd [gaim-migrate @ 1535]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1455
diff changeset
172
5458
b360ef43126d [gaim-migrate @ 5846]
Christian Hammond <chipx86@chipx86.com>
parents: 5451
diff changeset
173 my_name = g_path_get_basename(name);
b360ef43126d [gaim-migrate @ 5846]
Christian Hammond <chipx86@chipx86.com>
parents: 5451
diff changeset
174
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
175 for(sibling = parent->first_child; sibling; sibling = sibling->sibling) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
176 if(!strcmp(sibling->name, my_name)) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
177 g_free(my_name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
178 return NULL;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
179 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
180 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
181
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
182 me = g_new0(struct gaim_pref, 1);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
183 me->type = type;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
184 me->name = my_name;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
185
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
186 me->parent = parent;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
187 if(parent->first_child) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
188 /* blatant abuse of a for loop */
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
189 for(sibling = parent->first_child; sibling->sibling;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
190 sibling = sibling->sibling);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
191 sibling->sibling = me;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
192 } else {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
193 parent->first_child = me;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
194 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
195
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
196 g_hash_table_insert(prefs_hash, g_strdup(name), (gpointer)me);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
197
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
198 return me;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
199 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
200
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
201 void gaim_prefs_add_none(const char *name) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
202 add_pref(GAIM_PREF_NONE, name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
203 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
204
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
205 void gaim_prefs_add_bool(const char *name, gboolean value) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
206 struct gaim_pref *pref = add_pref(GAIM_PREF_BOOLEAN, name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
207
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
208 if(!pref)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
209 return;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
210
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
211 pref->value.boolean = value;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
212 }
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3567
diff changeset
213
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
214 void gaim_prefs_add_int(const char *name, int value) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
215 struct gaim_pref *pref = add_pref(GAIM_PREF_INT, name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
216
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
217 if(!pref)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
218 return;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
219
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
220 pref->value.integer = value;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
221 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
222
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
223 void gaim_prefs_add_string(const char *name, const char *value) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
224 struct gaim_pref *pref = add_pref(GAIM_PREF_STRING, name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
225
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
226 if(!pref)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
227 return;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
228
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
229 pref->value.string = g_strdup(value);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
230 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
231
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
232 void remove_pref(struct gaim_pref *pref) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
233 char *name;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
234
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
235 if(!pref || pref == &prefs)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
236 return;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
237
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
238 if(pref->parent->first_child == pref) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
239 pref->parent->first_child = pref->sibling;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
240 } else {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
241 struct gaim_pref *sib = pref->parent->first_child;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
242 while(sib->sibling != pref)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
243 sib = sib->sibling;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
244 sib->sibling = pref->sibling;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
245 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
246
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
247 name = pref_full_name(pref);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
248
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
249 g_hash_table_remove(prefs_hash, name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
250 g_free(name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
251
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
252 free_pref_value(pref);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
253
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
254 g_slist_free(pref->callbacks);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
255 g_free(pref->name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
256 g_free(pref);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
257 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
258
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
259 void gaim_prefs_remove(const char *name) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
260 struct gaim_pref *pref = find_pref(name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
261 struct gaim_pref *child, *child2;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
262
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
263 if(!pref)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
264 return;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
265 child = pref->first_child;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
266 while(child) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
267 child2 = child;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
268 child = child->sibling;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
269 remove_pref(child2);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
270 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
271
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
272 remove_pref(pref);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
273 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
274
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
275 void gaim_prefs_destroy() {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
276 gaim_prefs_remove("/");
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
277 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
278
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
279 static void do_callbacks(const char* name, struct gaim_pref *pref) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
280 GSList *cbs;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
281 struct gaim_pref *cb_pref;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
282 for(cb_pref = pref; cb_pref; cb_pref = cb_pref->parent) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
283 for(cbs = cb_pref->callbacks; cbs; cbs = cbs->next) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
284 struct pref_cb *cb = cbs->data;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
285 cb->func(name, pref->type, pref->value.generic, cb->data);
4215
f29ca3f27972 [gaim-migrate @ 4454]
Ari Pollak <ari@debian.org>
parents: 4201
diff changeset
286 }
f29ca3f27972 [gaim-migrate @ 4454]
Ari Pollak <ari@debian.org>
parents: 4201
diff changeset
287 }
1525
b4ece1a718cd [gaim-migrate @ 1535]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1455
diff changeset
288 }
b4ece1a718cd [gaim-migrate @ 1535]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1455
diff changeset
289
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
290 void gaim_prefs_set_generic(const char *name, gpointer value) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
291 struct gaim_pref *pref = find_pref(name);
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
292
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
293 g_return_if_fail(pref != NULL);
3500
f7b59ccfc9f2 [gaim-migrate @ 3563]
Nathan Walp <nwalp@pidgin.im>
parents: 3485
diff changeset
294
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
295 pref->value.generic = value;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
296 do_callbacks(name, pref);
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
297 }
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
298
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
299 void gaim_prefs_set_bool(const char *name, gboolean value) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
300 struct gaim_pref *pref = find_pref(name);
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4241
diff changeset
301
5533
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
302 if(pref) {
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
303 g_return_if_fail(pref->type == GAIM_PREF_BOOLEAN);
4325
e0d570fec0fb [gaim-migrate @ 4580]
Rob Flynn <gaim@robflynn.com>
parents: 4324
diff changeset
304
5533
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
305 if(pref->value.boolean != value) {
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
306 pref->value.boolean = value;
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
307 do_callbacks(name, pref);
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
308 }
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
309 } else {
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
310 gaim_prefs_add_bool(name, value);
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4241
diff changeset
311 }
4324
8d7455153eef [gaim-migrate @ 4579]
Sean Egan <seanegan@pidgin.im>
parents: 4323
diff changeset
312 }
4325
e0d570fec0fb [gaim-migrate @ 4580]
Rob Flynn <gaim@robflynn.com>
parents: 4324
diff changeset
313
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
314 void gaim_prefs_set_int(const char *name, int value) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
315 struct gaim_pref *pref = find_pref(name);
4325
e0d570fec0fb [gaim-migrate @ 4580]
Rob Flynn <gaim@robflynn.com>
parents: 4324
diff changeset
316
5533
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
317 if(pref) {
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
318 g_return_if_fail(pref->type == GAIM_PREF_INT);
4325
e0d570fec0fb [gaim-migrate @ 4580]
Rob Flynn <gaim@robflynn.com>
parents: 4324
diff changeset
319
5533
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
320 if(pref->value.integer != value) {
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
321 pref->value.integer = value;
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
322 do_callbacks(name, pref);
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
323 }
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
324 } else {
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
325 gaim_prefs_add_int(name, value);
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
326 }
4326
f830b3ca7efb [gaim-migrate @ 4582]
Rob Flynn <gaim@robflynn.com>
parents: 4325
diff changeset
327 }
f830b3ca7efb [gaim-migrate @ 4582]
Rob Flynn <gaim@robflynn.com>
parents: 4325
diff changeset
328
5451
3b9fea899f61 [gaim-migrate @ 5839]
Nathan Walp <nwalp@pidgin.im>
parents: 5444
diff changeset
329 void gaim_prefs_set_string(const char *name, const char *value) {
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
330 struct gaim_pref *pref = find_pref(name);
4325
e0d570fec0fb [gaim-migrate @ 4580]
Rob Flynn <gaim@robflynn.com>
parents: 4324
diff changeset
331
5533
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
332 if(pref) {
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
333 g_return_if_fail(pref->type == GAIM_PREF_STRING);
4325
e0d570fec0fb [gaim-migrate @ 4580]
Rob Flynn <gaim@robflynn.com>
parents: 4324
diff changeset
334
5533
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
335 if(strcmp(pref->value.string, value)) {
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
336 g_free(pref->value.string);
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
337 pref->value.string = g_strdup(value);
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
338 do_callbacks(name, pref);
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
339 }
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
340 } else {
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
341 gaim_prefs_add_string(name, value);
4325
e0d570fec0fb [gaim-migrate @ 4580]
Rob Flynn <gaim@robflynn.com>
parents: 4324
diff changeset
342 }
e0d570fec0fb [gaim-migrate @ 4580]
Rob Flynn <gaim@robflynn.com>
parents: 4324
diff changeset
343 }
e0d570fec0fb [gaim-migrate @ 4580]
Rob Flynn <gaim@robflynn.com>
parents: 4324
diff changeset
344
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
345 gpointer gaim_prefs_get_generic(const char *name) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
346 struct gaim_pref *pref = find_pref(name);
4325
e0d570fec0fb [gaim-migrate @ 4580]
Rob Flynn <gaim@robflynn.com>
parents: 4324
diff changeset
347
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
348 g_return_val_if_fail(pref != NULL, NULL);
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4241
diff changeset
349
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
350 return pref->value.generic;
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4241
diff changeset
351 }
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4241
diff changeset
352
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
353 gboolean gaim_prefs_get_bool(const char *name) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
354 struct gaim_pref *pref = find_pref(name);
3427
75387df65a9b [gaim-migrate @ 3453]
Sean Egan <seanegan@pidgin.im>
parents: 3404
diff changeset
355
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
356 g_return_val_if_fail(pref != NULL, FALSE);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
357 g_return_val_if_fail(pref->type == GAIM_PREF_BOOLEAN, FALSE);
3472
3939deb42c1e [gaim-migrate @ 3523]
Robert McQueen <robot101@debian.org>
parents: 3466
diff changeset
358
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
359 return pref->value.boolean;
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
360 }
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
361
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
362 int gaim_prefs_get_int(const char *name) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
363 struct gaim_pref *pref = find_pref(name);
3500
f7b59ccfc9f2 [gaim-migrate @ 3563]
Nathan Walp <nwalp@pidgin.im>
parents: 3485
diff changeset
364
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
365 g_return_val_if_fail(pref != NULL, 0);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
366 g_return_val_if_fail(pref->type == GAIM_PREF_INT, 0);
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
367
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
368 return pref->value.integer;
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
369 }
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
370
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
371 char *gaim_prefs_get_string(const char *name) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
372 struct gaim_pref *pref = find_pref(name);
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
373
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
374 g_return_val_if_fail(pref != NULL, NULL);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
375 g_return_val_if_fail(pref->type == GAIM_PREF_STRING, NULL);
4469
ef60c820b884 [gaim-migrate @ 4744]
Christian Hammond <chipx86@chipx86.com>
parents: 4461
diff changeset
376
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
377 return pref->value.string;
4469
ef60c820b884 [gaim-migrate @ 4744]
Christian Hammond <chipx86@chipx86.com>
parents: 4461
diff changeset
378 }
ef60c820b884 [gaim-migrate @ 4744]
Christian Hammond <chipx86@chipx86.com>
parents: 4461
diff changeset
379
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
380 guint gaim_prefs_connect_callback(const char *name, GaimPrefCallback func, gpointer data)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
381 {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
382 struct gaim_pref *pref = find_pref(name);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
383 struct pref_cb *cb;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
384 static guint cb_id = 0;
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
385
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
386 if(!pref)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
387 return 0;
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
388
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
389 cb = g_new0(struct pref_cb, 1);
1881
bcd5d457cdbb [gaim-migrate @ 1891]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1840
diff changeset
390
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
391 cb->func = func;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
392 cb->data = data;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
393 cb->id = ++cb_id;
4991
82cd0b96cc0d [gaim-migrate @ 5326]
Rob Flynn <gaim@robflynn.com>
parents: 4985
diff changeset
394
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
395 pref->callbacks = g_slist_append(pref->callbacks, cb);
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
396
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
397 return cb->id;
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
398 }
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
399
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
400 gboolean disco_callback_helper(struct gaim_pref *pref, guint callback_id) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
401 GSList *cbs;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
402 struct gaim_pref *child;
2254
5f242f2c14a8 [gaim-migrate @ 2264]
Rob Flynn <gaim@robflynn.com>
parents: 2199
diff changeset
403
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
404 if(!pref)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
405 return FALSE;
1881
bcd5d457cdbb [gaim-migrate @ 1891]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1840
diff changeset
406
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
407 for(cbs = pref->callbacks; cbs; cbs = cbs->next) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
408 struct pref_cb *cb = cbs->data;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
409 if(cb->id == callback_id) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
410 pref->callbacks = g_slist_remove(pref->callbacks, cb);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
411 g_free(cb);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
412 return TRUE;
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4421
diff changeset
413 }
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4421
diff changeset
414 }
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4421
diff changeset
415
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
416 for(child = pref->first_child; child; child = child->sibling) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
417 if(disco_callback_helper(child, callback_id))
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
418 return TRUE;
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4421
diff changeset
419 }
4451
5a484f11e395 [gaim-migrate @ 4726]
Herman Bloggs <herman@bluedigits.com>
parents: 4449
diff changeset
420
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
421 return FALSE;
1757
8c57846a4691 [gaim-migrate @ 1767]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1755
diff changeset
422 }
8c57846a4691 [gaim-migrate @ 1767]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1755
diff changeset
423
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
424 void gaim_prefs_disconnect_callback(guint callback_id) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
425 disco_callback_helper(&prefs, callback_id);
2262
f51b628feb41 [gaim-migrate @ 2272]
Artem Litvinovich
parents: 2254
diff changeset
426 }
f51b628feb41 [gaim-migrate @ 2272]
Artem Litvinovich
parents: 2254
diff changeset
427
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
428 static void gaim_prefs_write(FILE *f, struct gaim_pref *pref, int depth) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
429 struct gaim_pref *tmp;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
430 char *esc;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
431 int i;
3500
f7b59ccfc9f2 [gaim-migrate @ 3563]
Nathan Walp <nwalp@pidgin.im>
parents: 3485
diff changeset
432
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
433 if(!pref) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
434 pref = &prefs;
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3526
diff changeset
435
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
436 fprintf(f, "<?xml version='1.0' encoding='UTF-8' ?>\n");
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
437 fprintf(f, "<pref name='/'");
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
438 } else {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
439 for(i=0; i<depth; i++)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
440 fprintf(f, "\t");
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
441 esc = g_markup_escape_text(pref->name, -1);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
442 fprintf(f, "<pref name='%s'", esc);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
443 g_free(esc);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
444 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
445
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
446 switch(pref->type) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
447 case GAIM_PREF_NONE:
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
448 break;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
449 case GAIM_PREF_BOOLEAN:
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
450 fprintf(f, " type='bool' value='%d'", pref->value.boolean);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
451 break;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
452 case GAIM_PREF_INT:
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
453 fprintf(f, " type='int' value='%d'", pref->value.integer);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
454 break;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
455 case GAIM_PREF_STRING:
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
456 esc = g_markup_escape_text(pref->value.string, -1);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
457 fprintf(f, " type='string' value='%s'", esc);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
458 g_free(esc);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
459 break;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
460 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
461
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
462 if(pref->first_child) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
463 fprintf(f, ">\n");
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
464
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
465 for(tmp = pref->first_child; tmp; tmp = tmp->sibling)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
466 gaim_prefs_write(f, tmp, depth+1);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
467 for(i=0; i<depth; i++)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
468 fprintf(f, "\t");
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
469 fprintf(f, "</pref>\n");
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
470 } else {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
471 fprintf(f, " />\n");
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
472 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
473 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5105
diff changeset
474
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
475 void gaim_prefs_sync() {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
476 FILE *file;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
477 const char *user_dir = gaim_user_dir();
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
478 char *filename;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
479 char *filename_real;
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3526
diff changeset
480
5534
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
481 if(!prefs_is_loaded) {
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
482 gaim_debug(GAIM_DEBUG_WARNING, "prefs", "prefs saved before loading! scheduling save.\n");
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
483 schedule_prefs_save(); /* schedule a save for after we read in */
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
484 return;
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
485 }
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
486
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
487 if(!user_dir)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
488 return;
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3526
diff changeset
489
5534
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
490 gaim_debug(GAIM_DEBUG_INFO, "prefs", "writing prefs out to disk.\n");
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
491
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
492 file = fopen(user_dir, "r");
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
493 if(!file)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
494 mkdir(user_dir, S_IRUSR | S_IWUSR | S_IXUSR);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
495 else
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
496 fclose(file);
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3526
diff changeset
497
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
498 filename = g_build_filename(user_dir, "prefs.xml.save", NULL);
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3526
diff changeset
499
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
500 if((file = fopen(filename, "w"))) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
501 gaim_prefs_write(file, NULL, 0);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
502 fclose(file);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
503 chmod(filename, S_IRUSR | S_IWUSR);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
504 } else {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
505 gaim_debug(GAIM_DEBUG_ERROR, "prefs", "Unable to write %s\n",
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
506 filename);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
507 }
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3526
diff changeset
508
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
509 filename_real = g_build_filename(user_dir, "prefs.xml", NULL);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
510 if(rename(filename, filename_real) < 0)
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
511 gaim_debug(GAIM_DEBUG_ERROR, "prefs", "Error renaming %s to %s\n",
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
512 filename, filename_real);
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3526
diff changeset
513
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
514 g_free(filename);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
515 g_free(filename_real);
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3526
diff changeset
516 }
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3526
diff changeset
517
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
518 static GList *prefs_stack = NULL;
873
d40eff5fc359 [gaim-migrate @ 883]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 864
diff changeset
519
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
520 static void prefs_start_element_handler (GMarkupParseContext *context,
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
521 const gchar *element_name,
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
522 const gchar **attribute_names,
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
523 const gchar **attribute_values,
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
524 gpointer user_data,
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
525 GError **error) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
526 GaimPrefType pref_type = GAIM_PREF_NONE;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
527 int i;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
528 const char *pref_name = NULL, *pref_value = NULL;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
529 GString *pref_name_full;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
530 GList *tmp;
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
531
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
532 if(strcmp(element_name, "pref"))
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
533 return;
3500
f7b59ccfc9f2 [gaim-migrate @ 3563]
Nathan Walp <nwalp@pidgin.im>
parents: 3485
diff changeset
534
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
535 for(i = 0; attribute_names[i]; i++) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
536 if(!strcmp(attribute_names[i], "name")) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
537 pref_name = attribute_values[i];
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
538 } else if(!strcmp(attribute_names[i], "type")) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
539 if(!strcmp(attribute_values[i], "bool"))
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
540 pref_type = GAIM_PREF_BOOLEAN;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
541 else if(!strcmp(attribute_values[i], "int"))
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
542 pref_type = GAIM_PREF_INT;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
543 else if(!strcmp(attribute_values[i], "string"))
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
544 pref_type = GAIM_PREF_STRING;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
545 else
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
546 return;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
547 } else if(!strcmp(attribute_names[i], "value")) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
548 pref_value = attribute_values[i];
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
549 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
550 }
873
d40eff5fc359 [gaim-migrate @ 883]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 864
diff changeset
551
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
552 if(!pref_name || !strcmp(pref_name, "/"))
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
553 return;
652
dd4ccd3e5c72 [gaim-migrate @ 662]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 619
diff changeset
554
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
555 pref_name_full = g_string_new(pref_name);
652
dd4ccd3e5c72 [gaim-migrate @ 662]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 619
diff changeset
556
5529
4a9fd5f1a400 [gaim-migrate @ 5929]
Christian Hammond <chipx86@chipx86.com>
parents: 5458
diff changeset
557 for(tmp = prefs_stack; tmp; tmp = tmp->next) {
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
558 pref_name_full = g_string_prepend_c(pref_name_full, '/');
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
559 pref_name_full = g_string_prepend(pref_name_full, tmp->data);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
560 }
1170
d20d6785040c [gaim-migrate @ 1180]
Rob Flynn <gaim@robflynn.com>
parents: 1147
diff changeset
561
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
562 pref_name_full = g_string_prepend_c(pref_name_full, '/');
1253
f02697a6aada [gaim-migrate @ 1263]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1250
diff changeset
563
5533
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
564 switch(pref_type) {
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
565 case GAIM_PREF_NONE:
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
566 break;
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
567 case GAIM_PREF_BOOLEAN:
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
568 gaim_prefs_set_bool(pref_name_full->str, atoi(pref_value));
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
569 break;
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
570 case GAIM_PREF_INT:
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
571 gaim_prefs_set_int(pref_name_full->str, atoi(pref_value));
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
572 break;
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
573 case GAIM_PREF_STRING:
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
574 gaim_prefs_set_string(pref_name_full->str, pref_value);
62926780114f [gaim-migrate @ 5933]
Nathan Walp <nwalp@pidgin.im>
parents: 5529
diff changeset
575 break;
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
576 }
1170
d20d6785040c [gaim-migrate @ 1180]
Rob Flynn <gaim@robflynn.com>
parents: 1147
diff changeset
577
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
578 prefs_stack = g_list_prepend(prefs_stack, g_strdup(pref_name));
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
579 g_string_free(pref_name_full, TRUE);
1170
d20d6785040c [gaim-migrate @ 1180]
Rob Flynn <gaim@robflynn.com>
parents: 1147
diff changeset
580 }
d20d6785040c [gaim-migrate @ 1180]
Rob Flynn <gaim@robflynn.com>
parents: 1147
diff changeset
581
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
582 static void prefs_end_element_handler(GMarkupParseContext *context,
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
583 const gchar *element_name, gpointer user_data, GError **error) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
584 if(!strcmp(element_name, "pref")) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
585 prefs_stack = g_list_delete_link(prefs_stack, prefs_stack);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
586 }
1170
d20d6785040c [gaim-migrate @ 1180]
Rob Flynn <gaim@robflynn.com>
parents: 1147
diff changeset
587 }
d20d6785040c [gaim-migrate @ 1180]
Rob Flynn <gaim@robflynn.com>
parents: 1147
diff changeset
588
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
589 static GMarkupParser prefs_parser = {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
590 prefs_start_element_handler,
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
591 prefs_end_element_handler,
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
592 NULL,
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
593 NULL,
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
594 NULL
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
595 };
1170
d20d6785040c [gaim-migrate @ 1180]
Rob Flynn <gaim@robflynn.com>
parents: 1147
diff changeset
596
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
597 void gaim_prefs_load() {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
598 gchar *filename = g_build_filename(gaim_user_dir(), "prefs.xml", NULL);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
599 gchar *contents = NULL;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
600 gsize length;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
601 GMarkupParseContext *context;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
602 GError *error = NULL;
5314
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5297
diff changeset
603
5534
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
604
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
605 if(!filename) {
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
606 prefs_is_loaded = TRUE;
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
607 return;
5534
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
608 }
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
609
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
610 gaim_debug(GAIM_DEBUG_INFO, "prefs", "Reading %s\n", filename);
5314
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5297
diff changeset
611
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
612 if(!g_file_get_contents(filename, &contents, &length, &error)) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
613 gaim_debug(GAIM_DEBUG_ERROR, "prefs", "Error reading prefs: %s\n",
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
614 error->message);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
615 g_error_free(error);
5534
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
616 prefs_is_loaded = TRUE;
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
617 return;
1170
d20d6785040c [gaim-migrate @ 1180]
Rob Flynn <gaim@robflynn.com>
parents: 1147
diff changeset
618 }
d20d6785040c [gaim-migrate @ 1180]
Rob Flynn <gaim@robflynn.com>
parents: 1147
diff changeset
619
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
620 context = g_markup_parse_context_new(&prefs_parser, 0, NULL, NULL);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
621
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
622 if(!g_markup_parse_context_parse(context, contents, length, NULL)) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
623 g_markup_parse_context_free(context);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
624 g_free(contents);
5534
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
625 prefs_is_loaded = TRUE;
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
626 return;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
627 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
628
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
629 if(!g_markup_parse_context_end_parse(context, NULL)) {
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
630 gaim_debug(GAIM_DEBUG_ERROR, "prefs", "Error parsing %s\n", filename);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
631 g_markup_parse_context_free(context);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
632 g_free(contents);
5534
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
633 prefs_is_loaded = TRUE;
5440
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
634 return;
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
635 }
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
636
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
637 g_markup_parse_context_free(context);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
638 g_free(contents);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
639
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
640 gaim_debug(GAIM_DEBUG_INFO, "prefs", "Finished reading %s\n", filename);
3127b1a3210f [gaim-migrate @ 5822]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
641 g_free(filename);
5534
53d28743cc68 [gaim-migrate @ 5934]
Nathan Walp <nwalp@pidgin.im>
parents: 5533
diff changeset
642 prefs_is_loaded = TRUE;
1006
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
643 }
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
644
3366
276a867251f8 [gaim-migrate @ 3385]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
645

mercurial