pidgin/gtkrequest.c

changeset 34501
cb22f5baa4f6
parent 34495
641bff383b0a
child 34502
433382371e89
child 35049
ba239f756f56
equal deleted inserted replaced
34500:e322f9c8f3e9 34501:cb22f5baa4f6
1575 GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, 1575 GCallback ok_cb, const char *cancel_text, GCallback cancel_cb,
1576 PurpleRequestCommonParameters *cpar, void *user_data) 1576 PurpleRequestCommonParameters *cpar, void *user_data)
1577 { 1577 {
1578 PidginRequestData *data; 1578 PidginRequestData *data;
1579 GtkWidget *win; 1579 GtkWidget *win;
1580 GtkWidget *vbox; 1580 GtkNotebook *notebook;
1581 GtkWidget *vbox2; 1581 GtkWidget **pages;
1582 GtkWidget *hbox; 1582 GtkWidget *hbox, *vbox;
1583 GtkWidget *frame; 1583 GtkWidget *frame;
1584 GtkWidget *label; 1584 GtkWidget *label;
1585 GtkWidget *table; 1585 GtkWidget *table;
1586 GtkWidget *button; 1586 GtkWidget *button;
1587 GtkWidget *img; 1587 GtkWidget *img;
1589 GList *gl, *fl; 1589 GList *gl, *fl;
1590 PurpleRequestFieldGroup *group; 1590 PurpleRequestFieldGroup *group;
1591 PurpleRequestField *field; 1591 PurpleRequestField *field;
1592 char *label_text; 1592 char *label_text;
1593 char *primary_esc, *secondary_esc; 1593 char *primary_esc, *secondary_esc;
1594 int total_fields = 0;
1595 const gboolean compact = purple_request_cpar_is_compact(cpar); 1594 const gboolean compact = purple_request_cpar_is_compact(cpar);
1596 GSList *extra_actions, *it; 1595 GSList *extra_actions, *it;
1597 size_t extra_actions_count, i; 1596 size_t extra_actions_count, i;
1597 const gchar **tab_names;
1598 guint tab_count;
1598 1599
1599 data = g_new0(PidginRequestData, 1); 1600 data = g_new0(PidginRequestData, 1);
1600 data->type = PURPLE_REQUEST_FIELDS; 1601 data->type = PURPLE_REQUEST_FIELDS;
1601 data->user_data = user_data; 1602 data->user_data = user_data;
1602 data->u.multifield.fields = fields; 1603 data->u.multifield.fields = fields;
1679 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); 1680 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
1680 gtk_widget_show(label); 1681 gtk_widget_show(label);
1681 g_free(label_text); 1682 g_free(label_text);
1682 } 1683 }
1683 1684
1684 for (gl = purple_request_fields_get_groups(fields); gl != NULL; 1685 /* Setup tabs */
1685 gl = gl->next) 1686 tab_names = purple_request_fields_get_tab_names(fields);
1686 total_fields += g_list_length(purple_request_field_group_get_fields(gl->data)); 1687 if (tab_names == NULL) {
1687 1688 notebook = NULL;
1688 if(total_fields > 9) { 1689 tab_count = 1;
1689 GtkWidget *hbox_for_spacing, *vbox_for_spacing; 1690
1690 1691 pages = g_new0(GtkWidget*, 1);
1691 hbox_for_spacing = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); 1692 pages[0] = vbox;
1692 gtk_box_pack_start(GTK_BOX(vbox),
1693 pidgin_make_scrollable(hbox_for_spacing, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC, GTK_SHADOW_NONE, -1, 200),
1694 TRUE, TRUE, 0);
1695 gtk_widget_show(hbox_for_spacing);
1696
1697 vbox_for_spacing = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
1698 gtk_box_pack_start(GTK_BOX(hbox_for_spacing),
1699 vbox_for_spacing, TRUE, TRUE, PIDGIN_HIG_BOX_SPACE);
1700 gtk_widget_show(vbox_for_spacing);
1701
1702 vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
1703 gtk_box_pack_start(GTK_BOX(vbox_for_spacing),
1704 vbox2, TRUE, TRUE, PIDGIN_HIG_BOX_SPACE);
1705 gtk_widget_show(vbox2);
1706 } else { 1693 } else {
1707 vbox2 = vbox; 1694 tab_count = g_strv_length((gchar **)tab_names);
1695 notebook = GTK_NOTEBOOK(gtk_notebook_new());
1696
1697 pages = g_new0(GtkWidget*, tab_count);
1698
1699 for (i = 0; i < tab_count; i++) {
1700 pages[i] = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
1701 gtk_container_set_border_width(GTK_CONTAINER(pages[i]), PIDGIN_HIG_BORDER);
1702 gtk_notebook_append_page(notebook, pages[i], NULL);
1703 gtk_notebook_set_tab_label_text(notebook, pages[i], tab_names[i]);
1704 gtk_widget_show(pages[i]);
1705 }
1706 }
1707
1708 for (i = 0; i < tab_count; i++) {
1709 guint total_fields = 0;
1710 GList *it;
1711
1712 it = purple_request_fields_get_groups(fields);
1713 for (; it != NULL; it = g_list_next(it)) {
1714 group = it->data;
1715 if (purple_request_field_group_get_tab(group) != i)
1716 continue;
1717 total_fields += g_list_length(
1718 purple_request_field_group_get_fields(group));
1719 }
1720
1721 if(total_fields > 9) {
1722 GtkWidget *hbox_for_spacing, *vbox_for_spacing;
1723
1724 gtk_container_set_border_width(
1725 GTK_CONTAINER(pages[i]), 0);
1726
1727 hbox_for_spacing =
1728 gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
1729 gtk_box_pack_start(GTK_BOX(pages[i]),
1730 pidgin_make_scrollable(hbox_for_spacing,
1731 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC,
1732 GTK_SHADOW_NONE, -1, 200),
1733 TRUE, TRUE, 0);
1734 gtk_widget_show(hbox_for_spacing);
1735
1736 vbox_for_spacing =
1737 gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
1738 gtk_box_pack_start(GTK_BOX(hbox_for_spacing),
1739 vbox_for_spacing, TRUE, TRUE,
1740 PIDGIN_HIG_BOX_SPACE);
1741 gtk_widget_show(vbox_for_spacing);
1742
1743 pages[i] = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
1744 gtk_box_pack_start(GTK_BOX(vbox_for_spacing),
1745 pages[i], TRUE, TRUE, PIDGIN_HIG_BOX_SPACE);
1746 gtk_widget_show(pages[i]);
1747 }
1748
1749 if (notebook == NULL)
1750 vbox = pages[0];
1708 } 1751 }
1709 1752
1710 if (secondary) { 1753 if (secondary) {
1711 secondary_esc = pidgin_request_escape(cpar, secondary); 1754 secondary_esc = pidgin_request_escape(cpar, secondary);
1712 label = gtk_label_new(NULL); 1755 label = gtk_label_new(NULL);
1713 1756
1714 gtk_label_set_markup(GTK_LABEL(label), secondary_esc); 1757 gtk_label_set_markup(GTK_LABEL(label), secondary_esc);
1715 g_free(secondary_esc); 1758 g_free(secondary_esc);
1716 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); 1759 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
1717 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); 1760 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
1718 gtk_box_pack_start(GTK_BOX(vbox2), label, TRUE, TRUE, 0); 1761 gtk_box_pack_start(GTK_BOX(vbox), label, (notebook == NULL),
1762 (notebook == NULL), 0);
1719 gtk_widget_show(label); 1763 gtk_widget_show(label);
1764 }
1765
1766 if (notebook != NULL) {
1767 gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(notebook), TRUE, TRUE, 0);
1768 gtk_widget_show(GTK_WIDGET(notebook));
1720 } 1769 }
1721 1770
1722 for (gl = purple_request_fields_get_groups(fields); 1771 for (gl = purple_request_fields_get_groups(fields);
1723 gl != NULL; 1772 gl != NULL;
1724 gl = gl->next) 1773 gl = gl->next)
1727 size_t field_count = 0; 1776 size_t field_count = 0;
1728 size_t cols = 1; 1777 size_t cols = 1;
1729 size_t rows; 1778 size_t rows;
1730 size_t col_num; 1779 size_t col_num;
1731 size_t row_num = 0; 1780 size_t row_num = 0;
1781 guint tab_no;
1732 1782
1733 group = gl->data; 1783 group = gl->data;
1734 field_list = purple_request_field_group_get_fields(group); 1784 field_list = purple_request_field_group_get_fields(group);
1785 tab_no = purple_request_field_group_get_tab(group);
1786 if (tab_no >= tab_count) {
1787 purple_debug_warning("gtkrequest",
1788 "Invalid tab number: %d", tab_no);
1789 tab_no = 0;
1790 }
1735 1791
1736 if (purple_request_field_group_get_title(group) != NULL) 1792 if (purple_request_field_group_get_title(group) != NULL)
1737 { 1793 {
1738 frame = pidgin_make_frame(vbox2, 1794 frame = pidgin_make_frame(pages[tab_no],
1739 purple_request_field_group_get_title(group)); 1795 purple_request_field_group_get_title(group));
1740 } 1796 }
1741 else 1797 else
1742 frame = vbox2; 1798 frame = pages[tab_no];
1743 1799
1744 field_count = g_list_length(field_list); 1800 field_count = g_list_length(field_list);
1745 /* 1801 /*
1746 if (field_count > 9) 1802 if (field_count > 9)
1747 { 1803 {
1791 else 1847 else
1792 table = gtk_table_new(rows, 2 * cols, FALSE); 1848 table = gtk_table_new(rows, 2 * cols, FALSE);
1793 gtk_table_set_row_spacings(GTK_TABLE(table), PIDGIN_HIG_BOX_SPACE); 1849 gtk_table_set_row_spacings(GTK_TABLE(table), PIDGIN_HIG_BOX_SPACE);
1794 gtk_table_set_col_spacings(GTK_TABLE(table), PIDGIN_HIG_BOX_SPACE); 1850 gtk_table_set_col_spacings(GTK_TABLE(table), PIDGIN_HIG_BOX_SPACE);
1795 1851
1796 gtk_container_add(GTK_CONTAINER(frame), table); 1852 gtk_box_pack_start(GTK_BOX(frame), table,
1853 (notebook == NULL), (notebook == NULL), 0);
1797 gtk_widget_show(table); 1854 gtk_widget_show(table);
1798 1855
1799 for (row_num = 0, fl = field_list; 1856 for (row_num = 0, fl = field_list;
1800 row_num < rows && fl != NULL; 1857 row_num < rows && fl != NULL;
1801 row_num++) 1858 row_num++)
1953 gtk_widget_set_sensitive(data->ok_button, FALSE); 2010 gtk_widget_set_sensitive(data->ok_button, FALSE);
1954 2011
1955 if (!purple_request_fields_all_valid(fields)) 2012 if (!purple_request_fields_all_valid(fields))
1956 gtk_widget_set_sensitive(data->ok_button, FALSE); 2013 gtk_widget_set_sensitive(data->ok_button, FALSE);
1957 2014
2015 g_free(pages);
2016
1958 pidgin_auto_parent_window(win); 2017 pidgin_auto_parent_window(win);
1959 2018
1960 gtk_widget_show(win); 2019 gtk_widget_show(win);
1961 2020
1962 return data; 2021 return data;

mercurial