[BUG_FIXED] Fix a regression bug for the lang saving in session file.
ADD NPPN_FILEBEFOREOPENED and NPPN_FILECLOSED plugins notification message. git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository@47 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
09464881cc
commit
16ebb8c3db
@ -206,8 +206,18 @@ enum winVer{WV_UNKNOWN, WV_WIN32S, WV_95, WV_98, WV_ME, WV_NT, WV_W2K, WV_XP, WV
|
|||||||
//scnNotification->nmhdr.hwndFrom = hwndNpp;
|
//scnNotification->nmhdr.hwndFrom = hwndNpp;
|
||||||
//scnNotification->nmhdr.idFrom = 0;
|
//scnNotification->nmhdr.idFrom = 0;
|
||||||
|
|
||||||
#define NPPN_FILEJUSTOPENED (NPPN_FIRST + 4) // To notify plugins that the current file is just opened
|
#define NPPN_FILEOPENED (NPPN_FIRST + 4) // To notify plugins that the current file is just opened
|
||||||
//scnNotification->nmhdr.code = NPPN_FILEJUSTOPENED;
|
//scnNotification->nmhdr.code = NPPN_FILEOPENED;
|
||||||
|
//scnNotification->nmhdr.hwndFrom = hwndNpp;
|
||||||
|
//scnNotification->nmhdr.idFrom = 0;
|
||||||
|
|
||||||
|
#define NPPN_FILECLOSED (NPPN_FIRST + 5) // To notify plugins that the current file is about to be closed
|
||||||
|
//scnNotification->nmhdr.code = NPPN_FILECLOSED;
|
||||||
|
//scnNotification->nmhdr.hwndFrom = hwndNpp;
|
||||||
|
//scnNotification->nmhdr.idFrom = 0;
|
||||||
|
|
||||||
|
#define NPPN_FILEBEFOREOPEN (NPPN_FIRST + 6) // To notify plugins that the current file is about to be opened
|
||||||
|
//scnNotification->nmhdr.code = NPPN_FILEBEFOREOPEN;
|
||||||
//scnNotification->nmhdr.hwndFrom = hwndNpp;
|
//scnNotification->nmhdr.hwndFrom = hwndNpp;
|
||||||
//scnNotification->nmhdr.idFrom = 0;
|
//scnNotification->nmhdr.idFrom = 0;
|
||||||
|
|
||||||
|
@ -213,8 +213,7 @@ void Notepad_plus::init(HINSTANCE hInst, HWND parent, const char *cmdLine)
|
|||||||
if (nppGUI._rememberLastSession)
|
if (nppGUI._rememberLastSession)
|
||||||
{
|
{
|
||||||
//--LS: Session SubView restore: Code replaced to load session.xml with new loadSessionToEditView() function!!
|
//--LS: Session SubView restore: Code replaced to load session.xml with new loadSessionToEditView() function!!
|
||||||
Session lastSession = (NppParameters::getInstance())->getSession();
|
bool shouldBeResaved = loadSessionToEditView((NppParameters::getInstance())->getSession());
|
||||||
bool shouldBeResaved = loadSessionToEditView(&lastSession);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmdLine)
|
if (cmdLine)
|
||||||
@ -358,8 +357,17 @@ bool Notepad_plus::doOpen(const char *fileName, bool isReadOnly)
|
|||||||
bool isNewDoc2Close = false;
|
bool isNewDoc2Close = false;
|
||||||
FILE *fp = fopen(longFileName, "rb");
|
FILE *fp = fopen(longFileName, "rb");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (fp)
|
if (fp)
|
||||||
{
|
{
|
||||||
|
// Notify plugins that current file is just opened
|
||||||
|
SCNotification scnN;
|
||||||
|
scnN.nmhdr.code = NPPN_FILEBEFOREOPEN;
|
||||||
|
scnN.nmhdr.hwndFrom = _hSelf;
|
||||||
|
scnN.nmhdr.idFrom = 0;
|
||||||
|
_pluginsManager.notify(&scnN);
|
||||||
|
|
||||||
if ((_pEditView->getNbDoc() == 1)
|
if ((_pEditView->getNbDoc() == 1)
|
||||||
&& Buffer::isUntitled(_pEditView->getCurrentTitle())
|
&& Buffer::isUntitled(_pEditView->getCurrentTitle())
|
||||||
&& (!_pEditView->isCurrentDocDirty()) && (_pEditView->getCurrentDocLen() == 0))
|
&& (!_pEditView->isCurrentDocDirty()) && (_pEditView->getCurrentDocLen() == 0))
|
||||||
@ -452,10 +460,7 @@ bool Notepad_plus::doOpen(const char *fileName, bool isReadOnly)
|
|||||||
setWorkingDir(longFileName);
|
setWorkingDir(longFileName);
|
||||||
|
|
||||||
// Notify plugins that current file is just opened
|
// Notify plugins that current file is just opened
|
||||||
SCNotification scnN;
|
scnN.nmhdr.code = NPPN_FILEOPENED;
|
||||||
scnN.nmhdr.code = NPPN_FILEJUSTOPENED;
|
|
||||||
scnN.nmhdr.hwndFrom = _hSelf;
|
|
||||||
scnN.nmhdr.idFrom = 0;
|
|
||||||
_pluginsManager.notify(&scnN);
|
_pluginsManager.notify(&scnN);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -3981,6 +3986,10 @@ bool Notepad_plus::fileClose()
|
|||||||
checkDocState();
|
checkDocState();
|
||||||
_linkTriggered = true;
|
_linkTriggered = true;
|
||||||
|
|
||||||
|
// Notify plugins that current file is closed
|
||||||
|
scnN.nmhdr.code = NPPN_FILECLOSED;
|
||||||
|
_pluginsManager.notify(&scnN);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4600,27 +4609,6 @@ void Notepad_plus::changeMenuLang(string & pluginsTrans, string & windowTrans)
|
|||||||
}
|
}
|
||||||
::DrawMenuBar(_hSelf);
|
::DrawMenuBar(_hSelf);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
const char * Notepad_plus::getNativeTip(int btnID)
|
|
||||||
{
|
|
||||||
if (!_nativeLang) return NULL;
|
|
||||||
|
|
||||||
TiXmlNode *tips = _nativeLang->FirstChild("Tips");
|
|
||||||
if (!tips) return NULL;
|
|
||||||
|
|
||||||
for (TiXmlNode *childNode = tips->FirstChildElement("Item");
|
|
||||||
childNode ;
|
|
||||||
childNode = childNode->NextSibling("Item") )
|
|
||||||
{
|
|
||||||
TiXmlElement *element = childNode->ToElement();
|
|
||||||
int id;
|
|
||||||
element->Attribute("id", &id);
|
|
||||||
if (id == btnID)
|
|
||||||
return element->Attribute("name");
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
void Notepad_plus::changeConfigLang()
|
void Notepad_plus::changeConfigLang()
|
||||||
{
|
{
|
||||||
@ -7105,7 +7093,11 @@ void Notepad_plus::getCurrentOpenedFiles(Session & session)
|
|||||||
const Buffer & buf = _mainEditView.getBufferAt((size_t)i);
|
const Buffer & buf = _mainEditView.getBufferAt((size_t)i);
|
||||||
if (PathFileExists(buf._fullPathName))
|
if (PathFileExists(buf._fullPathName))
|
||||||
{
|
{
|
||||||
sessionFileInfo sfi(buf._fullPathName, buf._pos);
|
string languageName = getLangFromMenu( buf );
|
||||||
|
const char *langName = languageName.c_str();
|
||||||
|
|
||||||
|
sessionFileInfo sfi(buf._fullPathName, langName, buf._pos);
|
||||||
|
|
||||||
//--LS: Session SubView restore: _editViewIndex (MAIN_VIEW=0=mainEditView, SUB_VIEW=1=subEditView)
|
//--LS: Session SubView restore: _editViewIndex (MAIN_VIEW=0=mainEditView, SUB_VIEW=1=subEditView)
|
||||||
sfi._editViewIndex = MAIN_VIEW;
|
sfi._editViewIndex = MAIN_VIEW;
|
||||||
_mainEditView.activateDocAt(i);
|
_mainEditView.activateDocAt(i);
|
||||||
@ -7117,7 +7109,6 @@ void Notepad_plus::getCurrentOpenedFiles(Session & session)
|
|||||||
sfi.marks.push_back(j);
|
sfi.marks.push_back(j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
session._files.push_back(sfi);
|
session._files.push_back(sfi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -7131,7 +7122,10 @@ void Notepad_plus::getCurrentOpenedFiles(Session & session)
|
|||||||
const Buffer & buf = _subEditView.getBufferAt((size_t)i);
|
const Buffer & buf = _subEditView.getBufferAt((size_t)i);
|
||||||
if (PathFileExists(buf._fullPathName))
|
if (PathFileExists(buf._fullPathName))
|
||||||
{
|
{
|
||||||
sessionFileInfo sfi(buf._fullPathName, buf._pos);
|
string languageName = getLangFromMenu( buf );
|
||||||
|
const char *langName = languageName.c_str();
|
||||||
|
|
||||||
|
sessionFileInfo sfi(buf._fullPathName, langName, buf._pos);
|
||||||
//--LS: Session SubView restore: _editViewIndex (MAIN_VIEW=0=mainEditView, SUB_VIEW=1=subEditView)
|
//--LS: Session SubView restore: _editViewIndex (MAIN_VIEW=0=mainEditView, SUB_VIEW=1=subEditView)
|
||||||
sfi._editViewIndex =SUB_VIEW;
|
sfi._editViewIndex =SUB_VIEW;
|
||||||
_subEditView.activateDocAt(i);
|
_subEditView.activateDocAt(i);
|
||||||
@ -7177,9 +7171,10 @@ void Notepad_plus::fileLoadSession(const char *fn)
|
|||||||
bool shouldBeResaved = false;
|
bool shouldBeResaved = false;
|
||||||
Session session2Load;
|
Session session2Load;
|
||||||
//--LS: fileLoadSession splitted to loadSessionToEditView(session2Load) for re-use!
|
//--LS: fileLoadSession splitted to loadSessionToEditView(session2Load) for re-use!
|
||||||
if ((NppParameters::getInstance())->loadSession(session2Load, sessionFileName)) {
|
if ((NppParameters::getInstance())->loadSession(session2Load, sessionFileName))
|
||||||
const NppGUI & nppGUI = (NppParameters::getInstance())->getNppGUI();
|
{
|
||||||
shouldBeResaved = loadSessionToEditView(&session2Load);
|
//const NppGUI & nppGUI = (NppParameters::getInstance())->getNppGUI();
|
||||||
|
shouldBeResaved = loadSessionToEditView(session2Load);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shouldBeResaved)
|
if (shouldBeResaved)
|
||||||
@ -7189,7 +7184,7 @@ void Notepad_plus::fileLoadSession(const char *fn)
|
|||||||
} //---- fileLoadSession() ----------------------------------------------------
|
} //---- fileLoadSession() ----------------------------------------------------
|
||||||
|
|
||||||
//--LS: Session SubView restore: New function loadSessionToEditView(session2Load) for re-use!
|
//--LS: Session SubView restore: New function loadSessionToEditView(session2Load) for re-use!
|
||||||
bool Notepad_plus::loadSessionToEditView(Session *session2Load)
|
bool Notepad_plus::loadSessionToEditView(const Session & session2Load)
|
||||||
{
|
{
|
||||||
bool shouldBeResaved = false;
|
bool shouldBeResaved = false;
|
||||||
bool otherViewOpened = false;
|
bool otherViewOpened = false;
|
||||||
@ -7217,24 +7212,27 @@ bool Notepad_plus::loadSessionToEditView(Session *session2Load)
|
|||||||
}
|
}
|
||||||
size_t rgNSessionFilesLoaded[2] = {0, 0};
|
size_t rgNSessionFilesLoaded[2] = {0, 0};
|
||||||
|
|
||||||
for (size_t i = 0 ; i < session2Load->_files.size() ; )
|
for (size_t i = 0 ; i < session2Load._files.size() ; )
|
||||||
{
|
{
|
||||||
const char *pFn = session2Load->_files[i]._fileName.c_str();
|
const char *pFn = session2Load._files[i]._fileName.c_str();
|
||||||
//--LS: Session SubView restore: _editViewIndex (MAIN_VIEW=0=mainEditView, SUB_VIEW=1=subEditView)
|
//--LS: Session SubView restore: _editViewIndex (MAIN_VIEW=0=mainEditView, SUB_VIEW=1=subEditView)
|
||||||
//--LS: doOpen(pFn) replaced by doOpen(pFn, false, true), due to reundancy of session-loading with RestoreFileEditView
|
//--LS: doOpen(pFn) replaced by doOpen(pFn, false, true), due to reundancy of session-loading with RestoreFileEditView
|
||||||
if (doOpen(pFn, false))
|
if (doOpen(pFn))
|
||||||
{
|
{
|
||||||
cureentEditView->getCurrentBuffer().setPosition(session2Load->_files[i]);
|
const char *pLn = session2Load._files[i]._langName.c_str();
|
||||||
cureentEditView->restoreCurrentPos(session2Load->_files[i]);
|
setLangFromName(pLn);
|
||||||
|
|
||||||
for (size_t j = 0 ; j < session2Load->_files[i].marks.size() ; j++)
|
cureentEditView->getCurrentBuffer().setPosition(session2Load._files[i]);
|
||||||
|
cureentEditView->restoreCurrentPos(session2Load._files[i]);
|
||||||
|
|
||||||
|
for (size_t j = 0 ; j < session2Load._files[i].marks.size() ; j++)
|
||||||
{
|
{
|
||||||
bookmarkAdd(session2Load->_files[i].marks[j]);
|
bookmarkAdd(session2Load._files[i].marks[j]);
|
||||||
}
|
}
|
||||||
rgNSessionFilesLoaded[iCurrentView]++;
|
rgNSessionFilesLoaded[iCurrentView]++;
|
||||||
//--LS: Restore Session SubView restore: _editViewIndex (MAIN_VIEW=0=mainEditView, SUB_VIEW=1=subEditView)
|
//--LS: Restore Session SubView restore: _editViewIndex (MAIN_VIEW=0=mainEditView, SUB_VIEW=1=subEditView)
|
||||||
// After the file is opened, it is moved to the other view, if applicable, using already available function docGotoAnotherEditView().
|
// After the file is opened, it is moved to the other view, if applicable, using already available function docGotoAnotherEditView().
|
||||||
int editViewIndex = session2Load->_files[i]._editViewIndex;
|
int editViewIndex = session2Load._files[i]._editViewIndex;
|
||||||
|
|
||||||
if (editViewIndex == MAIN_VIEW && iCurrentView != MAIN_VIEW) {
|
if (editViewIndex == MAIN_VIEW && iCurrentView != MAIN_VIEW) {
|
||||||
docGotoAnotherEditView(MODE_TRANSFER);
|
docGotoAnotherEditView(MODE_TRANSFER);
|
||||||
@ -7257,36 +7255,39 @@ bool Notepad_plus::loadSessionToEditView(Session *session2Load)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
//--LS: Check, if file was not already loaded. Erase it only from session, if not already loaded!!
|
//--LS: Check, if file was not already loaded. Erase it only from session, if not already loaded!!
|
||||||
if ((_mainDocTab.find(pFn) == -1) && (_subDocTab.find(pFn) == -1)) {
|
if ((_mainDocTab.find(pFn) == -1) && (_subDocTab.find(pFn) == -1))
|
||||||
vector<sessionFileInfo>::iterator posIt = session2Load->_files.begin() + i;
|
{
|
||||||
session2Load->_files.erase(posIt);
|
Session & session2BeModified = (Session & )session2Load;
|
||||||
|
vector<sessionFileInfo>::iterator posIt = session2BeModified._files.begin() + i;
|
||||||
|
session2BeModified._files.erase(posIt);
|
||||||
shouldBeResaved = true;
|
shouldBeResaved = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//--LS: restore actifSubIndex in subEditView!!!
|
//--LS: restore actifSubIndex in subEditView!!!
|
||||||
// There are mainDocTab and subDocTab!!
|
// There are mainDocTab and subDocTab!!
|
||||||
if (otherViewOpened) {
|
if (otherViewOpened)
|
||||||
|
{
|
||||||
size_t actifIndexCurrentView, actifIndexNonCurrentView, activView;
|
size_t actifIndexCurrentView, actifIndexNonCurrentView, activView;
|
||||||
DocTabView *pNonCurrentDocTab = getNonCurrentDocTab();
|
DocTabView *pNonCurrentDocTab = getNonCurrentDocTab();
|
||||||
|
|
||||||
if (iCurrentView == MAIN_VIEW) {
|
if (iCurrentView == MAIN_VIEW) {
|
||||||
actifIndexCurrentView = session2Load->_actifIndex;
|
actifIndexCurrentView = session2Load._actifIndex;
|
||||||
actifIndexNonCurrentView = session2Load->_actifSubIndex;
|
actifIndexNonCurrentView = session2Load._actifSubIndex;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
actifIndexCurrentView = session2Load->_actifSubIndex;
|
actifIndexCurrentView = session2Load._actifSubIndex;
|
||||||
actifIndexNonCurrentView = session2Load->_actifIndex;
|
actifIndexNonCurrentView = session2Load._actifIndex;
|
||||||
}
|
}
|
||||||
activView = session2Load->_actifView;
|
activView = session2Load._actifView;
|
||||||
|
|
||||||
|
|
||||||
//--LS: If there were already files loaded when the session is loaded, those number of files
|
//--LS: If there were already files loaded when the session is loaded, those number of files
|
||||||
// is used as offset to the actifIndexes, so that the active file of the session is activated.
|
// is used as offset to the actifIndexes, so that the active file of the session is activated.
|
||||||
if (actifIndexCurrentView < session2Load->_files.size() && actifIndexCurrentView < rgNSessionFilesLoaded[iCurrentView]) {
|
if (actifIndexCurrentView < session2Load._files.size() && actifIndexCurrentView < rgNSessionFilesLoaded[iCurrentView]) {
|
||||||
_pDocTab->activate(actifIndexCurrentView + rgNOpenedOldFiles[iCurrentView]);
|
_pDocTab->activate(actifIndexCurrentView + rgNOpenedOldFiles[iCurrentView]);
|
||||||
}
|
}
|
||||||
if (actifIndexNonCurrentView < session2Load->_files.size() && actifIndexNonCurrentView < rgNSessionFilesLoaded[iNonCurrentView]) {
|
if (actifIndexNonCurrentView < session2Load._files.size() && actifIndexNonCurrentView < rgNSessionFilesLoaded[iNonCurrentView]) {
|
||||||
pNonCurrentDocTab->activate(actifIndexNonCurrentView + rgNOpenedOldFiles[iNonCurrentView]);
|
pNonCurrentDocTab->activate(actifIndexNonCurrentView + rgNOpenedOldFiles[iNonCurrentView]);
|
||||||
}
|
}
|
||||||
//--LS: restore view (MAIN_VIEW or SUB_VIEW).
|
//--LS: restore view (MAIN_VIEW or SUB_VIEW).
|
||||||
@ -7302,8 +7303,8 @@ bool Notepad_plus::loadSessionToEditView(Session *session2Load)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (session2Load->_actifIndex < session2Load->_files.size())
|
else if (session2Load._actifIndex < session2Load._files.size())
|
||||||
_pDocTab->activate(session2Load->_actifIndex + rgNOpenedOldFiles[iCurrentView]);
|
_pDocTab->activate(session2Load._actifIndex + rgNOpenedOldFiles[iCurrentView]);
|
||||||
|
|
||||||
}
|
}
|
||||||
return shouldBeResaved;
|
return shouldBeResaved;
|
||||||
|
@ -318,7 +318,7 @@ public:
|
|||||||
const char * fileSaveSession(size_t nbFile = 0, char ** fileNames = NULL);
|
const char * fileSaveSession(size_t nbFile = 0, char ** fileNames = NULL);
|
||||||
|
|
||||||
//--LS: New function loadSessionToEditView(session2Load) for re-use!
|
//--LS: New function loadSessionToEditView(session2Load) for re-use!
|
||||||
bool Notepad_plus::loadSessionToEditView(Session *session2Load);
|
bool Notepad_plus::loadSessionToEditView(const Session & session2Load);
|
||||||
|
|
||||||
|
|
||||||
bool changeDlgLang(HWND hDlg, const char *dlgTagName, char *title = NULL);
|
bool changeDlgLang(HWND hDlg, const char *dlgTagName, char *title = NULL);
|
||||||
|
@ -92,9 +92,6 @@ struct Position
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct sessionFileInfo : public Position {
|
struct sessionFileInfo : public Position {
|
||||||
string _fileName;
|
|
||||||
string _langName;
|
|
||||||
|
|
||||||
sessionFileInfo(const char *fn) {
|
sessionFileInfo(const char *fn) {
|
||||||
if (fn) _fileName = fn;
|
if (fn) _fileName = fn;
|
||||||
};
|
};
|
||||||
@ -102,8 +99,12 @@ struct sessionFileInfo : public Position {
|
|||||||
if (fn) _fileName = fn;
|
if (fn) _fileName = fn;
|
||||||
if (ln) _langName = ln;
|
if (ln) _langName = ln;
|
||||||
};
|
};
|
||||||
|
|
||||||
sessionFileInfo(string fn) : _fileName(fn){};
|
sessionFileInfo(string fn) : _fileName(fn){};
|
||||||
sessionFileInfo(string fn, Position pos) : Position(pos), _fileName(fn){};
|
sessionFileInfo(string fn, Position pos) : Position(pos), _fileName(fn){};
|
||||||
|
|
||||||
|
string _fileName;
|
||||||
|
string _langName;
|
||||||
//--LS: Session SubView restore: _editViewIndex (MAIN_VIEW=0=mainEditView, SUB_VIEW=1=subEditView)
|
//--LS: Session SubView restore: _editViewIndex (MAIN_VIEW=0=mainEditView, SUB_VIEW=1=subEditView)
|
||||||
size_t _editViewIndex;
|
size_t _editViewIndex;
|
||||||
vector<size_t> marks;
|
vector<size_t> marks;
|
||||||
|
Loading…
Reference in New Issue
Block a user