From 4613ce7f80f2a5d7cebad04bfcdbf01f26980679 Mon Sep 17 00:00:00 2001
From: George Hazan <george.hazan@gmail.com>
Date: Sun, 9 Mar 2014 18:03:06 +0000
Subject: more correct default sub assignment

git-svn-id: http://svn.miranda-ng.org/main/trunk@8515 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
---
 plugins/Db3x_mmap/src/dbevents.cpp     | 17 +++------------
 plugins/TabSRMM/src/globals.cpp        |  1 +
 src/modules/metacontacts/meta_menu.cpp | 39 +++++++++++++++++-----------------
 3 files changed, 24 insertions(+), 33 deletions(-)

diff --git a/plugins/Db3x_mmap/src/dbevents.cpp b/plugins/Db3x_mmap/src/dbevents.cpp
index 704e91f78e..393d6b69e0 100644
--- a/plugins/Db3x_mmap/src/dbevents.cpp
+++ b/plugins/Db3x_mmap/src/dbevents.cpp
@@ -25,15 +25,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 static HANDLE hEventDeletedEvent, hEventAddedEvent, hEventFilterAddedEvent;
 
-static int IndexOf(DBCachedContact *cc, MCONTACT hSub)
-{
-	for (int i = 0; i < cc->nSubs; i++)
-		if (cc->pSubs[i] == hSub)
-			return i;
-
-	return -1;
-}
-
 STDMETHODIMP_(LONG) CDb3Mmap::GetEventCount(MCONTACT contactID)
 {
 	mir_cslock lck(m_csDbAccess);
@@ -61,11 +52,9 @@ STDMETHODIMP_(HANDLE) CDb3Mmap::AddEvent(MCONTACT contactID, DBEVENTINFO *dbei)
 			return NULL;
 
 		if (cc->IsSub()) {
-			if (cc = m_cache->GetCachedContact(cc->parentID)) {
-				// set default sub to the event's source
-				cc->nDefault = IndexOf(cc, contactID);
-				contactID = cc->contactID; // and add an event to a metahistory
-			}
+			// set default sub to the event's source
+			CallService(MS_MC_SETDEFAULTCONTACT, cc->parentID, contactID);
+			contactID = cc->parentID; // and add an event to a metahistory
 		}
 	}
 
diff --git a/plugins/TabSRMM/src/globals.cpp b/plugins/TabSRMM/src/globals.cpp
index 8040813d7c..891042ecde 100644
--- a/plugins/TabSRMM/src/globals.cpp
+++ b/plugins/TabSRMM/src/globals.cpp
@@ -372,6 +372,7 @@ int CGlobals::ModulesLoaded(WPARAM wParam, LPARAM lParam)
 	HookEvent(ME_FONT_RELOAD, ::FontServiceFontsChanged);
 	HookEvent(ME_TTB_MODULELOADED, TopToolbarLoaded);
 
+	HookEvent(ME_MC_DEFAULTTCHANGED, MetaContactEvent);
 	HookEvent(ME_MC_SUBCONTACTSCHANGED, MetaContactEvent);
 	HookEvent(ME_MC_FORCESEND, MetaContactEvent);
 	HookEvent(ME_MC_UNFORCESEND, MetaContactEvent);
diff --git a/src/modules/metacontacts/meta_menu.cpp b/src/modules/metacontacts/meta_menu.cpp
index b14e5b0c08..cd71119ba5 100644
--- a/src/modules/metacontacts/meta_menu.cpp
+++ b/src/modules/metacontacts/meta_menu.cpp
@@ -52,32 +52,33 @@ INT_PTR Meta_Convert(WPARAM wParam, LPARAM lParam)
 
 	// Create a new metacontact
 	MCONTACT hMetaContact = (MCONTACT)CallService(MS_DB_CONTACT_ADD, 0, 0);
-	if (hMetaContact) {
-		DBCachedContact *cc = currDb->m_cache->GetCachedContact(hMetaContact);
-		if (cc == NULL)
-			return 0;
+	if (hMetaContact == NULL)
+		return NULL;
 
-		db_set_dw(hMetaContact, META_PROTO, "NumContacts", 0);
-		cc->nSubs = 0;
+	DBCachedContact *cc = currDb->m_cache->GetCachedContact(hMetaContact);
+	if (cc == NULL)
+		return 0;
 
-		// Add the MetaContact protocol to the new meta contact
-		CallService(MS_PROTO_ADDTOCONTACT, hMetaContact, (LPARAM)META_PROTO);
+	db_set_dw(hMetaContact, META_PROTO, "NumContacts", 0);
+	cc->nSubs = 0;
 
-		if (tszGroup)
-			db_set_ts(hMetaContact, "CList", "Group", tszGroup);
+	// Add the MetaContact protocol to the new meta contact
+	CallService(MS_PROTO_ADDTOCONTACT, hMetaContact, (LPARAM)META_PROTO);
 
-		// Assign the contact to the MetaContact just created (and make default).
-		if (!Meta_Assign(wParam, hMetaContact, TRUE)) {
-			MessageBox(0, TranslateT("There was a problem in assigning the contact to the MetaContact"), TranslateT("Error"), MB_ICONEXCLAMATION);
-			CallService(MS_DB_CONTACT_DELETE, hMetaContact, 0);
-			return 0;
-		}
+	if (tszGroup)
+		db_set_ts(hMetaContact, "CList", "Group", tszGroup);
 
-		// hide the contact if clist groups disabled (shouldn't create one anyway since menus disabled)
-		if (!options.bEnabled)
-			db_set_b(hMetaContact, "CList", "Hidden", 1);
+	// Assign the contact to the MetaContact just created (and make default).
+	if (!Meta_Assign(wParam, hMetaContact, TRUE)) {
+		MessageBox(0, TranslateT("There was a problem in assigning the contact to the MetaContact"), TranslateT("Error"), MB_ICONEXCLAMATION);
+		CallService(MS_DB_CONTACT_DELETE, hMetaContact, 0);
+		return 0;
 	}
 
+	// hide the contact if clist groups disabled (shouldn't create one anyway since menus disabled)
+	if (!options.bEnabled)
+		db_set_b(hMetaContact, "CList", "Hidden", 1);
+
 	return hMetaContact;
 }
 
-- 
cgit v1.2.3