From a61eec8f1e6504549c633b2e85a06c7ce12ff513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=BCller?= Date: Thu, 29 Dec 2022 17:16:51 +0100 Subject: [PATCH] Add DDNet settings button to unregister protocol and file extensions Add a button to the Miscellaneous DDNet settings to manually unregister the protocol and file extension handlers. --- src/engine/client.h | 1 + src/engine/client/client.cpp | 13 +++++++++++++ src/engine/client/client.h | 1 + src/game/client/components/menus_settings.cpp | 11 +++++++++++ 4 files changed, 26 insertions(+) diff --git a/src/engine/client.h b/src/engine/client.h index c01b0d877..e9f60e5d9 100644 --- a/src/engine/client.h +++ b/src/engine/client.h @@ -283,6 +283,7 @@ public: #if defined(CONF_FAMILY_WINDOWS) virtual void ShellRegister() = 0; + virtual void ShellUnregister() = 0; #endif }; diff --git a/src/engine/client/client.cpp b/src/engine/client/client.cpp index 530f3574d..09dca071a 100644 --- a/src/engine/client/client.cpp +++ b/src/engine/client/client.cpp @@ -4928,4 +4928,17 @@ void CClient::ShellRegister() if(Updated) shell_update(); } + +void CClient::ShellUnregister() +{ + bool Updated = false; + if(!shell_unregister("ddnet", &Updated)) + dbg_msg("client", "Failed to unregister ddnet protocol"); + if(!shell_unregister(GAME_NAME ".map", &Updated)) + dbg_msg("client", "Failed to unregister .map file extension"); + if(!shell_unregister(GAME_NAME ".demo", &Updated)) + dbg_msg("client", "Failed to unregister .demo file extension"); + if(Updated) + shell_update(); +} #endif diff --git a/src/engine/client/client.h b/src/engine/client/client.h index a072915e9..753054445 100644 --- a/src/engine/client/client.h +++ b/src/engine/client/client.h @@ -549,6 +549,7 @@ public: #if defined(CONF_FAMILY_WINDOWS) void ShellRegister() override; + void ShellUnregister() override; #endif }; diff --git a/src/game/client/components/menus_settings.cpp b/src/game/client/components/menus_settings.cpp index 2128d1cfe..300ed9b8f 100644 --- a/src/game/client/components/menus_settings.cpp +++ b/src/game/client/components/menus_settings.cpp @@ -3433,6 +3433,17 @@ void CMenus::RenderSettingsDDNet(CUIRect MainView) SUIExEditBoxProperties EditProps; EditProps.m_pEmptyText = Localize("Chat command (e.g. showall 1)"); UI()->DoEditBox(g_Config.m_ClRunOnJoin, &Button, g_Config.m_ClRunOnJoin, sizeof(g_Config.m_ClRunOnJoin), 14.0f, &s_RunOnJoin, false, IGraphics::CORNER_ALL, EditProps); + +#if defined(CONF_FAMILY_WINDOWS) + static CButtonContainer s_ButtonUnregisterShell; + Right.HSplitTop(10.0f, nullptr, &Right); + Right.HSplitTop(20.0f, &Button, &Right); + if(DoButton_Menu(&s_ButtonUnregisterShell, Localize("Unregister protocol and file extensions"), 0, &Button)) + { + Client()->ShellUnregister(); + } +#endif + // Updater #if defined(CONF_AUTOUPDATE) {