diff --git a/PowerEditor/bin/change.log b/PowerEditor/bin/change.log index a981fd9c..e60aa8db 100644 --- a/PowerEditor/bin/change.log +++ b/PowerEditor/bin/change.log @@ -2,16 +2,33 @@ Notepad++ v5.1 fixed bugs and added features (from v5.0.3) : 1. Make Notepad++ Unicode-compliant application(Unicode path supported). 2. Fix crash issue due to the incoherent modification/creation date. -3. Fix tag match highlighting mismatched bug. -4. Make tag match highlighting on non html zone optional. -5. Refine the Save/Open file directory settings (follow tab/last operation/user defined dir). -6. Add "Doc go to new instance" and "Doc open in new instance" features. -7. Add new pluin notification NPPN_DOCACTIVATED and NPPN_LANGCHANGED. -8. Fix context menu incorrect setting crash bug. -9. Fix a problem with Incremental search+UTF8 in win9x. -10. Fix bug with CPP lexer keyword list. +3. Enhance Find in files feature : launch in thread, stop as wish. +4. Fix tag match highlighting mismatched bug. +5. Make tag match highlighting on non html zone optional. +6. Fix cpu high consumption bug while document is cloned with smart highlighting and xml matched highlighting features activating. +7. Refine the Save/Open file directory settings (follow tab/last operation/user defined dir). +8. Add "Doc go to new instance" and "Doc open in new instance" features. +9. Move document to another instance of Notepad++ via drag and drop document tab. +10. Add new pluin notification NPPN_DOCACTIVATED and NPPN_LANGCHANGED. +11. Fix context menu incorrect setting crash bug. +12. Fix crash problem while typing Chinese character in ANSI CSS document under Chinese environment. +13. Fix a problem with Incremental search+UTF8 in win9x. +14. Fix the User defined language not working in Unicode version bug. +15. Fix bug with CPP lexer keyword list. +16. Fix auto-completion not woring for HTML, SQL and RC problem. +17. Remove all the comic sans font (finally :) ). +Included plugins (Unicode): + +1. TexFX v0.24a +2. MIME Tools v1.5 +3. NppExport v0.2.8 +4. Doc Monitor v2.2 +5. NppAutoIndent 1.2 +6. FTP_synchronize v0.9.6 +7. NppAutoIndent 1.2 + Included plugins (ANSI): 1. TexFX v0.24a @@ -24,10 +41,3 @@ Included plugins (ANSI): 8. Light Explorer v1.5 9. Doc Monitor v2.2 10. NppAutoIndent 1.2 - -Included plugins (Unicode): -1. MIME Tools v1.5 -2. NppExport v0.2.8 -3. Doc Monitor v2.2 -4. NppAutoIndent 1.2 -5. FTP_synchronize v0.9.6 \ No newline at end of file diff --git a/PowerEditor/installer/nppSetup.nsi b/PowerEditor/installer/nppSetup.nsi index 928d2745..3f5a32db 100644 --- a/PowerEditor/installer/nppSetup.nsi +++ b/PowerEditor/installer/nppSetup.nsi @@ -571,6 +571,16 @@ SubSection "Auto-completion Files" autoCompletionComponent File "..\bin\plugins\APIs\html.xml" SectionEnd + Section RC + SetOutPath "$INSTDIR\plugins\APIs" + File "..\bin\plugins\APIs\rc.xml" + SectionEnd + + Section SQL + SetOutPath "$INSTDIR\plugins\APIs" + File "..\bin\plugins\APIs\sql.xml" + SectionEnd + Section PHP SetOutPath "$INSTDIR\plugins\APIs" File "..\bin\plugins\APIs\php.xml" @@ -814,6 +824,21 @@ SubSection un.autoCompletionComponent Section un.CSS Delete "$INSTDIR\plugins\APIs\css.xml" RMDir "$INSTDIR\plugins\APIs\" + SectionEnd + + Section un.HTML + Delete "$INSTDIR\plugins\APIs\html.xml" + RMDir "$INSTDIR\plugins\APIs\" + SectionEnd + + Section un.SQL + Delete "$INSTDIR\plugins\APIs\sql.xml" + RMDir "$INSTDIR\plugins\APIs\" + SectionEnd + + Section un.RC + Delete "$INSTDIR\plugins\APIs\rc.xml" + RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.VB diff --git a/PowerEditor/src/MISC/RegExt/regExtDlg.cpp b/PowerEditor/src/MISC/RegExt/regExtDlg.cpp index a2f8cafa..adcf09ea 100644 --- a/PowerEditor/src/MISC/RegExt/regExtDlg.cpp +++ b/PowerEditor/src/MISC/RegExt/regExtDlg.cpp @@ -230,7 +230,7 @@ void RegExtDlg::getRegisteredExts() { //TCHAR valName[extNameLen]; TCHAR valData[extNameLen]; - int valDataLen = extNameLen; + int valDataLen = extNameLen * sizeof(TCHAR); int valType; HKEY hKey2Check; extNameActualLen = extNameLen; @@ -269,17 +269,16 @@ void RegExtDlg::addExt(TCHAR *ext) if (nRet == ERROR_SUCCESS) { - int valDataLen = 256; - TCHAR valData[256]; - + TCHAR valData[MAX_PATH]; + int valDataLen = MAX_PATH * sizeof(TCHAR); if (dwDisp == REG_OPENED_EXISTING_KEY) { int res = ::RegQueryValueEx(hKey, TEXT(""), NULL, NULL, (LPBYTE)valData, (LPDWORD)&valDataLen); if (res == ERROR_SUCCESS) - ::RegSetValueEx(hKey, nppBackup, 0, REG_SZ, (LPBYTE)valData, valDataLen+1); + ::RegSetValueEx(hKey, nppBackup, 0, REG_SZ, (LPBYTE)valData, valDataLen); } - ::RegSetValueEx(hKey, NULL, 0, REG_SZ, (LPBYTE)nppName, lstrlen(nppName)+1); + ::RegSetValueEx(hKey, NULL, 0, REG_SZ, (LPBYTE)nppName, (lstrlen(nppName)+1)*sizeof(TCHAR)); ::RegCloseKey(hKey); } @@ -302,7 +301,7 @@ bool RegExtDlg::deleteExts(const TCHAR *ext2Delete) else { TCHAR valData[extNameLen]; - int valDataLen = extNameLen; + int valDataLen = extNameLen*sizeof(TCHAR); int valType; int res = ::RegQueryValueEx(hKey, nppBackup, NULL, (LPDWORD)&valType, (LPBYTE)valData, (LPDWORD)&valDataLen); @@ -344,7 +343,7 @@ void RegExtDlg::writeNppPath() { // Write the value for new document ::RegOpenKeyEx(HKEY_CLASSES_ROOT, nppName, 0, KEY_ALL_ACCESS, &hRootKey); - ::RegSetValueEx(hRootKey, NULL, 0, REG_SZ, (LPBYTE)nppDoc, lstrlen(nppDoc)+1); + ::RegSetValueEx(hRootKey, NULL, 0, REG_SZ, (LPBYTE)nppDoc, (lstrlen(nppDoc)+1)*sizeof(TCHAR)); TCHAR nppPath[MAX_PATH]; ::GetModuleFileName(_hInst, nppPath, MAX_PATH); @@ -352,7 +351,7 @@ void RegExtDlg::writeNppPath() TCHAR nppPathParam[256] = TEXT("\""); lstrcat(lstrcat(nppPathParam, nppPath), TEXT("\" \"%1\"")); - ::RegSetValueEx(hKey, NULL, 0, REG_SZ, (LPBYTE)nppPathParam, lstrlen(nppPathParam)+1); + ::RegSetValueEx(hKey, NULL, 0, REG_SZ, (LPBYTE)nppPathParam, (lstrlen(nppPathParam)+1)*sizeof(TCHAR)); } RegCloseKey(hKey); } diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index a16fbd3f..15eb68e2 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -722,7 +722,7 @@ bool Notepad_plus::doReload(BufferID id, bool alert) */ if (alert) { - if (::MessageBox(_hSelf, TEXT("Do you want to reload the current file?"), TEXT("Reload"), MB_YESNO | MB_ICONQUESTION | MB_APPLMODAL) != IDYES) + if (::MessageBox(_hSelf, TEXT("Are you sure you want to reload the current file and lose the changes made in Notepad++?"), TEXT("Reload"), MB_YESNO | MB_ICONEXCLAMATION | MB_APPLMODAL) != IDYES) return false; } @@ -793,9 +793,9 @@ void Notepad_plus::doClose(BufferID id, int whichOne) { _pluginsManager.notify(&scnN); //add to recent files if its an existing file - if (!buf->isUntitled() && PathFileExists(buf->getFilePath())) + if (!buf->isUntitled() && PathFileExists(buf->getFullPathName())) { - _lastRecentFileList.add(buf->getFilePath()); + _lastRecentFileList.add(buf->getFullPathName()); } int nrDocs = whichOne==MAIN_VIEW?(_mainDocTab.nbItem()):(_subDocTab.nbItem()); @@ -823,7 +823,7 @@ void Notepad_plus::fileNew() bool Notepad_plus::fileReload() { BufferID buf = _pEditView->getCurrentBufferID(); - return doReload(buf, true); + return doReload(buf, buf->isDirty()); } generic_string exts2Filters(generic_string exts) { @@ -985,7 +985,7 @@ bool Notepad_plus::fileSave(BufferID id) if (!buf->getFileReadOnly() && buf->isDirty()) //cannot save if readonly { - const TCHAR *fn = buf->getFilePath(); + const TCHAR *fn = buf->getFullPathName(); if (buf->isUntitled()) { return fileSaveAs(id); @@ -1062,7 +1062,7 @@ bool Notepad_plus::fileSave(BufferID id) ::CopyFile(fn, fn_dateTime_bak.c_str(), FALSE); } - return doSave(bufferID, buf->getFilePath(), false); + return doSave(bufferID, buf->getFullPathName(), false); } } return false; @@ -1152,7 +1152,7 @@ bool Notepad_plus::fileDelete(BufferID id, int curView) bufferID = _pEditView->getCurrentBufferID(); Buffer * buf = MainFileManager->getBufferByID(bufferID); - const TCHAR *fileNamePath = buf->getFilePath(); + const TCHAR *fileNamePath = buf->getFullPathName(); if (PathFileExists(fileNamePath)) return false; @@ -1174,7 +1174,7 @@ bool Notepad_plus::fileDelete(BufferID id, int curView) bufferID = _pEditView->getCurrentBufferID(); Buffer * buf = MainFileManager->getBufferByID(bufferID); - const TCHAR *fileNamePath = buf->getFilePath(); + const TCHAR *fileNamePath = buf->getFullPathName(); if (doDeleteOrNot(fileNamePath) == IDYES) { @@ -1200,7 +1200,7 @@ bool Notepad_plus::fileClose(BufferID id, int curView) int res; //process the fileNamePath into LRF - const TCHAR *fileNamePath = buf->getFilePath(); + const TCHAR *fileNamePath = buf->getFullPathName(); if (buf->isDirty()) { @@ -1242,7 +1242,7 @@ bool Notepad_plus::fileCloseAll() BufferID id = _mainDocTab.getBufferByIndex(i); Buffer * buf = MainFileManager->getBufferByID(id); if (buf->isDirty()) { - int res = doSaveOrNot(buf->getFilePath()); + int res = doSaveOrNot(buf->getFullPathName()); if (res == IDYES) { if (!fileSave(id)) return false; //abort entire procedure @@ -1256,7 +1256,7 @@ bool Notepad_plus::fileCloseAll() BufferID id = _subDocTab.getBufferByIndex(i); Buffer * buf = MainFileManager->getBufferByID(id); if (buf->isDirty()) { - int res = doSaveOrNot(buf->getFilePath()); + int res = doSaveOrNot(buf->getFullPathName()); if (res == IDYES) { if (!fileSave(id)) return false; //abort entire procedure @@ -1298,7 +1298,7 @@ bool Notepad_plus::fileCloseAllButCurrent() continue; Buffer * buf = MainFileManager->getBufferByID(id); if (buf->isDirty()) { - int res = doSaveOrNot(buf->getFilePath()); + int res = doSaveOrNot(buf->getFullPathName()); if (res == IDYES) { if (!fileSave(id)) return false; //abort entire procedure @@ -1314,7 +1314,7 @@ bool Notepad_plus::fileCloseAllButCurrent() if (id == current) continue; if (buf->isDirty()) { - int res = doSaveOrNot(buf->getFilePath()); + int res = doSaveOrNot(buf->getFullPathName()); if (res == IDYES) { if (!fileSave(id)) return false; //abort entire procedure @@ -1635,7 +1635,7 @@ bool Notepad_plus::findInOpenedFiles() { { pBuf = MainFileManager->getBufferByID(_mainDocTab.getBufferByIndex(i)); _invisibleEditView.execute(SCI_SETDOCPOINTER, 0, pBuf->getDocument()); - nbTotal += _findReplaceDlg.processAll(ProcessFindAll, NULL, NULL, isEntireDoc, pBuf->getFilePath()); + nbTotal += _findReplaceDlg.processAll(ProcessFindAll, NULL, NULL, isEntireDoc, pBuf->getFullPathName()); } } @@ -1645,7 +1645,7 @@ bool Notepad_plus::findInOpenedFiles() { { pBuf = MainFileManager->getBufferByID(_subDocTab.getBufferByIndex(i)); _invisibleEditView.execute(SCI_SETDOCPOINTER, 0, pBuf->getDocument()); - nbTotal += _findReplaceDlg.processAll(ProcessFindAll, NULL, NULL, isEntireDoc, pBuf->getFilePath()); + nbTotal += _findReplaceDlg.processAll(ProcessFindAll, NULL, NULL, isEntireDoc, pBuf->getFullPathName()); } } @@ -1701,7 +1701,7 @@ void Notepad_plus::checkDocState() bool isCurrentDirty = curBuf->isDirty(); bool isSeveralDirty = isCurrentDirty; - bool isFileExisting = PathFileExists(curBuf->getFilePath()) != FALSE; + bool isFileExisting = PathFileExists(curBuf->getFullPathName()) != FALSE; if (!isCurrentDirty) { for(int i = 0; i < MainFileManager->getNrBuffers(); i++) @@ -1977,7 +1977,7 @@ BOOL Notepad_plus::notify(SCNotification *notification) else { generic_string quotFileName = TEXT("\""); - quotFileName += _pEditView->getCurrentBuffer()->getFilePath(); + quotFileName += _pEditView->getCurrentBuffer()->getFullPathName(); quotFileName += TEXT("\""); COPYDATASTRUCT fileNamesData; fileNamesData.dwData = COPYDATA_FILENAMES; @@ -1995,7 +1995,7 @@ BOOL Notepad_plus::notify(SCNotification *notification) int iView = isFromPrimary?MAIN_VIEW:SUB_VIEW; if (buf->isDirty()) { - ::MessageBox(_hSelf, TEXT("Buffer can not be dirty"), TEXT(""), MB_OK); + ::MessageBox(_hSelf, TEXT("Document is modified, save it then try again."), TEXT("Go to another Notepad++ instance"), MB_OK); } else { @@ -2339,7 +2339,7 @@ BOOL Notepad_plus::notify(SCNotification *notification) _tabPopupMenu.enableItem(IDM_EDIT_SETREADONLY, !isSysReadOnly); _tabPopupMenu.enableItem(IDM_EDIT_CLEARREADONLY, isSysReadOnly); - bool isFileExisting = PathFileExists(buf->getFilePath()) != FALSE; + bool isFileExisting = PathFileExists(buf->getFullPathName()) != FALSE; _tabPopupMenu.enableItem(IDM_FILE_DELETE, isFileExisting); _tabPopupMenu.enableItem(IDM_FILE_RENAME, isFileExisting); @@ -2450,13 +2450,13 @@ BOOL Notepad_plus::notify(SCNotification *notification) { BufferID idd = _mainDocTab.getBufferByIndex(id); Buffer * buf = MainFileManager->getBufferByID(idd); - tip = buf->getFilePath(); + tip = buf->getFullPathName(); } else if (hWin == _subDocTab.getHSelf()) { BufferID idd = _subDocTab.getBufferByIndex(id); Buffer * buf = MainFileManager->getBufferByID(idd); - tip = buf->getFilePath(); + tip = buf->getFullPathName(); } else break; @@ -3072,10 +3072,10 @@ void Notepad_plus::command(int id) { Buffer * buf = _pEditView->getCurrentBuffer(); if (id == IDM_EDIT_FULLPATHTOCLIP) { - str2Cliboard(buf->getFilePath()); + str2Cliboard(buf->getFullPathName()); } else if (id == IDM_EDIT_CURRENTDIRTOCLIP) { TCHAR dir[MAX_PATH]; - lstrcpy(dir, buf->getFilePath()); + lstrcpy(dir, buf->getFullPathName()); PathRemoveFileSpec((TCHAR *)dir); str2Cliboard(dir); } else if (id == IDM_EDIT_FILENAMETOCLIP) { @@ -4548,7 +4548,7 @@ void Notepad_plus::setTitle() if (buf->isDirty()) { result += TEXT("*"); } - result += buf->getFilePath(); + result += buf->getFullPathName(); result += TEXT(" - "); result += _className; ::SetWindowText(_hSelf, result.c_str()); @@ -6204,14 +6204,14 @@ void Notepad_plus::getTaskListInfo(TaskListInfo *tli) BufferID bufID = _pDocTab->getBufferByIndex(i); Buffer * b = MainFileManager->getBufferByID(bufID); int status = b->isReadOnly()?tb_ro:(b->isDirty()?tb_unsaved:tb_saved); - tli->_tlfsLst.push_back(TaskLstFnStatus(currentView(), i, b->getFilePath(), status)); + tli->_tlfsLst.push_back(TaskLstFnStatus(currentView(), i, b->getFullPathName(), status)); } for (size_t i = 0 ; i < nonCurrentNbDoc ; i++) { BufferID bufID = _pNonDocTab->getBufferByIndex(i); Buffer * b = MainFileManager->getBufferByID(bufID); int status = b->isReadOnly()?tb_ro:(b->isDirty()?tb_unsaved:tb_saved); - tli->_tlfsLst.push_back(TaskLstFnStatus(otherView(), i, b->getFilePath(), status)); + tli->_tlfsLst.push_back(TaskLstFnStatus(otherView(), i, b->getFullPathName(), status)); } } @@ -6983,7 +6983,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa { TCHAR str[MAX_PATH]; // par defaut : NPPM_GETCURRENTDIRECTORY - TCHAR *fileStr = lstrcpy(str, _pEditView->getCurrentBuffer()->getFilePath()); + TCHAR *fileStr = lstrcpy(str, _pEditView->getCurrentBuffer()->getFullPathName()); if (Message == NPPM_GETCURRENTDIRECTORY) PathRemoveFileSpec(str); @@ -7116,7 +7116,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa { BufferID id = _mainDocTab.getBufferByIndex(i); Buffer * buf = MainFileManager->getBufferByID(id); - lstrcpy(fileNames[j++], buf->getFilePath()); + lstrcpy(fileNames[j++], buf->getFullPathName()); } } if (Message != NPPM_GETOPENFILENAMESPRIMARY) { @@ -7124,7 +7124,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa { BufferID id = _subDocTab.getBufferByIndex(i); Buffer * buf = MainFileManager->getBufferByID(id); - lstrcpy(fileNames[j++], buf->getFilePath()); + lstrcpy(fileNames[j++], buf->getFullPathName()); } } return j; @@ -8100,11 +8100,11 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa NMWINDLG* nmdlg = (NMWINDLG*)lParam; switch (nmdlg->type) { - case WDT_ACTIVATE: - activateDoc(nmdlg->curSel); - nmdlg->processed = TRUE; - break; - case WDT_SAVE: + case WDT_ACTIVATE: + activateDoc(nmdlg->curSel); + nmdlg->processed = TRUE; + break; + case WDT_SAVE: { //loop through nmdlg->nItems, get index and save it for (int i = 0; i < (int)nmdlg->nItems; i++) { @@ -8113,13 +8113,14 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa nmdlg->processed = TRUE; } break; - case WDT_CLOSE: + case WDT_CLOSE: { //loop through nmdlg->nItems, get index and close it for (int i = 0; i < (int)nmdlg->nItems; i++) { - fileClose(_pDocTab->getBufferByIndex(i), currentView()); - nmdlg->Items[i] = 0xFFFFFFFF; // indicate file was closed + fileClose(_pDocTab->getBufferByIndex(nmdlg->Items[i]), currentView()); UINT pos = nmdlg->Items[i]; + nmdlg->Items[i] = 0xFFFFFFFF; // indicate file was closed + for (int j=i+1; j<(int)nmdlg->nItems; ++j) if (nmdlg->Items[j] > pos) --nmdlg->Items[j]; @@ -8127,20 +8128,20 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa nmdlg->processed = TRUE; } break; - case WDT_SORT: - if (nmdlg->nItems != _pDocTab->nbItem()) //sanity check, if mismatch just abort + case WDT_SORT: + if (nmdlg->nItems != _pDocTab->nbItem()) //sanity check, if mismatch just abort + break; + //Collect all buffers + std::vector tempBufs; + for(int i = 0; i < (int)nmdlg->nItems; i++) { + tempBufs.push_back(_pDocTab->getBufferByIndex(i)); + } + //Reset buffers + for(int i = 0; i < (int)nmdlg->nItems; i++) { + _pDocTab->setBuffer(i, tempBufs[nmdlg->Items[i]]); + } + activateBuffer(_pDocTab->getBufferByIndex(_pDocTab->getCurrentTabIndex()), currentView()); break; - //Collect all buffers - std::vector tempBufs; - for(int i = 0; i < (int)nmdlg->nItems; i++) { - tempBufs.push_back(_pDocTab->getBufferByIndex(i)); - } - //Reset buffers - for(int i = 0; i < (int)nmdlg->nItems; i++) { - _pDocTab->setBuffer(i, tempBufs[nmdlg->Items[i]]); - } - activateBuffer(_pDocTab->getBufferByIndex(_pDocTab->getCurrentTabIndex()), currentView()); - break; } return TRUE; } @@ -8179,8 +8180,6 @@ LRESULT CALLBACK Notepad_plus::Notepad_plus_Proc(HWND hwnd, UINT Message, WPARAM void Notepad_plus::fullScreenToggle() { - HMONITOR currentMonitor; //Handle to monitor where fullscreen should go - MONITORINFO mi; //Info of that monitor RECT fullscreenArea; //RECT used to calculate window fullscrene size _isfullScreen = !_isfullScreen; @@ -8194,17 +8193,21 @@ void Notepad_plus::fullScreenToggle() fullscreenArea.left = 0; fullscreenArea.right = GetSystemMetrics(SM_CXSCREEN); fullscreenArea.bottom = GetSystemMetrics(SM_CYSCREEN); - - //Caution, this will not work on windows 95, so probably add some checking of some sorts like Unicode checks, IF 95 were to be supported - currentMonitor = MonitorFromWindow(_hSelf, MONITOR_DEFAULTTONEAREST); //should always be valid monitor handle - mi.cbSize = sizeof(MONITORINFO); - if (GetMonitorInfo(currentMonitor, &mi) != FALSE) + + //if (_winVersion != WV_NT) { - fullscreenArea = mi.rcMonitor; - fullscreenArea.right -= fullscreenArea.left; - fullscreenArea.bottom -= fullscreenArea.top; + HMONITOR currentMonitor; //Handle to monitor where fullscreen should go + MONITORINFO mi; //Info of that monitor + //Caution, this will not work on windows 95, so probably add some checking of some sorts like Unicode checks, IF 95 were to be supported + currentMonitor = MonitorFromWindow(_hSelf, MONITOR_DEFAULTTONEAREST); //should always be valid monitor handle + mi.cbSize = sizeof(MONITORINFO); + if (GetMonitorInfo(currentMonitor, &mi) != FALSE) + { + fullscreenArea = mi.rcMonitor; + fullscreenArea.right -= fullscreenArea.left; + fullscreenArea.bottom -= fullscreenArea.top; + } } - //Hide menu ::SetMenu(_hSelf, NULL); @@ -8375,12 +8378,12 @@ void Notepad_plus::getCurrentOpenedFiles(Session & session) { BufferID bufID = _mainDocTab.getBufferByIndex(i); Buffer * buf = MainFileManager->getBufferByID(bufID); - if (!buf->isUntitled() && PathFileExists(buf->getFilePath())) + if (!buf->isUntitled() && PathFileExists(buf->getFullPathName())) { generic_string languageName = getLangFromMenu( buf ); const TCHAR *langName = languageName.c_str(); - sessionFileInfo sfi(buf->getFilePath(), langName, buf->getPosition(&_mainEditView)); + sessionFileInfo sfi(buf->getFullPathName(), langName, buf->getPosition(&_mainEditView)); //_mainEditView.activateBuffer(buf->getID()); _invisibleEditView.execute(SCI_SETDOCPOINTER, 0, buf->getDocument()); @@ -8400,12 +8403,12 @@ void Notepad_plus::getCurrentOpenedFiles(Session & session) { BufferID bufID = _subDocTab.getBufferByIndex(i); Buffer * buf = MainFileManager->getBufferByID(bufID); - if (!buf->isUntitled() && PathFileExists(buf->getFilePath())) + if (!buf->isUntitled() && PathFileExists(buf->getFullPathName())) { generic_string languageName = getLangFromMenu( buf ); const TCHAR *langName = languageName.c_str(); - sessionFileInfo sfi(buf->getFilePath(), langName, buf->getPosition(&_subEditView)); + sessionFileInfo sfi(buf->getFullPathName(), langName, buf->getPosition(&_subEditView)); _invisibleEditView.execute(SCI_SETDOCPOINTER, 0, buf->getDocument()); int maxLine = _invisibleEditView.execute(SCI_GETLINECOUNT); @@ -8659,10 +8662,10 @@ void Notepad_plus::notifyBufferChanged(Buffer * buffer, int mask) { case DOC_MODIFIED: //ask for reloading { bool autoUpdate = (nppGUI._fileAutoDetection == cdAutoUpdate) || (nppGUI._fileAutoDetection == cdAutoUpdateGo2end); - if (!autoUpdate) + if (!autoUpdate || buffer->isDirty()) { didDialog = true; - if (doReloadOrNot(buffer->getFilePath()) != IDYES) + if (doReloadOrNot(buffer->getFullPathName(), buffer->isDirty()) != IDYES) break; //abort } //activateBuffer(buffer->getID(), iView); //activate the buffer in the first view possible @@ -8681,7 +8684,7 @@ void Notepad_plus::notifyBufferChanged(Buffer * buffer, int mask) { iView = otherView(); //activateBuffer(buffer->getID(), iView); //activate the buffer in the first view possible didDialog = true; - if (doCloseOrNot(buffer->getFilePath()) == IDNO) + if (doCloseOrNot(buffer->getFullPathName()) == IDNO) { //close in both views, doing current view last since that has to remain opened doClose(buffer->getID(), otherView()); @@ -8723,7 +8726,7 @@ void Notepad_plus::notifyBufferChanged(Buffer * buffer, int mask) { checkDocState(); setTitle(); TCHAR dir[MAX_PATH]; - lstrcpy(dir, buffer->getFilePath()); + lstrcpy(dir, buffer->getFullPathName()); PathRemoveFileSpec(dir); setWorkingDir(dir); } @@ -8777,7 +8780,7 @@ void Notepad_plus::notifyBufferActivated(BufferID bufid, int view) { setDisplayFormat(buf->getFormat()); enableConvertMenuItems(buf->getFormat()); TCHAR dir[MAX_PATH]; - lstrcpy(dir, buf->getFilePath()); + lstrcpy(dir, buf->getFullPathName()); PathRemoveFileSpec(dir); setWorkingDir(dir); setTitle(); diff --git a/PowerEditor/src/Notepad_plus.h b/PowerEditor/src/Notepad_plus.h index b91bd9f0..5620752b 100644 --- a/PowerEditor/src/Notepad_plus.h +++ b/PowerEditor/src/Notepad_plus.h @@ -394,11 +394,13 @@ private: return doActionOrNot(TEXT("Save"), phrase, MB_YESNOCANCEL | MB_ICONQUESTION | MB_APPLMODAL); }; - int doReloadOrNot(const TCHAR *fn) { - TCHAR pattern[128] = TEXT("The file \"%s\" is modified by another program.\rReload this file?"); + int doReloadOrNot(const TCHAR *fn, bool dirty) { + TCHAR* pattern = TEXT("%s\r\rThis file has been modified by another program.\rDo you want to reload it%s?"); + TCHAR* lose_info_str = dirty ? TEXT(" and lose the changes made in Notepad++") : TEXT(""); TCHAR phrase[512]; - wsprintf(phrase, pattern, fn); - return doActionOrNot(TEXT("Reload"), phrase, MB_YESNO | MB_ICONQUESTION | MB_APPLMODAL); + wsprintf(phrase, pattern, fn, lose_info_str); + int icon = dirty ? MB_ICONEXCLAMATION : MB_ICONQUESTION; + return doActionOrNot(TEXT("Reload"), phrase, MB_YESNO | MB_APPLMODAL | icon); }; int doCloseOrNot(const TCHAR *fn) { diff --git a/PowerEditor/src/ScitillaComponent/Buffer.cpp b/PowerEditor/src/ScitillaComponent/Buffer.cpp index b299b2d9..aad4bae2 100644 --- a/PowerEditor/src/ScitillaComponent/Buffer.cpp +++ b/PowerEditor/src/ScitillaComponent/Buffer.cpp @@ -423,7 +423,7 @@ bool FileManager::reloadBuffer(BufferID id) { Document doc = buf->getDocument(); Utf8_16_Read UnicodeConvertor; buf->_canNotify = false; //disable notify during file load, we dont want dirty to be triggered - bool res = loadFileData(doc, buf->getFilePath(), &UnicodeConvertor, buf->getLangType()); + bool res = loadFileData(doc, buf->getFullPathName(), &UnicodeConvertor, buf->getLangType()); buf->_canNotify = true; if (res) { if (UnicodeConvertor.getNewBuf()) { @@ -446,7 +446,7 @@ bool FileManager::reloadBufferDeferred(BufferID id) { bool FileManager::deleteFile(BufferID id) { Buffer * buf = getBufferByID(id); - const TCHAR *fileNamePath = buf->getFilePath(); + const TCHAR *fileNamePath = buf->getFullPathName(); if (!PathFileExists(fileNamePath)) return false; return ::DeleteFile(fileNamePath) != 0; @@ -455,7 +455,7 @@ bool FileManager::deleteFile(BufferID id) bool FileManager::moveFile(BufferID id, const TCHAR * newFileName) { Buffer * buf = getBufferByID(id); - const TCHAR *fileNamePath = buf->getFilePath(); + const TCHAR *fileNamePath = buf->getFullPathName(); if (!PathFileExists(fileNamePath)) return false; @@ -622,7 +622,7 @@ BufferID FileManager::getBufferFromName(const TCHAR * name) { ::GetFullPathName(name, MAX_PATH, fullpath, NULL); ::GetLongPathName(fullpath, fullpath, MAX_PATH); for(size_t i = 0; i < _buffers.size(); i++) { - if (!lstrcmpi(name, _buffers.at(i)->getFilePath())) + if (!lstrcmpi(name, _buffers.at(i)->getFullPathName())) return _buffers.at(i)->getID(); } return BUFFER_INVALID; @@ -649,6 +649,6 @@ int FileManager::getFileNameFromBuffer(BufferID id, TCHAR * fn2copy) { return -1; Buffer * buf = getBufferByID(id); if (fn2copy) - lstrcpy(fn2copy, buf->getFilePath()); - return lstrlen(buf->getFilePath()); -} \ No newline at end of file + lstrcpy(fn2copy, buf->getFullPathName()); + return lstrlen(buf->getFullPathName()); +} diff --git a/PowerEditor/src/ScitillaComponent/Buffer.h b/PowerEditor/src/ScitillaComponent/Buffer.h index 53259a51..cfa01d85 100644 --- a/PowerEditor/src/ScitillaComponent/Buffer.h +++ b/PowerEditor/src/ScitillaComponent/Buffer.h @@ -160,7 +160,7 @@ public : // 3. gets the last modified time void setFileName(const TCHAR *fn, LangType defaultLang = L_TXT); - const TCHAR * getFilePath() const { + const TCHAR * getFullPathName() const { return _fullPathName; }; diff --git a/PowerEditor/src/ScitillaComponent/DocTabView.cpp b/PowerEditor/src/ScitillaComponent/DocTabView.cpp index d4e9e76e..c97cca42 100644 --- a/PowerEditor/src/ScitillaComponent/DocTabView.cpp +++ b/PowerEditor/src/ScitillaComponent/DocTabView.cpp @@ -75,7 +75,7 @@ BufferID DocTabView::findBufferByName(const TCHAR * fullfilename) { //-1 if not ::SendMessage(_hSelf, TCM_GETITEM, i, reinterpret_cast(&tie)); BufferID id = (BufferID)tie.lParam; Buffer * buf = MainFileManager->getBufferByID(id); - if (!lstrcmp(fullfilename, buf->getFilePath())) { + if (!lstrcmp(fullfilename, buf->getFullPathName())) { return id; } } diff --git a/PowerEditor/src/ScitillaComponent/Printer.cpp b/PowerEditor/src/ScitillaComponent/Printer.cpp index f6a6becc..59e6c157 100644 --- a/PowerEditor/src/ScitillaComponent/Printer.cpp +++ b/PowerEditor/src/ScitillaComponent/Printer.cpp @@ -178,7 +178,7 @@ size_t Printer::doPrint(bool justDoIt) DOCINFO docInfo; docInfo.cbSize = sizeof(DOCINFO); - docInfo.lpszDocName = _pSEView->getCurrentBuffer()->getFilePath(); + docInfo.lpszDocName = _pSEView->getCurrentBuffer()->getFullPathName(); docInfo.lpszOutput = NULL; if (::StartDoc(_pdlg.hDC, &docInfo) < 0) diff --git a/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp b/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp index b59ea2ba..d81aca64 100644 --- a/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp +++ b/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp @@ -118,8 +118,8 @@ struct BufferEquivalent } else if (_iColumn == 1) { - const TCHAR *s1 = b1->getFilePath(); - const TCHAR *s2 = b2->getFilePath(); + const TCHAR *s1 = b1->getFullPathName(); + const TCHAR *s2 = b2->getFullPathName(); return _strequiv(s1, s2); //we can compare the full path to sort on directory, since after sorting directories sorting files is the second thing to do (if directories are the same that is) } else if (_iColumn == 2) @@ -270,7 +270,7 @@ BOOL CALLBACK WindowsDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam } else if (pLvdi->item.iSubItem == 1) // directory { - const TCHAR *fullName = buf->getFilePath(); + const TCHAR *fullName = buf->getFullPathName(); const TCHAR *fileName = buf->getFileName(); int len = lstrlen(fullName)-lstrlen(fileName); if (!len) { @@ -656,6 +656,7 @@ void WindowsDlg::doClose() for(UINT i=-1, j=0;; ++j) { i = ListView_GetNextItem(_hList, i, LVNI_SELECTED); if (i == -1) break; + ListView_SetItemState(_hList, i, 0, LVIS_SELECTED); // deselect nmdlg.Items[j] = _idxMap[i]; key[j] = i; } @@ -683,7 +684,13 @@ void WindowsDlg::doClose() doRefresh(true); else { - ListView_RedrawItems(_hList, 0, ListView_GetSelectedCount(_hList)); + // select first previously selected item (or last one if only the last one was removed) + if (index == _idxMap.size()) index --; + if (index >= 0) + { + ListView_SetItemState(_hList, index, LVIS_SELECTED, LVIS_SELECTED); + ListView_RedrawItems(_hList, 0, _idxMap.size() - 1); + } ListView_SetItemCount(_hList, _idxMap.size()); } } diff --git a/scintilla/src/LexCSS.cxx b/scintilla/src/LexCSS.cxx index b60408bd..9be4aeee 100644 --- a/scintilla/src/LexCSS.cxx +++ b/scintilla/src/LexCSS.cxx @@ -1,9 +1,9 @@ // Scintilla source code edit control /** @file LexCSS.cxx - ** Lexer for Cascading Style Sheets - ** Written by Jakub Vrána - ** Improved by Philippe Lhoste (CSS2) - **/ +** Lexer for Cascading Style Sheets +** Written by Jakub Vr?na +** Improved by Philippe Lhoste (CSS2) +**/ // Copyright 1998-2002 by Neil Hodgson // The License.txt file describes the conditions under which this software may be distributed. @@ -31,8 +31,8 @@ static inline bool IsAWordChar(const unsigned int ch) { return (isalnum(ch) || ch == '-' || ch == '_' || ch >= 161); // _ is not in fact correct CSS word-character } -inline bool IsCssOperator(const char ch) { - if (!isalnum(ch) && +inline bool IsCssOperator(const int ch) { + if (!((ch < 0x80) && isalnum(ch)) && (ch == '{' || ch == '}' || ch == ':' || ch == ',' || ch == ';' || ch == '.' || ch == '#' || ch == '!' || ch == '@' || /* CSS2 */ @@ -194,19 +194,14 @@ static void ColouriseCssDoc(unsigned int startPos, int length, int initStyle, Wo s2++; switch (sc.state) { case SCE_CSS_IDENTIFIER: - if (!keywords.InList(s2)) { - if (keywords2.InList(s2)) { - sc.ChangeState(SCE_CSS_IDENTIFIER2); - } else { - sc.ChangeState(SCE_CSS_UNKNOWN_IDENTIFIER); - } - } - break; + case SCE_CSS_IDENTIFIER2: case SCE_CSS_UNKNOWN_IDENTIFIER: if (keywords.InList(s2)) sc.ChangeState(SCE_CSS_IDENTIFIER); else if (keywords2.InList(s2)) sc.ChangeState(SCE_CSS_IDENTIFIER2); + else + sc.ChangeState(SCE_CSS_UNKNOWN_IDENTIFIER); break; case SCE_CSS_PSEUDOCLASS: if (!pseudoClasses.InList(s2)) @@ -232,7 +227,7 @@ static void ColouriseCssDoc(unsigned int startPos, int length, int initStyle, Wo sc.Forward(); } else if (sc.state == SCE_CSS_VALUE && (sc.ch == '\"' || sc.ch == '\'')) { sc.SetState((sc.ch == '\"' ? SCE_CSS_DOUBLESTRING : SCE_CSS_SINGLESTRING)); - } else if (IsCssOperator(static_cast(sc.ch)) + } else if (IsCssOperator(sc.ch) && (sc.state != SCE_CSS_ATTRIBUTE || sc.ch == ']') && (sc.state != SCE_CSS_VALUE || sc.ch == ';' || sc.ch == '}' || sc.ch == '!') && (sc.state != SCE_CSS_DIRECTIVE || sc.ch == ';' || sc.ch == '{')