pidgin/prefs/pidginprefs.c

changeset 41387
146db40a9f24
parent 41386
2bf2cc598a0e
child 41388
4df8fa04b777
equal deleted inserted replaced
41386:2bf2cc598a0e 41387:146db40a9f24
240 PurplePrefType type, const char *key, GList *menuitems) 240 PurplePrefType type, const char *key, GList *menuitems)
241 { 241 {
242 GtkWidget *dropdown = NULL; 242 GtkWidget *dropdown = NULL;
243 GtkWidget *label = NULL; 243 GtkWidget *label = NULL;
244 GtkListStore *store = NULL; 244 GtkListStore *store = NULL;
245 GtkTreeIter iter;
246 GtkTreeIter active; 245 GtkTreeIter active;
247 GtkCellRenderer *renderer; 246 GtkCellRenderer *renderer;
248 gint pref_int_value = 0; 247 gint pref_int_value = 0;
249 const gchar *pref_str_value = NULL; 248 const gchar *pref_str_value = NULL;
250 gboolean pref_bool_value = FALSE; 249 gboolean pref_bool_value = FALSE;
267 dropdown = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store)); 266 dropdown = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store));
268 g_object_set_data(G_OBJECT(dropdown), "type", GINT_TO_POINTER(type)); 267 g_object_set_data(G_OBJECT(dropdown), "type", GINT_TO_POINTER(type));
269 268
270 for (; menuitems != NULL; menuitems = g_list_next(menuitems)) { 269 for (; menuitems != NULL; menuitems = g_list_next(menuitems)) {
271 const PurpleKeyValuePair *menu_item = menuitems->data; 270 const PurpleKeyValuePair *menu_item = menuitems->data;
272 gint int_value = 0; 271 GtkTreeIter iter;
273 const gchar *str_value = NULL;
274 gboolean bool_value = FALSE;
275 272
276 if (menu_item->key == NULL) { 273 if (menu_item->key == NULL) {
277 break; 274 break;
278 } 275 }
279 276
281 gtk_list_store_set(store, &iter, 278 gtk_list_store_set(store, &iter,
282 PREF_DROPDOWN_TEXT, menu_item->key, 279 PREF_DROPDOWN_TEXT, menu_item->key,
283 -1); 280 -1);
284 281
285 if (type == PURPLE_PREF_INT) { 282 if (type == PURPLE_PREF_INT) {
286 int_value = GPOINTER_TO_INT(menu_item->value); 283 gint value = GPOINTER_TO_INT(menu_item->value);
287 gtk_list_store_set(store, &iter, 284 gtk_list_store_set(store, &iter, PREF_DROPDOWN_VALUE, value, -1);
288 PREF_DROPDOWN_VALUE, int_value, 285 if (pref_int_value == value) {
289 -1); 286 active = iter;
290 } 287 }
291 else if (type == PURPLE_PREF_STRING) { 288
292 str_value = (const char *)menu_item->value; 289 } else if (type == PURPLE_PREF_STRING) {
293 gtk_list_store_set(store, &iter, 290 const gchar *value = (const gchar *)menu_item->value;
294 PREF_DROPDOWN_VALUE, str_value, 291 gtk_list_store_set(store, &iter, PREF_DROPDOWN_VALUE, value, -1);
295 -1); 292 if (purple_strequal(pref_str_value, value)) {
296 } 293 active = iter;
297 else if (type == PURPLE_PREF_BOOLEAN) { 294 }
298 bool_value = (gboolean)GPOINTER_TO_INT(menu_item->value); 295
299 gtk_list_store_set(store, &iter, 296 } else if (type == PURPLE_PREF_BOOLEAN) {
300 PREF_DROPDOWN_VALUE, bool_value, 297 gboolean value = (gboolean)GPOINTER_TO_INT(menu_item->value);
301 -1); 298 gtk_list_store_set(store, &iter, PREF_DROPDOWN_VALUE, value, -1);
302 } 299 if (pref_bool_value == value) {
303 300 active = iter;
304 if ((type == PURPLE_PREF_INT && pref_int_value == int_value) || 301 }
305 (type == PURPLE_PREF_STRING &&
306 purple_strequal(pref_str_value, str_value)) ||
307 (type == PURPLE_PREF_BOOLEAN && (pref_bool_value == bool_value)))
308 {
309 active = iter;
310 } 302 }
311 } 303 }
312 304
313 renderer = gtk_cell_renderer_text_new(); 305 renderer = gtk_cell_renderer_text_new();
314 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dropdown), renderer, TRUE); 306 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dropdown), renderer, TRUE);
417 if (!gtk_tree_model_get_iter_first(store, &iter)) { 409 if (!gtk_tree_model_get_iter_first(store, &iter)) {
418 g_return_if_reached(); 410 g_return_if_reached();
419 } 411 }
420 412
421 do { 413 do {
422 int int_value = 0;
423 const char *str_value = NULL;
424 gboolean bool_value = FALSE;
425
426 if (combo->type == PURPLE_PREF_INT) { 414 if (combo->type == PURPLE_PREF_INT) {
427 gtk_tree_model_get(store, &iter, 415 gint value = 0;
428 PREF_DROPDOWN_VALUE, &int_value, 416 gtk_tree_model_get(store, &iter, PREF_DROPDOWN_VALUE, &value, -1);
429 -1); 417 if (pref_int_value == value) {
430 if (pref_int_value == int_value) {
431 active = iter; 418 active = iter;
432 break; 419 break;
433 } 420 }
434 } 421
435 else if (combo->type == PURPLE_PREF_STRING) { 422 } else if (combo->type == PURPLE_PREF_STRING) {
436 gtk_tree_model_get(store, &iter, 423 const gchar *value = NULL;
437 PREF_DROPDOWN_VALUE, &str_value, 424 gtk_tree_model_get(store, &iter, PREF_DROPDOWN_VALUE, &value, -1);
438 -1); 425 if (purple_strequal(pref_str_value, value)) {
439 if (purple_strequal(pref_str_value, str_value)) {
440 active = iter; 426 active = iter;
441 break; 427 break;
442 } 428 }
443 } 429
444 else if (combo->type == PURPLE_PREF_BOOLEAN) { 430 } else if (combo->type == PURPLE_PREF_BOOLEAN) {
445 gtk_tree_model_get(store, &iter, 431 gboolean value = FALSE;
446 PREF_DROPDOWN_VALUE, &bool_value, 432 gtk_tree_model_get(store, &iter, PREF_DROPDOWN_VALUE, &value, -1);
447 -1); 433 if (pref_bool_value == value) {
448 if (pref_bool_value == bool_value) {
449 active = iter; 434 active = iter;
450 break; 435 break;
451 } 436 }
452 } 437 }
453 } while (gtk_tree_model_iter_next(store, &iter)); 438 } while (gtk_tree_model_iter_next(store, &iter));

mercurial