def _onTabCloseRequested(self, index): """ Handle the close request for the given tab index. """ # Invoke the close slot later to allow the signal to return. container = self.widget(index) QMetaObject.invokeMethod(container, 'close', Qt.QueuedConnection)
def eventFilter(self, area, event): """ Filter the events on the dock area. This filter listens for contents changes on the dock area and will close the window when the dock area is empty. """ if event.type() == DockAreaContentsChanged and area.isEmpty(): # Hide the window so that it doesn't steal events from # the floating window when this window is closed. self.hide() # Close the window later so that the event filter can # return before the child dock area is destroyed. QMetaObject.invokeMethod(self, 'close', Qt.QueuedConnection) return False
def processArea(self, area): """ Process the contents change of a dock area. This will close the dock window if there is only one remaining container in the dock area. Parameters ---------- area : QDockArea The dock area whose contents have changed. """ window = area.parent() if isinstance(window, QDockWindow): widget = area.layoutWidget() if widget is None or isinstance(widget, QDockContainer): if window.isMaximized(): window.showNormal() geo = window.geometry() area.setLayoutWidget(None) if widget is not None: widget.float() widget.setGeometry(geo) attr = Qt.WA_ShowWithoutActivating old = widget.testAttribute(attr) widget.setAttribute(attr, True) widget.show() widget.setAttribute(attr, old) manager = widget.manager() if manager is not None: manager.stack_under_top(widget) # Hide before closing, or the window will steal mouse # events from the container being dragged, event though # the container has grabbed the mouse. window.hide() # Invoke the close slot later since it would remove this # event filter from the dock area while the event is in # process resulting in a segfault. QMetaObject.invokeMethod(window, 'close', Qt.QueuedConnection)