\r
#define SELECT_ALL 0 /* 全選択 */\r
#define SELECT_REGEXP 1 /* 検索式を入力して選択 */\r
+// ローカル側自動更新\r
+#define SELECT_LIST 2 /* リストに含まれるファイルを選択 */\r
\r
/*===== 検索方法 =====*/\r
\r
void GetRemoteDirForWnd(int Mode, int *CancelCheckWork);\r
void GetLocalDirForWnd(void);\r
void ReSortDispList(int Win, int *CancelCheckWork);\r
-void SelectFileInList(HWND hWnd, int Type);\r
+// ローカル側自動更新\r
+//void SelectFileInList(HWND hWnd, int Type);\r
+void SelectFileInList(HWND hWnd, int Type, FILELIST *Base);\r
void FindFileInList(HWND hWnd, int Type);\r
// void WildCard2RegExp(char *Str);\r
int GetCurrentItem(int Win);\r
extern HWND hHelpWin;\r
// 外部アプリケーションへドロップ後にローカル側のファイル一覧に作業フォルダが表示されるバグ対策\r
extern int SuppressRefresh;\r
+// ローカル側自動更新\r
+extern HANDLE ChangeNotification;\r
\r
/* 設定値 */\r
extern int LocalWidth;\r
SetYenTail(Cur);\r
strcat(Cur, Pos->File);\r
}\r
- if(SHGetFileInfoM(Cur, 0, &FileInfo, sizeof(SHFILEINFO), SHGFI_SMALLICON | SHGFI_ICON) != 0)\r
+ if(SHGetFileInfo(Cur, 0, &FileInfo, sizeof(SHFILEINFO), SHGFI_SMALLICON | SHGFI_ICON) != 0)\r
{\r
if(ImageList_AddIcon(ListImgFileIcon, FileInfo.hIcon) >= 0)\r
{\r
SetLocalDirHist(Scan);\r
DispLocalFreeSpace(Scan);\r
\r
+ // ローカル側自動更新\r
+ if(ChangeNotification != INVALID_HANDLE_VALUE)\r
+ FindCloseChangeNotification(ChangeNotification);\r
+ ChangeNotification = FindFirstChangeNotification(Scan, FALSE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE);\r
+\r
/* ディレクトリ/ファイル */\r
\r
SetYenTail(Scan);\r
}\r
else\r
{\r
+ // 読みにくいのでリファクタリング\r
+// if((((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
+// ((Cmp = _mbsicmp(GetFileExt(Name), GetFileExt(Pos->File))) > 0)) ||\r
+//#if defined(HAVE_TANDEM)\r
+// ((AskHostType() == HTYPE_TANDEM) &&\r
+// ((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
+// ((Cmp = Attr - Pos->Attr) > 0)) ||\r
+//#endif\r
+// (((Sort & SORT_MASK_ORD) == SORT_SIZE) &&\r
+// ((Cmp = Size - Pos->Size) > 0)) ||\r
+// (((Sort & SORT_MASK_ORD) == SORT_DATE) &&\r
+// ((Cmp = CompareFileTime(Time, &Pos->Time)) > 0)))\r
+// {\r
+// break;\r
+// }\r
if((((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
- ((Cmp = _mbsicmp(GetFileExt(Name), GetFileExt(Pos->File))) > 0)) ||\r
+ ((Cmp = _mbsicmp(GetFileExt(Name), GetFileExt(Pos->File))) > 0)))\r
+ break;\r
#if defined(HAVE_TANDEM)\r
- ((AskHostType() == HTYPE_TANDEM) &&\r
+ if(((AskHostType() == HTYPE_TANDEM) &&\r
((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
- ((Cmp = Attr - Pos->Attr) > 0)) ||\r
+ ((Cmp = Attr - Pos->Attr) > 0)))\r
+ break;\r
#endif\r
- (((Sort & SORT_MASK_ORD) == SORT_SIZE) &&\r
- ((Cmp = Size - Pos->Size) > 0)) ||\r
- (((Sort & SORT_MASK_ORD) == SORT_DATE) &&\r
- ((Cmp = CompareFileTime(Time, &Pos->Time)) > 0)))\r
- {\r
+ if(((Sort & SORT_MASK_ORD) == SORT_SIZE) &&\r
+ ((Cmp = Size - Pos->Size) > 0))\r
+ break;\r
+ if(((Sort & SORT_MASK_ORD) == SORT_DATE) &&\r
+ ((Cmp = CompareFileTime(Time, &Pos->Time)) > 0))\r
break;\r
- }\r
\r
if(((Sort & SORT_MASK_ORD) == SORT_NAME) || (Cmp == 0))\r
{\r
* なし\r
*----------------------------------------------------------------------------*/\r
\r
-void SelectFileInList(HWND hWnd, int Type)\r
+// ローカル側自動更新\r
+//void SelectFileInList(HWND hWnd, int Type)\r
+void SelectFileInList(HWND hWnd, int Type, FILELIST *Base)\r
{\r
int Win;\r
int WinDst;\r
}\r
}\r
break;\r
+\r
+ // ローカル側自動更新\r
+ case SELECT_LIST :\r
+ for(i = 0; i < Num; i++)\r
+ {\r
+ LvItem.state = 0;\r
+ GetNodeName(Win, i, Name, FMAX_PATH);\r
+ if(SearchFileList(Name, Base, COMP_STRICT) != NULL)\r
+ LvItem.state = LVIS_SELECTED;\r
+ LvItem.mask = LVIF_STATE;\r
+ LvItem.iItem = i;\r
+ LvItem.stateMask = LVIS_SELECTED;\r
+ LvItem.iSubItem = 0;\r
+ SendMessage(hWnd, LVM_SETITEMSTATE, i, (LPARAM)&LvItem);\r
+ }\r
+ break;\r
}\r
return;\r
}\r
static DWORD MainThreadId;\r
// ポータブル版判定\r
static char PortableFilePath[FMAX_PATH+1];\r
-int PortableVersion;\r
+static int PortableVersion;\r
+// ローカル側自動更新\r
+HANDLE ChangeNotification = INVALID_HANDLE_VALUE;\r
\r
\r
/*===== グローバルなワーク =====*/\r
\r
switch (message)\r
{\r
+ // ローカル側自動更新\r
+ case WM_CREATE :\r
+ SetTimer(hWnd, 1, 1000, NULL);\r
+ break;\r
+\r
+ // ローカル側自動更新\r
// 自動切断対策\r
case WM_TIMER :\r
- if(wParam == 1)\r
+ switch(wParam)\r
+ {\r
+ case 1:\r
+ if(WaitForSingleObject(ChangeNotification, 0) == WAIT_OBJECT_0)\r
+ {\r
+ if(AskUserOpeDisabled() == NO)\r
+ {\r
+ FILELIST* Base;\r
+ FindNextChangeNotification(ChangeNotification);\r
+ Base = NULL;\r
+ MakeSelectedFileList(WIN_LOCAL, NO, NO, &Base, &CancelFlg);\r
+ GetLocalDirForWnd();\r
+ SelectFileInList(GetLocalHwnd(), SELECT_LIST, Base);\r
+ }\r
+ }\r
+ break;\r
+ case 2:\r
NoopProc();\r
+ break;\r
+ }\r
break;\r
\r
case WM_COMMAND :\r
{\r
case MENU_CONNECT :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ KillTimer(hWnd, 2);\r
ConnectProc(DLG_TYPE_CON, -1);\r
// 自動切断対策\r
if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
break;\r
\r
case MENU_CONNECT_NUM :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ KillTimer(hWnd, 2);\r
ConnectProc(DLG_TYPE_CON, (int)lParam);\r
// 自動切断対策\r
if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
if(AskConnecting() == YES)\r
{\r
if(HIWORD(wParam) & OPT_MIRROR)\r
\r
case MENU_SET_CONNECT :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ KillTimer(hWnd, 2);\r
ConnectProc(DLG_TYPE_SET, -1);\r
// 自動切断対策\r
if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
break;\r
\r
case MENU_QUICK :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ KillTimer(hWnd, 2);\r
QuickConnectProc();\r
// 自動切断対策\r
if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
break;\r
\r
case MENU_DISCONNECT :\r
case MENU_HIST_19 :\r
case MENU_HIST_20 :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ KillTimer(hWnd, 2);\r
HistoryConnectProc(LOWORD(wParam));\r
// 自動切断対策\r
if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
break;\r
\r
case MENU_UPDIR :\r
break;\r
\r
case REFRESH_LOCAL :\r
+ // デッドロック対策\r
+ if(AskUserOpeDisabled() == YES)\r
+ break;\r
GetLocalDirForWnd();\r
break;\r
\r
break;\r
\r
case MENU_SELECT_ALL :\r
- SelectFileInList(hWndCurFocus, SELECT_ALL);\r
+ // ローカル側自動更新\r
+// SelectFileInList(hWndCurFocus, SELECT_ALL);\r
+ SelectFileInList(hWndCurFocus, SELECT_ALL, NULL);\r
break;\r
\r
case MENU_SELECT :\r
- SelectFileInList(hWndCurFocus, SELECT_REGEXP);\r
+ // ローカル側自動更新\r
+// SelectFileInList(hWndCurFocus, SELECT_REGEXP);\r
+ SelectFileInList(hWndCurFocus, SELECT_REGEXP, NULL);\r
break;\r
\r
case MENU_FIND :\r
break;\r
\r
case WM_DESTROY :\r
+ // ローカル側自動更新\r
+ KillTimer(hWnd, 1);\r
+ if(ChangeNotification != INVALID_HANDLE_VALUE)\r
+ FindCloseChangeNotification(ChangeNotification);\r
// WSACleanup();\r
// DestroyWindow(hWndFtp);\r
PostQuitMessage(0);\r
return r;\r
}\r
\r
+HANDLE FindFirstChangeNotificationM(LPCSTR lpPathName, BOOL bWatchSubtree, DWORD dwNotifyFilter)\r
+{\r
+ HANDLE r = INVALID_HANDLE_VALUE;\r
+ wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+ pw0 = DuplicateMtoW(lpPathName, -1);\r
+ r = FindFirstChangeNotificationW(pw0, bWatchSubtree, dwNotifyFilter);\r
+END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ return r;\r
+}\r
+\r
DWORD GetLogicalDriveStringsM(DWORD nBufferLength, LPSTR lpBuffer)\r
{\r
DWORD r = 0;\r
#undef FindNextFile\r
#define FindNextFile FindNextFileM\r
BOOL FindNextFileM(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData);\r
+#undef FindFirstChangeNotification\r
+#define FindFirstChangeNotification FindFirstChangeNotificationM\r
+HANDLE FindFirstChangeNotificationM(LPCSTR lpPathName, BOOL bWatchSubtree, DWORD dwNotifyFilter);\r
#undef GetLogicalDriveStrings\r
#define GetLogicalDriveStrings GetLogicalDriveStringsM\r
DWORD GetLogicalDriveStringsM(DWORD nBufferLength, LPSTR lpBuffer);\r