From 42eca76ef8f2ebdfd89d72e0b4401e58fe4f2c65 Mon Sep 17 00:00:00 2001 From: Julien Langlois Date: Thu, 4 Sep 2025 16:44:00 -0700 Subject: [PATCH 1/2] Generate the dynamic menu for Houdini before the app starts Workaround for odd behavior in Houdini 21.0+ not seeing the menu file if created by a startup script --- startup.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/startup.py b/startup.py index 850b2af..c5cd900 100644 --- a/startup.py +++ b/startup.py @@ -131,6 +131,28 @@ def prepare_launch(self, exec_path, args, file_to_open=None): self.logger.debug("Launch environment: %s" % (required_env,)) + # TODO - only for Houdini version 21.0+ + enable_sg_menu = self.get_setting("enable_sg_menu", True) + if enable_sg_menu: + class MockEngine: + pass + + mock_engine = MockEngine() + mock_engine.logger = self.logger + + mock_engine._menu_name = "Flow Production Tracking" + if self.get_setting("use_short_menu_name", False): + mock_engine._menu_name = "FPTR" + + import tk_houdini + + xml_tmp_dir = required_env[bootstrap.g_temp_env] + menu_file = os.path.join(xml_tmp_dir, "MainMenuCommon.xml").replace(os.path.sep, "/") + + menu = tk_houdini.AppCommandsMenu(mock_engine, []) + self.logger.debug("Constructing dynamic PTR menu - before starting Houdini - special 21.0 behaviour") + menu._create_dynamic_menu(menu_file) + return LaunchInformation(exec_path, args, required_env) def scan_software(self): From 3e14c0b0508e50b0e9c161ca82766a1788361a17 Mon Sep 17 00:00:00 2001 From: Julien Langlois Date: Thu, 4 Sep 2025 16:49:16 -0700 Subject: [PATCH 2/2] black --- startup.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/startup.py b/startup.py index c5cd900..1c4e5ab 100644 --- a/startup.py +++ b/startup.py @@ -134,6 +134,7 @@ def prepare_launch(self, exec_path, args, file_to_open=None): # TODO - only for Houdini version 21.0+ enable_sg_menu = self.get_setting("enable_sg_menu", True) if enable_sg_menu: + class MockEngine: pass @@ -147,10 +148,14 @@ class MockEngine: import tk_houdini xml_tmp_dir = required_env[bootstrap.g_temp_env] - menu_file = os.path.join(xml_tmp_dir, "MainMenuCommon.xml").replace(os.path.sep, "/") + menu_file = os.path.join(xml_tmp_dir, "MainMenuCommon.xml").replace( + os.path.sep, "/" + ) menu = tk_houdini.AppCommandsMenu(mock_engine, []) - self.logger.debug("Constructing dynamic PTR menu - before starting Houdini - special 21.0 behaviour") + self.logger.debug( + "Constructing dynamic PTR menu - before starting Houdini - special 21.0 behaviour" + ) menu._create_dynamic_menu(menu_file) return LaunchInformation(exec_path, args, required_env)