Skip to content

Commit

Permalink
metapath add new option (default disabled) "Open file in same target …
Browse files Browse the repository at this point in the history
…application window.".
  • Loading branch information
zufuliu committed Mar 18, 2019
1 parent bb48693 commit cabc627
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 56 deletions.
12 changes: 9 additions & 3 deletions metapath/src/Dialogs.c
Expand Up @@ -554,6 +554,7 @@ extern WCHAR tchFavoritesDir[MAX_PATH];
extern BOOL bClearReadOnly;
extern BOOL bRenameOnCollision;
extern BOOL bSingleClick;
extern BOOL bOpenFileInSameWindow;
extern BOOL bTrackSelect;
extern BOOL bFullRowSelect;
extern BOOL bFocusEdit;
Expand All @@ -579,8 +580,8 @@ static INT_PTR CALLBACK GeneralPageProc(HWND hwnd, UINT umsg, WPARAM wParam, LPA
EnableWindow(GetDlgItem(hwnd, IDC_SAVESETTINGS), FALSE);
}

if (bWindowLayoutRTL) {
CheckDlgButton(hwnd, IDC_RTL_LAYOUT, BST_CHECKED);
if (bOpenFileInSameWindow) {
CheckDlgButton(hwnd, IDC_OPENFILE_SAME_WINDOW, BST_CHECKED);
}

if (bSingleClick) {
Expand Down Expand Up @@ -628,7 +629,7 @@ static INT_PTR CALLBACK GeneralPageProc(HWND hwnd, UINT umsg, WPARAM wParam, LPA
bSaveSettings = IsButtonChecked(hwnd, IDC_SAVESETTINGS);
}

bWindowLayoutRTL = IsButtonChecked(hwnd, IDC_RTL_LAYOUT);
bOpenFileInSameWindow = IsButtonChecked(hwnd, IDC_OPENFILE_SAME_WINDOW);
bSingleClick = IsButtonChecked(hwnd, IDC_SINGLECLICK);
bTrackSelect = IsButtonChecked(hwnd, IDC_TRACKSELECT);
bFullRowSelect = IsButtonChecked(hwnd, IDC_FULLROWSELECT);
Expand All @@ -653,6 +654,10 @@ static INT_PTR CALLBACK GeneralPageProc(HWND hwnd, UINT umsg, WPARAM wParam, LPA
static INT_PTR CALLBACK AdvancedPageProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) {
switch (umsg) {
case WM_INITDIALOG:
if (bWindowLayoutRTL) {
CheckDlgButton(hwnd, IDC_RTL_LAYOUT, BST_CHECKED);
}

if (bClearReadOnly) {
CheckDlgButton(hwnd, IDC_CLEARREADONLY, BST_CHECKED);
}
Expand Down Expand Up @@ -719,6 +724,7 @@ static INT_PTR CALLBACK AdvancedPageProc(HWND hwnd, UINT umsg, WPARAM wParam, LP
case WM_NOTIFY:
switch (((LPNMHDR)lParam)->code) {
case PSN_APPLY:
bWindowLayoutRTL = IsButtonChecked(hwnd, IDC_RTL_LAYOUT);
bClearReadOnly = IsButtonChecked(hwnd, IDC_CLEARREADONLY);
bRenameOnCollision = IsButtonChecked(hwnd, IDC_RENAMEONCOLLISION);
fUseRecycleBin = IsButtonChecked(hwnd, IDC_USERECYCLEBIN);
Expand Down
74 changes: 26 additions & 48 deletions metapath/src/metapath.c
Expand Up @@ -91,6 +91,9 @@ static LPWSTR tchToolbarBitmapDisabled = NULL;
BOOL bClearReadOnly;
BOOL bRenameOnCollision;
BOOL bSingleClick;
BOOL bOpenFileInSameWindow;
static int iDefaultOpenMenu;
static int iShiftOpenMenu;
BOOL bTrackSelect;
BOOL bFullRowSelect;
int iStartupDir;
Expand Down Expand Up @@ -568,7 +571,8 @@ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
}

HMENU hmenu = LoadMenu(g_hInstance, MAKEINTRESOURCE(IDR_MAINWND));
SetMenuDefaultItem(GetSubMenu(hmenu, IDP_POPUP_SUBMENU_PATH), IDM_FILE_OPEN, FALSE);
SetMenuDefaultItem(GetSubMenu(hmenu, IDP_POPUP_SUBMENU_PATH), IDM_FILE_OPENSAME, FALSE);
SetMenuDefaultItem(GetSubMenu(hmenu, IDP_POPUP_SUBMENU_PATH), IDM_FILE_OPENNEW, FALSE);

int imenu = 0;
switch (nID) {
Expand Down Expand Up @@ -598,7 +602,9 @@ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
TrackPopupMenuEx(GetSubMenu(hmenu, imenu),
TPM_LEFTBUTTON | TPM_RIGHTBUTTON,
pt.x + 1, pt.y + 1, hwnd, NULL);

if (imenu == IDP_POPUP_SUBMENU_PATH) {
SetMenuDefaultItem(GetSubMenu(hmenu, IDP_POPUP_SUBMENU_PATH), iDefaultOpenMenu, TRUE);
}
DestroyMenu(hmenu);
}
break;
Expand Down Expand Up @@ -1150,7 +1156,8 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) {
}
break;

case IDM_FILE_OPEN: {
case IDM_FILE_OPENSAME:
case IDM_FILE_OPENNEW: {
DLITEM dli = { DLI_ALL, L"", L"", DLE_NONE };
DirList_GetItem(hwndDirList, -1, &dli);

Expand All @@ -1163,9 +1170,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) {

case DLE_FILE:
BeginWaitCursor();

const BOOL bOpenNew = LOWORD(wParam) == IDM_FILE_OPENNEW;
if (!PathIsLnkFile(dli.szFileName)) {
LaunchTarget(dli.szFileName, FALSE);
LaunchTarget(dli.szFileName, bOpenNew);
} else {
// PathIsLinkFile()
WCHAR tch[MAX_PATH];
Expand All @@ -1177,7 +1184,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) {
DisplayLnkFile(dli.szFileName);
} else {
// Made sure link points to a file
LaunchTarget(tch, FALSE);
LaunchTarget(tch, bOpenNew);
}
} else {
DisplayLnkFile(dli.szFileName);
Expand All @@ -1190,42 +1197,6 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) {
}
break;

case IDM_FILE_OPENNEW: {
DLITEM dli;
dli.mask = DLI_ALL;

DirList_GetItem(hwndDirList, -1, &dli);

if (dli.ntype == DLE_FILE) {
BeginWaitCursor();

if (!PathIsLnkFile(dli.szFileName)) {
LaunchTarget(dli.szFileName, TRUE);
} else {
// PathIsLinkFile()
WCHAR tch[MAX_PATH];

if (PathGetLnkPath(dli.szFileName, tch, COUNTOF(tch))) {
ExpandEnvironmentStringsEx(tch, COUNTOF(tch));
const DWORD dwAttr = GetFileAttributes(tch);
if ((dwAttr == INVALID_FILE_ATTRIBUTES) || (dwAttr & FILE_ATTRIBUTE_DIRECTORY)) {
DisplayLnkFile(dli.szFileName);
} else {
// Made sure link points to a file
LaunchTarget(tch, TRUE);
}
} else {
DisplayLnkFile(dli.szFileName);
}
}

EndWaitCursor();
} else {
MessageBeep(0);
}
}
break;

case IDM_FILE_RUN:
RunDlg(hwnd);
break;
Expand Down Expand Up @@ -1742,6 +1713,8 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) {
SetWindowLayoutRTL(hwndDirList, bWindowLayoutRTL);
}
bHasQuickview = PathFileExists(szQuickview);
iDefaultOpenMenu = bOpenFileInSameWindow ? IDM_FILE_OPENSAME : IDM_FILE_OPENNEW;
iShiftOpenMenu = bOpenFileInSameWindow ? IDM_FILE_OPENNEW : IDM_FILE_OPENSAME;
}
break;

Expand Down Expand Up @@ -1984,7 +1957,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);
SendWMCommand(hwnd, IDM_FILE_OPEN);
SendWMCommand(hwnd, iDefaultOpenMenu);
} else {
MessageBeep(0);
}
Expand Down Expand Up @@ -2021,7 +1994,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);
SendWMCommand(hwnd, IDM_FILE_OPEN);
SendWMCommand(hwnd, iDefaultOpenMenu);
} else {
MessageBeep(0);
}
Expand Down Expand Up @@ -2173,9 +2146,9 @@ LRESULT MsgNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) {
if (KeyboardIsKeyDown(VK_MENU)) {
SendWMCommand(hwnd, IDM_FILE_PROPERTIES);
} else if (KeyboardIsKeyDown(VK_SHIFT)) {
SendWMCommand(hwnd, IDM_FILE_OPENNEW);
SendWMCommand(hwnd, iShiftOpenMenu);
} else {
SendWMCommand(hwnd, IDM_FILE_OPEN);
SendWMCommand(hwnd, iDefaultOpenMenu);
}
}
break;
Expand All @@ -2185,9 +2158,9 @@ LRESULT MsgNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) {
if (KeyboardIsKeyDown(VK_MENU)) {
SendWMCommand(hwnd, IDM_FILE_PROPERTIES);
} else if (KeyboardIsKeyDown(VK_SHIFT)) {
SendWMCommand(hwnd, IDM_FILE_OPENNEW);
SendWMCommand(hwnd, iShiftOpenMenu);
} else {
SendWMCommand(hwnd, IDM_FILE_OPEN);
SendWMCommand(hwnd, iDefaultOpenMenu);
}
break;
}
Expand Down Expand Up @@ -2372,6 +2345,10 @@ void LoadSettings(void) {

bSaveSettings = IniSectionGetBool(pIniSection, L"SaveSettings", 1);
bSingleClick = IniSectionGetBool(pIniSection, L"SingleClick", 1);
bOpenFileInSameWindow = IniSectionGetBool(pIniSection, L"OpenFileInSameWindow", 0);
iDefaultOpenMenu = bOpenFileInSameWindow ? IDM_FILE_OPENSAME : IDM_FILE_OPENNEW;
iShiftOpenMenu = bOpenFileInSameWindow ? IDM_FILE_OPENNEW : IDM_FILE_OPENSAME;

bTrackSelect = IniSectionGetBool(pIniSection, L"TrackSelect", 1);
bFullRowSelect = IniSectionGetBool(pIniSection, L"FullRowSelect", 0);
fUseRecycleBin = IniSectionGetBool(pIniSection, L"UseRecycleBin", 1);
Expand Down Expand Up @@ -2560,6 +2537,7 @@ void SaveSettings(BOOL bSaveSettingsNow) {

IniSectionSetBool(pIniSection, L"SaveSettings", bSaveSettings);
IniSectionSetBoolEx(pIniSection, L"SingleClick", bSingleClick, 1);
IniSectionSetBoolEx(pIniSection, L"OpenFileInSameWindow", bOpenFileInSameWindow, 0);
IniSectionSetBoolEx(pIniSection, L"TrackSelect", bTrackSelect, 1);
IniSectionSetBoolEx(pIniSection, L"FullRowSelect", bFullRowSelect, 0);
IniSectionSetBoolEx(pIniSection, L"UseRecycleBin", fUseRecycleBin, 1);
Expand Down
8 changes: 5 additions & 3 deletions metapath/src/metapath.rc
Expand Up @@ -77,7 +77,7 @@ IDR_MAINWND MENU
BEGIN
POPUP "+"
BEGIN
MENUITEM "&Open (Same)", IDM_FILE_OPEN
MENUITEM "&Open (Same)", IDM_FILE_OPENSAME
MENUITEM "Open (N&ew)", IDM_FILE_OPENNEW
MENUITEM "&Run...", IDM_FILE_RUN
MENUITEM "&Launch", IDM_FILE_LAUNCH
Expand Down Expand Up @@ -371,8 +371,8 @@ BEGIN
ICON IDI_OPTIONS,IDC_STATIC,10,10,20,20
LTEXT "Specify general program settings for metapath.",
IDC_STATIC,40,15,200,8
CONTROL "Use &RTL Layout.",
IDC_RTL_LAYOUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,34,190,10
CONTROL "Open file in same target application window.",
IDC_OPENFILE_SAME_WINDOW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,34,190,10
CONTROL "&Allow only single mouse-click to open objects.",
IDC_SINGLECLICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,46,190,10
CONTROL "&Enable track selection.",IDC_TRACKSELECT,"Button",
Expand Down Expand Up @@ -401,6 +401,8 @@ CAPTION "Advanced"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
ICON IDI_OPTIONS2,IDC_STATIC,10,10,20,20
CONTROL "Use &RTL Layout.",
IDC_RTL_LAYOUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,34,190,10
LTEXT "Specify advanced program settings for metapath.",
IDC_STATIC,40,15,200,8
CONTROL "&Use startup directory:",IDC_STARTUPDIR,"Button",
Expand Down
6 changes: 4 additions & 2 deletions metapath/src/resource.h
Expand Up @@ -81,7 +81,8 @@
#define IDC_REUSEWINDOW 106
#define IDC_SAVESETTINGS 107
#define IDC_CLEARWINPOS 108
#define IDC_RTL_LAYOUT 109
#define IDC_OPENFILE_SAME_WINDOW 109

// Advanced
#define IDPP_ADVANCED 111
#define IDC_STARTUPDIR 100
Expand All @@ -94,6 +95,7 @@
#define IDC_ESCFUNCTION 107
#define IDC_ESCMIN 108
#define IDC_ESCEXIT 109
#define IDC_RTL_LAYOUT 110
// Items
#define IDPP_ITEMS 112
#define IDC_COLOR_DEF1 100
Expand Down Expand Up @@ -148,7 +150,7 @@
#define IDS_CREATELINK 11010
#define IDS_SAVESETTINGS 11011

#define IDM_FILE_OPEN 40001
#define IDM_FILE_OPENSAME 40001
#define IDM_FILE_OPENNEW 40002
#define IDM_FILE_RUN 40003
#define IDM_FILE_LAUNCH 40004
Expand Down

0 comments on commit cabc627

Please sign in to comment.