cui/source/tabpages/numfmt.cxx |    2 +-
 vcl/unx/gtk3/gtk3gtkinst.cxx   |   23 +++++++++++++++++------
 2 files changed, 18 insertions(+), 7 deletions(-)

New commits:
commit 115f3749a737de337f6b456dcc84b6e3a6fdfc0e
Author:     Caolán McNamara <[email protected]>
AuthorDate: Thu Feb 21 15:57:22 2019 +0000
Commit:     Miklos Vajna <[email protected]>
CommitDate: Thu Mar 7 18:15:06 2019 +0100

    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 <[email protected]>

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);
_______________________________________________
Libreoffice-commits mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to