You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
4.1 KiB
86 lines
4.1 KiB
From 115f3749a737de337f6b456dcc84b6e3a6fdfc0e Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
|
Date: Thu, 21 Feb 2019 15:57:22 +0000
|
|
Subject: [PATCH] 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/68168
|
|
Tested-by: Jenkins
|
|
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
|
|
---
|
|
cui/source/tabpages/numfmt.cxx | 2 +-
|
|
vcl/unx/gtk3/gtk3gtkinst.cxx | 23 +++++++++++++++++------
|
|
2 files changed, 18 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/cui/source/tabpages/numfmt.cxx b/cui/source/tabpages/numfmt.cxx
|
|
index b6a4a8ba4d5c..d202232b951d 100644
|
|
--- a/cui/source/tabpages/numfmt.cxx
|
|
+++ b/cui/source/tabpages/numfmt.cxx
|
|
@@ -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.
|
|
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
|
|
index a9fdfd3615eb..e81f451f7fa0 100644
|
|
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
|
|
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
|
|
@@ -6978,20 +6978,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);
|
|
--
|
|
2.21.0
|
|
|