diff options
| -rw-r--r-- | plugins/CSList/src/cslist.cpp | 47 | ||||
| -rw-r--r-- | plugins/CSList/src/cslist.h | 3 | 
2 files changed, 23 insertions, 27 deletions
| diff --git a/plugins/CSList/src/cslist.cpp b/plugins/CSList/src/cslist.cpp index 94b1235cb9..68d447eb4b 100644 --- a/plugins/CSList/src/cslist.cpp +++ b/plugins/CSList/src/cslist.cpp @@ -94,9 +94,19 @@ static int OnInitOptions(WPARAM wparam, LPARAM lparam)  	return 0;
  }
 -static int OnCreateMenuItems(WPARAM wparam, LPARAM lparam)
 +static int OnCreateMenuItems(WPARAM, LPARAM)
  {
 -	forAllProtocols(addProtoStatusMenuItem, 0);
 +	int protoCount;
 +	PROTOACCOUNT** pdesc;
 +	ProtoEnumAccounts(&protoCount, &pdesc);
 +
 +	for (int i = 0; i < protoCount; i++) {
 +		char szService[100];
 +		mir_snprintf(szService, SIZEOF(szService), "%s%s", pdesc[i]->szModuleName, PS_SETCUSTOMSTATUSEX);
 +		if ( ServiceExists(szService))
 +			addProtoStatusMenuItem(pdesc[i]->szModuleName);
 +	}
 +
  	return 0;
  }
 @@ -141,8 +151,10 @@ extern "C" __declspec(dllexport) int Load()  	HookEvent(ME_OPT_INITIALISE, OnInitOptions);
  	HookEvent(ME_DB_CONTACT_SETTINGCHANGED, OnDbChanged);
  	HookEvent(ME_CLIST_PREBUILDSTATUSMENU, OnCreateMenuItems);
 -	HookEvent(ME_SYSTEM_MODULESLOADED, OnCreateMenuItems);
  	HookEvent(ME_SYSTEM_PRESHUTDOWN, OnPreshutdown);
 +
 +	// if we load a plugin dynamically, it will work, otherwise fail
 +	OnCreateMenuItems(0, 0);
  	return 0;
  }
 @@ -219,43 +231,28 @@ INT_PTR showList(WPARAM wparam, LPARAM lparam, LPARAM param)  	return 0;
  }
 -void forAllProtocols( pForAllProtosFunc pFunc, void *arg )
 -{
 -	int protoCount;
 -	PROTOACCOUNT** pdesc;
 -	ProtoEnumAccounts(&protoCount, &pdesc);
 -
 -	for (int i = 0; i < protoCount; i++) {
 -		char szService[100];
 -		mir_snprintf(szService, SIZEOF(szService), "%s%s", pdesc[i]->szModuleName, PS_SETCUSTOMSTATUSEX);
 -		if ( ServiceExists(szService))
 -			pFunc(pdesc[i]->szModuleName , arg);
 -	}
 -}
 -
 -void addProtoStatusMenuItem(char *protoName, void *arg)
 +void addProtoStatusMenuItem(char *protoName)
  {
  	PROTOACCOUNT *pdescr = ProtoGetAccount(protoName);
  	if (pdescr == NULL)
  		return;
 +	HGENMENU hRoot = MO_GetProtoRootMenu(pdescr->szModuleName);
 +	if (hRoot == NULL)
 +		return;
 +
  	char buf[200];
  	mir_snprintf(buf, SIZEOF(buf), "CSList/ShowList/%s", protoName);
  	if ( !ServiceExists(buf))
  		CreateServiceFunctionParam(buf, showList, (LPARAM)protoName);
  	CLISTMENUITEM mi = { sizeof(mi) };
 -	mi.flags = CMIF_TCHAR | CMIF_ICONFROMICOLIB;
 +	mi.flags = CMIF_CHILDPOPUP | CMIF_TCHAR | CMIF_ICONFROMICOLIB;
  	mi.icolibItem = forms[0].hIcoLibItem;
  	mi.ptszName = _T(MODULENAME);
  	mi.position = 2000040000;
  	mi.pszService = buf;
 -	if ( CallService(MS_PROTO_ISACCOUNTLOCKED, 0, (LPARAM)pdescr->szModuleName)) {
 -		TCHAR szBuffer[256];
 -		mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s (locked)"), pdescr->tszAccountName);
 -		mi.ptszPopupName = szBuffer;
 -	}
 -	else mi.ptszPopupName = pdescr->tszAccountName;
 +	mi.hParentMenu = hRoot;
  	Menu_AddStatusMenuItem(&mi);
  	RegisterHotkeys(buf, pdescr->tszAccountName, pdescr->iOrder);
 diff --git a/plugins/CSList/src/cslist.h b/plugins/CSList/src/cslist.h index e2313d85af..f26a2c608c 100644 --- a/plugins/CSList/src/cslist.h +++ b/plugins/CSList/src/cslist.h @@ -416,8 +416,7 @@ struct CSAMWindow  INT_PTR __cdecl  showList(WPARAM, LPARAM, LPARAM);
  // protocols enumeration related functions
 -void forAllProtocols(pForAllProtosFunc pFunc, void *arg);
 -void addProtoStatusMenuItem( char *protoName, void *arg);
 +void addProtoStatusMenuItem(char *protoName);
  // other functions
  void IitIcoLib();
 | 
