Merge pull request #639 from Dreyri/hiddenevent

Fix for the WidgetHiddenChanged event
This commit is contained in:
Adam
2018-03-19 21:00:12 -04:00
committed by GitHub
3 changed files with 56 additions and 6 deletions

View File

@@ -128,7 +128,7 @@ public class AttackIndicatorPlugin extends Plugin
@Subscribe
public void hideWidgets(WidgetHiddenChanged event)
{
if (event.getWidget().isHidden() || TO_GROUP(event.getWidget().getId()) != COMBAT_GROUP_ID)
if (event.getWidget().isSelfHidden() || TO_GROUP(event.getWidget().getId()) != COMBAT_GROUP_ID)
{
return;
}

View File

@@ -351,6 +351,44 @@ public abstract class RSWidgetMixin implements RSWidget
return bounds != null && bounds.contains(new java.awt.Point(point.getX(), point.getY()));
}
@Inject
@Override
public void broadcastHidden(boolean hidden)
{
WidgetHiddenChanged event = new WidgetHiddenChanged();
event.setWidget(this);
event.setHidden(hidden);
eventBus.post(event);
RSWidget[] children = getChildren();
if (children != null)
{
// recursive through children
for (RSWidget child : children)
{
// if the widget is hidden it will not magically unhide from its parent changing
if (child == null || child.isSelfHidden())
continue;
child.broadcastHidden(hidden);
}
}
// make sure we iterate nested children as well
// cannot be null
Widget[] nestedChildren = getNestedChildren();
for (Widget nestedChild : nestedChildren)
{
if (nestedChild == null || nestedChild.isSelfHidden())
continue;
((RSWidget) nestedChild).broadcastHidden(hidden);
}
}
@FieldHook("isHidden")
@Inject
public void onHiddenChanged(int idx)
@@ -362,12 +400,22 @@ public abstract class RSWidgetMixin implements RSWidget
return;
}
boolean hidden = isHidden();
Widget parent = getParent();
WidgetHiddenChanged event = new WidgetHiddenChanged();
event.setWidget(this);
event.setHidden(hidden);
eventBus.post(event);
// if the parent is hidden then changes in this widget don't have any visual effect
// so ignore them
if (parent != null)
{
if (parent.isHidden())
{
return;
}
}
else if (TO_GROUP(id) != client.getWidgetRoot())
{
return;
}
broadcastHidden(isSelfHidden());
}
}

View File

@@ -225,4 +225,6 @@ public interface RSWidget extends Widget
@Import("paddingY")
@Override
void setPaddingY(int paddingY);
void broadcastHidden(boolean hidden);
}