From c1b34a9fea15ab4e2c8b235815e4d96f641d6e5a Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Fri, 19 Jan 2024 17:49:50 +0000 Subject: [PATCH 1/3] ValaSymbolOutline: Lose global header * Use "Other Symbol" header when needed --- src/SymbolPane/SymbolOutline.vala | 2 -- src/SymbolPane/Vala/ValaSymbolOutline.vala | 41 ++++++++++++++++++---- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/SymbolPane/SymbolOutline.vala b/src/SymbolPane/SymbolOutline.vala index 97b506894d..98e14d64d3 100644 --- a/src/SymbolPane/SymbolOutline.vala +++ b/src/SymbolPane/SymbolOutline.vala @@ -27,8 +27,6 @@ public abstract class Scratch.Services.SymbolOutline : Object { construct { store = new Granite.Widgets.SourceList (); - root = new Granite.Widgets.SourceList.ExpandableItem (_("Symbols")); - store.root.add (root); set_up_css (); } diff --git a/src/SymbolPane/Vala/ValaSymbolOutline.vala b/src/SymbolPane/Vala/ValaSymbolOutline.vala index 5adedfd7ab..798a97766a 100644 --- a/src/SymbolPane/Vala/ValaSymbolOutline.vala +++ b/src/SymbolPane/Vala/ValaSymbolOutline.vala @@ -73,6 +73,7 @@ public class Scratch.Services.ValaSymbolOutline : Scratch.Services.SymbolOutline var new_root = construct_tree (cancellable); if (!cancellable.is_cancelled ()) { Idle.add (() => { + var symbol_header = new Granite.Widgets.SourceList.ExpandableItem (_("Other Symbols")); double adjustment_value = store.vadjustment.value; var root_children = store.root.children; // Keep reference to children for later destruction store.root.clear (); // This does not destroy children but disconnects signals - avoids terminal warnings @@ -80,7 +81,30 @@ public class Scratch.Services.ValaSymbolOutline : Scratch.Services.SymbolOutline destroy_all_children ((Granite.Widgets.SourceList.ExpandableItem)child); } - store.root.add (new_root); + + store.root = new_root; + foreach (var item in new_root.children) { + var child = (ValaSymbolItem)item; + if (child == null) { + continue; + } + + var new_child = new ValaSymbolItem (child.symbol); + if (child.parent.name == new_root.name && !(child.n_children > 0)) { + var parent_symbol = new_child.symbol.parent_symbol; + var existing = find_existing (new_child.symbol, new_root, cancellable); + if (existing == null || existing.parent == new_root) { + symbol_header.add (new_child); + } + } else { + store.root.add (new_child); + } + } + + if (symbol_header.n_children > 0) { + store.root.add (symbol_header); + } + store.root.expand_all (); store.vadjustment.set_value (adjustment_value); @@ -115,27 +139,32 @@ public class Scratch.Services.ValaSymbolOutline : Scratch.Services.SymbolOutline var new_root = new Granite.Widgets.SourceList.ExpandableItem (_("Symbols")); foreach (var symbol in symbols) { - if (cancellable.is_cancelled ()) + if (cancellable.is_cancelled ()) { break; + } var exist = find_existing (symbol, new_root, cancellable); - if (exist != null) + if (exist != null) { continue; + } - if (symbol.name == null) + if (symbol.name == null) { continue; + } construct_child (symbol, new_root, cancellable); } + return new_root; } private ValaSymbolItem construct_child (Vala.Symbol symbol, Granite.Widgets.SourceList.ExpandableItem given_parent, GLib.Cancellable cancellable) { Granite.Widgets.SourceList.ExpandableItem parent; - if (symbol.scope.parent_scope.owner.name == null) + if (symbol.scope.parent_scope.owner.name == null) { parent = given_parent; - else + } else { parent = find_existing (symbol.scope.parent_scope.owner, given_parent, cancellable); + } if (parent == null) { parent = construct_child (symbol.scope.parent_scope.owner, given_parent, cancellable); From a4efad3cf4f9c703aec534cdf1768edec41c1463 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Fri, 19 Jan 2024 18:01:13 +0000 Subject: [PATCH 2/3] Remove duplicate addition --- src/SymbolPane/Vala/ValaSymbolOutline.vala | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/SymbolPane/Vala/ValaSymbolOutline.vala b/src/SymbolPane/Vala/ValaSymbolOutline.vala index 798a97766a..821c4a9185 100644 --- a/src/SymbolPane/Vala/ValaSymbolOutline.vala +++ b/src/SymbolPane/Vala/ValaSymbolOutline.vala @@ -96,8 +96,6 @@ public class Scratch.Services.ValaSymbolOutline : Scratch.Services.SymbolOutline if (existing == null || existing.parent == new_root) { symbol_header.add (new_child); } - } else { - store.root.add (new_child); } } From 1bb920e2d96c0659e6cd4335a2380ea2788fa360 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Fri, 19 Jan 2024 18:07:01 +0000 Subject: [PATCH 3/3] Remove unused symbol --- src/SymbolPane/Vala/ValaSymbolOutline.vala | 1 - 1 file changed, 1 deletion(-) diff --git a/src/SymbolPane/Vala/ValaSymbolOutline.vala b/src/SymbolPane/Vala/ValaSymbolOutline.vala index 821c4a9185..6d7aa2bba0 100644 --- a/src/SymbolPane/Vala/ValaSymbolOutline.vala +++ b/src/SymbolPane/Vala/ValaSymbolOutline.vala @@ -91,7 +91,6 @@ public class Scratch.Services.ValaSymbolOutline : Scratch.Services.SymbolOutline var new_child = new ValaSymbolItem (child.symbol); if (child.parent.name == new_root.name && !(child.n_children > 0)) { - var parent_symbol = new_child.symbol.parent_symbol; var existing = find_existing (new_child.symbol, new_root, cancellable); if (existing == null || existing.parent == new_root) { symbol_header.add (new_child);