Mercurial > pidgin
comparison src/gtkprefs.c @ 9151:e672ee8a12ec
[gaim-migrate @ 9935]
fix prefs dropdowns for boolean prefs, because apparently someone actually wants
one
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Mon, 31 May 2004 07:01:13 +0000 |
parents | 05532ad61ed5 |
children | e0c50af60837 |
comparison
equal
deleted
inserted
replaced
9150:05532ad61ed5 | 9151:e672ee8a12ec |
---|---|
154 } | 154 } |
155 | 155 |
156 static void | 156 static void |
157 dropdown_set(GObject *w, const char *key) | 157 dropdown_set(GObject *w, const char *key) |
158 { | 158 { |
159 const char *bool_key; | |
160 const char *str_value; | 159 const char *str_value; |
161 int int_value; | 160 int int_value; |
162 GaimPrefType type; | 161 GaimPrefType type; |
163 | 162 |
164 type = GPOINTER_TO_INT(g_object_get_data(w, "type")); | 163 type = GPOINTER_TO_INT(g_object_get_data(w, "type")); |
172 str_value = (const char *)g_object_get_data(w, "value"); | 171 str_value = (const char *)g_object_get_data(w, "value"); |
173 | 172 |
174 gaim_prefs_set_string(key, str_value); | 173 gaim_prefs_set_string(key, str_value); |
175 } | 174 } |
176 else if (type == GAIM_PREF_BOOLEAN) { | 175 else if (type == GAIM_PREF_BOOLEAN) { |
177 bool_key = (const char *)g_object_get_data(w, "value"); | 176 gaim_prefs_set_bool(key, |
178 | 177 GPOINTER_TO_INT(g_object_get_data(w, "value"))); |
179 if (!strcmp(key, bool_key)) | |
180 return; | |
181 | |
182 gaim_prefs_set_bool(key, FALSE); | |
183 gaim_prefs_set_bool(bool_key, TRUE); | |
184 } | 178 } |
185 } | 179 } |
186 | 180 |
187 GtkWidget * | 181 GtkWidget * |
188 gaim_gtk_prefs_dropdown_from_list(GtkWidget *box, const gchar *title, | 182 gaim_gtk_prefs_dropdown_from_list(GtkWidget *box, const gchar *title, |
190 { | 184 { |
191 GtkWidget *dropdown, *opt, *menu; | 185 GtkWidget *dropdown, *opt, *menu; |
192 GtkWidget *label; | 186 GtkWidget *label; |
193 GtkWidget *hbox; | 187 GtkWidget *hbox; |
194 gchar *text; | 188 gchar *text; |
195 const char *bool_key = NULL; | |
196 const char *stored_str = NULL; | 189 const char *stored_str = NULL; |
197 int stored_int = 0; | 190 int stored_int = 0; |
198 int int_value = 0; | 191 int int_value = 0; |
199 const char *str_value = NULL; | 192 const char *str_value = NULL; |
200 int o = 0; | 193 int o = 0; |
245 str_value = (const char *)menuitems->data; | 238 str_value = (const char *)menuitems->data; |
246 | 239 |
247 g_object_set_data(G_OBJECT(opt), "value", (char *)str_value); | 240 g_object_set_data(G_OBJECT(opt), "value", (char *)str_value); |
248 } | 241 } |
249 else if (type == GAIM_PREF_BOOLEAN) { | 242 else if (type == GAIM_PREF_BOOLEAN) { |
250 bool_key = (const char *)menuitems->data; | 243 g_object_set_data(G_OBJECT(opt), "value", |
251 | 244 menuitems->data); |
252 g_object_set_data(G_OBJECT(opt), "value", (char *)bool_key); | |
253 } | 245 } |
254 | 246 |
255 g_signal_connect(G_OBJECT(opt), "activate", | 247 g_signal_connect(G_OBJECT(opt), "activate", |
256 G_CALLBACK(dropdown_set), (char *)key); | 248 G_CALLBACK(dropdown_set), (char *)key); |
257 | 249 |
259 gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt); | 251 gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt); |
260 | 252 |
261 if ((type == GAIM_PREF_INT && stored_int == int_value) || | 253 if ((type == GAIM_PREF_INT && stored_int == int_value) || |
262 (type == GAIM_PREF_STRING && stored_str != NULL && | 254 (type == GAIM_PREF_STRING && stored_str != NULL && |
263 !strcmp(stored_str, str_value)) || | 255 !strcmp(stored_str, str_value)) || |
264 (type == GAIM_PREF_BOOLEAN && gaim_prefs_get_bool(bool_key))) { | 256 (type == GAIM_PREF_BOOLEAN && |
257 (gaim_prefs_get_bool(key) == GPOINTER_TO_INT(menuitems->data)))) { | |
265 | 258 |
266 gtk_menu_set_active(GTK_MENU(menu), o); | 259 gtk_menu_set_active(GTK_MENU(menu), o); |
267 } | 260 } |
268 | 261 |
269 menuitems = g_list_next(menuitems); | 262 menuitems = g_list_next(menuitems); |
288 GtkWidget *dropdown = NULL; | 281 GtkWidget *dropdown = NULL; |
289 char *name; | 282 char *name; |
290 int int_value; | 283 int int_value; |
291 const char *str_value; | 284 const char *str_value; |
292 | 285 |
286 g_return_val_if_fail(type == GAIM_PREF_BOOLEAN || type == GAIM_PREF_INT || | |
287 type == GAIM_PREF_STRING, NULL); | |
288 | |
293 va_start(ap, key); | 289 va_start(ap, key); |
294 while ((name = va_arg(ap, char *)) != NULL) { | 290 while ((name = va_arg(ap, char *)) != NULL) { |
295 | 291 |
296 menuitems = g_list_prepend(menuitems, name); | 292 menuitems = g_list_prepend(menuitems, name); |
297 | 293 |
298 if (type == GAIM_PREF_INT) { | 294 if (type == GAIM_PREF_INT || type == GAIM_PREF_BOOLEAN) { |
299 int_value = va_arg(ap, int); | 295 int_value = va_arg(ap, int); |
300 menuitems = g_list_prepend(menuitems, GINT_TO_POINTER(int_value)); | 296 menuitems = g_list_prepend(menuitems, GINT_TO_POINTER(int_value)); |
301 } | 297 } |
302 else { | 298 else { |
303 str_value = va_arg(ap, const char *); | 299 str_value = va_arg(ap, const char *); |