pidgin/gtkrequest.c

branch
soc.2013.gobjectification
changeset 34948
e31ee6f00ff8
parent 34944
0d5d42e2c0d6
parent 34445
43e91cccb4da
child 34949
aa59f6a5b751
child 36761
a84a6709c72a
equal deleted inserted replaced
34947:873f50846220 34948:e31ee6f00ff8
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 };

mercurial