Fix AttributeError when moving mouse over worldview after closing tab
There is probably something wrong with overloading QWidget.destroy like this. I should rewrite the entire thing in C++ and regain control over object destruction.
This commit is contained in:
parent
d6049cabd5
commit
ac5c61a37c
@ -638,12 +638,12 @@ class MCEditApp(QtGui.QApplication):
|
||||
if session.closeTab():
|
||||
log.info("Closed session %s", str(session))
|
||||
self.tabWidget.removeTab(index)
|
||||
|
||||
# IMPORTANT: Even after removeTab is called, the tab widget must be unparented
|
||||
tab.setParent(None)
|
||||
self.removeSessionDockWidgets()
|
||||
self.undoGroup.removeStack(session.undoStack)
|
||||
self.sessions.remove(session)
|
||||
session.destroy()
|
||||
gc.collect()
|
||||
else:
|
||||
self.tabWidget.removeTab(index)
|
||||
|
@ -488,6 +488,13 @@ class EditorSession(QtCore.QObject):
|
||||
if hasattr(progress, 'progressCount') and progress.progressCount != progressMax:
|
||||
log.info("Update progressMax to %d, please.", progress.progressCount)
|
||||
|
||||
def destroy(self):
|
||||
self.worldEditor.close()
|
||||
self.worldEditor = None
|
||||
self.editorTab.destroy()
|
||||
|
||||
# Break all reference cycles just to be absolutely sure.
|
||||
self.__dict__.clear()
|
||||
|
||||
def _updateVersionsAndResourcePacks(self):
|
||||
self.mcVersionMapper = QtCore.QSignalMapper()
|
||||
@ -1165,14 +1172,9 @@ class EditorSession(QtCore.QObject):
|
||||
self.panels = None
|
||||
|
||||
self.editorTab.saveState()
|
||||
self.worldEditor.close()
|
||||
self.worldEditor = None
|
||||
# Break all reference cycles just to be absolutely sure.
|
||||
d = {'menus': self.menus, 'undoStack': self.undoStack}
|
||||
self.__dict__.clear()
|
||||
self.__dict__.update(d)
|
||||
return True
|
||||
|
||||
|
||||
# --- Inspector ---
|
||||
|
||||
def inspectBlock(self, pos):
|
||||
@ -1314,12 +1316,12 @@ class EditorTab(QtGui.QWidget):
|
||||
spacer.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
|
||||
self.viewButtonToolbar.addWidget(spacer)
|
||||
|
||||
def destroy(self):
|
||||
def destroy(self, *a, **kw):
|
||||
self.editorSession = None
|
||||
for view in self.views:
|
||||
view.destroy()
|
||||
|
||||
super(EditorTab, self).destroy()
|
||||
super(EditorTab, self).destroy(*a, **kw)
|
||||
|
||||
def setDayTime(self, value):
|
||||
if self.editorSession.textureAtlas:
|
||||
|
@ -188,11 +188,11 @@ class WorldView(QGLWidget):
|
||||
|
||||
self.setDimension(dimension)
|
||||
|
||||
def destroy(self):
|
||||
def destroy(self, *a, **kw):
|
||||
self.makeCurrent()
|
||||
self.renderGraph.destroy()
|
||||
self.bufferSwapThread.quit()
|
||||
super(WorldView, self).destroy()
|
||||
super(WorldView, self).destroy(*a, **kw)
|
||||
|
||||
def __str__(self):
|
||||
try:
|
||||
|
Reference in New Issue
Block a user