OSDN Git Service

DnD時に一時ファイルが削除されない場合があったのを修正。
authorsirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Sun, 24 Oct 2010 14:30:28 +0000 (14:30 +0000)
committersirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Sun, 24 Oct 2010 14:30:28 +0000 (14:30 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/tpi/tpi@390 9df91469-1e22-0410-86e7-ea8537beb833

src/lychee/frm_main.cpp

index cca53eb..00dd982 100644 (file)
@@ -725,39 +725,45 @@ void MainFrame::OnArcExtract(wxCommandEvent& e)
        }\r
        else\r
        {\r
-               wxArrayString asFiles;\r
                if (nMode == 1)\r
                {\r
                        // コマンドを実行。\r
-                       asFiles.Add(swInfo.fnDestinationDirectory.GetPathWithSep() + wxFileName(mkDlg.files[0], wxPATH_DOS).GetFullName());\r
+                       wxString szTempFile = swInfo.fnDestinationDirectory.GetPathWithSep() + wxFileName(mkDlg.files[0], wxPATH_DOS).GetFullName();\r
                        if (tpi.nErrorCode == TPI_ERROR_SUCCESS)\r
                        {\r
 #ifdef __LINUX__\r
                                // Linuxでは引用符で囲む必要がある。\r
-                               ::wxExecute(ftFile->GetOpenCommand(QuoteString(asFiles[0])), wxEXEC_SYNC);\r
+                               ::wxExecute(ftFile->GetOpenCommand(QuoteString(szTempFile)), wxEXEC_SYNC);\r
 #else\r
-                               ::wxExecute(ftFile->GetOpenCommand(asFiles[0]), wxEXEC_SYNC);\r
+                               ::wxExecute(ftFile->GetOpenCommand(szTempFile), wxEXEC_SYNC);\r
 #endif\r
                        }\r
+\r
+                       ::wxRemoveFile(szTempFile);\r
+                       ::wxRmdir(swInfo.fnDestinationDirectory.GetPath());\r
                }\r
                else\r
                {\r
                        // 展開対象を決定。\r
+                       wxArrayString asFiles;\r
                        myFileDataObject * objFile = new myFileDataObject();\r
-                       objFile->szTempDir = swInfo.fnDestinationDirectory.GetFullPath();\r
+                       objFile->szTempDir = nMode == 3 ? swInfo.fnDestinationDirectory.GetPath() : swInfo.fnDestinationDirectory.GetFullPath();\r
                        for (size_t i = 0; i < mkDlg.files.GetCount(); i++)\r
                        {\r
                                wxString szFileName = swInfo.fnDestinationDirectory.GetPathWithSep() + wxFileName(mkDlg.files[i], wxPATH_DOS).GetFullName();\r
-                               if (nMode != 3)\r
+                               if (nMode == 3)\r
+                               {\r
+                                       asFiles.Add(szFileName);\r
+                               }\r
+                               else\r
                                {\r
                                        // リストに追加。\r
                                        objFile->AddFile(szFileName);\r
                                }\r
-                               asFiles.Add(szFileName);\r
                        }\r
                        if (nMode == 3)\r
                        {\r
-                               objFile->AddFile(swInfo.fnDestinationDirectory.GetPath());\r
+                               objFile->AddFile(objFile->szTempDir);\r
                        }\r
 \r
                        if (nMode == 4)\r
@@ -771,7 +777,7 @@ void MainFrame::OnArcExtract(wxCommandEvent& e)
 \r
                                // DnD開始。\r
                                wxDropSource dropSource(* objFile, this);\r
-                               wxDragResult drResult = dropSource.DoDragDrop(wxDrag_DefaultMove);\r
+                               wxDragResult drResult = dropSource.DoDragDrop();\r
                                if (drResult != wxDragCancel && drResult != wxDragNone && drResult != wxDragMove)\r
                                {\r
 #ifdef __LINUX__\r
@@ -780,6 +786,16 @@ void MainFrame::OnArcExtract(wxCommandEvent& e)
 #endif\r
                                }\r
                                this->SetDropTarget(new myFileDropTarget(this));\r
+\r
+                               // ディレクトリDnDのときは、先にディレクトリの中のファイルを消しておく。\r
+                               if (nMode == 3)\r
+                               {\r
+                                       for (size_t i = 0; i < asFiles.GetCount(); i++)\r
+                                       {\r
+                                               ::wxRemoveFile(asFiles[i]);\r
+                                       }\r
+                               }\r
+\r
                                delete objFile;\r
                        }\r
                }\r