def del_tab(self, idx=None): """ Closes a tab. If 'idx' is set, it was called by a tabCloseRequested signal (maybe mid click). If not, it was called by a keyboard action and closes the currently active tab. Afterwards the active tab has focus on its webkit area. It closes the window when deleting the last active tab. """ if idx is None: idx = self.tab_widget.currentIndex() self.tab_widget.widget(idx).webkit.stop() self.last_closed = self.tab_widget.widget(idx).webkit.url() self.tab_widget.widget(idx).deleteLater() self.tab_widget.removeTab(idx) if len(self.tab_widget) == 0: close_managers() # also does an os.__exit else: self.tab_widget.currentWidget().webkit.setFocus()
def finalize(self): """ Just doing self.close() doesn't clean up; for example, closing when the address bar popup is visible doesn't close the popup, and leaves the window hidden and unclosable (except e.g. for KILL 15) Makes a hard app close through os._exit to prevent garbage collection; cleanup has typically done more harm than good. Any state that we may want to preserve we should do ourselves (e.g. cookies through the NAMs) """ idx = self.tab_widget.currentIndex() self.tab_widget.widget(idx).deleteLater() self.tab_widget.removeTab(idx) close_managers() # also does an os._exit