Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Commit 6bef00e

Browse files
MortimerGorobluemarvin
authored andcommitted
Update children widgets recursively (#2346)
1 parent f889ece commit 6bef00e

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

app/src/main/cpp/BrowserWorld.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1042,6 +1042,16 @@ BrowserWorld::UpdateWidget(int32_t aHandle, const WidgetPlacementPtr& aPlacement
10421042
LayoutWidget(aHandle);
10431043
}
10441044

1045+
void
1046+
BrowserWorld::UpdateWidgetRecursive(int32_t aHandle, const WidgetPlacementPtr& aPlacement) {
1047+
UpdateWidget(aHandle, aPlacement);
1048+
for (WidgetPtr& widget: m.widgets) {
1049+
if (widget->GetPlacement() && widget->GetPlacement()->parentHandle == aHandle) {
1050+
UpdateWidgetRecursive(widget->GetHandle(), widget->GetPlacement());
1051+
}
1052+
}
1053+
}
1054+
10451055
void
10461056
BrowserWorld::RemoveWidget(int32_t aHandle) {
10471057
ASSERT_ON_RENDER_THREAD();
@@ -1514,7 +1524,7 @@ JNI_METHOD(void, updateWidgetNative)
15141524
(JNIEnv* aEnv, jobject, jint aHandle, jobject aPlacement) {
15151525
crow::WidgetPlacementPtr placement = crow::WidgetPlacement::FromJava(aEnv, aPlacement);
15161526
if (placement) {
1517-
crow::BrowserWorld::Instance().UpdateWidget(aHandle, placement);
1527+
crow::BrowserWorld::Instance().UpdateWidgetRecursive(aHandle, placement);
15181528
}
15191529
}
15201530

app/src/main/cpp/BrowserWorld.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class BrowserWorld {
4545
void SetSurfaceTexture(const std::string& aName, jobject& aSurface);
4646
void AddWidget(int32_t aHandle, const WidgetPlacementPtr& placement);
4747
void UpdateWidget(int32_t aHandle, const WidgetPlacementPtr& aPlacement);
48+
void UpdateWidgetRecursive(int32_t aHandle, const WidgetPlacementPtr& aPlacement);
4849
void RemoveWidget(int32_t aHandle);
4950
void StartWidgetResize(int32_t aHandle, const vrb::Vector& aMaxSize, const vrb::Vector& aMinSize);
5051
void FinishWidgetResize(int32_t aHandle);

0 commit comments

Comments
 (0)