summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2022-07-22 15:29:34 +0100
committerMichael Stahl <michael.stahl@allotropia.de>2022-08-19 16:39:51 +0200
commit5b3e5b385a9171473417ae9a8298676525bbbbfe (patch)
tree237eea125e702ee3d6059f7cdae51b442d6e86aa /vcl
parent8eed692f8509aa8bdedc69d7d4ac328e220c3b42 (diff)
gtk: honour disabled columns from set_column_editable for start_editing
Change-Id: I3b49254b9bdaee1e10e82cc2cff0c4cbf52f74fc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137363 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx53
1 files changed, 40 insertions, 13 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index e3e62f8875ad..9f781a1ca775 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -9811,33 +9811,60 @@ public:
virtual void start_editing(const weld::TreeIter& rIter) override
{
- GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(g_list_nth_data(m_pColumns, m_nTextView));
- assert(pColumn && "wrong column");
-
const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
GtkTreePath* path = gtk_tree_model_get_path(pModel, const_cast<GtkTreeIter*>(&rGtkIter.iter));
- // allow editing of cells which are not usually editable, so we can have double click
- // do its usual row-activate but if we explicitly want to edit (remote files dialog)
+ GtkTreeViewColumn* pColumn = nullptr;
+
+ for (GList* pEntry = g_list_first(m_pColumns); pEntry; pEntry = g_list_next(pEntry))
+ {
+ GtkTreeViewColumn* pTestColumn = GTK_TREE_VIEW_COLUMN(pEntry->data);
+
+ // see if this column is editable
+ gboolean is_editable(false);
+ GList *pRenderers = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(pTestColumn));
+ for (GList* pRenderer = g_list_first(pRenderers); pRenderer; pRenderer = g_list_next(pRenderer))
+ {
+ GtkCellRenderer* pCellRenderer = GTK_CELL_RENDERER(pRenderer->data);
+ if (GTK_IS_CELL_RENDERER_TEXT(pCellRenderer))
+ {
+ g_object_get(pCellRenderer, "editable", &is_editable, nullptr);
+ if (is_editable)
+ {
+ pColumn = pTestColumn;
+ break;
+ }
+ }
+ }
+ g_list_free(pRenderers);
+
+ if (is_editable)
+ break;
+ }
+
+ // if nothing explicit editable, allow editing of cells which are not
+ // usually editable, so we can have double click do its usual
+ // row-activate but if we explicitly want to edit (remote files dialog)
// we can still do that
- GList *pRenderers = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(pColumn));
- for (GList* pRenderer = g_list_first(pRenderers); pRenderer; pRenderer = g_list_next(pRenderer))
+ if (!pColumn)
{
- GtkCellRenderer* pCellRenderer = GTK_CELL_RENDERER(pRenderer->data);
- if (GTK_IS_CELL_RENDERER_TEXT(pCellRenderer))
+ pColumn = GTK_TREE_VIEW_COLUMN(g_list_nth_data(m_pColumns, m_nTextView));
+ assert(pColumn && "wrong column");
+
+ GList *pRenderers = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(pColumn));
+ for (GList* pRenderer = g_list_first(pRenderers); pRenderer; pRenderer = g_list_next(pRenderer))
{
- gboolean is_editable(false);
- g_object_get(pCellRenderer, "editable", &is_editable, nullptr);
- if (!is_editable)
+ GtkCellRenderer* pCellRenderer = GTK_CELL_RENDERER(pRenderer->data);
+ if (GTK_IS_CELL_RENDERER_TEXT(pCellRenderer))
{
g_object_set(pCellRenderer, "editable", true, "editable-set", true, nullptr);
g_object_set_data(G_OBJECT(pCellRenderer), "g-lo-RestoreNonEditable", reinterpret_cast<gpointer>(true));
break;
}
}
+ g_list_free(pRenderers);
}
- g_list_free(pRenderers);
gtk_tree_view_set_cursor(m_pTreeView, path, pColumn, true);