@@ -318,6 +318,7 @@ public boolean onMousePressed(int mouseButton) {
318318 return true ;
319319 } else {
320320 for (LocatedWidget widget : this .hovering ) {
321+ if (widget .getElement () == null || !widget .getElement ().isValid ()) continue ;
321322 widget .applyMatrix (getContext ());
322323 IWidget w = widget .getElement ();
323324 if (w instanceof IDragResizeable resizeable && widget .getAdditionalHoverInfo () instanceof ResizeDragArea dragArea ) {
@@ -423,6 +424,7 @@ public boolean onMouseRelease(int mouseButton) {
423424 boolean tryTap = this .mouse .tryTap (mouseButton );
424425 // first see if the clicked widget is still hovered and try to interact with it
425426 for (LocatedWidget widget : this .hovering ) {
427+ if (widget .getElement () == null || !widget .getElement ().isValid ()) continue ;
426428 if (this .mouse .isWidget (widget )) {
427429 if (widget .getElement () instanceof Interactable interactable &&
428430 onMouseRelease (mouseButton , tryTap , widget , interactable )) {
@@ -434,8 +436,8 @@ public boolean onMouseRelease(int mouseButton) {
434436 }
435437 // now try all other hovered
436438 for (LocatedWidget widget : this .hovering ) {
437- if (! this . mouse . isWidget ( widget ) && widget .getElement () instanceof Interactable interactable &&
438- onMouseRelease (mouseButton , tryTap , widget , interactable )) {
439+ if (widget . getElement () == null || ! widget .getElement (). isValid ()) continue ;
440+ if (! this . mouse . isWidget ( widget ) && widget . getElement () instanceof Interactable interactable && onMouseRelease (mouseButton , tryTap , widget , interactable )) {
439441 return true ;
440442 }
441443 }
@@ -484,6 +486,7 @@ public boolean onKeyPressed(char typedChar, int keyCode) {
484486 LocatedWidget pressed = null ;
485487 boolean result = false ;
486488 for (LocatedWidget widget : this .hovering ) {
489+ if (widget .getElement () == null || !widget .getElement ().isValid ()) continue ;
487490 if (widget .getElement () instanceof Interactable interactable ) {
488491 widget .applyMatrix (getContext ());
489492 Interactable .Result interactResult = interactable .onKeyPressed (typedChar , keyCode );
@@ -603,7 +606,8 @@ public boolean onMouseDrag(int mouseButton, long timeSinceClick) {
603606 if (this .mouse .held &&
604607 mouseButton == this .mouse .lastButton &&
605608 this .mouse .lastPressed != null &&
606- this .mouse .lastPressed .getElement () instanceof Interactable interactable ) {
609+ this .mouse .lastPressed .getElement () instanceof Interactable interactable &&
610+ this .mouse .lastPressed .getElement ().isValid ()) {
607611 this .mouse .lastPressed .applyMatrix (getContext ());
608612 interactable .onMouseDrag (mouseButton , timeSinceClick );
609613 this .mouse .lastPressed .unapplyMatrix (getContext ());
@@ -617,7 +621,7 @@ public boolean onMouseDrag(int mouseButton, long timeSinceClick) {
617621 private <T , W extends IWidget & IFocusedWidget & Interactable > T interactFocused (Function <W , T > function , T defaultValue ) {
618622 LocatedWidget focused = this .getContext ().getFocusedWidget ();
619623 T result = defaultValue ;
620- if (focused .getElement () instanceof Interactable interactable ) {
624+ if (focused .getElement () instanceof Interactable interactable && focused . getElement (). isValid () ) {
621625 focused .applyMatrix (getContext ());
622626 result = function .apply ((W ) interactable );
623627 focused .unapplyMatrix (getContext ());
0 commit comments