@@ -112,6 +112,7 @@ def __init__(self, app_name, qapp, dispatcher):
112112 self .vms : Set [backend .VM ] = set ()
113113 self .dispvm_templates : Set [backend .VM ] = set ()
114114 self .parent_ports_to_hide = []
115+ self .cameras_to_hide = []
115116 self .active_usbvms : Set [backend .VM ] = set ()
116117 self .dormant_usbvms : Set [backend .VM ] = set ()
117118 self .dev_update_queue : Set = set ()
@@ -266,6 +267,10 @@ def device_added(self, vm, _event, device):
266267 if dev .parent :
267268 for potential_parent in self .devices .values ():
268269 if potential_parent .port == dev .parent :
270+ # hide parents of webcams
271+ if dev .device_class == "webcam" :
272+ self .cameras_to_hide .append (dev .parent )
273+ potential_parent .hide_this_device = True
269274 potential_parent .has_children = True
270275 break
271276
@@ -310,6 +315,12 @@ def device_removed(self, vm, _event, port):
310315 microphone .devices_to_attach_with_me .remove (dev )
311316 if dev .port in self .parent_ports_to_hide :
312317 self .parent_ports_to_hide .remove (dev .port )
318+ if dev .parent in self .cameras_to_hide :
319+ for potential_parent in self .devices .values ():
320+ if potential_parent .port == dev .parent :
321+ potential_parent .hide_this_device = False
322+ break
323+ self .cameras_to_hide .remove (dev .parent )
313324 del self .devices [dev_id ]
314325
315326 def initialize_dev_data (self ):
@@ -351,6 +362,12 @@ def initialize_dev_data(self):
351362 # we have no permission to access VM's devices
352363 continue
353364
365+ # hide parents of webcams
366+ for device in self .devices .values ():
367+ if device .device_class == "webcam" :
368+ if device .parent :
369+ self .cameras_to_hide .append (device .parent )
370+
354371 def device_assigned (self , vm , _event , device , ** _kwargs ):
355372 dev_id = backend .Device .id_from_device (device )
356373 if dev_id not in self .devices :
@@ -519,6 +536,9 @@ def initialize_features(self, *_args, **_kwargs):
519536 dev .show_children = False
520537
521538 self .hide_child_devices ()
539+ for dev in self .devices .values ():
540+ if dev .port in self .cameras_to_hide :
541+ dev .hide_this_device = True
522542
523543 def hide_child_devices (
524544 self , parent_port : Optional [str ] = None , state : bool = False
0 commit comments