diff --git a/Versions/build.txt b/Versions/build.txt index 14057d17e..73f8805a9 100644 --- a/Versions/build.txt +++ b/Versions/build.txt @@ -1 +1 @@ -2686 +2687 diff --git a/minipath/language/mp_de_de/dialogs_de_de.rc b/minipath/language/mp_de_de/dialogs_de_de.rc index 6e03d3ef8..4ac0d9672 100644 --- a/minipath/language/mp_de_de/dialogs_de_de.rc +++ b/minipath/language/mp_de_de/dialogs_de_de.rc @@ -264,7 +264,7 @@ BEGIN LTEXT "Nachricht:", IDC_STATIC, 16, 120, 40, 8 CONTROL "KEINE, starte die Ziel-Applikation immer wenn eine Datei geöffnet wird.",IDC_ALWAYSRUN, "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,7,78,240,10 - CONTROL "Sende eine ""FILE OPEN"" Nachricht zum Ziel-Fenster:",IDC_SENDDROPMSG, + CONTROL "Sende eine ""DROP FILES"" Nachricht zum Ziel-Fenster:",IDC_SENDDROPMSG, "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,7,92,170,10 CONTROL "Führe folgendes DDE-Kommando aus:",IDC_USEDDE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,7,106,240,10 LTEXT "Applikation:",IDC_STATIC,124,120,40,8 diff --git a/minipath/src/Dialogs.c b/minipath/src/Dialogs.c index bf5afc867..c476e5894 100644 --- a/minipath/src/Dialogs.c +++ b/minipath/src/Dialogs.c @@ -2453,8 +2453,9 @@ INT_PTR CALLBACK FindWinDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam) // // Select MiniPath target application // -extern int iUseTargetApplication; -extern int iTargetApplicationMode; +extern UseTargetApp eUseTargetApplication; +extern TargetAppMode eTargetApplicationMode; + extern WCHAR szTargetApplication[MAX_PATH]; extern WCHAR szTargetApplicationParams[MAX_PATH]; extern WCHAR szTargetApplicationWndClass[MAX_PATH]; @@ -2524,7 +2525,7 @@ INT_PTR CALLBACK FindTargetDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lPar LoadTargetParamsOnce(); - if (iUseTargetApplication) + if (eUseTargetApplication != UTA_UNDEFINED) CheckRadioButton(hwnd,IDC_LAUNCH,IDC_TARGET,IDC_TARGET); else CheckRadioButton(hwnd,IDC_LAUNCH,IDC_TARGET,IDC_LAUNCH); @@ -2537,9 +2538,8 @@ INT_PTR CALLBACK FindTargetDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lPar } SetDlgItemText(hwnd,IDC_TARGETPATH,wch); - if (iUseTargetApplication) { - i = iTargetApplicationMode; - i = clampi(i, 0, 2); + if (eUseTargetApplication != UTA_UNDEFINED) { + i = clampi(eTargetApplicationMode, TAM_ALWAYS_RUN, TAM_SEND_DDE_MSG); CheckRadioButton(hwnd,IDC_ALWAYSRUN,IDC_USEDDE,IDC_ALWAYSRUN + i); } @@ -2701,11 +2701,11 @@ INT_PTR CALLBACK FindTargetDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lPar LoadIniFile(g_wchIniFile); const WCHAR* const TargetApp_Section = L"Target Application"; - i = IsDlgButtonChecked(hwnd,IDC_LAUNCH); - iUseTargetApplication = i ? 0:1; - IniSectionSetInt(TargetApp_Section,L"UseTargetApplication",iUseTargetApplication); + i = (BST_CHECKED == IsDlgButtonChecked(hwnd, IDC_LAUNCH)); + eUseTargetApplication = ((i) ? UTA_UNDEFINED : UTA_LAUNCH_TARGET); + IniSectionSetInt(TargetApp_Section,L"UseTargetApplication",eUseTargetApplication); - if (iUseTargetApplication) { + if (eUseTargetApplication != UTA_UNDEFINED) { GetDlgItemText(hwnd,IDC_TARGETPATH,tch,COUNTOF(tch)); ExtractFirstArgument(tch,szTargetApplication,szTargetApplicationParams); } @@ -2716,22 +2716,22 @@ INT_PTR CALLBACK FindTargetDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lPar IniSectionSetString(TargetApp_Section,L"TargetApplicationPath",szTargetApplication); IniSectionSetString(TargetApp_Section,L"TargetApplicationParams",szTargetApplicationParams); - if (!iUseTargetApplication) { - iTargetApplicationMode = 0; - IniSectionSetInt(TargetApp_Section,L"TargetApplicationMode",iTargetApplicationMode); + if (eUseTargetApplication == UTA_UNDEFINED) { + eTargetApplicationMode = TAM_ALWAYS_RUN; + IniSectionSetInt(TargetApp_Section,L"TargetApplicationMode",eTargetApplicationMode); } else { if (BST_CHECKED == IsDlgButtonChecked(hwnd,IDC_ALWAYSRUN)) { - iTargetApplicationMode = 0; - IniSectionSetInt(TargetApp_Section,L"TargetApplicationMode",iTargetApplicationMode); + eTargetApplicationMode = TAM_ALWAYS_RUN; + IniSectionSetInt(TargetApp_Section,L"TargetApplicationMode",eTargetApplicationMode); } else if (BST_CHECKED == IsDlgButtonChecked(hwnd,IDC_SENDDROPMSG)) { - iTargetApplicationMode = 1; - IniSectionSetInt(TargetApp_Section,L"TargetApplicationMode",iTargetApplicationMode); + eTargetApplicationMode = TAM_SEND_DROP_MSG; + IniSectionSetInt(TargetApp_Section,L"TargetApplicationMode",eTargetApplicationMode); } else { - iTargetApplicationMode = 2; - IniSectionSetInt(TargetApp_Section,L"TargetApplicationMode",iTargetApplicationMode); + eTargetApplicationMode = TAM_SEND_DDE_MSG; + IniSectionSetInt(TargetApp_Section,L"TargetApplicationMode",eTargetApplicationMode); } } diff --git a/minipath/src/minipath.c b/minipath/src/minipath.c index 24c80da81..0d56a1f62 100644 --- a/minipath/src/minipath.c +++ b/minipath/src/minipath.c @@ -101,8 +101,9 @@ UINT wFuncCopyMove = FO_COPY; UINT msgTaskbarCreated = 0; -int iUseTargetApplication = 4; -int iTargetApplicationMode = 0; +UseTargetApp eUseTargetApplication = UTA_DEFINE_TARGET; +TargetAppMode eTargetApplicationMode = TAM_ALWAYS_RUN; + WCHAR szTargetApplication[MAX_PATH] = L""; WCHAR szTargetApplicationParams[MAX_PATH] = L""; WCHAR szTargetApplicationWndClass[MAX_PATH] = L""; @@ -541,19 +542,22 @@ static void __fastcall _SetTargetAppMenuEntry(HMENU hMenu) if (dli.ntype != DLE_DIR) { WCHAR wchMenuEntry[MAX_PATH] = { L'\0' }; WCHAR wchTargetAppName[MAX_PATH] = { L'\0' }; - if (iUseTargetApplication != 0xFB) { + if (eUseTargetApplication != 0xFB) { lstrcpy(wchTargetAppName, szTargetApplication); PathStripPath(wchTargetAppName); PathRemoveExtension(wchTargetAppName); } - else if (iUseTargetApplication && wchTargetAppName[0] == 0) { - iUseTargetApplication = 1; + else if ((eUseTargetApplication != UTA_UNDEFINED) && StrIsEmpty(wchTargetAppName)) { + eUseTargetApplication = UTA_LAUNCH_TARGET; lstrcpy(wchTargetAppName, L"Notepad3"); } - if (iUseTargetApplication == 4 || (iUseTargetApplication && wchTargetAppName[0] == 0)) { + + if ((eUseTargetApplication == UTA_DEFINE_TARGET) || + ((eUseTargetApplication != UTA_UNDEFINED) && StrIsEmpty(wchTargetAppName))) { lstrcpy(wchTargetAppName, L"..."); } - if (wchTargetAppName[0] != 0){ + + if (StrIsNotEmpty(wchTargetAppName)){ FormatLngStringW(wchMenuEntry, COUNTOF(wchMenuEntry), IDS_OPEN_FILE_WITH, wchTargetAppName); MENUITEMINFO menuitem; ZeroMemory(&menuitem, sizeof(MENUITEMINFO)); @@ -3323,8 +3327,8 @@ void LoadTargetParamsOnce(void) const WCHAR* const TargetApp_Section = L"Target Application"; if (IniSectionGetInt(TargetApp_Section,L"UseTargetApplication",0xFB) != 0xFB) { - iUseTargetApplication = IniSectionGetInt(TargetApp_Section,L"UseTargetApplication",iUseTargetApplication); - iTargetApplicationMode = IniSectionGetInt(TargetApp_Section,L"TargetApplicationMode",iTargetApplicationMode); + eUseTargetApplication = IniSectionGetInt(TargetApp_Section,L"UseTargetApplication",eUseTargetApplication); + eTargetApplicationMode = IniSectionGetInt(TargetApp_Section,L"TargetApplicationMode",eTargetApplicationMode); IniSectionGetString(TargetApp_Section,L"TargetApplicationPath",szTargetApplication,szTargetApplication,COUNTOF(szTargetApplication)); IniSectionGetString(TargetApp_Section,L"TargetApplicationParams",szTargetApplicationParams,szTargetApplicationParams,COUNTOF(szTargetApplicationParams)); IniSectionGetString(TargetApp_Section,L"TargetApplicationWndClass",szTargetApplicationWndClass,szTargetApplicationWndClass,COUNTOF(szTargetApplicationWndClass)); @@ -3332,9 +3336,9 @@ void LoadTargetParamsOnce(void) IniSectionGetString(TargetApp_Section,L"DDEApplication",szDDEApp,szDDEApp,COUNTOF(szDDEApp)); IniSectionGetString(TargetApp_Section,L"DDETopic",szDDETopic,szDDETopic,COUNTOF(szDDETopic)); } - else if (iUseTargetApplication && StrIsEmpty(szTargetApplication)) { - iUseTargetApplication = 1; - iTargetApplicationMode = 1; + else if ((eUseTargetApplication != UTA_UNDEFINED) && StrIsEmpty(szTargetApplication)) { + eUseTargetApplication = UTA_LAUNCH_TARGET; + eTargetApplicationMode = TAM_SEND_DROP_MSG; lstrcpy(szTargetApplication,L"Notepad3.exe"); lstrcpy(szTargetApplicationParams,L""); lstrcpy(szTargetApplicationWndClass,L"Notepad3"); @@ -3363,13 +3367,13 @@ void LaunchTarget(LPCWSTR lpFileName,BOOL bOpenNew) LoadTargetParamsOnce(); - if (iUseTargetApplication == 4 || - (iUseTargetApplication && StrIsEmpty(szTargetApplication))) { + if ((eUseTargetApplication == UTA_DEFINE_TARGET) || ((eUseTargetApplication != UTA_UNDEFINED) && StrIsEmpty(szTargetApplication))) + { ThemedDialogBoxParam(g_hLngResContainer,MAKEINTRESOURCE(IDD_FINDTARGET),hwndMain,FindTargetDlgProc,(LPARAM)NULL); return; } - if (iUseTargetApplication && iTargetApplicationMode == 1) + if ((eUseTargetApplication != UTA_UNDEFINED) && (eTargetApplicationMode == TAM_SEND_DROP_MSG)) { lstrcpy(szGlobalWndClass,szTargetApplicationWndClass); @@ -3391,7 +3395,6 @@ void LaunchTarget(LPCWSTR lpFileName,BOOL bOpenNew) PostMessage(hwnd,WM_DROPFILES,(WPARAM)hDrop,(LPARAM)0); } } - else // Either no window or disabled - run target.exe { WCHAR szFile[MAX_PATH]; @@ -3465,12 +3468,12 @@ void LaunchTarget(LPCWSTR lpFileName,BOOL bOpenNew) WCHAR szParam[MAX_PATH] = L""; WCHAR szTmp[MAX_PATH]; - if (iUseTargetApplication && - iTargetApplicationMode == 2 && + if ((eUseTargetApplication != UTA_UNDEFINED) && + (eTargetApplicationMode == TAM_SEND_DDE_MSG) && ExecDDECommand(lpFileName,szDDEMsg,szDDEApp,szDDETopic)) return; - if (!iUseTargetApplication && StrIsEmpty(lpFileName)) + if ((eUseTargetApplication == UTA_UNDEFINED) && StrIsEmpty(lpFileName)) return; else { @@ -3517,7 +3520,7 @@ void LaunchTarget(LPCWSTR lpFileName,BOOL bOpenNew) sei.fMask = 0; sei.hwnd = hwndMain; sei.lpVerb = NULL; - if (iUseTargetApplication) { + if (eUseTargetApplication != UTA_UNDEFINED) { sei.lpFile = szFile; sei.lpParameters = szParam; } diff --git a/minipath/src/minipath.h b/minipath/src/minipath.h index 384e37472..48e0d2e93 100644 --- a/minipath/src/minipath.h +++ b/minipath/src/minipath.h @@ -81,6 +81,7 @@ //==== Callback Message from System Tray ====================================== #define WM_TRAYMESSAGE WM_USER + //==== TypeDefs ====================================== typedef struct _wi { @@ -90,6 +91,11 @@ typedef struct _wi int cy; } WININFO; + +typedef enum { UTA_UNDEFINED = 0, UTA_LAUNCH_TARGET = 1, UTA_DEFINE_TARGET = 4 } UseTargetApp; +typedef enum { TAM_ALWAYS_RUN = 0, TAM_SEND_DROP_MSG = 1, TAM_SEND_DDE_MSG = 2 } TargetAppMode; + + // ---------------------------------------------------------------------------- #define DL_FILTER_BUFSIZE 256 // should correspond to Dlapi.h def diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf index a681a8bd9..06020bfbd 100644 --- a/res/Notepad3.exe.manifest.conf +++ b/res/Notepad3.exe.manifest.conf @@ -3,7 +3,7 @@ Notepad3 BETA diff --git a/src/Dialogs.c b/src/Dialogs.c index 5e149d294..d7e96eaa2 100644 --- a/src/Dialogs.c +++ b/src/Dialogs.c @@ -3355,7 +3355,7 @@ WINDOWPLACEMENT WindowPlacementFromInfo(HWND hwnd, const WININFO* pWinInfo, SCRE // DialogNewWindow() // // -void DialogNewWindow(HWND hwnd, bool bSaveOnRunTools, bool bSetCurFile) +void DialogNewWindow(HWND hwnd, bool bSaveOnRunTools, LPCWSTR lpcwFilePath) { if (bSaveOnRunTools && !FileSave(false, true, false, false, Flags.bPreserveFileModTime)) { return; } @@ -3384,23 +3384,23 @@ void DialogNewWindow(HWND hwnd, bool bSaveOnRunTools, bool bSetCurFile) MONITORINFO mi; WININFO wi = GetMyWindowPlacement(hwnd, &mi); - // offset new window position +10/+10 - wi.x += 10; - wi.y += 10; - // check if window fits monitor - if ((wi.x + wi.cx) > mi.rcWork.right || (wi.y + wi.cy) > mi.rcWork.bottom) { - wi.x = mi.rcMonitor.left; - wi.y = mi.rcMonitor.top; - } - wi.max = IsZoomed(hwnd); + //~ offset new window position +10/+10 + //~wi.x += 10; + //~wi.y += 10; + //~// check if window fits monitor + //~if ((wi.x + wi.cx) > mi.rcWork.right || (wi.y + wi.cy) > mi.rcWork.bottom) { + //~ wi.x = mi.rcMonitor.left; + //~ wi.y = mi.rcMonitor.top; + //~} + //~wi.max = IsZoomed(hwnd); StringCchPrintf(tch, COUNTOF(tch), L" -pos %i,%i,%i,%i,%i", wi.x, wi.y, wi.cx, wi.cy, wi.max); StringCchCat(szParameters, COUNTOF(szParameters), tch); - if (bSetCurFile && StrIsNotEmpty(Globals.CurrentFile)) + if (StrIsNotEmpty(lpcwFilePath)) { WCHAR szFileName[MAX_PATH] = { L'\0' }; - StringCchCopy(szFileName, COUNTOF(szFileName), Globals.CurrentFile); + StringCchCopy(szFileName, COUNTOF(szFileName), lpcwFilePath); PathQuoteSpaces(szFileName); StringCchCat(szParameters, COUNTOF(szParameters), L" "); StringCchCat(szParameters, COUNTOF(szParameters), szFileName); diff --git a/src/Dialogs.h b/src/Dialogs.h index 92b39cfa0..da7b54016 100644 --- a/src/Dialogs.h +++ b/src/Dialogs.h @@ -45,7 +45,7 @@ WININFO GetMyWindowPlacement(HWND hwnd,MONITORINFO * hMonitorInfo); void FitIntoMonitorGeometry(RECT* pRect, WININFO* pWinInfo, SCREEN_MODE mode); WINDOWPLACEMENT WindowPlacementFromInfo(HWND hwnd, const WININFO* pWinInfo, SCREEN_MODE mode); -void DialogNewWindow(HWND hwnd,bool,bool); +void DialogNewWindow(HWND hwnd, bool bSaveOnRunTools, LPCWSTR lpcwFilePath); void DialogFileBrowse(HWND hwnd); void DialogAdminExe(HWND hwnd,bool); diff --git a/src/Notepad3.c b/src/Notepad3.c index 999152fdb..02cbd19e3 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -2750,26 +2750,28 @@ LRESULT MsgDropFiles(HWND hwnd, WPARAM wParam, LPARAM lParam) { UNUSED(lParam); - WCHAR szBuf[MAX_PATH + 40]; + WCHAR szDropStrgBuf[MAX_PATH + 40]; HDROP hDrop = (HDROP)wParam; - // Reset Change Notify - //bPendingChangeNotify = false; - - if (IsIconic(hwnd)) + if (IsIconic(hwnd)) { ShowWindow(hwnd, SW_RESTORE); - - //SetForegroundWindow(hwnd); - - DragQueryFile(hDrop, 0, szBuf, COUNTOF(szBuf)); - - if (PathIsDirectory(szBuf)) { - WCHAR tchFile[MAX_PATH] = { L'\0' }; - if (OpenFileDlg(Globals.hwndMain, tchFile, COUNTOF(tchFile), szBuf)) - FileLoad(false, false, false, Settings.SkipUnicodeDetection, Settings.SkipANSICodePageDetection, false, tchFile); } - else if (PathFileExists(szBuf)) { - FileLoad(false, false, false, Settings.SkipUnicodeDetection, Settings.SkipANSICodePageDetection, false, szBuf); + + DragQueryFile(hDrop, 0, szDropStrgBuf, COUNTOF(szDropStrgBuf)); + + if (PathIsDirectory(szDropStrgBuf)) { + WCHAR tchFile[MAX_PATH] = { L'\0' }; + if (OpenFileDlg(Globals.hwndMain, tchFile, COUNTOF(tchFile), szDropStrgBuf)) { + FileLoad(false, false, false, Settings.SkipUnicodeDetection, Settings.SkipANSICodePageDetection, false, tchFile); + } + } + else if (PathFileExists(szDropStrgBuf)) { + if (Flags.bReuseWindow) { + FileLoad(false, false, false, Settings.SkipUnicodeDetection, Settings.SkipANSICodePageDetection, false, szDropStrgBuf); + } + else { + DialogNewWindow(hwnd, Settings.SaveBeforeRunningTools, szDropStrgBuf); + } } else { #ifndef _EXTRA_DRAG_N_DROP_HANDLER_ @@ -2782,6 +2784,7 @@ LRESULT MsgDropFiles(HWND hwnd, WPARAM wParam, LPARAM lParam) if (DragQueryFile(hDrop, (UINT)(-1), NULL, 0) > 1) { InfoBoxLng(MB_ICONWARNING, NULL, IDS_MUI_ERR_DROP); } + DragFinish(hDrop); return FALSE; @@ -3718,8 +3721,9 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_FILE_NEWWINDOW: case IDM_FILE_NEWWINDOW2: - SaveAllSettings(false); - DialogNewWindow(hwnd, Settings.SaveBeforeRunningTools, (iLoWParam != IDM_FILE_NEWWINDOW2)); + SaveAllSettings(false); + LPCWSTR lpcwFilePath = (iLoWParam != IDM_FILE_NEWWINDOW2) ? Globals.CurrentFile : NULL; + DialogNewWindow(hwnd, Settings.SaveBeforeRunningTools, lpcwFilePath); break; diff --git a/src/VersionEx.h b/src/VersionEx.h index 02ac50012..7cfb22d50 100644 --- a/src/VersionEx.h +++ b/src/VersionEx.h @@ -8,8 +8,8 @@ #define SAPPNAME "Notepad3" #define VERSION_MAJOR 5 #define VERSION_MINOR 19 -#define VERSION_REV 1123 -#define VERSION_BUILD 2686 +#define VERSION_REV 1126 +#define VERSION_BUILD 2687 #define SCINTILLA_VER 421 #define ONIGURUMA_REGEX_VER 6.9.4 #define UCHARDET_VER 2018.09.27