diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-07-31 12:05:59 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-07-31 16:22:18 +0200 |
commit | 954e9bb965c37a34d87d59e40d1820ba0ea565d3 (patch) | |
tree | a030224b2c2d0d19b39b2c6deee8c5f82bcaf70b /vcl | |
parent | 1ca386b8ed93957c47628ffe1e88e214a06d6c4e (diff) |
if the default renderer was editable, make the custom one editable too
Change-Id: Ib4c80560943cff7c65d9eed342e3d5bb9d838e5f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99866
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkinst.cxx | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 658c09ab756d..8b146867a287 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -10084,10 +10084,29 @@ public: assert(n_children() == 0 && "tree must be empty"); GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(g_list_nth_data(m_pColumns, nColumn)); assert(pColumn && "wrong count"); + + // migrate existing editable setting to the new renderer + gboolean is_editable(false); + void* pEditCellData(nullptr); + GList *pRenderers = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(pColumn)); + 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); + pEditCellData = g_object_get_data(G_OBJECT(pCellRenderer), "g-lo-CellIndex"); + break; + } + } + g_list_free(pRenderers); + + GtkCellRenderer* pRenderer; + gtk_cell_layout_clear(GTK_CELL_LAYOUT(pColumn)); if (bEnable) { - GtkCellRenderer *pRenderer = custom_cell_renderer_surface_new(); + 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)); @@ -10098,10 +10117,19 @@ public: } else { - GtkCellRenderer *pRenderer = gtk_cell_renderer_text_new(); + 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); } + + if (is_editable) + { + g_object_set(pRenderer, "editable", true, "editable-set", true, nullptr); + g_object_set_data(G_OBJECT(pRenderer), "g-lo-CellIndex", pEditCellData); + g_signal_connect(pRenderer, "editing-started", G_CALLBACK(signalCellEditingStarted), this); + g_signal_connect(pRenderer, "editing-canceled", G_CALLBACK(signalCellEditingCanceled), this); + g_signal_connect(pRenderer, "edited", G_CALLBACK(signalCellEdited), this); + } } virtual void queue_draw() override |