Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 2.0.3, 2.0.4, and 2.0.5

stable qtlib: Update DemandWidget not hold a strong reference to the create function

This stops DemandWidget from preventing disposal of the object to which the
createfunc belongs.

Changeset cba67ec6306e

Parent 6536a00ad721

by Daniel Atallah

Changes to 2 files · Browse files at cba67ec6306e Showing diff from parent 6536a00ad721 Diff from another changeset...

 
12
13
14
 
15
16
17
 
751
752
753
754
 
755
756
 
 
 
 
 
757
758
759
 
772
773
774
775
 
 
776
777
778
 
12
13
14
15
16
17
18
 
752
753
754
 
755
756
 
757
758
759
760
761
762
763
764
 
777
778
779
 
780
781
782
783
784
@@ -12,6 +12,7 @@
 import stat  import tempfile  import re +import weakref    from mercurial import extensions   @@ -751,9 +752,13 @@
 class DemandWidget(QWidget):   'Create a widget the first time it is shown'   - def __init__(self, createfunc, parent=None): + def __init__(self, createfuncname, createinst, parent=None):   super(DemandWidget, self).__init__(parent) - self._createfunc = createfunc + # We store a reference to the create function name to avoid having a + # hard reference to the bound function, which prevents it being + # disposed. Weak references to bound functions don't work. + self._createfuncname = createfuncname + self._createinst = weakref.ref(createinst)   self._widget = None   vbox = QVBoxLayout()   vbox.setContentsMargins(*(0,)*4) @@ -772,7 +777,8 @@
  def get(self):   """Returns the stored widget"""   if self._widget is None: - self._widget = self._createfunc() + func = getattr(self._createinst(), self._createfuncname, None) + self._widget = func()   self.layout().addWidget(self._widget)   return self._widget  
 
158
159
160
161
 
162
163
164
165
 
166
167
168
169
 
170
171
172
173
 
174
175
176
177
 
178
179
180
 
182
183
184
185
 
186
187
188
 
158
159
160
 
161
162
163
164
 
165
166
167
168
 
169
170
171
172
 
173
174
175
176
 
177
178
179
180
 
182
183
184
 
185
186
187
188
@@ -158,23 +158,23 @@
  self.logTabIndex = idx = tt.addTab(w, qtlib.geticon('hg-log'), '')   tt.setTabToolTip(idx, _("Revision details"))   - self.commitDemand = w = DemandWidget(self.createCommitWidget) + self.commitDemand = w = DemandWidget('createCommitWidget', self)   self.commitTabIndex = idx = tt.addTab(w, qtlib.geticon('hg-commit'), '')   tt.setTabToolTip(idx, _("Commit"))   - self.syncDemand = w = DemandWidget(self.createSyncWidget) + self.syncDemand = w = DemandWidget('createSyncWidget', self)   self.syncTabIndex = idx = tt.addTab(w, qtlib.geticon('thg-sync'), '')   tt.setTabToolTip(idx, _("Synchronize"))   - self.manifestDemand = w = DemandWidget(self.createManifestWidget) + self.manifestDemand = w = DemandWidget('createManifestWidget', self)   self.manifestTabIndex = idx = tt.addTab(w, qtlib.geticon('hg-annotate'), '')   tt.setTabToolTip(idx, _('Manifest'))   - self.grepDemand = w = DemandWidget(self.createGrepWidget) + self.grepDemand = w = DemandWidget('createGrepWidget', self)   self.grepTabIndex = idx = tt.addTab(w, qtlib.geticon('hg-grep'), '')   tt.setTabToolTip(idx, _("Search"))   - self.mqDemand = w = DemandWidget(self.createMQWidget) + self.mqDemand = w = DemandWidget('createMQWidget', self)   if 'mq' in self.repo.extensions():   self.mqTabIndex = idx = tt.addTab(w, qtlib.geticon('thg-mq'), '')   tt.setTabToolTip(idx, _("Patch Queue")) @@ -182,7 +182,7 @@
  else:   self.mqTabIndex = -1   - self.pbranchDemand = w = DemandWidget(self.createPatchBranchWidget) + self.pbranchDemand = w = DemandWidget('createPatchBranchWidget', self)   if 'pbranch' in self.repo.extensions():   self.pbranchTabIndex = idx = tt.addTab(w, qtlib.geticon('branch'), '')   tt.setTabToolTip(idx, _("Patch Branch"))