@@ -106,6 +106,11 @@ def __init__(self):
106106 "Halted" : QIcon (":/blank" ),
107107 "Blocked" : QIcon (":/ban" ),
108108 }
109+ self .preloadIcon = QIcon (":/preloaded" )
110+ self .preloadTooltip = (
111+ "Preloaded disposable qube\n \n To configure preloading, see Qubes Global "
112+ "Config and Qube Settings"
113+ )
109114 self .outdatedIcons = {
110115 "update" : QIcon (":/updateable" ),
111116 "outdated" : QIcon (":/outdated" ),
@@ -175,6 +180,11 @@ def paint(self, qp, option, index):
175180 .pixmap (iconSize ))
176181 left += delta
177182
183+ if index .data ()['is_preload' ]:
184+ qp .drawPixmap (iconRect .translated (left , 0 ),
185+ self .preloadIcon .pixmap (iconSize ))
186+ left += delta
187+
178188 qp .restore ()
179189
180190 def helpEvent (self , event , view , option , index ):
@@ -209,6 +219,7 @@ def helpEvent(self, event, view, option, index):
209219 else :
210220 QToolTip .showText (event .globalPos (),
211221 index .data ()['power' ], view )
222+
212223 else :
213224 margin = iconRect .left () - option .rect .left ()
214225 left = delta = margin + iconRect .width ()
@@ -223,7 +234,18 @@ def helpEvent(self, event, view, option, index):
223234 view )
224235 # shift the left *only* if the role is True, otherwise we
225236 # can assume that that icon doesn't exist at all
226- left += delta
237+ left += delta
238+
239+ if index .data ()['is_preload' ]:
240+ if event .pos () in iconRect .translated (left , 0 ):
241+ # see above (*)
242+ if index != self .lastIndex :
243+ QToolTip .showText (QPoint (), ' ' )
244+ QToolTip .showText (event .globalPos (), self .preloadTooltip , view )
245+ # shift the left *only* if the role is True, otherwise we
246+ # can assume that that icon doesn't exist at all
247+ left += delta
248+
227249 self .lastIndex = index
228250 return True
229251
@@ -241,7 +263,7 @@ def __init__(self, vm):
241263 self .icon = getattr (vm , 'icon' , 'appvm-black' )
242264 self .auto_cleanup = getattr (vm , 'auto_cleanup' , False )
243265
244- self .state = {'power' : "" , 'outdated' : "" }
266+ self .state = {'power' : "" , 'outdated' : "" , 'is_preload' : "" }
245267 self .updateable = getattr (vm , 'updateable' , False )
246268 self .update (True )
247269
@@ -327,6 +349,9 @@ def update(self, update_size_on_disk=False, event=None):
327349 if not event or event .endswith (':internal' ):
328350 self .internal = manager_utils .get_boolean_feature (
329351 self .vm , 'internal' )
352+ if not event or event .endswith (':is_preload' ):
353+ self .is_preload = getattr (self .vm , 'is_preload' , None )
354+ self .state ['is_preload' ] = getattr (self .vm , 'is_preload' , None )
330355
331356 if not event or event .endswith (':ip' ) or event .endswith (':netvm' ):
332357 if getattr (self .vm , 'netvm' , None ) \
@@ -467,7 +492,11 @@ def data(self, index, role):
467492 if col_name == "Disk Usage" :
468493 return vm .disk
469494 if col_name == "Internal" :
470- return "Yes" if vm .internal else ""
495+ if getattr (vm , "is_preload" , None ):
496+ return "Yes (preloaded)"
497+ if vm .internal :
498+ return "Yes"
499+ return ""
471500 if col_name == "IP Address" :
472501 return vm .ip
473502 if col_name == "Last backup" :
@@ -888,6 +917,8 @@ def __init__(self, qt_app, qubes_app, dispatcher, _parent=None):
888917 dispatcher .add_handler ('domain-add' , self .on_domain_added )
889918 dispatcher .add_handler ('domain-delete' , self .on_domain_removed )
890919
920+ dispatcher .add_handler ('property-reset:*' ,
921+ self .on_domain_changed )
891922 dispatcher .add_handler ('property-set:*' ,
892923 self .on_domain_changed )
893924 dispatcher .add_handler ('property-del:*' ,
0 commit comments