Merge pull request #3367 from pypeclub/bugfix/OP-3427_Nuke-publisher-tool-hiding-unexpectedly--

Pyblish Pype: Hiding/Close issues
This commit is contained in:
Jakub Trllo 2022-06-17 16:02:25 +02:00 committed by GitHub
commit adbabe2249
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -468,10 +468,8 @@ class Window(QtWidgets.QDialog):
current_page == "terminal" current_page == "terminal"
) )
self.state = { self._current_page = current_page
"is_closing": False, self._hidden_for_plugin_process = False
"current_page": current_page
}
self.tabs[current_page].setChecked(True) self.tabs[current_page].setChecked(True)
@ -590,14 +588,14 @@ class Window(QtWidgets.QDialog):
target_page = page target_page = page
if direction is None: if direction is None:
direction = -1 direction = -1
elif name == self.state["current_page"]: elif name == self._current_page:
previous_page = page previous_page = page
if direction is None: if direction is None:
direction = 1 direction = 1
else: else:
page.setVisible(False) page.setVisible(False)
self.state["current_page"] = target self._current_page = target
self.slide_page(previous_page, target_page, direction) self.slide_page(previous_page, target_page, direction)
def slide_page(self, 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, comment_visible=None,
terminal_filters_visibile=None terminal_filters_visibile=None
): ):
target = self.state["current_page"] target = self._current_page
comment_visibility = ( comment_visibility = (
not self.perspective_widget.isVisible() not self.perspective_widget.isVisible()
and not target == "terminal" and not target == "terminal"
@ -845,7 +843,7 @@ class Window(QtWidgets.QDialog):
def apply_log_suspend_value(self, value): def apply_log_suspend_value(self, value):
self._suspend_logs = value self._suspend_logs = value
if self.state["current_page"] == "terminal": if self._current_page == "terminal":
self.tabs["overview"].setChecked(True) self.tabs["overview"].setChecked(True)
self.tabs["terminal"].setVisible(not self._suspend_logs) self.tabs["terminal"].setVisible(not self._suspend_logs)
@ -882,9 +880,21 @@ class Window(QtWidgets.QDialog):
visibility = True visibility = True
if hasattr(plugin, "hide_ui_on_process") and plugin.hide_ui_on_process: if hasattr(plugin, "hide_ui_on_process") and plugin.hide_ui_on_process:
visibility = False visibility = False
self._hidden_for_plugin_process = not visibility
if self.isVisible() != visibility: self._ensure_visible(visibility)
self.setVisible(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): def on_plugin_action_menu_requested(self, pos):
"""The user right-clicked on a plug-in """The user right-clicked on a plug-in
@ -955,7 +965,7 @@ class Window(QtWidgets.QDialog):
self.intent_box.setEnabled(True) self.intent_box.setEnabled(True)
# Refresh tab # Refresh tab
self.on_tab_changed(self.state["current_page"]) self.on_tab_changed(self._current_page)
self.update_compatibility() self.update_compatibility()
self.button_suspend_logs.setEnabled(False) self.button_suspend_logs.setEnabled(False)
@ -1027,8 +1037,9 @@ class Window(QtWidgets.QDialog):
self._update_state() self._update_state()
if not self.isVisible(): if self._hidden_for_plugin_process:
self.setVisible(True) self._hidden_for_plugin_process = False
self._ensure_visible(True)
def on_was_skipped(self, plugin): def on_was_skipped(self, plugin):
plugin_item = self.plugin_model.plugin_items[plugin.id] plugin_item = self.plugin_model.plugin_items[plugin.id]
@ -1103,8 +1114,9 @@ class Window(QtWidgets.QDialog):
plugin_item, instance_item plugin_item, instance_item
) )
if not self.isVisible(): if self._hidden_for_plugin_process:
self.setVisible(True) 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. self.info(self.tr("Closing.."))
# 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()
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 controller.."))
self.info(self.tr("Cleaning up models..")) self.controller.cleanup()
self.intent_model.deleteLater()
self.plugin_model.deleteLater()
self.terminal_model.deleteLater()
self.terminal_proxy.deleteLater()
self.plugin_proxy.deleteLater()
self.overview_instance_view.setModel(None) self.overview_instance_view.setModel(None)
self.overview_plugin_view.setModel(None) self.overview_plugin_view.setModel(None)
self.terminal_view.setModel(None) self.terminal_view.setModel(None)
self.info(self.tr("Cleaning up controller..")) event.accept()
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()
def reject(self): def reject(self):
"""Handle ESC key""" """Handle ESC key"""