[gnome-builder] project-tree: handle selection chanages gracefully
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] project-tree: handle selection chanages gracefully
- Date: Mon, 8 Jan 2018 00:35:09 +0000 (UTC)
commit 5754d395b2b490acd9d91220ea07fb488f982da6
Author: Christian Hergert <chergert redhat com>
Date: Sun Jan 7 16:34:54 2018 -0800
project-tree: handle selection chanages gracefully
If we race against some other action changing the selected item, we might
not have a valid selection in the callbacks. So instead, we'll take a
reference to the tree node as GData to the popover (and then read that
back instead of reading the tree selection).
src/plugins/project-tree/gb-project-tree-actions.c | 15 +++++++++++----
1 files changed, 11 insertions(+), 4 deletions(-)
---
diff --git a/src/plugins/project-tree/gb-project-tree-actions.c
b/src/plugins/project-tree/gb-project-tree-actions.c
index dcf5bdb..383adec 100644
--- a/src/plugins/project-tree/gb-project-tree-actions.c
+++ b/src/plugins/project-tree/gb-project-tree-actions.c
@@ -427,7 +427,7 @@ gb_project_tree_actions__popover_create_file_cb (GbProjectTree *self,
(file_type == G_FILE_TYPE_REGULAR));
g_assert (GB_IS_NEW_FILE_POPOVER (popover));
- selected = dzl_tree_get_selected (DZL_TREE (self));
+ selected = g_object_get_data (G_OBJECT (popover), "DZL_TREE_NODE");
g_assert (selected != NULL);
g_assert (DZL_IS_TREE_NODE (selected));
@@ -469,10 +469,13 @@ gb_project_tree_actions__popover_closed_cb (GbProjectTree *self,
g_assert (GB_IS_PROJECT_TREE (self));
g_assert (GTK_IS_POPOVER (popover));
- if (!(selected = dzl_tree_get_selected (DZL_TREE (self))) || !self->expanded_in_new)
- return;
+ selected = g_object_get_data (G_OBJECT (popover), "DZL_TREE_NODE");
+
+ g_assert (selected != NULL);
+ g_assert (DZL_IS_TREE_NODE (selected));
- dzl_tree_node_collapse (selected);
+ if (self->expanded_in_new)
+ dzl_tree_node_collapse (selected);
}
static void
@@ -555,6 +558,10 @@ again:
"file-type", file_type,
"position", GTK_POS_RIGHT,
NULL);
+ g_object_set_data_full (G_OBJECT (popover),
+ "DZL_TREE_NODE",
+ g_object_ref (selected),
+ g_object_unref);
g_signal_connect_object (popover,
"create-file",
G_CALLBACK (gb_project_tree_actions__popover_create_file_cb),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]