[Libreoffice-commits] core.git: Branch 'libreoffice-7-0' - include/svtools include/vcl svtools/source svx/source vcl/inc vcl/source vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Sun Jul 5 14:43:15 UTC 2020


 include/svtools/ctrlbox.hxx        |    3 ++-
 include/vcl/toolkit/combobox.hxx   |    1 +
 include/vcl/weld.hxx               |    2 +-
 svtools/source/control/ctrlbox.cxx |   26 +++++++++++++++++---------
 svx/source/tbxctrls/tbcontrl.cxx   |   16 ++++++++++------
 vcl/inc/salvtables.hxx             |    4 ++--
 vcl/source/app/salvtables.cxx      |   18 ++++++++++++------
 vcl/source/control/combobox.cxx    |    5 +++++
 vcl/unx/gtk3/gtk3gtkinst.cxx       |   36 +++++++++++++++++++++++++-----------
 9 files changed, 75 insertions(+), 36 deletions(-)

New commits:
commit a5f95804c1a730fb393c33b49e6fbe0f5a5e9eac
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Sat Jul 4 18:00:52 2020 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Sun Jul 5 16:42:39 2020 +0200

    tdf#134479 allow disable font preview to work on existing font comboboxes
    
    not just newly created one.
    
    you can only restore back to a text-only view, not a text+(icon/whatever) view
    
    Change-Id: Ic3becd7a942ee6b1dbabb57eebf1e25d1b626fdb
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97991
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/svtools/ctrlbox.hxx b/include/svtools/ctrlbox.hxx
index 301a9c13047f..1c3185915b7d 100644
--- a/include/svtools/ctrlbox.hxx
+++ b/include/svtools/ctrlbox.hxx
@@ -353,7 +353,8 @@ public:
 
     void            Fill( const FontList* pList );
 
-    void            EnableWYSIWYG();
+    void            EnableWYSIWYG(bool bEnable);
+    bool            IsWYSIWYGEnabled() const { return mbWYSIWYG; }
 
     void connect_changed(const Link<weld::ComboBox&, void>& rLink) { m_xComboBox->connect_changed(rLink); }
     void connect_focus_in(const Link<weld::Widget&, void>& rLink) { m_xComboBox->connect_focus_in(rLink); }
diff --git a/include/vcl/toolkit/combobox.hxx b/include/vcl/toolkit/combobox.hxx
index a3c4e1cee5b3..611bce590add 100644
--- a/include/vcl/toolkit/combobox.hxx
+++ b/include/vcl/toolkit/combobox.hxx
@@ -102,6 +102,7 @@ public:
 
     void            SetUserItemSize( const Size& rSz );
     void            EnableUserDraw( bool bUserDraw );
+    bool            IsUserDrawEnabled() const;
 
     void            DrawEntry( const UserDrawEvent& rEvt );
     void            SetBorderStyle( WindowBorderStyle nBorderStyle );
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index cad56785acb2..cae26c1ffccf 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -732,7 +732,7 @@ public:
     }
     void connect_custom_render(const Link<render_args, void>& rLink) { m_aRenderHdl = rLink; }
     // call set_custom_renderer after setting custom callbacks
-    virtual void set_custom_renderer() = 0;
+    virtual void set_custom_renderer(bool bOn) = 0;
     // create a virtual device compatible with the device passed in render_args wrt alpha
     virtual VclPtr<VirtualDevice> create_render_virtual_device() const = 0;
     // set a sub menu for a entry, only works with custom rendering
diff --git a/svtools/source/control/ctrlbox.cxx b/svtools/source/control/ctrlbox.cxx
index e60494a51097..555d35a94aa0 100644
--- a/svtools/source/control/ctrlbox.cxx
+++ b/svtools/source/control/ctrlbox.cxx
@@ -466,14 +466,16 @@ void FontNameBox::Fill( const FontList* pList )
         set_active_or_entry_text(aOldText);
 }
 
-void FontNameBox::EnableWYSIWYG()
+void FontNameBox::EnableWYSIWYG(bool bEnable)
 {
-    if (mbWYSIWYG || comphelper::LibreOfficeKit::isActive())
+    if (comphelper::LibreOfficeKit::isActive())
         return;
-    mbWYSIWYG = true;
+    if (mbWYSIWYG == bEnable)
+        return;
+    mbWYSIWYG = bEnable;
 
     static bool bGlobalsInited;
-    if (!bGlobalsInited)
+    if (mbWYSIWYG && !bGlobalsInited)
     {
         gUserItemSz = Size(m_xComboBox->get_approximate_digit_width() * 52, m_xComboBox->get_text_height());
         gUserItemSz.setHeight(gUserItemSz.Height() * 16);
@@ -485,11 +487,17 @@ void FontNameBox::EnableWYSIWYG()
         bGlobalsInited = true;
     }
 
-    m_xComboBox->connect_custom_get_size(LINK(this, FontNameBox, CustomGetSizeHdl));
-    m_xComboBox->connect_custom_render(LINK(this, FontNameBox, CustomRenderHdl));
-    m_xComboBox->set_custom_renderer();
-
-    mbWYSIWYG = true;
+    if (mbWYSIWYG)
+    {
+        m_xComboBox->connect_custom_get_size(LINK(this, FontNameBox, CustomGetSizeHdl));
+        m_xComboBox->connect_custom_render(LINK(this, FontNameBox, CustomRenderHdl));
+    }
+    else
+    {
+        m_xComboBox->connect_custom_get_size(Link<OutputDevice&, Size>());
+        m_xComboBox->connect_custom_render(Link<weld::ComboBox::render_args, void>());
+    }
+    m_xComboBox->set_custom_renderer(mbWYSIWYG);
 }
 
 IMPL_STATIC_LINK_NOARG(FontNameBox, CustomGetSizeHdl, OutputDevice&, Size)
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 732ad7d9f835..d64e033d6823 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -856,7 +856,7 @@ SvxStyleBox_Base::SvxStyleBox_Base(std::unique_ptr<weld::ComboBox> xWidget,
 
     m_xWidget->connect_custom_get_size(LINK(this, SvxStyleBox_Base, CustomGetSizeHdl));
     m_xWidget->connect_custom_render(LINK(this, SvxStyleBox_Base, CustomRenderHdl));
-    m_xWidget->set_custom_renderer();
+    m_xWidget->set_custom_renderer(true);
 
     m_xWidget->set_entry_width_chars(COMBO_WIDTH_IN_CHARS);
 }
@@ -1635,9 +1635,13 @@ void SvxFontNameBox_Base::ReleaseFocus_Impl()
 void SvxFontNameBox_Base::EnableControls_Impl()
 {
     SvtFontOptions aFontOpt;
-    bool bEnable = aFontOpt.IsFontHistoryEnabled();
-    sal_uInt16 nEntries = bEnable ? MAX_MRU_FONTNAME_ENTRIES : 0;
-    if (m_xWidget->get_max_mru_count() != nEntries)
+    bool bEnableMRU = aFontOpt.IsFontHistoryEnabled();
+    sal_uInt16 nEntries = bEnableMRU ? MAX_MRU_FONTNAME_ENTRIES : 0;
+
+    bool bNewWYSIWYG = aFontOpt.IsFontWYSIWYGEnabled();
+    bool bOldWYSIWYG = m_xWidget->IsWYSIWYGEnabled();
+
+    if (m_xWidget->get_max_mru_count() != nEntries || bNewWYSIWYG != bOldWYSIWYG)
     {
         // refill in the next GetFocus-Handler
         pFontList = nullptr;
@@ -1645,8 +1649,8 @@ void SvxFontNameBox_Base::EnableControls_Impl()
         m_xWidget->set_max_mru_count(nEntries);
     }
 
-    if (aFontOpt.IsFontWYSIWYGEnabled())
-        m_xWidget->EnableWYSIWYG();
+    if (bNewWYSIWYG != bOldWYSIWYG)
+        m_xWidget->EnableWYSIWYG(bNewWYSIWYG);
 }
 
 IMPL_LINK(SvxFontNameBox_Base, SelectHdl, weld::ComboBox&, rCombo, void)
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index a71c31941d51..5cde0ae6a4bd 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -910,7 +910,7 @@ public:
 
     virtual vcl::Font get_entry_font() override;
 
-    virtual void set_custom_renderer() override;
+    virtual void set_custom_renderer(bool bOn) override;
 
     virtual int get_max_mru_count() const override;
 
@@ -980,7 +980,7 @@ public:
 
     virtual vcl::Font get_entry_font() override;
 
-    virtual void set_custom_renderer() override;
+    virtual void set_custom_renderer(bool bOn) override;
 
     virtual int get_max_mru_count() const override;
 
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 535ac3566cde..930590fb7dc7 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -5739,7 +5739,7 @@ void SalInstanceComboBoxWithoutEdit::set_entry_font(const vcl::Font&) { assert(f
 
 vcl::Font SalInstanceComboBoxWithoutEdit::get_entry_font() { assert(false); return vcl::Font(); }
 
-void SalInstanceComboBoxWithoutEdit::set_custom_renderer()
+void SalInstanceComboBoxWithoutEdit::set_custom_renderer(bool /*bOn*/)
 {
     assert(false && "not implemented");
 }
@@ -5907,16 +5907,22 @@ vcl::Font SalInstanceComboBoxWithEdit::get_entry_font()
     return pEdit->GetPointFont(*pEdit);
 }
 
-void SalInstanceComboBoxWithEdit::set_custom_renderer()
+void SalInstanceComboBoxWithEdit::set_custom_renderer(bool bOn)
 {
+    if (m_xComboBox->IsUserDrawEnabled() == bOn)
+        return;
+
     auto nOldEntryHeight = m_xComboBox->GetDropDownEntryHeight();
     auto nDropDownLineCount = m_xComboBox->GetDropDownLineCount();
 
-    m_xComboBox->EnableUserDraw(true);
-    m_xComboBox->SetUserDrawHdl(LINK(this, SalInstanceComboBoxWithEdit, UserDrawHdl));
+    m_xComboBox->EnableUserDraw(bOn);
+    if (bOn)
+        m_xComboBox->SetUserDrawHdl(LINK(this, SalInstanceComboBoxWithEdit, UserDrawHdl));
+    else
+        m_xComboBox->SetUserDrawHdl(Link<UserDrawEvent*, void>());
 
     // adjust the line count to fit approx the height it would have been before
-    // using a custom renderer
+    // changing the renderer
     auto nNewEntryHeight = m_xComboBox->GetDropDownEntryHeight();
     double fRatio = nOldEntryHeight / static_cast<double>(nNewEntryHeight);
     m_xComboBox->SetDropDownLineCount(nDropDownLineCount * fRatio);
@@ -6082,7 +6088,7 @@ public:
 
     virtual bool changed_by_direct_pick() const override { return m_bTreeChange; }
 
-    virtual void set_custom_renderer() override
+    virtual void set_custom_renderer(bool /*bOn*/) override
     {
         assert(false && "not implemented");
     }
diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx
index 13a3bc8dfeaa..0de42f530856 100644
--- a/vcl/source/control/combobox.cxx
+++ b/vcl/source/control/combobox.cxx
@@ -1268,6 +1268,11 @@ void ComboBox::EnableUserDraw( bool bUserDraw )
     m_pImpl->m_pImplLB->GetMainWindow()->EnableUserDraw( bUserDraw );
 }
 
+bool ComboBox::IsUserDrawEnabled() const
+{
+    return m_pImpl->m_pImplLB->GetMainWindow()->IsUserDrawEnabled();
+}
+
 void ComboBox::DrawEntry(const UserDrawEvent& rEvt)
 {
     SAL_WARN_IF(rEvt.GetWindow() != m_pImpl->m_pImplLB->GetMainWindow(), "vcl", "DrawEntry?!");
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index e4449b121e41..f2b3b8fb310a 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -12739,6 +12739,7 @@ private:
     bool m_bAutoComplete;
     bool m_bAutoCompleteCaseSensitive;
     bool m_bChangedByMenu;
+    bool m_bCustomRenderer;
     bool m_bActivateCalled;
     gint m_nTextCol;
     gint m_nIdCol;
@@ -13752,6 +13753,7 @@ public:
         , m_bAutoComplete(false)
         , m_bAutoCompleteCaseSensitive(false)
         , m_bChangedByMenu(false)
+        , m_bCustomRenderer(false)
         , m_bActivateCalled(false)
         , m_nTextCol(gtk_combo_box_get_entry_text_column(pComboBox))
         , m_nIdCol(gtk_combo_box_get_id_column(pComboBox))
@@ -14274,22 +14276,34 @@ public:
         return m_bChangedByMenu;
     }
 
-    virtual void set_custom_renderer() override
+    virtual void set_custom_renderer(bool bOn) override
     {
+        if (bOn == m_bCustomRenderer)
+            return;
         GList* pColumns = gtk_tree_view_get_columns(m_pTreeView);
         // keep the original height around for optimal popup height calculation
-        m_nNonCustomLineHeight = ::get_height_row(m_pTreeView, pColumns);
+        m_nNonCustomLineHeight = bOn ? ::get_height_row(m_pTreeView, pColumns) : -1;
         GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(pColumns->data);
         gtk_cell_layout_clear(GTK_CELL_LAYOUT(pColumn));
-        GtkCellRenderer *pRenderer = custom_cell_renderer_surface_new();
-        GValue value = G_VALUE_INIT;
-        g_value_init(&value, G_TYPE_POINTER);
-        g_value_set_pointer(&value, static_cast<gpointer>(this));
-        g_object_set_property(G_OBJECT(pRenderer), "instance", &value);
-        gtk_tree_view_column_pack_start(pColumn, pRenderer, true);
-        gtk_tree_view_column_add_attribute(pColumn, pRenderer, "text", m_nTextCol);
-        gtk_tree_view_column_add_attribute(pColumn, pRenderer, "id", m_nIdCol);
+        if (bOn)
+        {
+            GtkCellRenderer *pRenderer = custom_cell_renderer_surface_new();
+            GValue value = G_VALUE_INIT;
+            g_value_init(&value, G_TYPE_POINTER);
+            g_value_set_pointer(&value, static_cast<gpointer>(this));
+            g_object_set_property(G_OBJECT(pRenderer), "instance", &value);
+            gtk_tree_view_column_pack_start(pColumn, pRenderer, true);
+            gtk_tree_view_column_add_attribute(pColumn, pRenderer, "text", m_nTextCol);
+            gtk_tree_view_column_add_attribute(pColumn, pRenderer, "id", m_nIdCol);
+        }
+        else
+        {
+            GtkCellRenderer *pRenderer = gtk_cell_renderer_text_new();
+            gtk_tree_view_column_pack_start(pColumn, pRenderer, true);
+            gtk_tree_view_column_add_attribute(pColumn, pRenderer, "text", m_nTextCol);
+        }
         g_list_free(pColumns);
+        m_bCustomRenderer = bOn;
     }
 
     void call_signal_custom_render(VirtualDevice& rOutput, const tools::Rectangle& rRect, bool bSelected, const OUString& rId)
@@ -14762,7 +14776,7 @@ public:
         return m_bTreeChange;
     }
 
-    virtual void set_custom_renderer() override
+    virtual void set_custom_renderer(bool /*bOn*/) override
     {
         assert(false && "not implemented");
     }


More information about the Libreoffice-commits mailing list