fix showing after plugin hide and don't ignore close events

This commit is contained in:
Jakub Trllo 2022-06-17 15:31:51 +02:00
parent a6c0063841
commit 34a79bfec9

View file

@ -468,10 +468,8 @@ class Window(QtWidgets.QDialog):
current_page == "terminal"
)
self.state = {
"is_closing": False,
"current_page": current_page
}
self._current_page = current_page
self._hidden_for_plugin_process = False
self.tabs[current_page].setChecked(True)
@ -590,14 +588,14 @@ class Window(QtWidgets.QDialog):
target_page = page
if direction is None:
direction = -1
elif name == self.state["current_page"]:
elif name == self._current_page:
previous_page = page
if direction is None:
direction = 1
else:
page.setVisible(False)
self.state["current_page"] = target
self._current_page = target
self.slide_page(previous_page, target_page, direction)
def slide_page(self, previous_page, target_page, direction):
@ -684,7 +682,7 @@ class Window(QtWidgets.QDialog):
comment_visible=None,
terminal_filters_visibile=None
):
target = self.state["current_page"]
target = self._current_page
comment_visibility = (
not self.perspective_widget.isVisible()
and not target == "terminal"
@ -845,7 +843,7 @@ class Window(QtWidgets.QDialog):
def apply_log_suspend_value(self, value):
self._suspend_logs = value
if self.state["current_page"] == "terminal":
if self._current_page == "terminal":
self.tabs["overview"].setChecked(True)
self.tabs["terminal"].setVisible(not self._suspend_logs)
@ -882,9 +880,21 @@ class Window(QtWidgets.QDialog):
visibility = True
if hasattr(plugin, "hide_ui_on_process") and plugin.hide_ui_on_process:
visibility = False
self._hidden_for_plugin_process = not visibility
if self.isVisible() != visibility:
self.setVisible(visibility)
self._ensure_visible(visibility)
def _ensure_visible(self, visible):
if self.isVisible() == visible:
return
if not visible:
self.setVisible(visible)
else:
self.show()
self.raise_()
self.activateWindow()
self.showNormal()
def on_plugin_action_menu_requested(self, pos):
"""The user right-clicked on a plug-in
@ -955,7 +965,7 @@ class Window(QtWidgets.QDialog):
self.intent_box.setEnabled(True)
# Refresh tab
self.on_tab_changed(self.state["current_page"])
self.on_tab_changed(self._current_page)
self.update_compatibility()
self.button_suspend_logs.setEnabled(False)
@ -1027,8 +1037,9 @@ class Window(QtWidgets.QDialog):
self._update_state()
if not self.isVisible():
self.setVisible(True)
if self._hidden_for_plugin_process:
self._hidden_for_plugin_process = False
self._ensure_visible(True)
def on_was_skipped(self, plugin):
plugin_item = self.plugin_model.plugin_items[plugin.id]
@ -1103,8 +1114,9 @@ class Window(QtWidgets.QDialog):
plugin_item, instance_item
)
if not self.isVisible():
self.setVisible(True)
if self._hidden_for_plugin_process:
self._hidden_for_plugin_process = False
self._ensure_visible(True)
# -------------------------------------------------------------------------
#
@ -1223,53 +1235,20 @@ class Window(QtWidgets.QDialog):
"""
# Make it snappy, but take care to clean it all up.
# TODO(marcus): Enable GUI to return on problem, such
# as asking whether or not the user really wants to quit
# given there are things currently running.
self.hide()
self.info(self.tr("Closing.."))
if self.state["is_closing"]:
if self.controller.is_running:
self.info(self.tr("..as soon as processing is finished.."))
self.controller.stop()
# Explicitly clear potentially referenced data
self.info(self.tr("Cleaning up models.."))
self.intent_model.deleteLater()
self.plugin_model.deleteLater()
self.terminal_model.deleteLater()
self.terminal_proxy.deleteLater()
self.plugin_proxy.deleteLater()
self.info(self.tr("Cleaning up controller.."))
self.controller.cleanup()
self.overview_instance_view.setModel(None)
self.overview_plugin_view.setModel(None)
self.terminal_view.setModel(None)
self.info(self.tr("Cleaning up controller.."))
self.controller.cleanup()
self.info(self.tr("All clean!"))
self.info(self.tr("Good bye"))
return super(Window, self).closeEvent(event)
self.info(self.tr("Closing.."))
def on_problem():
self.heads_up(
"Warning", "Had trouble closing down. "
"Please tell someone and try again."
)
self.show()
if self.controller.is_running:
self.info(self.tr("..as soon as processing is finished.."))
self.controller.stop()
self.finished.connect(self.close)
util.defer(200, on_problem)
return event.ignore()
self.state["is_closing"] = True
util.defer(200, self.close)
return event.ignore()
event.accept()
def reject(self):
"""Handle ESC key"""