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