Kaydet (Commit) 7bc3ac14 authored tarafından Caolán McNamara's avatar Caolán McNamara

menu of currency combobox in format-cells is too narrow

we want the combobox to be narrower than it wants to be.  To make that happen
we have only the option of shrinking the cell renderer of the combobox area.
And that is also used by the menu.

Setting a small value of e.g. 1 works to let the combobox not request more
width than that, and the combobox will correctly render within the wider size
it actually gets. But then the menu is a min width menu, which is undesirable,
we want the menu to be as wide as it can be.

So calculate what part of the combobox belongs to the cell area and set
the widest cell area we can within the overall combobox width, resulting
in the widest menu we can get.

Change-Id: Ie3e9960a320a70471ac21d2a88f32632cafa951f
Reviewed-on: https://gerrit.libreoffice.org/68167
Tested-by: Jenkins
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst e0a8803f
......@@ -234,7 +234,7 @@ SvxNumberFormatTabPage::SvxNumberFormatTabPage(TabPageParent pParent,
auto nWidth = approximate_char_width() * 26;
m_xLbCategory->set_size_request(nWidth, m_xLbCategory->get_height_rows(7));
m_xLbFormat->set_size_request(nWidth, m_xLbFormat->get_height_rows(5));
m_xLbCurrency->set_size_request(1, -1); // width of 1, so real width will be that of its LbFormat sibling
m_xLbCurrency->set_size_request(nWidth, -1); // width of 1, so real width will be that of its LbFormat sibling
// Initially remove the "Automatically" entry.
m_xLbCurrency->set_active(-1); // First ensure that nothing is selected.
......
......@@ -7531,20 +7531,31 @@ public:
// tweak the cell render to get a narrower size to stick
GList* cells = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(m_pComboBox));
GtkCellRenderer* cell = static_cast<GtkCellRenderer*>(cells->data);
GtkRequisition size;
gtk_cell_renderer_get_preferred_size(cell, m_pWidget, &size, nullptr);
if (nWidth < size.width)
if (nWidth != -1)
{
// this bit isn't great, I really want to be able to ellipse the text in the comboboxtext itself and let
// the popup menu render them in full, in the interim ellipse both
// the popup menu render them in full, in the interim ellipse both of them
g_object_set(G_OBJECT(m_pTextRenderer), "ellipsize", PANGO_ELLIPSIZE_MIDDLE, nullptr);
gtk_cell_renderer_set_fixed_size(cell, nWidth, size.height);
// to find out how much of the width of the combobox belongs to the cell, set
// the cell and widget to the min cell width and see what the difference is
int min;
gtk_cell_renderer_get_preferred_width(cell, m_pWidget, &min, nullptr);
gtk_cell_renderer_set_fixed_size(cell, min, -1);
gtk_widget_set_size_request(m_pWidget, min, -1);
int nNonCellWidth = get_preferred_size().Width() - min;
// now set the cell to the max width which it can be within the
// requested widget width
gtk_cell_renderer_set_fixed_size(cell, nWidth - nNonCellWidth, -1);
}
else
{
g_object_set(G_OBJECT(m_pTextRenderer), "ellipsize", PANGO_ELLIPSIZE_NONE, nullptr);
gtk_cell_renderer_set_fixed_size(cell, -1, size.height);
gtk_cell_renderer_set_fixed_size(cell, -1, -1);
}
g_list_free(cells);
gtk_widget_set_size_request(m_pWidget, nWidth, nHeight);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment