diff --git a/LittleWarGameClient/ContextMenuInterceptor.cs b/LittleWarGameClient/ContextMenuInterceptor.cs new file mode 100644 index 0000000..fb3945e --- /dev/null +++ b/LittleWarGameClient/ContextMenuInterceptor.cs @@ -0,0 +1,18 @@ +using CefSharp; +using CefSharp.Handler; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LittleWarGameClient +{ + internal class ContextMenuInterceptor : ContextMenuHandler + { + protected override void OnBeforeContextMenu(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model) + { + model.Clear(); + } + } +} diff --git a/LittleWarGameClient/GameForm.cs b/LittleWarGameClient/GameForm.cs index 3cbb794..5f936d1 100644 --- a/LittleWarGameClient/GameForm.cs +++ b/LittleWarGameClient/GameForm.cs @@ -68,6 +68,7 @@ private void InitWebView() { webBrowser.JavascriptMessageReceived += ElementMessage.JSMessageReceived; webBrowser.KeyboardHandler = kbHandler; + webBrowser.MenuHandler = new ContextMenuInterceptor(); webBrowser.RequestHandler = new RequestInterceptor(); webBrowser.DownloadHandler = new DownloadInterceptor(); webBrowser.LoadUrl(baseUrl); @@ -86,7 +87,7 @@ private void InitScreen() LeaveFullscreen(); } - internal void ToggleFullscreen() + internal async void ToggleFullscreen() { bool state; if (WindowState == FormWindowState.Maximized && FormBorderStyle == FormBorderStyle.None) @@ -100,7 +101,7 @@ internal void ToggleFullscreen() EnterFullscreen(); } settings.SetFullScreen(state); - settings.SaveAsync(); + await settings.SaveAsync(); } private void EnterFullscreen() @@ -259,19 +260,20 @@ private void GameForm_Resize(object sender, EventArgs e) ResizeGameWindows(); } - private void GameForm_ResizeEnd(object sender, EventArgs e) + private async void GameForm_ResizeEnd(object sender, EventArgs e) { CaptureCursor(); settings.SetWindowSize(Size); - settings.SaveAsync(); + await settings.SaveAsync(); } - internal void MouseLock(bool choice) + internal async void MouseLock(bool choice) { mouseLocked = choice; - settings.SetMouseLock(mouseLocked); - settings.SaveAsync(); CaptureCursor(); + settings.SetMouseLock(mouseLocked); + await settings.SaveAsync(); + } internal void AddonsLoadedPostLogic() @@ -288,11 +290,11 @@ internal void ChangeVolume(float value) audioMngr.ChangeVolume(value); } - internal void VolumeChangePostLogic(float value) + internal async void VolumeChangePostLogic(float value) { audioMngr.ChangeVolume(value); settings.SetVolume(value); - settings.SaveAsync(); + await settings.SaveAsync(); } } } diff --git a/LittleWarGameClient/Settings.cs b/LittleWarGameClient/Settings.cs index 6077d5c..62ba8e5 100644 --- a/LittleWarGameClient/Settings.cs +++ b/LittleWarGameClient/Settings.cs @@ -35,7 +35,7 @@ public Settings() Init(); } - private void Init() + private async void Init() { SetMouseLock(GetMouseLock()); SetFullScreen(GetFullScreen()); @@ -47,7 +47,7 @@ private void Init() SetChatHistoryMenuHotkey(GetChatHistoryMenuHotkey()); SetFullscreenHotkey(GetFullscreenHotkey()); SetVolume(GetVolume()); - SaveAsync(); + await SaveAsync(); } private Ini CreateDefaultIniFile() @@ -89,11 +89,19 @@ internal void Save() settings.SaveTo(fileName); } - internal async void SaveAsync() + internal async Task SaveAsync() { - using (FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None, 4096, true)) + try { - await settings.SaveToAsync(stream); + using (FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None, 4096, true)) + { + await settings.SaveToAsync(stream); + } + } + catch + { + Thread.Sleep(50); + await SaveAsync(); } }