Merge pull request #3131 from RaiKoHoff/Dev_Release

MiniPath: Enable Mouse XButton usage ("browse back and forth")
This commit is contained in:
Rainer Kottenhoff 2021-02-22 18:48:08 +01:00 committed by GitHub
commit 76a0d2da8e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 61 additions and 37 deletions

View File

@ -119,6 +119,11 @@ inline BOOL PathIsExistingFile(LPCWSTR pszPath)
return (PathFileExists(pszPath) && !PathIsDirectory(pszPath));
}
#define SendWMCommandEx(hwnd, id, hi) SendMessage((hwnd), WM_COMMAND, MAKEWPARAM((id), (hi)), 0)
#define SendWMCommand(hwnd, id) SendWMCommandEx((hwnd), (id), 1)
#define PostWMCommandEx(hwnd, id, hi) PostMessage((hwnd), WM_COMMAND, MAKEWPARAM((id), (hi)), 0)
#define PostWMCommand(hwnd, id) PostWMCommandEx((hwnd), (id), 1)
//==== StrNextTok methods ===================
CHAR* StrNextTokA(CHAR*, const CHAR*);
WCHAR* StrNextTokW(WCHAR*, const WCHAR*);

View File

@ -750,7 +750,7 @@ CASE_WM_CTLCOLOR_SET:
// update colors of DirList manually
case WM_SYSCOLORCHANGE:
{
LRESULT lret = DefWindowProc(hwnd,umsg,wParam,lParam);
LRESULT const lret = DefWindowProc(hwnd,umsg,wParam,lParam);
if (lstrcmp(Settings.tchFilter,L"*.*") || Settings.bNegFilter)
{
@ -763,9 +763,19 @@ CASE_WM_CTLCOLOR_SET:
ListView_RedrawItems(hwndDirList,0,ListView_GetItemCount(hwndDirList)-1);
}
return(lret);
return lret;
}
case WM_NCXBUTTONDOWN:
switch (HIWORD(wParam)) {
case XBUTTON1:
return SendWMCommand(hwnd, IDT_HISTORY_FORWARD);
case XBUTTON2:
return SendWMCommand(hwnd, IDT_HISTORY_BACK);
default:
break;
}
return DefWindowProc(hwnd, umsg, wParam, lParam);
case WM_NCLBUTTONDOWN:
case WM_NCMOUSEMOVE:
@ -775,15 +785,14 @@ CASE_WM_CTLCOLOR_SET:
case WM_NCRBUTTONUP:
case WM_NCMBUTTONUP:
{
MSG msg;
HWND hwndTT = (HWND)SendMessage(hwndToolbar,TB_GETTOOLTIPS,0,0);
HWND const hwndTT = (HWND)SendMessage(hwndToolbar,TB_GETTOOLTIPS,0,0);
if (wParam != HTCAPTION)
{
SendMessage(hwndTT,TTM_POP,0,0);
return DefWindowProc(hwnd,umsg,wParam,lParam);
}
MSG msg;
msg.hwnd = hwnd;
msg.message = umsg;
msg.wParam = wParam;
@ -808,7 +817,7 @@ CASE_WM_CTLCOLOR_SET:
DirList_GetItem(hwndDirList,-1,&dli);
FindNextChangeNotification(hChangeHandle);
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_VIEW_UPDATE,1),0);
SendWMCommand(hwnd, IDM_VIEW_UPDATE);
// must use SendMessage() !!
if (dli.ntype != DLE_NONE)
@ -944,6 +953,22 @@ CASE_WM_CTLCOLOR_SET:
return MsgCommand(hwnd,wParam,lParam);
case WM_PARENTNOTIFY:
switch (LOWORD(wParam)) {
case WM_XBUTTONDOWN:
switch (HIWORD(wParam)) {
case XBUTTON1:
return SendWMCommand(hwnd, IDT_HISTORY_FORWARD);
case XBUTTON2:
return SendWMCommand(hwnd, IDT_HISTORY_BACK);
default:
break;
}
break;
}
break;
case WM_SYSCOMMAND:
switch (wParam)
{
@ -2063,7 +2088,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
SetCurrentDirectory(szPath);
// Select new file
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_VIEW_UPDATE,1),0);
SendWMCommand(hwnd, IDM_VIEW_UPDATE);
SHGetFileInfo(szNewFile,0,&shfi,sizeof(SHFILEINFO),SHGFI_DISPLAYNAME);
if (!DirList_SelectItem(hwndDirList,shfi.szDisplayName,szNewFile))
ListView_EnsureVisible(hwndDirList,0,FALSE);
@ -2214,8 +2239,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
// Check if there are any changes in the directory, then update!
if (WAIT_OBJECT_0 == WaitForSingleObject(hChangeHandle,0))
{
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_VIEW_UPDATE,1),0);
SendWMCommand(hwnd, IDM_VIEW_UPDATE);
if (iItem > 0)
iItem--;
iItem = min(iItem,ListView_GetItemCount(hwndDirList) - 1);
@ -2246,9 +2270,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_FILE_CHANGEDIR:
{
WCHAR tch[MAX_PATH];
if (GetDirectory(hwnd,IDS_GETDIRECTORY,tch,NULL,FALSE))
{
@ -2256,7 +2278,6 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
ErrorMessage(2,IDS_ERR_CD);
}
}
break;
@ -2327,7 +2348,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
Settings.dwFillMask &= (~DL_FOLDERS);
else
Settings.dwFillMask |= DL_FOLDERS;
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_VIEW_UPDATE,1),0);
SendWMCommand(hwnd, IDM_VIEW_UPDATE);
ListView_EnsureVisible(hwndDirList,0,FALSE); // not done by update
break;
@ -2337,7 +2358,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
Settings.dwFillMask &= (~DL_NONFOLDERS);
else
Settings.dwFillMask |= DL_NONFOLDERS;
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_VIEW_UPDATE,1),0);
SendWMCommand(hwnd, IDM_VIEW_UPDATE);
ListView_EnsureVisible(hwndDirList,0,FALSE); // not done by update
break;
@ -2347,7 +2368,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
Settings.dwFillMask &= (~DL_INCLHIDDEN);
else
Settings.dwFillMask |= DL_INCLHIDDEN;
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_VIEW_UPDATE,1),0);
SendWMCommand(hwnd, IDM_VIEW_UPDATE);
ListView_EnsureVisible(hwndDirList,0,FALSE); // not done by update
break;
@ -2361,7 +2382,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
dli.ntype = DLE_NONE;
DirList_GetItem(hwndDirList,-1,&dli);
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_VIEW_UPDATE,1),0);
SendWMCommand(hwnd, IDM_VIEW_UPDATE);
if (dli.ntype != DLE_NONE)
{
@ -2387,7 +2408,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
dli.ntype = DLE_NONE;
DirList_GetItem(hwndDirList,-1,&dli);
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_VIEW_UPDATE,1),0);
SendWMCommand(hwnd, IDM_VIEW_UPDATE);
if (dli.ntype != DLE_NONE)
{
@ -2607,7 +2628,6 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case ACC_NEXTCTL:
case ACC_PREVCTL:
{
int nId = GetDlgCtrlID(GetFocus());
if (LOWORD(wParam) == ACC_NEXTCTL)
@ -2620,7 +2640,6 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
if (--nId < IDC_DRIVEBOX)
nId = IDC_DIRLIST;
}
if (nId == IDC_DRIVEBOX && !Settings.bShowDriveBox)
nId = IDC_DIRLIST;
@ -2672,7 +2691,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
if (!PathIsRoot(szDir))
*p = 0;
SetCurrentDirectory(szDir);
SendMessage(hwndMain,WM_COMMAND,MAKELONG(IDM_VIEW_UPDATE,1),0);
SendWMCommand(hwnd, IDM_VIEW_UPDATE);
if (!DirList_SelectItem(hwndDirList,NULL,szFullPath))
ListView_EnsureVisible(hwndDirList,0,FALSE);
}
@ -2770,7 +2789,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDT_VIEW_FAVORITES:
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_VIEW_FAVORITES,1),0);
SendWMCommand(hwnd, IDM_VIEW_FAVORITES);
break;
@ -2808,7 +2827,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
ListView_SetItemState(hwndDirList,i,LVIS_FOCUSED|LVIS_SELECTED,LVIS_FOCUSED|LVIS_SELECTED);
ListView_EnsureVisible(hwndDirList,i,FALSE);
ListView_Update(hwndDirList,i);
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_FILE_OPEN,1),0);
SendWMCommand(hwnd, IDM_FILE_OPEN);
}
else
@ -2852,7 +2871,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
ListView_SetItemState(hwndDirList,i,LVIS_FOCUSED|LVIS_SELECTED,LVIS_FOCUSED|LVIS_SELECTED);
ListView_EnsureVisible(hwndDirList,i,FALSE);
ListView_Update(hwndDirList,i);
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_FILE_OPEN,1),0);
SendWMCommand(hwnd, IDM_FILE_OPEN);
}
else
@ -2862,13 +2881,13 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDT_FILE_RUN:
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_FILE_RUN,1),0);
SendWMCommand(hwnd, IDM_FILE_RUN);
break;
case IDT_FILE_QUICKVIEW:
if (DirList_IsFileSelected(hwndDirList))
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_FILE_QUICKVIEW,1),0);
SendWMCommand(hwnd, IDM_FILE_QUICKVIEW);
else
MessageBeep(0);
break;
@ -2876,7 +2895,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDT_FILE_SAVEAS:
if (DirList_IsFileSelected(hwndDirList))
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_FILE_SAVEAS,1),0);
SendWMCommand(hwnd, IDM_FILE_SAVEAS);
else
MessageBeep(0);
break;
@ -2884,7 +2903,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDT_FILE_COPYMOVE:
if (ListView_GetSelectedCount(hwndDirList))
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_FILE_COPYMOVE,1),0);
SendWMCommand(hwnd, IDM_FILE_COPYMOVE);
else
MessageBeep(0);
break;
@ -2895,7 +2914,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
BOOL const fUseRecycleBin2 = Settings.fUseRecycleBin;
Settings.fUseRecycleBin = 1;
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_FILE_DELETE,1),0);
SendWMCommand(hwnd, IDM_FILE_DELETE);
Settings.fUseRecycleBin = fUseRecycleBin2;
}
else
@ -2905,14 +2924,14 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDT_FILE_DELETE2:
if (ListView_GetSelectedCount(hwndDirList))
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_FILE_DELETE2,1),0);
SendWMCommand(hwnd, IDM_FILE_DELETE2);
else
MessageBeep(0);
break;
case IDT_VIEW_FILTER:
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_VIEW_FILTER,1),0);
SendWMCommand(hwnd, IDM_VIEW_FILTER);
break;
}
@ -3021,11 +3040,11 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam)
if (Settings.bSingleClick && ListView_GetSelectedCount(hwndDirList))
{
if (IsKeyDown(VK_MENU))
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_FILE_PROPERTIES,1),0);
SendWMCommand(hwnd, IDM_FILE_PROPERTIES);
else if (IsKeyDown(VK_SHIFT))
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_FILE_OPENNEW,1),0);
SendWMCommand(hwnd, IDM_FILE_OPENNEW);
else
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_FILE_OPEN,1),0);
SendWMCommand(hwnd, IDM_FILE_OPEN);
}
break;
@ -3033,11 +3052,11 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam)
case NM_RETURN:
if (IsKeyDown(VK_MENU))
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_FILE_PROPERTIES,1),0);
SendWMCommand(hwnd, IDM_FILE_PROPERTIES);
else if (IsKeyDown(VK_SHIFT))
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_FILE_OPENNEW,1),0);
SendWMCommand(hwnd, IDM_FILE_OPENNEW);
else
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_FILE_OPEN,1),0);
SendWMCommand(hwnd, IDM_FILE_OPEN);
break;
}
@ -3440,7 +3459,7 @@ BOOL DisplayPath(LPCWSTR lpPath,UINT uIdError)
SetCurrentDirectory(szPath);
}
SendMessage(hwndMain,WM_COMMAND,MAKELONG(IDM_VIEW_UPDATE,1),0);
SendWMCommand(hwndMain, IDM_VIEW_UPDATE);
if (!DirList_SelectItem(hwndDirList,shfi.szDisplayName,szTmp))
ListView_EnsureVisible(hwndDirList,0,FALSE);