by
Changes to 4 files · Browse files at 29aa68cd530d Showing diff from parent 3f6f376699c4 fdd30e1ca71e Diff from another changeset...
@@ -13,6 +13,7 @@ import subprocess
import tempfile
import re
+import weakref
from mercurial import extensions, util
@@ -816,9 +817,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)
@@ -837,7 +842,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
|
@@ -12,7 +12,7 @@ from tortoisehg.hgqt.i18n import _
from tortoisehg.hgqt import revset, qtlib
-_permanent_queries = ('head()', 'merge()', 'tagged()', 'file(".hgsubstate")')
+_permanent_queries = ('head()', 'merge()', 'tagged()', 'file(".hgsubstate") or file(".hgsub")')
class RepoFilterBar(QToolBar):
"""Toolbar for RepoWidget to filter changesets"""
|
@@ -158,11 +158,11 @@ 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.mqDemand = w = DemandWidget(self.createMQWidget)
+ self.mqDemand = w = DemandWidget('createMQWidget', self)
idx = tt.addTab(w, qtlib.geticon('thg-mq'), '')
if 'mq' in self.repo.extensions():
self.mqTabIndex = idx
@@ -171,19 +171,19 @@ else:
self.mqTabIndex = -1
- 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.pbranchDemand = w = DemandWidget(self.createPatchBranchWidget)
+ self.pbranchDemand = w = DemandWidget('createPatchBranchWidget', self)
idx = tt.addTab(w, qtlib.geticon('branch'), '')
if 'pbranch' in self.repo.extensions():
self.pbranchTabIndex = idx
|
@@ -464,6 +464,7 @@ index = self.repoTabsWidget.currentIndex()
if widget.closeRepoWidget():
self.repoTabsWidget.removeTab(index)
+ widget.deleteLater()
self.updateMenu()
def repoTabCloseRequested(self, index):
@@ -471,6 +472,7 @@ w = tw.widget(index)
if w and w.closeRepoWidget():
tw.removeTab(index)
+ w.deleteLater()
self.updateMenu()
def repoTabChanged(self, index=0):
|
Loading...