зеркало из https://github.com/mozilla/pjs.git
Bug 93426 New followups/replies were still being appended to the wrong parent partly due to my not unbitrotting the original patch correctly r+sr=bienvenu
This commit is contained in:
Родитель
91d664d4a7
Коммит
e95759d1ac
|
@ -4357,25 +4357,19 @@ PRBool nsMsgDBView::WantsThisThread(nsIMsgThread * /*threadHdr*/)
|
||||||
return PR_TRUE; // default is to want all threads.
|
return PR_TRUE; // default is to want all threads.
|
||||||
}
|
}
|
||||||
|
|
||||||
nsMsgViewIndex nsMsgDBView::FindParentInThread(nsIMsgDBHdr *msgHdr, nsMsgViewIndex startOfThreadViewIndex)
|
nsMsgViewIndex nsMsgDBView::FindParentInThread(nsMsgKey parentKey, nsMsgViewIndex startOfThreadViewIndex)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIMsgDBHdr> curMsgHdr;
|
nsCOMPtr<nsIMsgDBHdr> msgHdr;
|
||||||
nsMsgKey parentKey;
|
|
||||||
msgHdr->GetThreadParent(&parentKey);
|
|
||||||
|
|
||||||
while (parentKey != nsMsgKey_None)
|
while (parentKey != nsMsgKey_None)
|
||||||
{
|
{
|
||||||
if (NS_FAILED(m_db->GetMsgHdrForKey(parentKey, getter_AddRefs(curMsgHdr))))
|
|
||||||
break;
|
|
||||||
|
|
||||||
nsMsgKey parentKey;
|
|
||||||
curMsgHdr->GetThreadParent(&parentKey);
|
|
||||||
if (parentKey == nsMsgKey_None)
|
|
||||||
break;
|
|
||||||
|
|
||||||
nsMsgViewIndex parentIndex = m_keys.FindIndex(parentKey, startOfThreadViewIndex);
|
nsMsgViewIndex parentIndex = m_keys.FindIndex(parentKey, startOfThreadViewIndex);
|
||||||
if (parentIndex != nsMsgViewIndex_None)
|
if (parentIndex != nsMsgViewIndex_None)
|
||||||
return parentIndex;
|
return parentIndex;
|
||||||
|
|
||||||
|
if (NS_FAILED(m_db->GetMsgHdrForKey(parentKey, getter_AddRefs(msgHdr))))
|
||||||
|
break;
|
||||||
|
|
||||||
|
msgHdr->GetThreadParent(&parentKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
return startOfThreadViewIndex;
|
return startOfThreadViewIndex;
|
||||||
|
|
|
@ -228,7 +228,7 @@ protected:
|
||||||
|
|
||||||
nsresult ListIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex viewIndex, PRUint32 *pNumListed);
|
nsresult ListIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex viewIndex, PRUint32 *pNumListed);
|
||||||
nsresult ListUnreadIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex startOfThreadViewIndex, PRUint32 *pNumListed);
|
nsresult ListUnreadIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex startOfThreadViewIndex, PRUint32 *pNumListed);
|
||||||
nsMsgViewIndex FindParentInThread(nsIMsgDBHdr *msgHdr, nsMsgViewIndex startOfThreadViewIndex);
|
nsMsgViewIndex FindParentInThread(nsMsgKey parentKey, nsMsgViewIndex startOfThreadViewIndex);
|
||||||
nsresult ListIdsInThreadOrder(nsIMsgThread *threadHdr, nsMsgKey parentKey, PRInt32 level, nsMsgViewIndex *viewIndex, PRUint32 *pNumListed);
|
nsresult ListIdsInThreadOrder(nsIMsgThread *threadHdr, nsMsgKey parentKey, PRInt32 level, nsMsgViewIndex *viewIndex, PRUint32 *pNumListed);
|
||||||
PRInt32 GetSize(void) {return(m_keys.GetSize());}
|
PRInt32 GetSize(void) {return(m_keys.GetSize());}
|
||||||
|
|
||||||
|
|
|
@ -595,15 +595,16 @@ nsresult nsMsgThreadedDBView::OnNewHeader(nsIMsgDBHdr *newHdr, nsMsgKey aParentK
|
||||||
// levels of other hdrs may have changed!
|
// levels of other hdrs may have changed!
|
||||||
PRUint32 newFlags = msgFlags;
|
PRUint32 newFlags = msgFlags;
|
||||||
PRInt32 level = 0;
|
PRInt32 level = 0;
|
||||||
nsMsgViewIndex insertIndex = FindParentInThread(newHdr, threadIndex);
|
nsMsgViewIndex insertIndex = threadIndex;
|
||||||
if (aParentKey == nsMsgKey_None)
|
if (aParentKey == nsMsgKey_None)
|
||||||
{
|
{
|
||||||
newFlags |= MSG_VIEW_FLAG_ISTHREAD | MSG_VIEW_FLAG_HASCHILDREN;
|
newFlags |= MSG_VIEW_FLAG_ISTHREAD | MSG_VIEW_FLAG_HASCHILDREN;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
level = m_levels[insertIndex];
|
nsMsgViewIndex parentIndex = FindParentInThread(aParentKey, threadIndex);
|
||||||
insertIndex = GetInsertInfoForNewHdr(newHdr, threadIndex, level);
|
level = m_levels[parentIndex] + 1;
|
||||||
|
insertIndex = GetInsertInfoForNewHdr(newHdr, parentIndex, level);
|
||||||
}
|
}
|
||||||
m_keys.InsertAt(insertIndex, newKey);
|
m_keys.InsertAt(insertIndex, newKey);
|
||||||
m_flags.InsertAt(insertIndex, newFlags, 1);
|
m_flags.InsertAt(insertIndex, newFlags, 1);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче