From 691e280ac33a8e3e5f854fe2ff75cb16ccaaffe7 Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Wed, 27 Dec 2023 09:10:49 +0900 Subject: [PATCH] Compare again if all panes reload as a result of clicking the link --- src/WinWebDiffLib/WebDiffWindow.hpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/WinWebDiffLib/WebDiffWindow.hpp b/src/WinWebDiffLib/WebDiffWindow.hpp index e70ef5b..7586133 100644 --- a/src/WinWebDiffLib/WebDiffWindow.hpp +++ b/src/WinWebDiffLib/WebDiffWindow.hpp @@ -79,14 +79,13 @@ class CWebDiffWindow : public IWebDiffWindow if (m_hWnd) { Close(); - std::shared_ptr counter(new int{ nPanes }); for (int i = 0; i < nPanes; ++i) { std::wstring userDataFolder = GetUserDataFolderPath(i); ComPtr callback2(callback); hr = m_webWindow[i].Create(m_hInstance, m_hWnd, urls[i], userDataFolder.c_str(), m_size, m_fitToWindow, m_zoom, m_userAgent, nullptr, - [this, i, counter, callback2](WebDiffEvent::EVENT_TYPE event, IUnknown* sender, IUnknown* args) + [this, i, callback2](WebDiffEvent::EVENT_TYPE event, IUnknown* sender, IUnknown* args) { WebDiffEvent ev{}; ev.type = event; @@ -122,6 +121,8 @@ class CWebDiffWindow : public IWebDiffWindow } else if (event == WebDiffEvent::NavigationStarting) { + m_documentLoaded[ev.pane] = false; + m_urlChanged[ev.pane] = true; SetCompareState(NOT_COMPARED); } else if (event == WebDiffEvent::FrameNavigationStarting) @@ -130,9 +131,13 @@ class CWebDiffWindow : public IWebDiffWindow else if (event == WebDiffEvent::NavigationCompleted) { addEventListener(sender, ev.pane, nullptr); - *counter = *counter - 1; - if (*counter == 0) + m_documentLoaded[ev.pane] = true; + if ((std::count(m_documentLoaded, m_documentLoaded + m_nPanes, true) == m_nPanes) && + (std::count(m_urlChanged, m_urlChanged + m_nPanes, true) == m_nPanes)) + { + std::fill_n(m_urlChanged, m_nPanes, false); Recompare(callback2.Get()); + } } else if (event == WebDiffEvent::FrameNavigationCompleted) { @@ -1477,6 +1482,8 @@ class CWebDiffWindow : public IWebDiffWindow bool m_bShowDifferences = true; bool m_bShowWordDifferences = true; bool m_bSynchronizeEvents = true; + bool m_documentLoaded[3] = { false, false, false }; + bool m_urlChanged[3] = { false, false, false }; unsigned m_eventSyncFlags = EVENT_SCROLL | EVENT_CLICK | EVENT_INPUT | EVENT_GOBACKFORWARD; CompareState m_compareState = NOT_COMPARED; IWebDiffWindow::ColorSettings m_colorSettings = {