diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-02-12 15:49:21 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-02-13 09:48:14 +0100 |
commit | 7c81a8f5a12b754efd06681e017066008f00afa6 (patch) | |
tree | 837086778633c2cb4e6b24ffa2bac0923fc2932e /vcl/unx/gtk3/gtk3gtkinst.cxx | |
parent | 9fd9da5739f5a99330af5601cd0a3a257f9dc529 (diff) |
tdf#130161 detect if a node already had an expansion attempt
and so isn't in child-on-demand mode anymore, in which case in basctl new
module/dialog children should be appended to it similarly to how they are added
if had been expanded in the earlier attempt
Change-Id: I75255fb743852c70e194bbf4828cd90b9112db79
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88544
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/unx/gtk3/gtk3gtkinst.cxx')
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkinst.cxx | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 177dfc7c5674..cb0adf9c57b2 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -8697,25 +8697,32 @@ private: return !pThis->signal_test_expand_row(*iter); } - bool signal_test_expand_row(GtkTreeIter& iter) + bool child_is_placeholder(GtkInstanceTreeIter& rGtkIter) const { - disable_notify_events(); - GtkInstanceTreeIter aIter(nullptr); - - // if there's a preexisting placeholder child, required to make this - // potentially expandable in the first place, now we remove it bool bPlaceHolder = false; GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore); GtkTreeIter tmp; - if (gtk_tree_model_iter_children(pModel, &tmp, &iter)) + if (gtk_tree_model_iter_children(pModel, &tmp, &rGtkIter.iter)) { - aIter.iter = tmp; - if (get_text(aIter, -1) == "<dummy>") + rGtkIter.iter = tmp; + if (get_text(rGtkIter, -1) == "<dummy>") { - gtk_tree_store_remove(m_pTreeStore, &tmp); bPlaceHolder = true; } } + return bPlaceHolder; + } + + bool signal_test_expand_row(GtkTreeIter& iter) + { + disable_notify_events(); + + // if there's a preexisting placeholder child, required to make this + // potentially expandable in the first place, now we remove it + GtkInstanceTreeIter aIter(iter); + bool bPlaceHolder = child_is_placeholder(aIter); + if (bPlaceHolder) + gtk_tree_store_remove(m_pTreeStore, &aIter.iter); aIter.iter = iter; bool bRet = signal_expanding(aIter); @@ -10008,6 +10015,13 @@ public: return ret; } + virtual bool get_children_on_demand(const weld::TreeIter& rIter) const override + { + const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter); + GtkInstanceTreeIter aIter(&rGtkIter); + return child_is_placeholder(aIter); + } + virtual void expand_row(const weld::TreeIter& rIter) override { assert(gtk_tree_view_get_model(m_pTreeView) && "don't expand when frozen"); |