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