diff --git a/Src/Common/Controls/XMLViews/BrowseViewer.cs b/Src/Common/Controls/XMLViews/BrowseViewer.cs index 77aac96f0b..9f3affe449 100644 --- a/Src/Common/Controls/XMLViews/BrowseViewer.cs +++ b/Src/Common/Controls/XMLViews/BrowseViewer.cs @@ -4050,7 +4050,7 @@ protected virtual void Dispose(bool disposing) if (m_bv != null && m_bv.BrowseView != null && m_bv.BrowseView.RootBox != null) m_bv.BrowseView.RootBox.Reconstruct(); // Otherwise every cell redraws individually! - m_bv.BrowseView.OnRestoreScrollPosition(null); + m_bv.BrowseView.RestoreScrollPosition(null); if (m_fHiliteWasVisible && m_irow >= 0 && m_irow < m_bv.AllItems.Count) { diff --git a/Src/Common/Controls/XMLViews/XmlBrowseViewBase.cs b/Src/Common/Controls/XMLViews/XmlBrowseViewBase.cs index 514068addb..cb4193a52d 100644 --- a/Src/Common/Controls/XMLViews/XmlBrowseViewBase.cs +++ b/Src/Common/Controls/XMLViews/XmlBrowseViewBase.cs @@ -1137,6 +1137,7 @@ protected override void Dispose( bool disposing ) if (disposing) { Subscriber.Unsubscribe(EventConstants.SaveScrollPosition, SaveScrollPosition); + Subscriber.Unsubscribe(EventConstants.RestoreScrollPosition, RestoreScrollPosition); if (m_bv != null && !m_bv.IsDisposed && m_bv.SpecialCache != null) m_bv.SpecialCache.RemoveNotification(this); @@ -1489,7 +1490,6 @@ internal void SaveScrollPosition(object args) } /// - /// Called through mediator by reflection. (Maybe?) /// This routine attempts to restore the scroll position previously saved by SaveScrollPosition. /// Specifically, it attempts to scroll to a position such that the top of the object at index /// m_iTopOfScreenObjectForScrollPosition is m_dyTopOfScreenOffset pixels below the top of the @@ -1497,11 +1497,11 @@ internal void SaveScrollPosition(object args) /// /// /// - public bool OnRestoreScrollPosition(object args) + internal void RestoreScrollPosition(object args) { CheckDisposed(); - return RestoreScrollPosition(m_iTopOfScreenObjectForScrollPosition); + RestoreScrollPosition(m_iTopOfScreenObjectForScrollPosition); } /// @@ -2106,6 +2106,7 @@ public override void Init(Mediator mediator, PropertyTable propertyTable, XmlNod SetSelectedRowHighlighting();//read the property table Subscriber.Subscribe(EventConstants.SaveScrollPosition, SaveScrollPosition); + Subscriber.Subscribe(EventConstants.RestoreScrollPosition, RestoreScrollPosition); } #endregion XCore Colleague overrides diff --git a/Src/Common/Controls/XMLViews/XmlBrowseViewSelectionRestorer.cs b/Src/Common/Controls/XMLViews/XmlBrowseViewSelectionRestorer.cs index d1b28d8955..46452e0c18 100644 --- a/Src/Common/Controls/XMLViews/XmlBrowseViewSelectionRestorer.cs +++ b/Src/Common/Controls/XMLViews/XmlBrowseViewSelectionRestorer.cs @@ -38,7 +38,7 @@ protected override void Dispose(bool fDisposing) if (fDisposing) { if (m_rootSite != null) - ((XmlBrowseViewBase)m_rootSite).OnRestoreScrollPosition(null); + ((XmlBrowseViewBase)m_rootSite).RestoreScrollPosition(null); } } } diff --git a/Src/xWorks/RecordClerk.cs b/Src/xWorks/RecordClerk.cs index b84c6b71a4..b7377b9fac 100644 --- a/Src/xWorks/RecordClerk.cs +++ b/Src/xWorks/RecordClerk.cs @@ -3131,11 +3131,8 @@ private void m_list_AboutToReload(object sender, EventArgs e) private void m_list_DoneReload(object sender, EventArgs e) { - // This used to be a BroadcastMessage, but now broadcast is deferred. - // To keep the same logic it's now using the SendMessageToAllNow. This - // is different from SendMessage as it is sent to all even if handled. if (!m_fReloadingDueToMissingObject) - m_mediator.SendMessageToAllNow("RestoreScrollPosition", this); + Publisher.Publish(new PublisherParameterObject(EventConstants.RestoreScrollPosition, this)); } internal ListUpdateHelper UpdateHelper { get; set; }