@@ -55,9 +55,13 @@ package body GPS.Location_View.Listener is
5555 new Glib.Main.Generic_Sources (Classic_Tree_Model);
5656
5757 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.
6165
6266 procedure Refresh_Background_Color (Self : Classic_Tree_Model);
6367 -- Refresh the background color after the deletions are finished
@@ -466,7 +470,9 @@ package body GPS.Location_View.Listener is
466470 begin
467471 -- Disable sorting till complete construction of the model
468472
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
470476 Self.Idle_Handler :=
471477 Classic_Tree_Model_Sources.Idle_Add
472478 (On_Idle'Access , Classic_Tree_Model (Self));
@@ -620,21 +626,29 @@ package body GPS.Location_View.Listener is
620626 -- ---------------------------
621627
622628 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)
625634 is
626635
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 ;
630639 Heaviest_Iter : Gtk.Tree_Model.Gtk_Tree_Iter;
631640
632641 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 ;
638652
639653 Heaviest_Iter := Find_Heaviest_In_Children_Of (Self.Model, File_Iter);
640654 if Heaviest_Iter /= Null_Iter then
@@ -874,19 +888,24 @@ package body GPS.Location_View.Listener is
874888 -- Gtk_New --
875889 -- -----------
876890
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
878894 begin
879895 Object := new Classic_Tree_Model_Record;
880- Initialize (Object);
896+ Initialize (Object, Kernel );
881897 end Gtk_New ;
882898
883899 -- --------------
884900 -- Initialize --
885901 -- --------------
886902
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
888906 begin
889907 Gtk.Tree_Store.Initialize (Self, Column_Types);
908+ Self.Kernel := Kernel;
890909 Self.Set_Default_Sort_Func (Compare_Nodes'Access );
891910 Self.Set_Sort_Column_Id
892911 (Gtk.Tree_Sortable.Default_Sort_Column_Id, Sort_Ascending);
@@ -1135,7 +1154,7 @@ package body GPS.Location_View.Listener is
11351154 File_Columns (1 .. File_Last), File_Values (1 .. File_Last));
11361155 end if ;
11371156
1138- Update_Background_Color (Self, Message);
1157+ Update_Background_Color (Self, Message, Category_Iter, File_Iter, Iter );
11391158 end Message_Added ;
11401159
11411160 -- ----------------------------
@@ -1181,7 +1200,9 @@ package body GPS.Location_View.Listener is
11811200 (Gtk_Tree_Store
11821201 (Self.Model), Iter, -Background_Color_Column, Bg);
11831202 Glib.Values.Unset (Bg);
1184- Update_Background_Color (Self, Message);
1203+
1204+ Update_Background_Color
1205+ (Self, Message, Category_Iter, File_Iter, Iter);
11851206
11861207 elsif Property = Markup_Property then
11871208 Self.Find_Message (Message, Category_Iter, File_Iter, Iter);
@@ -1243,6 +1264,11 @@ package body GPS.Location_View.Listener is
12431264 Iter : Gtk_Tree_Iter;
12441265 Need_Refresh : constant Boolean := not Self.Removed_Rows.Is_Empty;
12451266 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+
12461272 Self.Idle_Handler := Glib.Main.No_Source_Id;
12471273
12481274 -- Remove idividual messages when it was not removed by removing of
@@ -1338,7 +1364,7 @@ package body GPS.Location_View.Listener is
13381364
13391365 -- Create GtkTreeModel
13401366
1341- Gtk_New (Self.Model);
1367+ Gtk_New (Self.Model, Kernel );
13421368
13431369 -- Register listener
13441370
0 commit comments