From e8b391c0f63d21fce3354b8e6391b364260d4384 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Mon, 10 Feb 2025 14:02:32 +0100 Subject: [PATCH] feat: Added option to randomize window title --- plugins/builtin/romfs/lang/en_US.json | 1 + .../source/content/settings_entries.cpp | 2 ++ .../source/content/window_decoration.cpp | 31 ++++++++++++++----- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/plugins/builtin/romfs/lang/en_US.json b/plugins/builtin/romfs/lang/en_US.json index fcf77a508..820e9a0dc 100644 --- a/plugins/builtin/romfs/lang/en_US.json +++ b/plugins/builtin/romfs/lang/en_US.json @@ -505,6 +505,7 @@ "hex.builtin.setting.interface.fps.native": "Native", "hex.builtin.setting.interface.language": "Language", "hex.builtin.setting.interface.multi_windows": "Enable Multi Window support", + "hex.builtin.setting.interface.randomize_window_title": "Use a randomized Window Title", "hex.builtin.setting.interface.scaling_factor": "Scaling", "hex.builtin.setting.interface.scaling.native": "Native", "hex.builtin.setting.interface.scaling.fractional_warning": "The default font does not support fractional scaling. For better results, select a custom font in the 'Font' tab.", diff --git a/plugins/builtin/source/content/settings_entries.cpp b/plugins/builtin/source/content/settings_entries.cpp index a94d9948d..79a038172 100644 --- a/plugins/builtin/source/content/settings_entries.cpp +++ b/plugins/builtin/source/content/settings_entries.cpp @@ -809,6 +809,8 @@ namespace hex::plugin::builtin { ContentRegistry::Settings::add("hex.builtin.setting.interface", "hex.builtin.setting.interface.window", "hex.builtin.setting.interface.use_native_menu_bar", true); #endif + ContentRegistry::Settings::add("hex.builtin.setting.interface", "hex.builtin.setting.interface.window", "hex.builtin.setting.interface.randomize_window_title", false); + ContentRegistry::Settings::add("hex.builtin.setting.interface", "hex.builtin.setting.interface.window", "hex.builtin.setting.interface.restore_window_pos", false); ContentRegistry::Settings::add("hex.builtin.setting.hex_editor", "", "hex.builtin.setting.hex_editor.highlight_color", ImColor(0x80, 0x80, 0xC0, 0x60)); diff --git a/plugins/builtin/source/content/window_decoration.cpp b/plugins/builtin/source/content/window_decoration.cpp index 11def932a..51c7ef6ae 100644 --- a/plugins/builtin/source/content/window_decoration.cpp +++ b/plugins/builtin/source/content/window_decoration.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -94,7 +95,7 @@ namespace hex::plugin::builtin { void drawSidebar(ImVec2 dockSpaceSize, ImVec2 sidebarPos, float sidebarWidth) { static i32 openWindow = -1; u32 index = 0; - u32 drawIndex = 0; + u32 drawIndex = 1; ImGui::PushID("SideBarWindows"); for (const auto &[icon, callback, enabledCallback] : ContentRegistry::Interface::impl::getSidebarItems()) { ImGui::SetCursorPosY(sidebarPos.y + sidebarWidth * drawIndex); @@ -589,15 +590,15 @@ namespace hex::plugin::builtin { } }); + constexpr static auto DefaultImHexTitle = "ImHex"; + static std::string s_applicationName = DefaultImHexTitle; - constexpr static auto ImHexTitle = "ImHex"; - - s_windowTitle = ImHexTitle; + s_windowTitle = DefaultImHexTitle; // Handle updating the window title RequestUpdateWindowTitle::subscribe([] { std::string prefix, postfix; - std::string title = ImHexTitle; + std::string title = DefaultImHexTitle; if (ProjectFile::hasPath()) { // If a project is open, show the project name instead of the file name @@ -626,8 +627,10 @@ namespace hex::plugin::builtin { auto window = ImHexApi::System::getMainWindowHandle(); if (window != nullptr) { - if (title != ImHexTitle) - title = std::string(ImHexTitle) + " - " + title; + if (title != DefaultImHexTitle) + title = std::string(DefaultImHexTitle) + " - " + title; + + title = wolv::util::replaceStrings(title, DefaultImHexTitle, s_applicationName); glfwSetWindowTitle(window, title.c_str()); } @@ -644,6 +647,20 @@ namespace hex::plugin::builtin { ContentRegistry::Settings::onChange("hex.builtin.setting.interface", "hex.builtin.setting.interface.use_native_menu_bar", [](const ContentRegistry::Settings::SettingsValue &value) { s_useNativeMenuBar = value.get(true); }); + + ContentRegistry::Settings::onChange("hex.builtin.setting.interface", "hex.builtin.setting.interface.randomize_window_title", [](const ContentRegistry::Settings::SettingsValue &value) { + const bool randomTitle = value.get(false); + if (randomTitle) { + s_applicationName.clear(); + std::mt19937_64 rng(std::random_device{}()); + for (u32 i = 0; i < 24; i += 1) { + s_applicationName += char(rng() % ('Z' - 'A' + 1)) + 'A'; + } + } else { + s_applicationName = DefaultImHexTitle; + } + RequestUpdateWindowTitle::post(); + }); }