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; }