summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-07-04 18:00:52 +0100
committerCaolán McNamara <caolanm@redhat.com>2020-07-05 16:42:39 +0200
commita5f95804c1a730fb393c33b49e6fbe0f5a5e9eac (patch)
tree44ceb650ccfa1e7e5178d8902ceb6f088acf47af /vcl
parent72bb13af1808b27a293e09a3ead2aadd049e9ec1 (diff)
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@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/salvtables.hxx4
-rw-r--r--vcl/source/app/salvtables.cxx18
-rw-r--r--vcl/source/control/combobox.cxx5
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx36
4 files changed, 44 insertions, 19 deletions
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");
}