From 359176d9064845ed334f31a6a636a88f3974c67e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Wed, 7 Jan 2009 21:52:07 +0000 Subject: [PATCH] * now use source and destination as initial directory for file panels. This fixes bug #3175. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28855 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/expander/ExpanderWindow.cpp | 30 ++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/apps/expander/ExpanderWindow.cpp b/src/apps/expander/ExpanderWindow.cpp index 408060db7b..674dcf0bb9 100644 --- a/src/apps/expander/ExpanderWindow.cpp +++ b/src/apps/expander/ExpanderWindow.cpp @@ -189,6 +189,12 @@ ExpanderWindow::ValidateDest() B_WIDTH_AS_USUAL, B_EVEN_SPACING, B_WARNING_ALERT); alert->Go(); return false; + } else if (!entry.IsDirectory()) { + BAlert *alert = new BAlert("destAlert", "The destination" + " is not a directory.", "Cancel", NULL, NULL, + B_WIDTH_AS_USUAL, B_EVEN_SPACING, B_WARNING_ALERT); + alert->Go(); + return false; } else { entry.GetRef(&fDestRef); return true; @@ -213,23 +219,35 @@ ExpanderWindow::MessageReceived(BMessage *msg) { switch (msg->what) { case MSG_SOURCE: + { + BEntry entry(fSourceText->Text(), true); + entry_ref srcRef; + if (entry.Exists() && entry.IsDirectory()) + entry.GetRef(&srcRef); if (!fSourcePanel) { BMessenger messenger(this); - fSourcePanel = new BFilePanel(B_OPEN_PANEL, &messenger, NULL, + fSourcePanel = new BFilePanel(B_OPEN_PANEL, &messenger, &srcRef, B_FILE_NODE, false, NULL, new RuleRefFilter(fRules), true); - } + } else + fSourcePanel->SetPanelDirectory(&srcRef); fSourcePanel->Show(); break; - + } case MSG_DEST: + { + BEntry entry(fDestText->Text(), true); + entry_ref destRef; + if (entry.Exists() && entry.IsDirectory()) + entry.GetRef(&destRef); if (!fDestPanel) { BMessenger messenger(this); - fDestPanel = new DirectoryFilePanel(B_OPEN_PANEL, &messenger, NULL, + fDestPanel = new DirectoryFilePanel(B_OPEN_PANEL, &messenger, &destRef, B_DIRECTORY_NODE, false, NULL, new DirectoryRefFilter(), true); - } + } else + fDestPanel->SetPanelDirectory(&destRef); fDestPanel->Show(); break; - + } case MSG_DIRECTORY: { entry_ref ref;