diff --git a/vkconfig_core/executable.cpp b/vkconfig_core/executable.cpp index 5a77d71da1..606b8438d8 100644 --- a/vkconfig_core/executable.cpp +++ b/vkconfig_core/executable.cpp @@ -152,7 +152,7 @@ DefaultPath GetDefaultExecutablePath(const std::string& executable_key) { Executable::Executable() {} Executable::Executable(const DefaultExecutable& default_executable) { - const DefaultPath& default_paths = GetDefaultExecutablePath(default_executable.key); + const DefaultPath& default_paths = ::GetDefaultExecutablePath(default_executable.key); if (default_paths.executable_path.Empty()) { Executable(); // application could not be found.. } @@ -228,7 +228,11 @@ bool Executable::HasActiveOptions() const { Path Executable::GetLocalLayersSettingsPath() const { assert(this->GetActiveOptions() != nullptr); - return this->GetActiveOptions()->working_folder + "/vk_layer_settings.txt"; + if (this->GetActiveOptions()->working_folder.Empty()) { + return this->path.AbsoluteDir() + "/vk_layer_settings.txt"; + } else { + return this->GetActiveOptions()->working_folder + "/vk_layer_settings.txt"; + } } void Executable::AddOptions(const ExecutableOptions& options) { diff --git a/vkconfig_core/executable_manager.cpp b/vkconfig_core/executable_manager.cpp index daedf1f1ae..380f2da096 100644 --- a/vkconfig_core/executable_manager.cpp +++ b/vkconfig_core/executable_manager.cpp @@ -312,8 +312,8 @@ Executable* ExecutableManager::GetExecutable(std::size_t executable_index) { std::vector ExecutableManager::CreateDefaultExecutables() const { std::vector new_executables; - for (std::size_t name_index = 0, name_count = std::size(defaults_executables); name_index < name_count; ++name_index) { - const Executable executable(defaults_executables[name_index]); + for (std::size_t name_index = 0, name_count = std::size(::defaults_executables); name_index < name_count; ++name_index) { + const Executable executable(::defaults_executables[name_index]); if (executable.path.Empty()) { continue; @@ -342,29 +342,3 @@ std::vector ExecutableManager::RemoveMissingExecutables(const std::v return valid_applications; } - -bool ExecutableManager::HasIncompatiblePerExecutables(const Executable& executable, - std::vector& imcompatible_executables) const { - for (std::size_t i = 0, n = this->data.size(); i < n; ++i) { - if (executable.path == this->data[i].path) { - continue; - } - - if (executable.GetActiveOptions()->working_folder == this->data[i].GetActiveOptions()->working_folder) { - imcompatible_executables.push_back(this->data[i]); - } - } - - return !imcompatible_executables.empty(); -} - -bool ExecutableManager::HasIncompatiblePerExecutables(std::vector& imcompatible_executables) const { - for (std::size_t i = 0, n = this->data.size(); i < n; ++i) { - bool incompatible = this->HasIncompatiblePerExecutables(this->data[i], imcompatible_executables); - if (incompatible) { - imcompatible_executables.push_back(this->data[i]); - } - } - - return !imcompatible_executables.empty(); -} diff --git a/vkconfig_core/executable_manager.h b/vkconfig_core/executable_manager.h index 145a52ca80..b1c1d9883a 100644 --- a/vkconfig_core/executable_manager.h +++ b/vkconfig_core/executable_manager.h @@ -53,9 +53,6 @@ class ExecutableManager : public Serialize { // Search for all the applications in the list, an remove the application which executable can't be found std::vector RemoveMissingExecutables(const std::vector& executables) const; - bool HasIncompatiblePerExecutables(const Executable& executable, std::vector& imcompatible_executables) const; - bool HasIncompatiblePerExecutables(std::vector& imcompatible_executables) const; - bool launcher_clear_on_launch = true; Path last_path_executable = ::Get(Path::HOME); diff --git a/vkconfig_core/test/test_executable.cpp b/vkconfig_core/test/test_executable.cpp index 7db61840a1..d9c4b27840 100644 --- a/vkconfig_core/test/test_executable.cpp +++ b/vkconfig_core/test/test_executable.cpp @@ -107,6 +107,8 @@ TEST(test_executable, add) { ExecutableOptions executable_options; executable_options.label = "Pouet Options"; + executable_options.working_folder = + "."; // set it otherwise GetLocalLayersSettingsPath will use the executable absolute directory executable.AddOptions(executable_options); EXPECT_EQ(2, executable.GetOptions().size()); @@ -114,4 +116,40 @@ TEST(test_executable, add) { executable.SetActiveOptions("Pouet Options"); EXPECT_STREQ("Pouet Options", executable.GetActiveOptionsName().c_str()); + + Path path = executable.GetLocalLayersSettingsPath(); + EXPECT_STREQ(path.AbsolutePath().c_str(), Path("./vk_layer_settings.txt").AbsolutePath().c_str()); + + executable.GetActiveOptions()->working_folder.Clear(); + Path path2 = executable.GetLocalLayersSettingsPath(); + // When working_folder is not set, use the executable absolute directory + EXPECT_STREQ(path.AbsoluteDir().c_str(), executable.path.AbsoluteDir().c_str()); +} + +TEST(test_executable, GetDefaultExecutablePath) { + std::string saved = qgetenv("VULKAN_SDK").toStdString(); + qunsetenv("VULKAN_SDK"); + + DefaultExecutable default_executable{"vkcube", "/vkcube", "--suppress_popups", "vkcube launcher options"}; + const DefaultPath& default_paths = ::GetDefaultExecutablePath(default_executable.key); + EXPECT_STREQ(default_paths.executable_path.RelativePath().c_str(), Path(".\\vkcube.exe").RelativePath().c_str()); + EXPECT_STREQ(default_paths.working_folder.RelativePath().c_str(), Path(".").RelativePath().c_str()); + + qputenv("VULKAN_SDK", saved.c_str()); +} + +TEST(test_executable, DefaultExecutable) { + DefaultExecutable default_executable{"vkcube", "/vkcube", "--suppress_popups", "vkcube launcher options"}; + Executable executable(default_executable); + + EXPECT_EQ(1, executable.GetOptions().size()); + EXPECT_STREQ(executable.path.RelativePath().c_str(), Path("${VULKAN_BIN}\\vkcube.exe").RelativePath().c_str()); + EXPECT_STREQ(executable.configuration.c_str(), "Validation"); + EXPECT_EQ(executable.enabled, true); + EXPECT_STREQ(executable.GetActiveOptionsName().c_str(), "vkcube launcher options"); + const ExecutableOptions* options = executable.GetActiveOptions(); + EXPECT_STREQ(options->working_folder.RelativePath().c_str(), Path("${VULKAN_BIN}").RelativePath().c_str()); + EXPECT_STREQ(options->args[0].c_str(), "--suppress_popups"); + EXPECT_TRUE(options->envs.empty()); + EXPECT_STREQ(options->log_file.RelativePath().c_str(), Path("${VK_HOME}/vkcube.txt").RelativePath().c_str()); } diff --git a/vkconfig_core/test/test_layer_preset.cpp b/vkconfig_core/test/test_layer_preset.cpp index 8614eea741..ce6163e524 100644 --- a/vkconfig_core/test/test_layer_preset.cpp +++ b/vkconfig_core/test/test_layer_preset.cpp @@ -38,9 +38,9 @@ TEST(test_layer_preset, has_preset) { SettingDataSetConst preset_settings; SettingDataSet layer_settings; - SettingMetaString* metaA = InstantiateString(layer, "KeyA"); - SettingMetaString* metaB = InstantiateString(layer, "KeyB"); - SettingMetaString* metaC = InstantiateString(layer, "KeyC"); + SettingMetaString* metaA = ::InstantiateString(layer, "KeyA"); + SettingMetaString* metaB = ::InstantiateString(layer, "KeyB"); + SettingMetaString* metaC = ::InstantiateString(layer, "KeyC"); EXPECT_EQ(false, ::HasPreset(layer_settings, preset_settings)); diff --git a/vkconfig_core/test/test_parameter.cpp b/vkconfig_core/test/test_parameter.cpp index ccd567909e..d9d97dd30d 100644 --- a/vkconfig_core/test/test_parameter.cpp +++ b/vkconfig_core/test/test_parameter.cpp @@ -216,15 +216,7 @@ TEST(test_parameter, order_parameter_manual_partial) { parameters[0].type = LAYER_TYPE_IMPLICIT; parameters[1].builtin = LAYER_BUILTIN_UNORDERED; - /* - for (std::size_t i = 0, n = parameters.size(); i < n; ++i) { - if (i == 7) { - continue; - } - - parameters[i].overridden_rank = static_cast(i); - } - */ + ::OrderParameter(parameters, layers); EXPECT_STREQ(parameters[0].key.c_str(), "VK_LAYER_KHRONOS_missing"); diff --git a/vkconfig_gui/settings_tree.cpp b/vkconfig_gui/settings_tree.cpp index d6e5c6f393..21b5e7baa4 100644 --- a/vkconfig_gui/settings_tree.cpp +++ b/vkconfig_gui/settings_tree.cpp @@ -221,7 +221,6 @@ void SettingsTreeManager::BuildTreeItem(QTreeWidgetItem *parent, const SettingMe const SettingMetaGroup &meta = static_cast(meta_object); WidgetSettingGroup *widget = new WidgetSettingGroup(this->ui->configurations_settings, item, meta, parameter->settings); - this->connect(widget, SIGNAL(itemChanged()), this, SLOT(OnSettingChanged())); } break; case SETTING_BOOL: case SETTING_BOOL_NUMERIC_DEPRECATED: {