From 540ac8eae0058d5821fe8e316c5e487aa11486fc Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 23 Dec 2020 16:47:46 +0100 Subject: [PATCH 01/14] pass styles to menu with giving a parent --- pype/tools/settings/settings/widgets/item_types.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pype/tools/settings/settings/widgets/item_types.py b/pype/tools/settings/settings/widgets/item_types.py index c5112473e6..9a6e850ff7 100644 --- a/pype/tools/settings/settings/widgets/item_types.py +++ b/pype/tools/settings/settings/widgets/item_types.py @@ -430,7 +430,7 @@ class SettingObject: return self.mouseReleaseEvent(event) return - menu = QtWidgets.QMenu() + menu = QtWidgets.QMenu(self) actions_mapping = {} if self.child_modified: From 68e7d6a9aa6ac0c5f846d4c71ffe82d76e7e3bb7 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 23 Dec 2020 16:48:38 +0100 Subject: [PATCH 02/14] category widget has states and state changes signals --- pype/tools/settings/settings/widgets/base.py | 50 +++++++++++++++++--- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/pype/tools/settings/settings/widgets/base.py b/pype/tools/settings/settings/widgets/base.py index 8e16c3614c..e074dcbf44 100644 --- a/pype/tools/settings/settings/widgets/base.py +++ b/pype/tools/settings/settings/widgets/base.py @@ -1,6 +1,7 @@ import os import copy import json +from enum import Enum from Qt import QtWidgets, QtCore, QtGui from pype.settings.constants import ( SYSTEM_SETTINGS_KEY, @@ -35,18 +36,44 @@ from avalon import io from avalon.vendor import qtawesome +class CategoryState(Enum): + Idle = object() + Working = object() + + class SettingsCategoryWidget(QtWidgets.QWidget): schema_category = None initial_schema_name = None + state_changed = QtCore.Signal() + def __init__(self, user_role, parent=None): super(SettingsCategoryWidget, self).__init__(parent) self.user_role = user_role + self._state = CategoryState.Idle + self.initialize_attributes() self.create_ui() - self.reset() + + @property + def state(self): + return self._state + + @state.setter + def state(self, value): + self.set_state(value) + + def set_state(self, state): + if self._state == state: + return + + self._state = state + self.state_changed.emit() + app = QtWidgets.QApplication.instance() + if app: + app.processEvents() def initialize_attributes(self): self._hide_studio_overrides = False @@ -84,7 +111,9 @@ class SettingsCategoryWidget(QtWidgets.QWidget): scroll_widget.setWidgetResizable(True) scroll_widget.setWidget(content_widget) - footer_widget = QtWidgets.QWidget() + configurations_widget = QtWidgets.QWidget(self) + + footer_widget = QtWidgets.QWidget(configurations_widget) footer_layout = QtWidgets.QHBoxLayout(footer_widget) if self.user_role == "developer": @@ -95,7 +124,6 @@ class SettingsCategoryWidget(QtWidgets.QWidget): footer_layout.addWidget(spacer_widget, 1) footer_layout.addWidget(save_btn, 0) - configurations_widget = QtWidgets.QWidget() configurations_layout = QtWidgets.QVBoxLayout(configurations_widget) configurations_layout.setContentsMargins(0, 0, 0, 0) configurations_layout.setSpacing(0) @@ -186,12 +214,15 @@ class SettingsCategoryWidget(QtWidgets.QWidget): input_field.hierarchical_style_update() def reset(self): + self.set_state(CategoryState.Working) + reset_default_settings() self.keys.clear() self.input_fields.clear() while self.content_layout.count() != 0: widget = self.content_layout.itemAt(0).widget() + widget.setVisible(False) self.content_layout.removeWidget(widget) widget.deleteLater() @@ -203,8 +234,11 @@ class SettingsCategoryWidget(QtWidgets.QWidget): self.add_children_gui(self.schema) self._update_values() + self.hierarchical_style_update() + self.set_state(CategoryState.Idle) + def items_are_valid(self): has_invalid = False for item in self.input_fields: @@ -233,12 +267,14 @@ class SettingsCategoryWidget(QtWidgets.QWidget): return False def _save(self): - if not self.items_are_valid(): - return + self.set_state(CategoryState.Working) - self.save() + if self.items_are_valid(): + self.save() - self._update_values() + self._update_values() + + self.set_state(CategoryState.Idle) def _on_refresh(self): self.reset() From 8563e53858a61a560f5e25a2c4a75b1e3e27e714 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 23 Dec 2020 16:49:25 +0100 Subject: [PATCH 03/14] added shadow widget to widgets.py --- .../settings/settings/widgets/widgets.py | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/pype/tools/settings/settings/widgets/widgets.py b/pype/tools/settings/settings/widgets/widgets.py index 092591c165..e9fa6d0326 100644 --- a/pype/tools/settings/settings/widgets/widgets.py +++ b/pype/tools/settings/settings/widgets/widgets.py @@ -2,6 +2,48 @@ from Qt import QtWidgets, QtCore, QtGui from avalon.vendor import qtawesome +class ShadowWidget(QtWidgets.QWidget): + def __init__(self, message, parent): + super(ShadowWidget, self).__init__(parent) + self.setObjectName("ShadowWidget") + + self.parent_widget = parent + self.message = message + + def wrapper(func): + def wrapped(*args, **kwarg): + result = func(*args, **kwarg) + self._update_geometry() + return result + return wrapped + + parent.resizeEvent = wrapper(parent.resizeEvent) + parent.moveEvent = wrapper(parent.moveEvent) + parent.showEvent = wrapper(parent.showEvent) + + def set_message(self, message): + self.message = message + if self.isVisible(): + self.repaint() + + def _update_geometry(self): + self.setGeometry(self.parent_widget.rect()) + + def paintEvent(self, event): + painter = QtGui.QPainter(self) + painter.setRenderHint(QtGui.QPainter.Antialiasing) + painter.fillRect( + event.rect(), QtGui.QBrush(QtGui.QColor(0, 0, 0, 127)) + ) + if self.message: + painter.drawText( + event.rect(), + QtCore.Qt.AlignCenter | QtCore.Qt.AlignCenter, + self.message + ) + painter.end() + + class IconButton(QtWidgets.QPushButton): def __init__(self, icon_name, color, hover_color, *args, **kwargs): super(IconButton, self).__init__(*args, **kwargs) From c2f9a42eb36983b901ecb696308f10bb5ad406f3 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 23 Dec 2020 16:50:28 +0100 Subject: [PATCH 04/14] main windows will set shadow widget to visible if any widget changed state to working --- pype/tools/settings/__init__.py | 1 + pype/tools/settings/settings/style/style.css | 3 ++ .../tools/settings/settings/widgets/window.py | 32 ++++++++++++++++++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/pype/tools/settings/__init__.py b/pype/tools/settings/__init__.py index 89abd262e8..3090adcf0a 100644 --- a/pype/tools/settings/__init__.py +++ b/pype/tools/settings/__init__.py @@ -20,6 +20,7 @@ def main(user_role=None): widget = MainWidget(user_role) widget.show() + widget.reset() sys.exit(app.exec_()) diff --git a/pype/tools/settings/settings/style/style.css b/pype/tools/settings/settings/style/style.css index 82313d5cfa..f3eb3a258e 100644 --- a/pype/tools/settings/settings/style/style.css +++ b/pype/tools/settings/settings/style/style.css @@ -193,6 +193,9 @@ QPushButton[btn-type="expand-toggle"] { background-color: #21252B; } +#ShadowWidget { + font-size: 36pt; +} QTabWidget::pane { border-top-style: none; } diff --git a/pype/tools/settings/settings/widgets/window.py b/pype/tools/settings/settings/widgets/window.py index 2dd5111d74..2b31d9b275 100644 --- a/pype/tools/settings/settings/widgets/window.py +++ b/pype/tools/settings/settings/widgets/window.py @@ -1,5 +1,6 @@ from Qt import QtWidgets, QtGui -from .base import SystemWidget, ProjectWidget +from .base import CategoryState, SystemWidget, ProjectWidget +from .widgets import ShadowWidget from .. import style @@ -31,3 +32,32 @@ class MainWidget(QtWidgets.QWidget): layout.addWidget(header_tab_widget) self.setLayout(layout) + + self.tab_widgets = [ + studio_widget, + project_widget + ] + + self._shadow_widget = ShadowWidget("Working...", self) + + for widget in self.tab_widgets: + widget.state_changed.connect(self._on_state_change) + + def _on_state_change(self): + any_working = False + for widget in self.tab_widgets: + if widget.state is CategoryState.Working: + any_working = True + break + + if ( + (any_working and self._shadow_widget.isVisible()) + or (not any_working and not self._shadow_widget.isVisible()) + ): + return + + self._shadow_widget.setVisible(any_working) + + def reset(self): + for widget in self.tab_widgets: + widget.reset() From 7cb1bb16e43569bb3fc3cc495ff507e96379021c Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Mon, 28 Dec 2020 11:19:46 +0100 Subject: [PATCH 05/14] change state of project change --- pype/tools/settings/settings/widgets/base.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pype/tools/settings/settings/widgets/base.py b/pype/tools/settings/settings/widgets/base.py index e074dcbf44..5986149a4e 100644 --- a/pype/tools/settings/settings/widgets/base.py +++ b/pype/tools/settings/settings/widgets/base.py @@ -578,6 +578,8 @@ class ProjectWidget(SettingsCategoryWidget): return True def _on_project_change(self): + self.set_state(CategoryState.Working) + project_name = self.project_list_widget.project_name() if project_name is None: _project_overrides = lib.NOT_SET @@ -602,6 +604,8 @@ class ProjectWidget(SettingsCategoryWidget): item.apply_overrides(overrides) self.ignore_value_changes = False + self.set_state(CategoryState.Idle) + def save(self): data = {} studio_overrides = bool(self.project_name is None) From 1ed85c84c35b5c6ad58d17a43cbf33273ced5bc0 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 30 Dec 2020 11:48:45 +0100 Subject: [PATCH 06/14] do not call reset on initialization of settings gui --- pype/tools/settings/__init__.py | 1 + pype/tools/settings/settings/widgets/base.py | 1 - pype/tools/settings/settings/widgets/window.py | 10 ++++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/pype/tools/settings/__init__.py b/pype/tools/settings/__init__.py index 89abd262e8..11ec83cc01 100644 --- a/pype/tools/settings/__init__.py +++ b/pype/tools/settings/__init__.py @@ -19,6 +19,7 @@ def main(user_role=None): app.setWindowIcon(QtGui.QIcon(style.app_icon_path())) widget = MainWidget(user_role) + widget.reset() widget.show() sys.exit(app.exec_()) diff --git a/pype/tools/settings/settings/widgets/base.py b/pype/tools/settings/settings/widgets/base.py index 8e16c3614c..03c59d977a 100644 --- a/pype/tools/settings/settings/widgets/base.py +++ b/pype/tools/settings/settings/widgets/base.py @@ -46,7 +46,6 @@ class SettingsCategoryWidget(QtWidgets.QWidget): self.initialize_attributes() self.create_ui() - self.reset() def initialize_attributes(self): self._hide_studio_overrides = False diff --git a/pype/tools/settings/settings/widgets/window.py b/pype/tools/settings/settings/widgets/window.py index 2dd5111d74..79b31b07b5 100644 --- a/pype/tools/settings/settings/widgets/window.py +++ b/pype/tools/settings/settings/widgets/window.py @@ -22,6 +22,7 @@ class MainWidget(QtWidgets.QWidget): studio_widget = SystemWidget(user_role, header_tab_widget) project_widget = ProjectWidget(user_role, header_tab_widget) + header_tab_widget.addTab(studio_widget, "System") header_tab_widget.addTab(project_widget, "Project") @@ -31,3 +32,12 @@ class MainWidget(QtWidgets.QWidget): layout.addWidget(header_tab_widget) self.setLayout(layout) + + self.tab_widgets = [ + studio_widget, + project_widget + ] + + def reset(self): + for tab_widget in self.tab_widgets: + tab_widget.reset() From 3d289214646de293f2912225c455332e4dd44c74 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 30 Dec 2020 11:52:50 +0100 Subject: [PATCH 07/14] call reset in settings action on show call --- pype/modules/settings_action.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pype/modules/settings_action.py b/pype/modules/settings_action.py index 0d56a6c5ae..c1fa8a68bc 100644 --- a/pype/modules/settings_action.py +++ b/pype/modules/settings_action.py @@ -45,8 +45,16 @@ class SettingsAction(PypeModule, ITrayAction): if not self.settings_window: raise AssertionError("Window is not initialized.") + # Store if was visible + was_visible = self.settings_window.isVisible() + + # Show settings gui self.settings_window.show() # Pull window to the front. self.settings_window.raise_() self.settings_window.activateWindow() + + # Reset content if was not visible + if not was_visible: + self.settings_window.reset() From f8958bbeb74f16b627d20e796c841804bcddb471 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Mon, 4 Jan 2021 13:47:49 +0100 Subject: [PATCH 08/14] settings category widget can be acknowledget that other widget was saved --- pype/tools/settings/settings/widgets/base.py | 8 ++++++++ pype/tools/settings/settings/widgets/window.py | 17 +++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/pype/tools/settings/settings/widgets/base.py b/pype/tools/settings/settings/widgets/base.py index 03c59d977a..3e0f27c7bc 100644 --- a/pype/tools/settings/settings/widgets/base.py +++ b/pype/tools/settings/settings/widgets/base.py @@ -39,6 +39,8 @@ class SettingsCategoryWidget(QtWidgets.QWidget): schema_category = None initial_schema_name = None + saved = QtCore.Signal(QtWidgets.QWidget) + def __init__(self, user_role, parent=None): super(SettingsCategoryWidget, self).__init__(parent) @@ -231,6 +233,10 @@ class SettingsCategoryWidget(QtWidgets.QWidget): first_invalid_item.setFocus(True) return False + def on_saved(self, saved_tab_widget): + """Callback on any tab widget save.""" + return + def _save(self): if not self.items_are_valid(): return @@ -239,6 +245,8 @@ class SettingsCategoryWidget(QtWidgets.QWidget): self._update_values() + self.saved.emit(self) + def _on_refresh(self): self.reset() diff --git a/pype/tools/settings/settings/widgets/window.py b/pype/tools/settings/settings/widgets/window.py index 79b31b07b5..d4182837fe 100644 --- a/pype/tools/settings/settings/widgets/window.py +++ b/pype/tools/settings/settings/widgets/window.py @@ -23,6 +23,11 @@ class MainWidget(QtWidgets.QWidget): studio_widget = SystemWidget(user_role, header_tab_widget) project_widget = ProjectWidget(user_role, header_tab_widget) + tab_widgets = [ + studio_widget, + project_widget + ] + header_tab_widget.addTab(studio_widget, "System") header_tab_widget.addTab(project_widget, "Project") @@ -33,10 +38,14 @@ class MainWidget(QtWidgets.QWidget): self.setLayout(layout) - self.tab_widgets = [ - studio_widget, - project_widget - ] + for tab_widget in tab_widgets: + tab_widget.saved.connect(self._on_tab_save) + + self.tab_widgets = tab_widgets + + def _on_tab_save(self, source_widget): + for tab_widget in self.tab_widgets: + tab_widget.on_saved(source_widget) def reset(self): for tab_widget in self.tab_widgets: From e09c2f6c6f70b4787e433d6a6f4a112347aa3a03 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Mon, 4 Jan 2021 13:49:58 +0100 Subject: [PATCH 09/14] project settings widget is using AvalonMongoDB instead of avalon.io --- pype/tools/settings/settings/widgets/base.py | 38 +++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/pype/tools/settings/settings/widgets/base.py b/pype/tools/settings/settings/widgets/base.py index 3e0f27c7bc..97af1d58c5 100644 --- a/pype/tools/settings/settings/widgets/base.py +++ b/pype/tools/settings/settings/widgets/base.py @@ -26,12 +26,17 @@ from pype.settings.lib import ( save_project_anatomy, apply_overrides, + get_system_settings, find_environments, DuplicatedEnvGroups ) from .widgets import UnsavedChangesDialog from . import lib -from avalon import io +from avalon.mongodb import ( + AvalonMongoConnection, + AvalonMongoDB, + session_data_from_environment +) from avalon.vendor import qtawesome @@ -440,7 +445,7 @@ class ProjectListWidget(QtWidgets.QWidget): self.project_list = project_list - self.refresh() + self.dbcon = None def on_item_clicked(self, new_index): new_project_name = new_index.data(QtCore.Qt.DisplayRole) @@ -508,10 +513,32 @@ class ProjectListWidget(QtWidgets.QWidget): model = self.project_list.model() model.clear() + items = [self.default] - io.install() - for project_doc in tuple(io.projects()): - items.append(project_doc["name"]) + + system_settings = get_system_settings() + mongo_url = system_settings["modules"]["avalon"]["AVALON_MONGO"] + if not mongo_url: + mongo_url = os.environ["PYPE_MONGO"] + + # Force uninstall of whole avalon connection if url does not match + # to current environment and set it as environment + if mongo_url != os.environ["AVALON_MONGO"]: + AvalonMongoConnection.uninstall(self.dbcon, force=True) + os.environ["AVALON_MONGO"] = mongo_url + self.dbcon = None + + if not self.dbcon: + try: + self.dbcon = AvalonMongoDB() + self.dbcon.install() + except Exception: + self.dbcon = None + self.current_project = None + + if self.dbcon: + for project_doc in tuple(self.dbcon.projects()): + items.append(project_doc["name"]) for item in items: model.appendRow(QtGui.QStandardItem(item)) @@ -534,6 +561,7 @@ class ProjectWidget(SettingsCategoryWidget): def ui_tweaks(self): project_list_widget = ProjectListWidget(self) + project_list_widget.refresh() self.main_layout.insertWidget(0, project_list_widget, 0) From 74036b55b0abc718c2177565848e5d0f04ea110d Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Mon, 4 Jan 2021 13:50:41 +0100 Subject: [PATCH 10/14] project widget is checking mongo url on other widget save and refresh project model if is different --- pype/tools/settings/settings/widgets/base.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/pype/tools/settings/settings/widgets/base.py b/pype/tools/settings/settings/widgets/base.py index 97af1d58c5..fe7945bdc9 100644 --- a/pype/tools/settings/settings/widgets/base.py +++ b/pype/tools/settings/settings/widgets/base.py @@ -576,6 +576,23 @@ class ProjectWidget(SettingsCategoryWidget): # Projects does not have any specific validations return True + def on_saved(self, saved_tab_widget): + """Callback on any tab widget save. + + Check if AVALON_MONGO is still same. + """ + if self is saved_tab_widget: + return + + system_settings = get_system_settings() + mongo_url = system_settings["modules"]["avalon"]["AVALON_MONGO"] + if not mongo_url: + mongo_url = os.environ["PYPE_MONGO"] + + # If mongo url is not the same as was then refresh projects + if mongo_url != os.environ["AVALON_MONGO"]: + self.project_list_widget.refresh() + def _on_project_change(self): project_name = self.project_list_widget.project_name() if project_name is None: From b54f370d4abeb3ee46c7b5974b90daa69b4a9951 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Mon, 4 Jan 2021 13:53:50 +0100 Subject: [PATCH 11/14] removed unused import --- pype/tools/settings/settings/widgets/base.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pype/tools/settings/settings/widgets/base.py b/pype/tools/settings/settings/widgets/base.py index fe7945bdc9..af9a86ef17 100644 --- a/pype/tools/settings/settings/widgets/base.py +++ b/pype/tools/settings/settings/widgets/base.py @@ -34,8 +34,7 @@ from .widgets import UnsavedChangesDialog from . import lib from avalon.mongodb import ( AvalonMongoConnection, - AvalonMongoDB, - session_data_from_environment + AvalonMongoDB ) from avalon.vendor import qtawesome From 1cde9cb37ab9bc6d293334f14ec5e3639df3c88c Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 6 Jan 2021 13:24:09 +0100 Subject: [PATCH 12/14] moved back removed code during merge resolving --- pype/tools/settings/settings/widgets/base.py | 1 + pype/tools/settings/settings/widgets/window.py | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/pype/tools/settings/settings/widgets/base.py b/pype/tools/settings/settings/widgets/base.py index 08536497a4..b32c5bf6ac 100644 --- a/pype/tools/settings/settings/widgets/base.py +++ b/pype/tools/settings/settings/widgets/base.py @@ -50,6 +50,7 @@ class SettingsCategoryWidget(QtWidgets.QWidget): initial_schema_name = None state_changed = QtCore.Signal() + saved = QtCore.Signal(QtWidgets.QWidget) def __init__(self, user_role, parent=None): super(SettingsCategoryWidget, self).__init__(parent) diff --git a/pype/tools/settings/settings/widgets/window.py b/pype/tools/settings/settings/widgets/window.py index 45f5cb8e95..5f3cc96e95 100644 --- a/pype/tools/settings/settings/widgets/window.py +++ b/pype/tools/settings/settings/widgets/window.py @@ -39,8 +39,11 @@ class MainWidget(QtWidgets.QWidget): self.setLayout(layout) + self._shadow_widget = ShadowWidget("Working...", self) + for tab_widget in tab_widgets: tab_widget.saved.connect(self._on_tab_save) + tab_widget.state_changed.connect(self._on_state_change) self.tab_widgets = tab_widgets @@ -48,6 +51,21 @@ class MainWidget(QtWidgets.QWidget): for tab_widget in self.tab_widgets: tab_widget.on_saved(source_widget) + def _on_state_change(self): + any_working = False + for widget in self.tab_widgets: + if widget.state is CategoryState.Working: + any_working = True + break + + if ( + (any_working and self._shadow_widget.isVisible()) + or (not any_working and not self._shadow_widget.isVisible()) + ): + return + + self._shadow_widget.setVisible(any_working) + def reset(self): for tab_widget in self.tab_widgets: tab_widget.reset() From dac091ef599735118fe9f51a7a2760c3791ee378 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 6 Jan 2021 13:59:48 +0100 Subject: [PATCH 13/14] removed doubled reset --- pype/tools/settings/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pype/tools/settings/__init__.py b/pype/tools/settings/__init__.py index a03cf48b07..3090adcf0a 100644 --- a/pype/tools/settings/__init__.py +++ b/pype/tools/settings/__init__.py @@ -19,7 +19,6 @@ def main(user_role=None): app.setWindowIcon(QtGui.QIcon(style.app_icon_path())) widget = MainWidget(user_role) - widget.reset() widget.show() widget.reset() From e90b16ed74877ed39e64ef712e0ee632e186c3de Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 6 Jan 2021 14:02:33 +0100 Subject: [PATCH 14/14] process events if visibility of shadow widget has changed --- pype/tools/settings/settings/widgets/base.py | 2 ++ pype/tools/settings/settings/widgets/window.py | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/pype/tools/settings/settings/widgets/base.py b/pype/tools/settings/settings/widgets/base.py index b32c5bf6ac..0a788e7684 100644 --- a/pype/tools/settings/settings/widgets/base.py +++ b/pype/tools/settings/settings/widgets/base.py @@ -76,6 +76,8 @@ class SettingsCategoryWidget(QtWidgets.QWidget): self._state = state self.state_changed.emit() + + # Process events so emitted signal is processed app = QtWidgets.QApplication.instance() if app: app.processEvents() diff --git a/pype/tools/settings/settings/widgets/window.py b/pype/tools/settings/settings/widgets/window.py index 5f3cc96e95..3afa47e3db 100644 --- a/pype/tools/settings/settings/widgets/window.py +++ b/pype/tools/settings/settings/widgets/window.py @@ -66,6 +66,11 @@ class MainWidget(QtWidgets.QWidget): self._shadow_widget.setVisible(any_working) + # Process events to apply shadow widget visibility + app = QtWidgets.QApplication.instance() + if app: + app.processEvents() + def reset(self): for tab_widget in self.tab_widgets: tab_widget.reset()