@@ -225,13 +225,23 @@ def _setup_callbacks(self) -> None:
225
225
self ._update_layers
226
226
)
227
227
228
+ @property
229
+ def _valid_layer_selection (self ) -> bool :
230
+ """
231
+ Return `True` if layer selection is valid.
232
+ """
233
+ return self .n_selected_layers in self .n_layers_input and all (
234
+ isinstance (layer , self .input_layer_types ) for layer in self .layers
235
+ )
236
+
228
237
def _update_layers (self , event : napari .utils .events .Event ) -> None :
229
238
"""
230
239
Update the ``layers`` attribute with currently selected layers and re-draw.
231
240
"""
232
241
self .layers = list (self .viewer .layers .selection )
233
242
self .layers = sorted (self .layers , key = lambda layer : layer .name )
234
- self .on_update_layers ()
243
+ if self ._valid_layer_selection :
244
+ self .on_update_layers ()
235
245
self ._draw ()
236
246
237
247
def _draw (self ) -> None :
@@ -244,10 +254,7 @@ def _draw(self) -> None:
244
254
with mplstyle .context (self .napari_theme_style_sheet ):
245
255
# everything should be done in the style context
246
256
self .clear ()
247
- if self .n_selected_layers in self .n_layers_input and all (
248
- isinstance (layer , self .input_layer_types )
249
- for layer in self .layers
250
- ):
257
+ if self ._valid_layer_selection :
251
258
self .draw ()
252
259
self .canvas .draw () # type: ignore[no-untyped-call]
253
260
@@ -270,6 +277,7 @@ def on_update_layers(self) -> None:
270
277
Called when the selected layers are updated.
271
278
272
279
This is a no-op, and is intended for derived classes to override.
280
+ It is only called if a selected layer is one of the input layer types.
273
281
"""
274
282
275
283
0 commit comments