From 6dfd22d52f159f1dfb9d4a41863a8bf26729d047 Mon Sep 17 00:00:00 2001 From: Don HO Date: Sat, 16 Mar 2019 04:19:02 +0100 Subject: [PATCH] Add "View Current File in Browser" for Firefox, Chrome, IE & Edge Restore deleted "Launch in browser" customized shorcuts in [EU-FOSSA] by implementing them in more secure way. --- PowerEditor/installer/nativeLang/english.xml | 1 + PowerEditor/src/Notepad_plus.cpp | 5 ++ PowerEditor/src/Notepad_plus.rc | 8 +++ PowerEditor/src/NppCommands.cpp | 68 ++++++++++++++++++++ PowerEditor/src/Parameters.cpp | 8 ++- PowerEditor/src/localization.cpp | 15 +++-- PowerEditor/src/menuCmdID.h | 4 ++ 7 files changed, 101 insertions(+), 8 deletions(-) diff --git a/PowerEditor/installer/nativeLang/english.xml b/PowerEditor/installer/nativeLang/english.xml index d1950c83..67c0f50a 100644 --- a/PowerEditor/installer/nativeLang/english.xml +++ b/PowerEditor/installer/nativeLang/english.xml @@ -1063,6 +1063,7 @@ Do you want to launch Notepad++ in Administrator mode?"/> + diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index 5f28ef40..b4aec465 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -2000,6 +2000,11 @@ void Notepad_plus::checkDocState() enableCommand(IDM_FILE_OPEN_DEFAULT_VIEWER, isAssoCommandExisting(curBuf->getFullPathName()), MENU); + enableCommand(IDM_VIEW_IN_FIREFOX, isAssoCommandExisting(curBuf->getFullPathName()), MENU); + enableCommand(IDM_VIEW_IN_CHROME, isAssoCommandExisting(curBuf->getFullPathName()), MENU); + enableCommand(IDM_VIEW_IN_IE, isAssoCommandExisting(curBuf->getFullPathName()), MENU); + enableCommand(IDM_VIEW_IN_EDGE, isAssoCommandExisting(curBuf->getFullPathName()), MENU); + enableConvertMenuItems(curBuf->getEolFormat()); checkUnicodeMenuItems(); checkLangsMenu(-1); diff --git a/PowerEditor/src/Notepad_plus.rc b/PowerEditor/src/Notepad_plus.rc index d6a6e24c..358fa4b9 100644 --- a/PowerEditor/src/Notepad_plus.rc +++ b/PowerEditor/src/Notepad_plus.rc @@ -459,6 +459,14 @@ BEGIN MENUITEM "Post-It", IDM_VIEW_POSTIT MENUITEM SEPARATOR + POPUP "View Current File in" + BEGIN + MENUITEM "Firefox", IDM_VIEW_IN_FIREFOX + MENUITEM "Chrome", IDM_VIEW_IN_CHROME + MENUITEM "Edge", IDM_VIEW_IN_EDGE + MENUITEM "IE", IDM_VIEW_IN_IE + END + MENUITEM SEPARATOR POPUP "Show Symbol" BEGIN MENUITEM "Show White Space and TAB", IDM_VIEW_TAB_SPACE diff --git a/PowerEditor/src/NppCommands.cpp b/PowerEditor/src/NppCommands.cpp index 3abe99f4..11cd1597 100644 --- a/PowerEditor/src/NppCommands.cpp +++ b/PowerEditor/src/NppCommands.cpp @@ -1780,6 +1780,74 @@ void Notepad_plus::command(int id) } break; + case IDM_VIEW_IN_FIREFOX: + case IDM_VIEW_IN_CHROME: + case IDM_VIEW_IN_IE: + { + auto currentBuf = _pEditView->getCurrentBuffer(); + if (!currentBuf->isUntitled()) + { + generic_string appName; + + if (id == IDM_VIEW_IN_FIREFOX) + { + appName = TEXT("firefox.exe"); + } + else if (id == IDM_VIEW_IN_CHROME) + { + appName = TEXT("chrome.exe"); + } + else // if (id == IDM_VIEW_IN_IE) + { + appName = TEXT("IEXPLORE.EXE"); + } + + TCHAR valData[MAX_PATH] = {'\0'}; + int valDataLen = MAX_PATH * sizeof(TCHAR); + int valType; + HKEY hKey2Check = nullptr; + generic_string appEntry = TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\"); + appEntry += appName; + ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, appEntry.c_str(), 0, KEY_READ, &hKey2Check); + ::RegQueryValueEx(hKey2Check, TEXT(""), nullptr, reinterpret_cast(&valType), reinterpret_cast(valData), reinterpret_cast(&valDataLen)); + + + generic_string fullCurrentPath = TEXT("\""); + fullCurrentPath += currentBuf->getFullPathName(); + fullCurrentPath += TEXT("\""); + + if (hKey2Check && valData[0] != '\0') + { + ::ShellExecute(NULL, TEXT("open"), valData, fullCurrentPath.c_str(), NULL, SW_SHOWNORMAL); + } + else + { + _nativeLangSpeaker.messageBox("ViewInBrowser", + _pPublicInterface->getHSelf(), + TEXT("Application cannot be found in your system."), + TEXT("View Current File in Browser"), + MB_OK); + } + ::RegCloseKey(hKey2Check); + } + } + break; + + case IDM_VIEW_IN_EDGE: + { + auto currentBuf = _pEditView->getCurrentBuffer(); + if (!currentBuf->isUntitled()) + { + // Don't put the quots for Edge, otherwise it doesn't work + //fullCurrentPath = TEXT("\""); + generic_string fullCurrentPath = currentBuf->getFullPathName(); + //fullCurrentPath += TEXT("\""); + + ShellExecute(NULL, TEXT("open"), TEXT("shell:Appsfolder\\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge"), fullCurrentPath.c_str(), NULL, SW_SHOW); + } + } + break; + case IDM_VIEW_TAB_SPACE: { bool isChecked = !(::GetMenuState(_mainMenuHandle, IDM_VIEW_TAB_SPACE, MF_BYCOMMAND) == MF_CHECKED); diff --git a/PowerEditor/src/Parameters.cpp b/PowerEditor/src/Parameters.cpp index f63151fe..988f7b9c 100644 --- a/PowerEditor/src/Parameters.cpp +++ b/PowerEditor/src/Parameters.cpp @@ -231,7 +231,13 @@ static const WinMenuKeyDefinition winKeyDefs[] = { VK_NULL, IDM_VIEW_ALWAYSONTOP, false, false, false, nullptr }, { VK_F11, IDM_VIEW_FULLSCREENTOGGLE, false, false, false, nullptr }, - {VK_F12, IDM_VIEW_POSTIT, false, false, false, nullptr }, + { VK_F12, IDM_VIEW_POSTIT, false, false, false, nullptr }, + + { VK_NULL, IDM_VIEW_IN_FIREFOX, false, false, false, nullptr }, + { VK_NULL, IDM_VIEW_IN_CHROME, false, false, false, nullptr }, + { VK_NULL, IDM_VIEW_IN_IE, false, false, false, nullptr }, + { VK_NULL, IDM_VIEW_IN_EDGE, false, false, false, nullptr }, + { VK_NULL, IDM_VIEW_TAB_SPACE, false, false, false, nullptr }, { VK_NULL, IDM_VIEW_EOL, false, false, false, nullptr }, { VK_NULL, IDM_VIEW_ALL_CHARACTERS, false, false, false, nullptr }, diff --git a/PowerEditor/src/localization.cpp b/PowerEditor/src/localization.cpp index 2502b624..e3db0f86 100644 --- a/PowerEditor/src/localization.cpp +++ b/PowerEditor/src/localization.cpp @@ -71,13 +71,14 @@ MenuPosition menuPos[] = { { 2, 21, -1, "search-jumpDown" }, { 2, 23, -1, "search-bookmark" }, - { 3, 4, -1, "view-showSymbol" }, - { 3, 5, -1, "view-zoom" }, - { 3, 6, -1, "view-moveCloneDocument" }, - { 3, 7, -1, "view-tab" }, - { 3, 16, -1, "view-collapseLevel" }, - { 3, 17, -1, "view-uncollapseLevel" }, - { 3, 21, -1, "view-project" }, + { 3, 4, -1, "view-currentFileIn" }, + { 3, 6, -1, "view-showSymbol" }, + { 3, 7, -1, "view-zoom" }, + { 3, 8, -1, "view-moveCloneDocument" }, + { 3, 9, -1, "view-tab" }, + { 3, 18, -1, "view-collapseLevel" }, + { 3, 19, -1, "view-uncollapseLevel" }, + { 3, 23, -1, "view-project" }, { 4, 5, -1, "encoding-characterSets" }, { 4, 5, 0, "encoding-arabic" }, diff --git a/PowerEditor/src/menuCmdID.h b/PowerEditor/src/menuCmdID.h index 8a4b297e..3e1455ca 100644 --- a/PowerEditor/src/menuCmdID.h +++ b/PowerEditor/src/menuCmdID.h @@ -351,6 +351,10 @@ #define IDM_VIEW_MONITORING (IDM_VIEW + 97) #define IDM_VIEW_TAB_MOVEFORWARD (IDM_VIEW + 98) #define IDM_VIEW_TAB_MOVEBACKWARD (IDM_VIEW + 99) + #define IDM_VIEW_IN_FIREFOX (IDM_VIEW + 100) + #define IDM_VIEW_IN_CHROME (IDM_VIEW + 101) + #define IDM_VIEW_IN_EDGE (IDM_VIEW + 102) + #define IDM_VIEW_IN_IE (IDM_VIEW + 103) #define IDM_VIEW_GOTO_ANOTHER_VIEW 10001 #define IDM_VIEW_CLONE_TO_ANOTHER_VIEW 10002