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