diff --git a/pyqtgraph/dockarea/Dock.py b/pyqtgraph/dockarea/Dock.py index ebc0c785..4493d075 100644 --- a/pyqtgraph/dockarea/Dock.py +++ b/pyqtgraph/dockarea/Dock.py @@ -7,6 +7,7 @@ from ..python2_3 import asUnicode class Dock(QtGui.QWidget, DockDrop): sigStretchChanged = QtCore.Signal() + sigClosed = QtCore.Signal(object) def __init__(self, name, area=None, size=(10, 10), widget=None, hideTitle=False, autoOrientation=True, closable=False): QtGui.QWidget.__init__(self) @@ -237,6 +238,7 @@ class Dock(QtGui.QWidget, DockDrop): self.label.setParent(None) self._container.apoptose() self._container = None + self.sigClosed.emit(self) def __repr__(self): return "" % (self.name(), self.stretch()) diff --git a/pyqtgraph/dockarea/DockArea.py b/pyqtgraph/dockarea/DockArea.py index d8e0c3a5..aedee749 100644 --- a/pyqtgraph/dockarea/DockArea.py +++ b/pyqtgraph/dockarea/DockArea.py @@ -172,8 +172,7 @@ class DockArea(Container, QtGui.QWidget, DockDrop): if self.home is None: area = DockArea(temporary=True, home=self) self.tempAreas.append(area) - win = QtGui.QMainWindow() - win.setCentralWidget(area) + win = TempAreaWindow(area) area.win = win win.show() else: @@ -309,6 +308,11 @@ class DockArea(Container, QtGui.QWidget, DockDrop): if self.temporary: self.home.removeTempArea(self) #self.close() + + def clear(self): + docks = self.findAll()[1] + for dock in docks.values(): + dock.close() ## PySide bug: We need to explicitly redefine these methods ## or else drag/drop events will not be delivered. @@ -324,5 +328,12 @@ class DockArea(Container, QtGui.QWidget, DockDrop): def dropEvent(self, *args): DockDrop.dropEvent(self, *args) - - + +class TempAreaWindow(QtGui.QMainWindow): + def __init__(self, area, **kwargs): + QtGui.QMainWindow.__init__(self, **kwargs) + self.setCentralWidget(area) + + def closeEvent(self, *args, **kwargs): + self.centralWidget().clear() + QtGui.QMainWindow.closeEvent(self, *args, **kwargs)