summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-07-31 12:05:59 +0100
committerCaolán McNamara <caolanm@redhat.com>2020-07-31 16:22:18 +0200
commit954e9bb965c37a34d87d59e40d1820ba0ea565d3 (patch)
treea030224b2c2d0d19b39b2c6deee8c5f82bcaf70b /vcl
parent1ca386b8ed93957c47628ffe1e88e214a06d6c4e (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.cxx32
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