mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-13 08:54:38 +02:00
[MODIF_BEHAVIOUR] Make plugins in %APPDATA%/Notepad++/plugins/ override les plugins in Notepad++ installation directory.
git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@844 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
150304a5a0
commit
6c4eef8cb7
@ -47,6 +47,10 @@ bool PluginsManager::unloadPlugin(int index, HWND nppHandle)
|
|||||||
|
|
||||||
int PluginsManager::loadPlugin(const TCHAR *pluginFilePath, vector<generic_string> & dll2Remove)
|
int PluginsManager::loadPlugin(const TCHAR *pluginFilePath, vector<generic_string> & dll2Remove)
|
||||||
{
|
{
|
||||||
|
const TCHAR *pluginFileName = ::PathFindFileName(pluginFilePath);
|
||||||
|
if (isInLoadedDlls(pluginFileName))
|
||||||
|
return 0;
|
||||||
|
|
||||||
PluginInfo *pi = new PluginInfo;
|
PluginInfo *pi = new PluginInfo;
|
||||||
try {
|
try {
|
||||||
pi->_moduleName = PathFindFileName(pluginFilePath);
|
pi->_moduleName = PathFindFileName(pluginFilePath);
|
||||||
@ -181,7 +185,7 @@ int PluginsManager::loadPlugin(const TCHAR *pluginFilePath, vector<generic_strin
|
|||||||
::SendMessage(_nppData._scintillaMainHandle, SCI_LOADLEXERLIBRARY, 0, (LPARAM)pDllName);
|
::SendMessage(_nppData._scintillaMainHandle, SCI_LOADLEXERLIBRARY, 0, (LPARAM)pDllName);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
addInLoadedDlls(pluginFileName);
|
||||||
_pluginInfos.push_back(pi);
|
_pluginInfos.push_back(pi);
|
||||||
return (_pluginInfos.size() - 1);
|
return (_pluginInfos.size() - 1);
|
||||||
} catch(std::exception e) {
|
} catch(std::exception e) {
|
||||||
@ -217,8 +221,8 @@ bool PluginsManager::loadPlugins(const TCHAR *dir)
|
|||||||
|
|
||||||
vector<generic_string> dllNames;
|
vector<generic_string> dllNames;
|
||||||
vector<generic_string> dll2Remove;
|
vector<generic_string> dll2Remove;
|
||||||
generic_string nppPath = (NppParameters::getInstance())->getNppPath();
|
NppParameters * nppParams = NppParameters::getInstance();
|
||||||
|
generic_string nppPath = nppParams->getNppPath();
|
||||||
generic_string pluginsFullPathFilter = (dir && dir[0])?dir:nppPath;
|
generic_string pluginsFullPathFilter = (dir && dir[0])?dir:nppPath;
|
||||||
|
|
||||||
pluginsFullPathFilter += TEXT("\\plugins\\*.dll");
|
pluginsFullPathFilter += TEXT("\\plugins\\*.dll");
|
||||||
@ -232,8 +236,6 @@ bool PluginsManager::loadPlugins(const TCHAR *dir)
|
|||||||
plugins1stFullPath += foundData.cFileName;
|
plugins1stFullPath += foundData.cFileName;
|
||||||
dllNames.push_back(plugins1stFullPath);
|
dllNames.push_back(plugins1stFullPath);
|
||||||
|
|
||||||
NppParameters * nppParams = NppParameters::getInstance();
|
|
||||||
|
|
||||||
while (::FindNextFile(hFindFile, &foundData))
|
while (::FindNextFile(hFindFile, &foundData))
|
||||||
{
|
{
|
||||||
bool isInBlackList = nppParams->isInBlackList(foundData.cFileName);
|
bool isInBlackList = nppParams->isInBlackList(foundData.cFileName);
|
||||||
|
@ -120,6 +120,7 @@ private:
|
|||||||
|
|
||||||
vector<PluginInfo *> _pluginInfos;
|
vector<PluginInfo *> _pluginInfos;
|
||||||
vector<PluginCommand> _pluginsCommands;
|
vector<PluginCommand> _pluginsCommands;
|
||||||
|
vector<generic_string> _loadedDlls;
|
||||||
bool _isDisabled;
|
bool _isDisabled;
|
||||||
IDAllocator _dynamicIDAlloc;
|
IDAllocator _dynamicIDAlloc;
|
||||||
IDAllocator _markerAlloc;
|
IDAllocator _markerAlloc;
|
||||||
@ -129,6 +130,16 @@ private:
|
|||||||
msg += funcSignature;
|
msg += funcSignature;
|
||||||
::MessageBox(NULL, msg.c_str(), TEXT(" just crash in\r"), MB_OK|MB_ICONSTOP);
|
::MessageBox(NULL, msg.c_str(), TEXT(" just crash in\r"), MB_OK|MB_ICONSTOP);
|
||||||
};
|
};
|
||||||
|
bool isInLoadedDlls(const TCHAR *fn) const {
|
||||||
|
for (size_t i = 0; i < _loadedDlls.size(); i++)
|
||||||
|
if (generic_stricmp(fn, _loadedDlls[i].c_str()) == 0)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
void addInLoadedDlls(const TCHAR *fn) {
|
||||||
|
_loadedDlls.push_back(fn);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
#define EXT_LEXER_DECL __stdcall
|
#define EXT_LEXER_DECL __stdcall
|
||||||
|
@ -341,11 +341,19 @@ LRESULT Notepad_plus::init(HWND hwnd)
|
|||||||
|
|
||||||
_scintillaCtrls4Plugins.init(_pPublicInterface->getHinst(), hwnd);
|
_scintillaCtrls4Plugins.init(_pPublicInterface->getHinst(), hwnd);
|
||||||
_pluginsManager.init(nppData);
|
_pluginsManager.init(nppData);
|
||||||
_pluginsManager.loadPlugins();
|
|
||||||
|
// Load plugins firstly from "%APPDATA%/Notepad++/plugins"
|
||||||
|
// if Notepad++ is not in localConf mode.
|
||||||
|
// All the dll loaded are marked.
|
||||||
const TCHAR *appDataNpp = pNppParam->getAppDataNppDir();
|
const TCHAR *appDataNpp = pNppParam->getAppDataNppDir();
|
||||||
if (appDataNpp[0])
|
if (appDataNpp[0])
|
||||||
_pluginsManager.loadPlugins(appDataNpp);
|
_pluginsManager.loadPlugins(appDataNpp);
|
||||||
|
|
||||||
|
// Load plugins from its installation directory.
|
||||||
|
// All loaded dll will be ignored
|
||||||
|
_pluginsManager.loadPlugins();
|
||||||
|
|
||||||
|
|
||||||
_restoreButton.init(_pPublicInterface->getHinst(), hwnd);
|
_restoreButton.init(_pPublicInterface->getHinst(), hwnd);
|
||||||
|
|
||||||
|
|
||||||
|
@ -771,11 +771,11 @@ bool NppParameters::load()
|
|||||||
PathAppend(localConfPath, localConfFile);
|
PathAppend(localConfPath, localConfFile);
|
||||||
|
|
||||||
// Test if localConf.xml exist
|
// Test if localConf.xml exist
|
||||||
bool isLocal = (PathFileExists(localConfPath.c_str()) == TRUE);
|
_isLocal = (PathFileExists(localConfPath.c_str()) == TRUE);
|
||||||
|
|
||||||
// Under vista and windows 7, the usage of doLocalConf.xml is not allowed
|
// Under vista and windows 7, the usage of doLocalConf.xml is not allowed
|
||||||
// if Notepad++ is installed in "program files" directory, because of UAC
|
// if Notepad++ is installed in "program files" directory, because of UAC
|
||||||
if (isLocal)
|
if (_isLocal)
|
||||||
{
|
{
|
||||||
// We check if OS is Vista or above
|
// We check if OS is Vista or above
|
||||||
if (_winVersion >= WV_VISTA)
|
if (_winVersion >= WV_VISTA)
|
||||||
@ -789,11 +789,11 @@ bool NppParameters::load()
|
|||||||
::PathRemoveFileSpec(nppDirLocation);
|
::PathRemoveFileSpec(nppDirLocation);
|
||||||
|
|
||||||
if (lstrcmp(progPath, nppDirLocation) == 0)
|
if (lstrcmp(progPath, nppDirLocation) == 0)
|
||||||
isLocal = false;
|
_isLocal = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isLocal)
|
if (_isLocal)
|
||||||
{
|
{
|
||||||
_userPath = _nppPath;
|
_userPath = _nppPath;
|
||||||
}
|
}
|
||||||
|
@ -1422,6 +1422,10 @@ public:
|
|||||||
_pNativeLangSpeaker = nls;
|
_pNativeLangSpeaker = nls;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool isLocal() const {
|
||||||
|
return _isLocal;
|
||||||
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
NppParameters();
|
NppParameters();
|
||||||
~NppParameters();
|
~NppParameters();
|
||||||
@ -1478,6 +1482,7 @@ private:
|
|||||||
|
|
||||||
WNDPROC _transparentFuncAddr;
|
WNDPROC _transparentFuncAddr;
|
||||||
WNDPROC _enableThemeDialogTextureFuncAddr;
|
WNDPROC _enableThemeDialogTextureFuncAddr;
|
||||||
|
bool _isLocal;
|
||||||
|
|
||||||
|
|
||||||
vector<CommandShortcut> _shortcuts; //main menu shortuts. Static size
|
vector<CommandShortcut> _shortcuts; //main menu shortuts. Static size
|
||||||
|
Loading…
x
Reference in New Issue
Block a user