Redrawing /invalidation clarifications

Maybe I misunderstood how invalidation works, but I thought that invalidating a parent view in a layout would in turn invalidate also the child views.
Isn’t this the case?

I’ll put here a test case:


#include "MainWindow.h"

#include <Application.h>
#include <File.h>
#include <FindDirectory.h>
#include <InterfaceDefs.h>
#include <LayoutBuilder.h>
#include <ListView.h>
#include <MessageRunner.h>
#include <OutlineListView.h>
#include <ScrollView.h>
#include <StringItem.h>



rgb_color gColor = {123, 120, 80};

class Item : public BStringItem {
public:
	Item(const char* text,
		uint32 outlineLevel = 0,
		bool expanded = true);
	void DrawItem(BView* owner, BRect frame,
		bool complete = false) override;
};

Item::Item(const char* text,
		uint32 outlineLevel,
		bool expanded)
	:
	BStringItem(text, outlineLevel, expanded)
{
}

void
Item::DrawItem(BView* owner, BRect frame,
	bool complete)
{
	owner->SetHighColor(gColor);
	//owner->SetLowColor(gColor);
	//owner->DrawString(Text());
	BStringItem::DrawItem(owner, frame, complete);
}



MainWindow::MainWindow()
	:
	BWindow(BRect(100, 100, 500, 400), "My window", B_TITLED_WINDOW,
		B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE | B_SUPPORTS_LAYOUT)
{

	fListView = new BOutlineListView("listview");
	for (int32 i = 0; i < 10; i++) {
		BString itemName;
		itemName << i;
		fListView->AddItem(new Item(itemName));
	}
	BScrollView* scrollView = new BScrollView("scrollview", fListView, B_WILL_DRAW, true, true);

	fListView2 = new BOutlineListView("listview");
	for (int32 i = 0; i < 10; i++) {
		BString itemName;
		itemName << i;
		fListView2->AddItem(new Item(itemName));
	}
	BScrollView* scrollView2 = new BScrollView("scrollview", fListView2, B_WILL_DRAW, true, true);

	BLayoutBuilder::Group<>(this, B_HORIZONTAL, 0)
		.Add(scrollView)
		.Add(scrollView2)
		.End();

	BMessage message('mesg');
	BMessageRunner::StartSending(this,
									&message, 100000LL,
									5000);
}


MainWindow::~MainWindow()
{
}


void
MainWindow::MessageReceived(BMessage* message)
{
	switch (message->what) {
		case 'mesg':
		{
			gColor.red += 5;
			if (gColor.red > 255)
				gColor.red = 0;
			fListView->Parent()->Invalidate();
			fListView2->Invalidate();
			break;
		}
		default:
		{
			BWindow::MessageReceived(message);
			break;
		}
	}
}

The app creates two list views in a row. The cycle changes the item test color and invalidates.
The one on the right is invalidated directly, while the code invalidates the PARENT view of the one on the left.

The result is that items of the one on the left don’t change color.

Don’t know if my supposition is wrong or should I open a ticket.