FFFTPのソースコードです。
修订版 | 8333fcc168e5101d863dc2625e466de04090a0d8 (tree) |
---|---|
时间 | 2017-09-17 22:42:07 |
作者 | s_kawamoto <s_kawamoto@user...> |
Commiter | s_kawamoto |
Fix bugs of the drag-and-drop routine.
@@ -242,7 +242,7 @@ FONT 9, "MS Shell Dlg", 0, 0, 0x0 | ||
242 | 242 | BEGIN |
243 | 243 | DEFPUSHBUTTON "OK",IDOK,133,294,50,14 |
244 | 244 | ICON ffftp,-1,7,4,20,20 |
245 | - CTEXT "FFFTP Ver 1.99a-20170618",-1,113,11,90,8 | |
245 | + CTEXT "FFFTP Ver 1.99a-20170917",-1,113,11,90,8 | |
246 | 246 | CTEXT "FFFTPÍfreewareÅ·",-1,7,279,305,8 |
247 | 247 | CTEXT "Copyright(C) 1997-2010 Sota & ²¦Í¢½¾¢½ûX\nCopyright (C) 2011-2017 FFFTP Project (Hiromichi Matsushima, Suguru Kawamoto, IWAMOTO Kouichi, vitamin0x, ¤È[, Asami, fortran90, tomo1192, Yuji Tanaka, Moriguchi Hirokazu, Ó¤¹ñ)",-1,7,25,305,44,SS_NOPREFIX |
248 | 248 | CTEXT "",ABOUT_JRE,7,96,305,8 |
@@ -2213,8 +2213,8 @@ nodrop_csr CURSOR "nodrop_c.cur" | ||
2213 | 2213 | // |
2214 | 2214 | |
2215 | 2215 | VS_VERSION_INFO VERSIONINFO |
2216 | - FILEVERSION 1,99,1,14 | |
2217 | - PRODUCTVERSION 1,99,1,14 | |
2216 | + FILEVERSION 1,99,1,15 | |
2217 | + PRODUCTVERSION 1,99,1,15 | |
2218 | 2218 | FILEFLAGSMASK 0x3fL |
2219 | 2219 | #ifdef _DEBUG |
2220 | 2220 | FILEFLAGS 0x1L |
@@ -2232,12 +2232,12 @@ BEGIN | ||
2232 | 2232 | VALUE "Comments", "±êÍt[\tgEGAÅ·B" |
2233 | 2233 | VALUE "CompanyName", "Sota, FFFTP Project" |
2234 | 2234 | VALUE "FileDescription", "FFFTP" |
2235 | - VALUE "FileVersion", "1, 99, 1, 14" | |
2235 | + VALUE "FileVersion", "1, 99, 1, 15" | |
2236 | 2236 | VALUE "InternalName", "FFFTP" |
2237 | 2237 | VALUE "LegalCopyright", "Copyright (C) 1997-2010 Sota & ²¦Í¢½¾¢½ûX\nCopyright (C) 2011-2017 FFFTP Project (Hiromichi Matsushima, Suguru Kawamoto, IWAMOTO Kouichi, vitamin0x, ¤È[, Asami, fortran90, tomo1192, Yuji Tanaka, Moriguchi Hirokazu, Ó¤¹ñ)." |
2238 | 2238 | VALUE "OriginalFilename", "FFFTP.exe" |
2239 | 2239 | VALUE "ProductName", "FFFTP" |
2240 | - VALUE "ProductVersion", "1, 99, 1, 14" | |
2240 | + VALUE "ProductVersion", "1, 99, 1, 15" | |
2241 | 2241 | END |
2242 | 2242 | END |
2243 | 2243 | BLOCK "VarFileInfo" |
@@ -242,7 +242,7 @@ FONT 9, "MS Shell Dlg", 0, 0, 0x0 | ||
242 | 242 | BEGIN |
243 | 243 | DEFPUSHBUTTON "OK",IDOK,132,296,50,14 |
244 | 244 | ICON ffftp,-1,7,4,20,20 |
245 | - CTEXT "FFFTP Ver 1.99a-20170618",-1,110,11,90,8 | |
245 | + CTEXT "FFFTP Ver 1.99a-20170917",-1,110,11,90,8 | |
246 | 246 | CTEXT "FFFTP is freeware",-1,7,281,301,8 |
247 | 247 | CTEXT "Copyright(C) 1997-2010 Sota && cooperators\nCopyright (C) 2011-2017 FFFTP Project (Hiromichi Matsushima, Suguru Kawamoto, IWAMOTO Kouichi, vitamin0x, unarist, Asami, fortran90, tomo1192, Yuji Tanaka, Moriguchi Hirokazu, Fu-sen)",-1,7,25,301,44 |
248 | 248 | CTEXT "",ABOUT_JRE,7,93,301,8 |
@@ -2253,8 +2253,8 @@ nodrop_csr CURSOR "nodrop_c.cur" | ||
2253 | 2253 | // |
2254 | 2254 | |
2255 | 2255 | VS_VERSION_INFO VERSIONINFO |
2256 | - FILEVERSION 1,99,1,14 | |
2257 | - PRODUCTVERSION 1,99,1,14 | |
2256 | + FILEVERSION 1,99,1,15 | |
2257 | + PRODUCTVERSION 1,99,1,15 | |
2258 | 2258 | FILEFLAGSMASK 0x3fL |
2259 | 2259 | #ifdef _DEBUG |
2260 | 2260 | FILEFLAGS 0x1L |
@@ -2272,12 +2272,12 @@ BEGIN | ||
2272 | 2272 | VALUE "Comments", "This software is Free Software" |
2273 | 2273 | VALUE "CompanyName", "Sota, FFFTP Project" |
2274 | 2274 | VALUE "FileDescription", "FFFTP" |
2275 | - VALUE "FileVersion", "1, 99, 1, 14" | |
2275 | + VALUE "FileVersion", "1, 99, 1, 15" | |
2276 | 2276 | VALUE "InternalName", "FFFTP" |
2277 | 2277 | VALUE "LegalCopyright", "Copyright (C) 1997-2010 Sota & cooperators\nCopyright (C) 2011-2017 FFFTP Project (Hiromichi Matsushima, Suguru Kawamoto, IWAMOTO Kouichi, vitamin0x, unarist, Asami, fortran90, tomo1192, Yuji Tanaka, Moriguchi Hirokazu, Fu-sen)." |
2278 | 2278 | VALUE "OriginalFilename", "FFFTP.exe" |
2279 | 2279 | VALUE "ProductName", "FFFTP" |
2280 | - VALUE "ProductVersion", "1, 99, 1, 14" | |
2280 | + VALUE "ProductVersion", "1, 99, 1, 15" | |
2281 | 2281 | END |
2282 | 2282 | END |
2283 | 2283 | BLOCK "VarFileInfo" |
@@ -72,16 +72,16 @@ | ||
72 | 72 | //#define PROGRAM_VERSION_NUM 1972 /* バージョン */ |
73 | 73 | // 64ビット対応 |
74 | 74 | #ifdef _WIN64 |
75 | -#define VER_STR "1.99a-20170618 64bit" | |
75 | +#define VER_STR "1.99a-20170917 64bit" | |
76 | 76 | #else |
77 | -#define VER_STR "1.99a-20170618" | |
77 | +#define VER_STR "1.99a-20170917" | |
78 | 78 | #endif |
79 | 79 | #define VER_NUM 1990 /* 設定バージョン */ |
80 | 80 | #define PROGRAM_VERSION_NUM 1990 /* バージョン */ |
81 | 81 | // ソフトウェア自動更新 |
82 | 82 | // リリースバージョンはリリース予定年(10進数4桁)+月(2桁)+日(2桁)+通し番号(0スタート2桁)とする |
83 | 83 | // 2014年7月31日中の30個目のリリースは2014073129 |
84 | -#define RELEASE_VERSION_NUM 2017061800 /* リリースバージョン */ | |
84 | +#define RELEASE_VERSION_NUM 2017091700 /* リリースバージョン */ | |
85 | 85 | |
86 | 86 | |
87 | 87 | // SourceForge.JPによるフォーク |
@@ -179,7 +179,7 @@ static int IgnoreExist = NO; | ||
179 | 179 | |
180 | 180 | static int Dragging = NO; |
181 | 181 | // 特定の操作を行うと異常終了するバグ修正 |
182 | -static int DragFirstTime = NO; | |
182 | +static POINT DropPoint; | |
183 | 183 | |
184 | 184 | static int StratusMode; /* 0=ファイル, 1=ディレクトリ, 2=リンク */ |
185 | 185 |
@@ -498,6 +498,20 @@ static void doTransferRemoteFile(void) | ||
498 | 498 | if (remoteFileListBase != NULL) |
499 | 499 | return; |
500 | 500 | |
501 | + // 特定の操作を行うと異常終了するバグ修正 | |
502 | + while(1) | |
503 | + { | |
504 | + MSG msg; | |
505 | + if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) | |
506 | + { | |
507 | + TranslateMessage(&msg); | |
508 | + DispatchMessage(&msg); | |
509 | + } | |
510 | + else if(AskTransferNow() == NO) | |
511 | + break; | |
512 | + Sleep(10); | |
513 | + } | |
514 | + | |
501 | 515 | FileListBase = NULL; |
502 | 516 | MakeSelectedFileList(WIN_REMOTE, YES, NO, &FileListBase, &CancelFlg); |
503 | 517 | FileListBaseNoExpand = NULL; |
@@ -546,7 +560,8 @@ static void doTransferRemoteFile(void) | ||
546 | 560 | |
547 | 561 | // 特定の操作を行うと異常終了するバグ修正 |
548 | 562 | // for (i = 0 ; i < 10 ; i++) { |
549 | - for (i = 0 ; i < 1000 ; i++) { | |
563 | + while(1) | |
564 | + { | |
550 | 565 | MSG msg; |
551 | 566 | |
552 | 567 | if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { |
@@ -771,9 +786,13 @@ static void doDragDrop(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) | ||
771 | 786 | } |
772 | 787 | |
773 | 788 | // ドロップ先のアプリに WM_LBUTTONUP を飛ばす。 |
774 | - GetCursorPos(&pt); | |
789 | + // 特定の操作を行うと異常終了するバグ修正 | |
790 | +// GetCursorPos(&pt); | |
791 | + pt = DropPoint; | |
775 | 792 | ScreenToClient(hWnd, &pt); |
776 | 793 | PostMessage(hWnd,WM_LBUTTONUP,0,MAKELPARAM(pt.x,pt.y)); |
794 | + // ドロップ先が他プロセスかつカーソルが自プロセスのドロップ可能なウィンドウ上にある場合の対策 | |
795 | + EnableWindow(GetMainHwnd(), TRUE); | |
777 | 796 | } |
778 | 797 | |
779 | 798 |
@@ -804,6 +823,8 @@ static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPA | ||
804 | 823 | HWND hWndDst; |
805 | 824 | WNDPROC ProcPtr; |
806 | 825 | HWND hWndHistEdit; |
826 | + // 特定の操作を行うと異常終了するバグ修正 | |
827 | + static int DragFirstTime = NO; | |
807 | 828 | |
808 | 829 | Win = WIN_LOCAL; |
809 | 830 | hWndDst = hWndListRemote; |
@@ -869,6 +890,13 @@ static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPA | ||
869 | 890 | break; |
870 | 891 | |
871 | 892 | case WM_LBUTTONDOWN : |
893 | + // 特定の操作を行うと異常終了するバグ修正 | |
894 | + if(AskUserOpeDisabled() == YES) | |
895 | + break; | |
896 | + if(Dragging == YES) | |
897 | + break; | |
898 | + DragFirstTime = NO; | |
899 | + GetCursorPos(&DropPoint); | |
872 | 900 | EraseListViewTips(); |
873 | 901 | SetFocus(hWnd); |
874 | 902 | DragPoint.x = LOWORD(lParam); |
@@ -878,6 +906,9 @@ static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPA | ||
878 | 906 | break; |
879 | 907 | |
880 | 908 | case WM_LBUTTONUP : |
909 | + // 特定の操作を行うと異常終了するバグ修正 | |
910 | + if(AskUserOpeDisabled() == YES) | |
911 | + break; | |
881 | 912 | if(Dragging == YES) |
882 | 913 | { |
883 | 914 | Dragging = NO; |
@@ -885,9 +916,6 @@ static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPA | ||
885 | 916 | hCsrDrg = LoadCursor(NULL, IDC_ARROW); |
886 | 917 | SetCursor(hCsrDrg); |
887 | 918 | |
888 | - // 同時接続対応 | |
889 | - if(AskUserOpeDisabled() == YES) | |
890 | - break; | |
891 | 919 | Point.x = (long)(short)LOWORD(lParam); |
892 | 920 | Point.y = (long)(short)HIWORD(lParam); |
893 | 921 | ClientToScreen(hWnd, &Point); |
@@ -913,148 +941,157 @@ static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPA | ||
913 | 941 | } |
914 | 942 | return(CallWindowProc(ProcPtr, hWnd, message, wParam, lParam)); |
915 | 943 | |
916 | - case WM_DRAGDROP: | |
944 | + case WM_DRAGDROP: | |
945 | + // OLE D&Dを開始する (yutaka) | |
917 | 946 | // 特定の操作を行うと異常終了するバグ修正 |
947 | +// doDragDrop(hWnd, message, wParam, lParam); | |
948 | + if(DragFirstTime == NO) | |
949 | + doDragDrop(hWnd, message, wParam, lParam); | |
918 | 950 | DragFirstTime = YES; |
919 | - // OLE D&Dを開始する (yutaka) | |
920 | - doDragDrop(hWnd, message, wParam, lParam); | |
921 | - return (TRUE); | |
922 | - break; | |
923 | - | |
924 | - case WM_GETDATA: // ファイルのパスをD&D先のアプリへ返す (yutaka) | |
925 | - switch(wParam) | |
926 | - { | |
927 | - case CF_HDROP: /* ファイル */ | |
928 | - { | |
929 | - OSVERSIONINFO os_info; | |
930 | - BOOL NTFlag = FALSE; | |
931 | - char **FileNameList; | |
932 | - int filelen; | |
933 | - int i, j, filenum = 0; | |
934 | - | |
935 | - FILELIST *FileListBase, *FileListBaseNoExpand, *pf; | |
951 | + return (TRUE); | |
952 | + break; | |
953 | + | |
954 | + case WM_GETDATA: // ファイルのパスをD&D先のアプリへ返す (yutaka) | |
955 | + switch(wParam) | |
956 | + { | |
957 | + case CF_HDROP: /* ファイル */ | |
958 | + { | |
959 | + OSVERSIONINFO os_info; | |
960 | + BOOL NTFlag = FALSE; | |
961 | + char **FileNameList; | |
962 | + int filelen; | |
963 | + int i, j, filenum = 0; | |
964 | + | |
965 | + FILELIST *FileListBase, *FileListBaseNoExpand, *pf; | |
936 | 966 | // 特定の操作を行うと異常終了するバグ修正 |
937 | -// int CancelFlg = NO; | |
938 | - char LocDir[FMAX_PATH+1]; | |
939 | - char *PathDir; | |
967 | +// int CancelFlg = NO; | |
968 | + char LocDir[FMAX_PATH+1]; | |
969 | + char *PathDir; | |
940 | 970 | |
941 | 971 | // 特定の操作を行うと異常終了するバグ修正 |
942 | - if(DragFirstTime == YES) | |
943 | - { | |
944 | - GetCursorPos(&Point); | |
945 | - hWndPnt = WindowFromPoint(Point); | |
946 | - hWndParent = GetParent(hWndPnt); | |
947 | - } | |
948 | - DragFirstTime = NO; | |
972 | + GetCursorPos(&DropPoint); | |
973 | + hWndPnt = WindowFromPoint(DropPoint); | |
974 | + hWndParent = GetParent(hWndPnt); | |
949 | 975 | DisableUserOpe(); |
950 | 976 | CancelFlg = NO; |
951 | 977 | |
952 | 978 | // 変数が未初期化のバグ修正 |
953 | 979 | FileListBaseNoExpand = NULL; |
954 | - // ローカル側で選ばれているファイルをFileListBaseに登録 | |
955 | - if (hWndDragStart == hWndListLocal) { | |
956 | - AskLocalCurDir(LocDir, FMAX_PATH); | |
957 | - PathDir = LocDir; | |
958 | - | |
959 | - FileListBase = NULL; | |
980 | + // ローカル側で選ばれているファイルをFileListBaseに登録 | |
981 | + if (hWndDragStart == hWndListLocal) { | |
982 | + AskLocalCurDir(LocDir, FMAX_PATH); | |
983 | + PathDir = LocDir; | |
984 | + | |
985 | + FileListBase = NULL; | |
960 | 986 | // ローカル側からアプリケーションにD&Dできないバグ修正 |
961 | -// MakeSelectedFileList(WIN_LOCAL, YES, NO, &FileListBase, &CancelFlg); | |
962 | - MakeSelectedFileList(WIN_LOCAL, NO, NO, &FileListBase, &CancelFlg); | |
987 | +// MakeSelectedFileList(WIN_LOCAL, YES, NO, &FileListBase, &CancelFlg); | |
988 | + if(hWndPnt != hWndListRemote && hWndPnt != hWndListLocal && hWndParent != hWndListRemote && hWndParent != hWndListLocal) | |
989 | + MakeSelectedFileList(WIN_LOCAL, NO, NO, &FileListBase, &CancelFlg); | |
963 | 990 | FileListBaseNoExpand = FileListBase; |
964 | - | |
965 | - } else if (hWndDragStart == hWndListRemote) { | |
991 | + | |
992 | + } else if (hWndDragStart == hWndListRemote) { | |
966 | 993 | // 特定の操作を行うと異常終了するバグ修正 |
967 | -// GetCursorPos(&Point); | |
968 | -// hWndPnt = WindowFromPoint(Point); | |
994 | +// GetCursorPos(&Point); | |
995 | +// hWndPnt = WindowFromPoint(Point); | |
969 | 996 | // hWndParent = GetParent(hWndPnt); |
970 | - if (hWndPnt == hWndListRemote || hWndPnt == hWndListLocal || | |
997 | + if (hWndPnt == hWndListRemote || hWndPnt == hWndListLocal || | |
971 | 998 | hWndParent == hWndListRemote || hWndParent == hWndListLocal) { |
972 | - FileListBase = NULL; | |
973 | - | |
974 | - } else { | |
975 | - // 選択されているリモートファイルのリストアップ | |
976 | - // このタイミングでリモートからローカルの一時フォルダへダウンロードする | |
977 | - // (2007.8.31 yutaka) | |
978 | - doTransferRemoteFile(); | |
979 | - PathDir = remoteFileDir; | |
980 | - FileListBase = remoteFileListBase; | |
981 | - FileListBaseNoExpand = remoteFileListBaseNoExpand; | |
982 | - } | |
983 | - | |
984 | - } | |
985 | - | |
999 | + FileListBase = NULL; | |
1000 | + | |
1001 | + } else { | |
1002 | + // 選択されているリモートファイルのリストアップ | |
1003 | + // このタイミングでリモートからローカルの一時フォルダへダウンロードする | |
1004 | + // (2007.8.31 yutaka) | |
1005 | + doTransferRemoteFile(); | |
1006 | + PathDir = remoteFileDir; | |
1007 | + FileListBase = remoteFileListBase; | |
1008 | + FileListBaseNoExpand = remoteFileListBaseNoExpand; | |
1009 | + } | |
1010 | + | |
1011 | + } | |
1012 | + | |
986 | 1013 | #if defined(HAVE_TANDEM) |
987 | 1014 | if(FileListBaseNoExpand == NULL) |
988 | 1015 | pf = FileListBase; |
989 | 1016 | else |
990 | 1017 | #endif |
991 | - pf = FileListBaseNoExpand; | |
1018 | + pf = FileListBaseNoExpand; | |
992 | 1019 | // 特定の操作を行うと異常終了するバグ修正 |
993 | 1020 | if(pf != NULL) |
1021 | + { | |
994 | 1022 | Dragging = NO; |
1023 | + ReleaseCapture(); | |
1024 | + hCsrDrg = LoadCursor(NULL, IDC_ARROW); | |
1025 | + SetCursor(hCsrDrg); | |
1026 | + // ドロップ先が他プロセスかつカーソルが自プロセスのドロップ可能なウィンドウ上にある場合の対策 | |
1027 | + EnableWindow(GetMainHwnd(), FALSE); | |
1028 | + } | |
995 | 1029 | EnableUserOpe(); |
996 | - for (filenum = 0; pf ; filenum++) { | |
997 | - pf = pf->Next; | |
998 | - } | |
999 | - // ファイルが未選択の場合は何もしない。(yutaka) | |
1000 | - if (filenum <= 0) { | |
1001 | - *((HANDLE *)lParam) = NULL; | |
1002 | - return (FALSE); | |
1003 | - } | |
1004 | - | |
1005 | - /* ファイル名の配列を作成する */ | |
1006 | - FileNameList = (char **)GlobalAlloc(GPTR,sizeof(char *) * filenum); | |
1007 | - if(FileNameList == NULL){ | |
1008 | - abort(); | |
1009 | - } | |
1010 | - pf = FileListBaseNoExpand; | |
1011 | - for (j = 0; pf ; j++) { | |
1012 | - filelen = strlen(PathDir) + 1 + strlen(pf->File) + 1; | |
1013 | - FileNameList[j] = (char *)GlobalAlloc(GPTR, filelen); | |
1014 | - strncpy_s(FileNameList[j], filelen, PathDir, _TRUNCATE); | |
1015 | - strncat_s(FileNameList[j], filelen, "\\", _TRUNCATE); | |
1016 | - strncat_s(FileNameList[j], filelen, pf->File, _TRUNCATE); | |
1017 | - pf = pf->Next; | |
1030 | + // ドロップ先が他プロセスかつカーソルが自プロセスのドロップ可能なウィンドウ上にある場合の対策 | |
1031 | + if(pf != NULL) | |
1032 | + EnableWindow(GetMainHwnd(), FALSE); | |
1033 | + for (filenum = 0; pf ; filenum++) { | |
1034 | + pf = pf->Next; | |
1035 | + } | |
1036 | + // ファイルが未選択の場合は何もしない。(yutaka) | |
1037 | + if (filenum <= 0) { | |
1038 | + *((HANDLE *)lParam) = NULL; | |
1039 | + return (FALSE); | |
1040 | + } | |
1041 | + | |
1042 | + /* ファイル名の配列を作成する */ | |
1043 | + FileNameList = (char **)GlobalAlloc(GPTR,sizeof(char *) * filenum); | |
1044 | + if(FileNameList == NULL){ | |
1045 | + abort(); | |
1046 | + } | |
1047 | + pf = FileListBaseNoExpand; | |
1048 | + for (j = 0; pf ; j++) { | |
1049 | + filelen = strlen(PathDir) + 1 + strlen(pf->File) + 1; | |
1050 | + FileNameList[j] = (char *)GlobalAlloc(GPTR, filelen); | |
1051 | + strncpy_s(FileNameList[j], filelen, PathDir, _TRUNCATE); | |
1052 | + strncat_s(FileNameList[j], filelen, "\\", _TRUNCATE); | |
1053 | + strncat_s(FileNameList[j], filelen, pf->File, _TRUNCATE); | |
1054 | + pf = pf->Next; | |
1018 | 1055 | #if 0 |
1019 | 1056 | if (FileListBase->Node == NODE_DIR) { |
1020 | - // フォルダを掴んだ場合はそれ以降展開しない | |
1021 | - filenum = 1; | |
1022 | - break; | |
1023 | - } | |
1057 | + // フォルダを掴んだ場合はそれ以降展開しない | |
1058 | + filenum = 1; | |
1059 | + break; | |
1060 | + } | |
1024 | 1061 | #endif |
1025 | - } | |
1026 | - | |
1027 | - os_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); | |
1028 | - GetVersionEx(&os_info); | |
1029 | - if(os_info.dwPlatformId == VER_PLATFORM_WIN32_NT){ | |
1030 | - NTFlag = TRUE; | |
1031 | - } | |
1032 | - | |
1033 | - /* ドロップファイルリストの作成 */ | |
1034 | - /* NTの場合はUNICODEになるようにする */ | |
1035 | - *((HANDLE *)lParam) = CreateDropFileMem(FileNameList, filenum, NTFlag); | |
1036 | - | |
1037 | - /* ファイル名の配列を解放する */ | |
1038 | - for (i = 0; i < filenum ; i++) { | |
1039 | - GlobalFree(FileNameList[i]); | |
1040 | - } | |
1041 | - GlobalFree(FileNameList); | |
1042 | - | |
1043 | - if (hWndDragStart == hWndListLocal) { | |
1044 | - DeleteFileList(&FileListBase); | |
1045 | - } else { | |
1046 | - // あとでファイル削除してフリーする | |
1047 | - } | |
1048 | - | |
1049 | - return (TRUE); | |
1050 | - } | |
1051 | - break; | |
1052 | - | |
1053 | - default: | |
1054 | - *((HANDLE *)lParam) = NULL; | |
1055 | - break; | |
1056 | - } | |
1057 | - | |
1062 | + } | |
1063 | + | |
1064 | + os_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); | |
1065 | + GetVersionEx(&os_info); | |
1066 | + if(os_info.dwPlatformId == VER_PLATFORM_WIN32_NT){ | |
1067 | + NTFlag = TRUE; | |
1068 | + } | |
1069 | + | |
1070 | + /* ドロップファイルリストの作成 */ | |
1071 | + /* NTの場合はUNICODEになるようにする */ | |
1072 | + *((HANDLE *)lParam) = CreateDropFileMem(FileNameList, filenum, NTFlag); | |
1073 | + | |
1074 | + /* ファイル名の配列を解放する */ | |
1075 | + for (i = 0; i < filenum ; i++) { | |
1076 | + GlobalFree(FileNameList[i]); | |
1077 | + } | |
1078 | + GlobalFree(FileNameList); | |
1079 | + | |
1080 | + if (hWndDragStart == hWndListLocal) { | |
1081 | + DeleteFileList(&FileListBase); | |
1082 | + } else { | |
1083 | + // あとでファイル削除してフリーする | |
1084 | + } | |
1085 | + | |
1086 | + return (TRUE); | |
1087 | + } | |
1088 | + break; | |
1089 | + | |
1090 | + default: | |
1091 | + *((HANDLE *)lParam) = NULL; | |
1092 | + break; | |
1093 | + } | |
1094 | + | |
1058 | 1095 | break; |
1059 | 1096 | |
1060 | 1097 | case WM_DRAGOVER: |
@@ -1099,6 +1136,9 @@ static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPA | ||
1099 | 1136 | break; |
1100 | 1137 | |
1101 | 1138 | case WM_RBUTTONDOWN : |
1139 | + // 特定の操作を行うと異常終了するバグ修正 | |
1140 | + if(AskUserOpeDisabled() == YES) | |
1141 | + break; | |
1102 | 1142 | /* ここでファイルを選ぶ */ |
1103 | 1143 | CallWindowProc(ProcPtr, hWnd, message, wParam, lParam); |
1104 | 1144 |
@@ -1111,10 +1151,16 @@ static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPA | ||
1111 | 1151 | break; |
1112 | 1152 | |
1113 | 1153 | case WM_LBUTTONDBLCLK : |
1154 | + // 特定の操作を行うと異常終了するバグ修正 | |
1155 | + if(AskUserOpeDisabled() == YES) | |
1156 | + break; | |
1114 | 1157 | DoubleClickProc(Win, NO, -1); |
1115 | 1158 | break; |
1116 | 1159 | |
1117 | 1160 | case WM_MOUSEMOVE : |
1161 | + // 特定の操作を行うと異常終了するバグ修正 | |
1162 | + if(AskUserOpeDisabled() == YES) | |
1163 | + break; | |
1118 | 1164 | if(wParam == MK_LBUTTON) |
1119 | 1165 | { |
1120 | 1166 | if((Dragging == NO) && |
@@ -1160,6 +1206,9 @@ static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPA | ||
1160 | 1206 | break; |
1161 | 1207 | |
1162 | 1208 | case WM_MOUSEWHEEL : |
1209 | + // デッドロック対策 | |
1210 | + if(AskUserOpeDisabled() == YES) | |
1211 | + break; | |
1163 | 1212 | if(Dragging == NO) |
1164 | 1213 | { |
1165 | 1214 | short zDelta = (short)HIWORD(wParam); |
@@ -6208,7 +6257,7 @@ static int AskFilterStr(char *Fname, int Type) | ||
6208 | 6257 | |
6209 | 6258 | void SetFilter(int *CancelCheckWork) |
6210 | 6259 | { |
6211 | - if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(filter_dlg), GetMainHwnd(), FilterWndProc) == YES) | |
6260 | + if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(filter_dlg), GetMainHwnd(), FilterWndProc) == YES) | |
6212 | 6261 | { |
6213 | 6262 | DispWindowTitle(); |
6214 | 6263 | GetLocalDirForWnd(); |
@@ -811,11 +811,11 @@ static ULONG WINAPI TransferThread(void *Dummy) | ||
811 | 811 | { |
812 | 812 | // 同時ログイン数制限に引っかかった可能性あり |
813 | 813 | // 負荷を下げるために約10秒間待機 |
814 | - i = 10000; | |
814 | + i = 1000; | |
815 | 815 | while(NewCmdSkt != CmdSkt && i > 0) |
816 | 816 | { |
817 | 817 | BackgrndMessageProc(); |
818 | - Sleep(1); | |
818 | + Sleep(10); | |
819 | 819 | i--; |
820 | 820 | } |
821 | 821 | } |
@@ -1185,6 +1185,13 @@ static ULONG WINAPI TransferThread(void *Dummy) | ||
1185 | 1185 | // ReleaseMutex(hListAccMutex); |
1186 | 1186 | // GoExit = YES; |
1187 | 1187 | // } |
1188 | + // バグ対策 | |
1189 | + else if(strcmp(Pos->Cmd, "NULL") == 0) | |
1190 | + { | |
1191 | + Sleep(0); | |
1192 | + Sleep(100); | |
1193 | + ReleaseMutex(hListAccMutex); | |
1194 | + } | |
1188 | 1195 | else |
1189 | 1196 | ReleaseMutex(hListAccMutex); |
1190 | 1197 |
@@ -3426,7 +3426,7 @@ int BackgrndMessageProc(void) | ||
3426 | 3426 | // if(!IsMainThread() || !HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD)&Msg)) |
3427 | 3427 | if(!IsMainThread() || !HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD_PTR)&Msg)) |
3428 | 3428 | { |
3429 | - /* ディレクトリ名の表示コンボボックスでBSやRETが効くように */ | |
3429 | + /* ディレクトリ名の表示コンボボックスでBSやRETが効くように */ | |
3430 | 3430 | /* コンボボックス内ではアクセラレータを無効にする */ |
3431 | 3431 | if((Msg.hwnd == GetLocalHistEditHwnd()) || |
3432 | 3432 | (Msg.hwnd == GetRemoteHistEditHwnd()) || |
@@ -879,10 +879,6 @@ void DisableUserOpe(void) | ||
879 | 879 | EnableWindow(hWndDirLocal, FALSE); |
880 | 880 | EnableWindow(hWndDirRemote, FALSE); |
881 | 881 | |
882 | - // 特定の操作を行うと異常終了するバグ修正 | |
883 | - EnableWindow(GetLocalHwnd(), FALSE); | |
884 | - EnableWindow(GetRemoteHwnd(), FALSE); | |
885 | - | |
886 | 882 | return; |
887 | 883 | } |
888 | 884 |
@@ -916,10 +912,6 @@ void EnableUserOpe(void) | ||
916 | 912 | EnableWindow(hWndDirLocal, TRUE); |
917 | 913 | EnableWindow(hWndDirRemote, TRUE); |
918 | 914 | |
919 | - // 特定の操作を行うと異常終了するバグ修正 | |
920 | - EnableWindow(GetLocalHwnd(), TRUE); | |
921 | - EnableWindow(GetRemoteHwnd(), TRUE); | |
922 | - | |
923 | 915 | // 選択不可な漢字コードのボタンが表示されるバグを修正 |
924 | 916 | HideHostKanjiButton(); |
925 | 917 | HideLocalKanjiButton(); |