| 294 data->u.multifield.fields); |
294 data->u.multifield.fields); |
| 295 |
295 |
| 296 purple_request_close(PURPLE_REQUEST_FIELDS, data); |
296 purple_request_close(PURPLE_REQUEST_FIELDS, data); |
| 297 } |
297 } |
| 298 |
298 |
| |
299 static void |
| |
300 multifield_extra_cb(GtkWidget *button, PidginRequestData *data) |
| |
301 { |
| |
302 PurpleRequestFieldsCb cb; |
| |
303 |
| |
304 generic_response_start(data); |
| |
305 |
| |
306 cb = g_object_get_data(G_OBJECT(button), "extra-cb"); |
| |
307 |
| |
308 if (cb != NULL) |
| |
309 cb(data->user_data, data->u.multifield.fields); |
| |
310 |
| |
311 purple_request_close(PURPLE_REQUEST_FIELDS, data); |
| |
312 } |
| |
313 |
| 299 static gboolean |
314 static gboolean |
| 300 destroy_multifield_cb(GtkWidget *dialog, GdkEvent *event, |
315 destroy_multifield_cb(GtkWidget *dialog, GdkEvent *event, |
| 301 PidginRequestData *data) |
316 PidginRequestData *data) |
| 302 { |
317 { |
| 303 multifield_cancel_cb(NULL, data); |
318 multifield_cancel_cb(NULL, data); |
| 408 return img; |
423 return img; |
| 409 |
424 |
| 410 icon_type = purple_request_cpar_get_icon(cpar); |
425 icon_type = purple_request_cpar_get_icon(cpar); |
| 411 switch (icon_type) |
426 switch (icon_type) |
| 412 { |
427 { |
| |
428 case PURPLE_REQUEST_ICON_DEFAULT: |
| 413 case PURPLE_REQUEST_ICON_REQUEST: |
429 case PURPLE_REQUEST_ICON_REQUEST: |
| 414 icon_stock = PIDGIN_STOCK_DIALOG_QUESTION; |
430 icon_stock = PIDGIN_STOCK_DIALOG_QUESTION; |
| 415 break; |
431 break; |
| 416 case PURPLE_REQUEST_ICON_DIALOG: |
432 case PURPLE_REQUEST_ICON_DIALOG: |
| 417 case PURPLE_REQUEST_ICON_INFO: |
433 case PURPLE_REQUEST_ICON_INFO: |
| |
434 case PURPLE_REQUEST_ICON_WAIT: /* TODO: we need another icon */ |
| 418 icon_stock = PIDGIN_STOCK_DIALOG_INFO; |
435 icon_stock = PIDGIN_STOCK_DIALOG_INFO; |
| 419 break; |
436 break; |
| 420 case PURPLE_REQUEST_ICON_WARNING: |
437 case PURPLE_REQUEST_ICON_WARNING: |
| 421 icon_stock = PIDGIN_STOCK_DIALOG_WARNING; |
438 icon_stock = PIDGIN_STOCK_DIALOG_WARNING; |
| 422 break; |
439 break; |
| 1049 |
1066 |
| 1050 return widget; |
1067 return widget; |
| 1051 } |
1068 } |
| 1052 |
1069 |
| 1053 static GtkWidget * |
1070 static GtkWidget * |
| 1054 create_bool_field(PurpleRequestField *field) |
1071 create_bool_field(PurpleRequestField *field, |
| |
1072 PurpleRequestCommonParameters *cpar) |
| 1055 { |
1073 { |
| 1056 GtkWidget *widget; |
1074 GtkWidget *widget; |
| 1057 |
1075 gchar *label; |
| 1058 widget = gtk_check_button_new_with_label( |
1076 |
| |
1077 label = pidgin_request_escape(cpar, |
| 1059 purple_request_field_get_label(field)); |
1078 purple_request_field_get_label(field)); |
| |
1079 widget = gtk_check_button_new_with_label(label); |
| |
1080 g_free(label); |
| 1060 |
1081 |
| 1061 gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field)); |
1082 gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field)); |
| 1062 |
1083 |
| 1063 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), |
1084 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), |
| 1064 purple_request_field_bool_get_default_value(field)); |
1085 purple_request_field_bool_get_default_value(field)); |
| 1397 PurpleRequestField *field; |
1418 PurpleRequestField *field; |
| 1398 char *label_text; |
1419 char *label_text; |
| 1399 char *primary_esc, *secondary_esc; |
1420 char *primary_esc, *secondary_esc; |
| 1400 int total_fields = 0; |
1421 int total_fields = 0; |
| 1401 const gboolean compact = purple_request_cpar_is_compact(cpar); |
1422 const gboolean compact = purple_request_cpar_is_compact(cpar); |
| |
1423 GSList *extra_actions, *it; |
| |
1424 size_t extra_actions_count, i; |
| 1402 |
1425 |
| 1403 data = g_new0(PidginRequestData, 1); |
1426 data = g_new0(PidginRequestData, 1); |
| 1404 data->type = PURPLE_REQUEST_FIELDS; |
1427 data->type = PURPLE_REQUEST_FIELDS; |
| 1405 data->user_data = user_data; |
1428 data->user_data = user_data; |
| 1406 data->u.multifield.fields = fields; |
1429 data->u.multifield.fields = fields; |
| 1407 |
1430 |
| 1408 purple_request_fields_set_ui_data(fields, data); |
1431 purple_request_fields_set_ui_data(fields, data); |
| |
1432 |
| |
1433 extra_actions = purple_request_cpar_get_extra_actions(cpar); |
| |
1434 extra_actions_count = g_slist_length(extra_actions) / 2; |
| 1409 |
1435 |
| 1410 data->cb_count = 2; |
1436 data->cb_count = 2; |
| 1411 data->cbs = g_new0(GCallback, 2); |
1437 data->cbs = g_new0(GCallback, 2); |
| 1412 |
1438 |
| 1413 data->cbs[0] = ok_cb; |
1439 data->cbs[0] = ok_cb; |
| 1433 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
1459 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
| 1434 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
1460 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
| 1435 gtk_widget_show(img); |
1461 gtk_widget_show(img); |
| 1436 |
1462 |
| 1437 pidgin_request_add_help(GTK_DIALOG(win), cpar); |
1463 pidgin_request_add_help(GTK_DIALOG(win), cpar); |
| |
1464 |
| |
1465 it = extra_actions; |
| |
1466 for (i = 0; i < extra_actions_count; i++, it = it->next->next) { |
| |
1467 const gchar *label = it->data; |
| |
1468 PurpleRequestFieldsCb *cb = it->next->data; |
| |
1469 |
| |
1470 button = pidgin_dialog_add_button(GTK_DIALOG(win), |
| |
1471 text_to_stock(label), G_CALLBACK(multifield_extra_cb), |
| |
1472 data); |
| |
1473 g_object_set_data(G_OBJECT(button), "extra-cb", cb); |
| |
1474 } |
| 1438 |
1475 |
| 1439 /* Cancel button */ |
1476 /* Cancel button */ |
| 1440 button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(cancel_text), G_CALLBACK(multifield_cancel_cb), data); |
1477 button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(cancel_text), G_CALLBACK(multifield_cancel_cb), data); |
| 1441 gtk_widget_set_can_default(button, TRUE); |
1478 gtk_widget_set_can_default(button, TRUE); |
| 1442 |
1479 |
| 1595 col_num++, fl = fl->next) |
1632 col_num++, fl = fl->next) |
| 1596 { |
1633 { |
| 1597 size_t col_offset = col_num * 2; |
1634 size_t col_offset = col_num * 2; |
| 1598 PurpleRequestFieldType type; |
1635 PurpleRequestFieldType type; |
| 1599 GtkWidget *widget = NULL; |
1636 GtkWidget *widget = NULL; |
| 1600 const char *field_label; |
1637 gchar *field_label; |
| 1601 |
1638 |
| 1602 label = NULL; |
1639 label = NULL; |
| 1603 field = fl->data; |
1640 field = fl->data; |
| 1604 |
1641 |
| 1605 if (!purple_request_field_is_visible(field)) { |
1642 if (!purple_request_field_is_visible(field)) { |
| 1606 col_num--; |
1643 col_num--; |
| 1607 continue; |
1644 continue; |
| 1608 } |
1645 } |
| 1609 |
1646 |
| 1610 type = purple_request_field_get_type(field); |
1647 type = purple_request_field_get_type(field); |
| 1611 field_label = purple_request_field_get_label(field); |
1648 field_label = pidgin_request_escape(cpar, |
| |
1649 purple_request_field_get_label(field)); |
| 1612 |
1650 |
| 1613 if (type != PURPLE_REQUEST_FIELD_BOOLEAN && field_label) |
1651 if (type != PURPLE_REQUEST_FIELD_BOOLEAN && field_label) |
| 1614 { |
1652 { |
| 1615 char *text = NULL; |
1653 char *text = NULL; |
| 1616 |
1654 |
| 1617 if (field_label[strlen(field_label) - 1] != ':' && |
1655 if (field_label[strlen(field_label) - 1] != ':' && |
| 1618 field_label[strlen(field_label) - 1] != '?') |
1656 field_label[strlen(field_label) - 1] != '?' && |
| |
1657 type != PURPLE_REQUEST_FIELD_LABEL) |
| 1619 { |
1658 { |
| 1620 text = g_strdup_printf("%s:", field_label); |
1659 text = g_strdup_printf("%s:", field_label); |
| 1621 } |
1660 } |
| 1622 |
1661 |
| 1623 label = gtk_label_new(NULL); |
1662 label = gtk_label_new(NULL); |
| 1649 col_offset, col_offset + 1, |
1688 col_offset, col_offset + 1, |
| 1650 row_num, row_num + 1); |
1689 row_num, row_num + 1); |
| 1651 } |
1690 } |
| 1652 |
1691 |
| 1653 gtk_widget_show(label); |
1692 gtk_widget_show(label); |
| |
1693 g_free(field_label); |
| 1654 } |
1694 } |
| 1655 |
1695 |
| 1656 widget = GTK_WIDGET(purple_request_field_get_ui_data(field)); |
1696 widget = GTK_WIDGET(purple_request_field_get_ui_data(field)); |
| 1657 if (widget == NULL) |
1697 if (widget == NULL) |
| 1658 { |
1698 { |
| 1659 if (type == PURPLE_REQUEST_FIELD_STRING) |
1699 if (type == PURPLE_REQUEST_FIELD_STRING) |
| 1660 widget = create_string_field(field); |
1700 widget = create_string_field(field); |
| 1661 else if (type == PURPLE_REQUEST_FIELD_INTEGER) |
1701 else if (type == PURPLE_REQUEST_FIELD_INTEGER) |
| 1662 widget = create_int_field(field); |
1702 widget = create_int_field(field); |
| 1663 else if (type == PURPLE_REQUEST_FIELD_BOOLEAN) |
1703 else if (type == PURPLE_REQUEST_FIELD_BOOLEAN) |
| 1664 widget = create_bool_field(field); |
1704 widget = create_bool_field(field, cpar); |
| 1665 else if (type == PURPLE_REQUEST_FIELD_CHOICE) |
1705 else if (type == PURPLE_REQUEST_FIELD_CHOICE) |
| 1666 widget = create_choice_field(field, cpar); |
1706 widget = create_choice_field(field, cpar); |
| 1667 else if (type == PURPLE_REQUEST_FIELD_LIST) |
1707 else if (type == PURPLE_REQUEST_FIELD_LIST) |
| 1668 widget = create_list_field(field); |
1708 widget = create_list_field(field); |
| 1669 else if (type == PURPLE_REQUEST_FIELD_IMAGE) |
1709 else if (type == PURPLE_REQUEST_FIELD_IMAGE) |
| 1969 { |
2009 { |
| 1970 PURPLE_REQUEST_FEATURE_HTML, |
2010 PURPLE_REQUEST_FEATURE_HTML, |
| 1971 pidgin_request_input, |
2011 pidgin_request_input, |
| 1972 pidgin_request_choice, |
2012 pidgin_request_choice, |
| 1973 pidgin_request_action, |
2013 pidgin_request_action, |
| |
2014 NULL, |
| 1974 pidgin_request_fields, |
2015 pidgin_request_fields, |
| 1975 pidgin_request_file, |
2016 pidgin_request_file, |
| |
2017 pidgin_request_folder, |
| 1976 pidgin_close_request, |
2018 pidgin_close_request, |
| 1977 pidgin_request_folder, |
|
| 1978 NULL, |
2019 NULL, |
| 1979 NULL, |
2020 NULL, |
| 1980 NULL, |
2021 NULL, |
| 1981 NULL |
2022 NULL |
| 1982 }; |
2023 }; |