diff options
author | Micah Lee <micah@micahflee.com> | 2019-10-27 15:01:14 -0700 |
---|---|---|
committer | Micah Lee <micah@micahflee.com> | 2019-10-27 15:01:14 -0700 |
commit | df658a0e7057aa34fee5cadd9c50c17622f0bed1 (patch) | |
tree | 09273b0a52c169547c7eae08737c3b43db43aff9 /onionshare_gui/tab/tab.py | |
parent | fd2046b97629f7469c265b356cacb0e0c26635ab (diff) | |
download | onionshare-df658a0e7057aa34fee5cadd9c50c17622f0bed1.tar.gz onionshare-df658a0e7057aa34fee5cadd9c50c17622f0bed1.zip |
Allow closing tabs, and throw warning when trying to close tabs that contain an active server
Diffstat (limited to 'onionshare_gui/tab/tab.py')
-rw-r--r-- | onionshare_gui/tab/tab.py | 85 |
1 files changed, 49 insertions, 36 deletions
diff --git a/onionshare_gui/tab/tab.py b/onionshare_gui/tab/tab.py index 2a74e6e8..bb0e8d84 100644 --- a/onionshare_gui/tab/tab.py +++ b/onionshare_gui/tab/tab.py @@ -50,7 +50,7 @@ class Tab(QtWidgets.QWidget): self.status_bar = status_bar self.filenames = filenames - self.mode = self.common.gui.MODE_SHARE + self.mode = None # Start the OnionShare app self.app = OnionShare(common, self.common.gui.onion, self.common.gui.local_only) @@ -511,44 +511,57 @@ class Tab(QtWidgets.QWidget): """ self.status_bar.clearMessage() - def close_event(self, e): - self.common.log("Tab", "close_event") - try: - if self.mode == self.common.gui.MODE_WEBSITE: - server_status = self.share_mode.server_status - if self.mode == self.common.gui.MODE_WEBSITE: - server_status = self.website_mode.server_status + def close_tab(self): + self.common.log("Tab", "close_tab") + if self.mode is None: + return True + + if self.mode == self.common.gui.MODE_SHARE: + server_status = self.share_mode.server_status + elif self.mode == self.common.gui.MODE_RECEIVE: + server_status = self.receive_mode.server_status + else: + server_status = self.website_mode.server_status + + if server_status.status == server_status.STATUS_STOPPED: + return True + else: + self.common.log("Tab", "close_tab, opening warning dialog") + dialog = QtWidgets.QMessageBox() + dialog.setWindowTitle(strings._("gui_close_tab_warning_title")) + if self.mode == self.common.gui.MODE_SHARE: + dialog.setText(strings._("gui_close_tab_warning_share_description")) + elif self.mode == self.common.gui.MODE_RECEIVE: + dialog.setText(strings._("gui_close_tab_warning_receive_description")) else: - server_status = self.receive_mode.server_status - if server_status.status != server_status.STATUS_STOPPED: - self.common.log("MainWindow", "closeEvent, opening warning dialog") - dialog = QtWidgets.QMessageBox() - dialog.setWindowTitle(strings._("gui_quit_title")) - if self.mode == self.common.gui.MODE_WEBSITE: - dialog.setText(strings._("gui_share_quit_warning")) - else: - dialog.setText(strings._("gui_receive_quit_warning")) - dialog.setIcon(QtWidgets.QMessageBox.Critical) - quit_button = dialog.addButton( - strings._("gui_quit_warning_quit"), QtWidgets.QMessageBox.YesRole - ) - dont_quit_button = dialog.addButton( - strings._("gui_quit_warning_dont_quit"), - QtWidgets.QMessageBox.NoRole, - ) - dialog.setDefaultButton(dont_quit_button) - reply = dialog.exec_() - - # Quit - if reply == 0: - self.stop_server() - e.accept() - # Don't Quit + dialog.setText(strings._("gui_close_tab_warning_website_description")) + dialog.setIcon(QtWidgets.QMessageBox.Critical) + dialog.addButton( + strings._("gui_close_tab_warning_close"), QtWidgets.QMessageBox.YesRole + ) + cancel_button = dialog.addButton( + strings._("gui_close_tab_warning_cancel"), QtWidgets.QMessageBox.NoRole + ) + dialog.setDefaultButton(cancel_button) + reply = dialog.exec_() + + # Close + if reply == 0: + self.common.log("Tab", "close_tab", "close, closing tab") + + if self.mode == self.common.gui.MODE_SHARE: + self.share_mode.stop_server() + elif self.mode == self.common.gui.MODE_RECEIVE: + self.receive_mode.stop_server() else: - e.ignore() + self.website_mode.stop_server() - except: - e.accept() + self.app.cleanup() + return True + # Cancel + else: + self.common.log("Tab", "close_tab", "cancel, keeping tab open") + return False def cleanup(self): self.app.cleanup() |