Public feed #601079

std

public text v1 · immutable
Raw Edit
·published 2007-07-03 09:02 UTC
rendered paste body
Index: options.c
===================================================================
--- options.c	(revision 5794)
+++ options.c	(working copy)
@@ -356,7 +356,7 @@
 			if (( dat->opd[i].flags & ODPF_SIMPLEONLY ) && IsDlgButtonChecked( hdlg, IDC_EXPERT )) continue;
 			if (( dat->opd[i].flags & ODPF_EXPERTONLY ) && !IsDlgButtonChecked( hdlg, IDC_EXPERT )) continue;
 			tvis.hParent = NULL;
-			if(dat->opd[i].pszGroup != NULL && FilterInst==NULL) {
+			if(dat->opd[i].pszGroup != NULL ) { //&& FilterInst==NULL) {
 				tvis.hParent = FindNamedTreeItemAtRoot(GetDlgItem(hdlg,IDC_PAGETREE),dat->opd[i].pszGroup);
 				if(tvis.hParent == NULL) {
 					tvis.item.lParam = -1;
@@ -917,8 +917,11 @@
 	return 0;
 }
 
+typedef PLUGININFO * (__cdecl * Miranda_Plugin_Info) ( DWORD mirandaVersion );
+typedef PLUGININFOEX * (__cdecl * Miranda_Plugin_InfoEx) ( DWORD mirandaVersion );
 static void FillFilterCombo(HWND hDlg, struct OptionsPageData * opd, int PageCount)
 {
+	DWORD mirandaVersion = (DWORD)CallService(MS_SYSTEM_GETVERSION, 0, 0);
 	int i;
 	int index;
 	HINSTANCE * KnownInstances=alloca(sizeof(HINSTANCE)*PageCount);
@@ -933,6 +936,8 @@
 	for (i=0; i<PageCount; i++)
 	{		
 		TCHAR * dllName;
+		Miranda_Plugin_InfoEx pfnInfoEx;
+		PLUGININFOEX* pi = NULL;
 		int j;
 		HINSTANCE inst=opd[i].hInst;
 		if (inst==mirInstance) continue;
@@ -941,14 +946,26 @@
 		if (j!=countKnownInst) continue;
 		KnownInstances[countKnownInst]=inst;
 		countKnownInst++;
-		GetModuleFileName(inst, tszModuleName, MAX_PATH*sizeof(TCHAR));
-	    dllName=_tcsrchr(tszModuleName,_T('\\'));
-		if (!dllName) dllName=tszModuleName;
-		else dllName++;		
-		{
-			index=SendDlgItemMessage(hDlg, IDC_MODULES,(UINT) CB_ADDSTRING,(WPARAM)0, (LPARAM)dllName);
-			SendDlgItemMessage(hDlg, IDC_MODULES,(UINT) CB_SETITEMDATA,(WPARAM)index, (LPARAM)inst);
-		}	
+		pfnInfoEx = (Miranda_Plugin_InfoEx)GetProcAddress( inst, "MirandaPluginInfoEx" );
+		if( pfnInfoEx != NULL )
+			pi = (PLUGININFOEX*)pfnInfoEx( mirandaVersion );
+		else {
+			Miranda_Plugin_Info pfnInfo = (Miranda_Plugin_Info)GetProcAddress( inst, "MirandaPluginInfo" );
+			if( pfnInfo != NULL )
+				pi = (PLUGININFOEX*)pfnInfo( mirandaVersion );
+		}
+		if( pi != NULL && pi->shortName != NULL && *pi->shortName != 0 ) {
+			int len = strlen( pi->shortName )+1;
+			dllName = (TCHAR*)alloca( sizeof(TCHAR) * len );
+			MultiByteToWideChar( CP_ACP, 0, pi->shortName, len, dllName, len );
+		} else {
+			GetModuleFileName(inst, tszModuleName, MAX_PATH*sizeof(TCHAR));
+			dllName=_tcsrchr(tszModuleName,_T('\\'));
+			if (!dllName) dllName=tszModuleName;
+			else dllName++;
+		}
+		index=SendDlgItemMessage(hDlg, IDC_MODULES,(UINT) CB_ADDSTRING,(WPARAM)0, (LPARAM)dllName);
+		SendDlgItemMessage(hDlg, IDC_MODULES,(UINT) CB_SETITEMDATA,(WPARAM)index, (LPARAM)inst);
 	}
 	SendDlgItemMessage(hDlg, IDC_MODULES,(UINT) CB_SETCURSEL,(WPARAM)0, (LPARAM)0);
 }