@@ -55,9 +55,13 @@ package body GPS.Location_View.Listener is
55
55
new Glib.Main.Generic_Sources (Classic_Tree_Model);
56
56
57
57
procedure Update_Background_Color
58
- (Self : not null access Locations_Listener'Class;
59
- Message : not null access Abstract_Message'Class);
60
- -- Modify the background color of the file and category related to message
58
+ (Self : not null access Locations_Listener'Class;
59
+ Message : not null access Abstract_Message'Class;
60
+ Iter_Category : Gtk.Tree_Model.Gtk_Tree_Iter := Null_Iter;
61
+ Iter_File : Gtk.Tree_Model.Gtk_Tree_Iter := Null_Iter;
62
+ Iter_Message : Gtk.Tree_Model.Gtk_Tree_Iter := Null_Iter);
63
+ -- Modify the background color of the file and category related to message.
64
+ -- Uses iterators if set or find them by Message in another case.
61
65
62
66
procedure Refresh_Background_Color (Self : Classic_Tree_Model);
63
67
-- Refresh the background color after the deletions are finished
@@ -466,7 +470,9 @@ package body GPS.Location_View.Listener is
466
470
begin
467
471
-- Disable sorting till complete construction of the model
468
472
469
- if Self.Idle_Handler = Glib.Main.No_Source_Id then
473
+ if Self.Idle_Handler = Glib.Main.No_Source_Id
474
+ and then not Self.Kernel.Is_In_Destruction
475
+ then
470
476
Self.Idle_Handler :=
471
477
Classic_Tree_Model_Sources.Idle_Add
472
478
(On_Idle'Access , Classic_Tree_Model (Self));
@@ -620,21 +626,29 @@ package body GPS.Location_View.Listener is
620
626
-- ---------------------------
621
627
622
628
procedure Update_Background_Color
623
- (Self : not null access Locations_Listener'Class;
624
- Message : not null access Abstract_Message'Class)
629
+ (Self : not null access Locations_Listener'Class;
630
+ Message : not null access Abstract_Message'Class;
631
+ Iter_Category : Gtk.Tree_Model.Gtk_Tree_Iter := Null_Iter;
632
+ Iter_File : Gtk.Tree_Model.Gtk_Tree_Iter := Null_Iter;
633
+ Iter_Message : Gtk.Tree_Model.Gtk_Tree_Iter := Null_Iter)
625
634
is
626
635
627
- Category_Iter : Gtk.Tree_Model.Gtk_Tree_Iter;
628
- File_Iter : Gtk.Tree_Model.Gtk_Tree_Iter;
629
- Message_Iter : Gtk.Tree_Model.Gtk_Tree_Iter;
636
+ Category_Iter : Gtk.Tree_Model.Gtk_Tree_Iter := Iter_Category ;
637
+ File_Iter : Gtk.Tree_Model.Gtk_Tree_Iter := Iter_File ;
638
+ Message_Iter : Gtk.Tree_Model.Gtk_Tree_Iter := Iter_Message ;
630
639
Heaviest_Iter : Gtk.Tree_Model.Gtk_Tree_Iter;
631
640
632
641
begin
633
- Find_Message (Self => Self,
634
- Message => Message,
635
- Category_Iter => Category_Iter,
636
- File_Iter => File_Iter,
637
- Iter => Message_Iter);
642
+ if Message_Iter = Null_Iter
643
+ or else File_Iter = Null_Iter
644
+ or else Category_Iter = Null_Iter
645
+ then
646
+ Find_Message (Self => Self,
647
+ Message => Message,
648
+ Category_Iter => Category_Iter,
649
+ File_Iter => File_Iter,
650
+ Iter => Message_Iter);
651
+ end if ;
638
652
639
653
Heaviest_Iter := Find_Heaviest_In_Children_Of (Self.Model, File_Iter);
640
654
if Heaviest_Iter /= Null_Iter then
@@ -874,19 +888,24 @@ package body GPS.Location_View.Listener is
874
888
-- Gtk_New --
875
889
-- -----------
876
890
877
- procedure Gtk_New (Object : out Classic_Tree_Model) is
891
+ procedure Gtk_New
892
+ (Object : out Classic_Tree_Model;
893
+ Kernel : Kernel_Handle) is
878
894
begin
879
895
Object := new Classic_Tree_Model_Record;
880
- Initialize (Object);
896
+ Initialize (Object, Kernel );
881
897
end Gtk_New ;
882
898
883
899
-- --------------
884
900
-- Initialize --
885
901
-- --------------
886
902
887
- procedure Initialize (Self : access Classic_Tree_Model_Record'Class) is
903
+ procedure Initialize
904
+ (Self : access Classic_Tree_Model_Record'Class;
905
+ Kernel : Kernel_Handle) is
888
906
begin
889
907
Gtk.Tree_Store.Initialize (Self, Column_Types);
908
+ Self.Kernel := Kernel;
890
909
Self.Set_Default_Sort_Func (Compare_Nodes'Access );
891
910
Self.Set_Sort_Column_Id
892
911
(Gtk.Tree_Sortable.Default_Sort_Column_Id, Sort_Ascending);
@@ -1135,7 +1154,7 @@ package body GPS.Location_View.Listener is
1135
1154
File_Columns (1 .. File_Last), File_Values (1 .. File_Last));
1136
1155
end if ;
1137
1156
1138
- Update_Background_Color (Self, Message);
1157
+ Update_Background_Color (Self, Message, Category_Iter, File_Iter, Iter );
1139
1158
end Message_Added ;
1140
1159
1141
1160
-- ----------------------------
@@ -1181,7 +1200,9 @@ package body GPS.Location_View.Listener is
1181
1200
(Gtk_Tree_Store
1182
1201
(Self.Model), Iter, -Background_Color_Column, Bg);
1183
1202
Glib.Values.Unset (Bg);
1184
- Update_Background_Color (Self, Message);
1203
+
1204
+ Update_Background_Color
1205
+ (Self, Message, Category_Iter, File_Iter, Iter);
1185
1206
1186
1207
elsif Property = Markup_Property then
1187
1208
Self.Find_Message (Message, Category_Iter, File_Iter, Iter);
@@ -1243,6 +1264,11 @@ package body GPS.Location_View.Listener is
1243
1264
Iter : Gtk_Tree_Iter;
1244
1265
Need_Refresh : constant Boolean := not Self.Removed_Rows.Is_Empty;
1245
1266
begin
1267
+ if Self.Kernel.Get_Messages_Container.Get_Filter_Launched then
1268
+ -- Do nothing if we still filtering messages
1269
+ return True;
1270
+ end if ;
1271
+
1246
1272
Self.Idle_Handler := Glib.Main.No_Source_Id;
1247
1273
1248
1274
-- Remove idividual messages when it was not removed by removing of
@@ -1338,7 +1364,7 @@ package body GPS.Location_View.Listener is
1338
1364
1339
1365
-- Create GtkTreeModel
1340
1366
1341
- Gtk_New (Self.Model);
1367
+ Gtk_New (Self.Model, Kernel );
1342
1368
1343
1369
-- Register listener
1344
1370
0 commit comments