hrev44946 adds 1 changeset to branch 'master' old head: d3144dd06b486178e9950fe5a533e435f9ea2179 new head: cb65bb873256e08920206840d8b91b51e6ca073c overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=cb65bb8+%5Ed3144dd ---------------------------------------------------------------------------- cb65bb8: Create dest. folder if it haven't existed. Fixes #8519 That was implemented during completing GCI 2012 task. Signed-off-by: Siarzhuk Zharski <zharik@xxxxxx> [ Przemysław Buczkowski <przemub@xxxxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev44946 Commit: cb65bb873256e08920206840d8b91b51e6ca073c URL: http://cgit.haiku-os.org/haiku/commit/?id=cb65bb8 Author: Przemysław Buczkowski <przemub@xxxxxxxx> Date: Sun Dec 2 12:43:00 2012 UTC Committer: Siarzhuk Zharski <zharik@xxxxxx> Commit-Date: Sun Dec 2 12:43:00 2012 UTC Ticket: https://dev.haiku-os.org/ticket/8519 ---------------------------------------------------------------------------- 1 file changed, 27 insertions(+), 6 deletions(-) src/apps/expander/ExpanderWindow.cpp | 33 ++++++++++++++++++++++++++------ ---------------------------------------------------------------------------- diff --git a/src/apps/expander/ExpanderWindow.cpp b/src/apps/expander/ExpanderWindow.cpp index 9ea6fdc..d667d57 100644 --- a/src/apps/expander/ExpanderWindow.cpp +++ b/src/apps/expander/ExpanderWindow.cpp @@ -150,19 +150,40 @@ ExpanderWindow::ValidateDest() BVolume volume; if (!entry.Exists()) { BAlert* alert = new BAlert("destAlert", - B_TRANSLATE("The destination folder does not exist."), - B_TRANSLATE("Cancel"), NULL, NULL, + B_TRANSLATE("Destination folder doesn't exist, create?"), + B_TRANSLATE("Yes"), B_TRANSLATE("No"), NULL, B_WIDTH_AS_USUAL, B_EVEN_SPACING, B_WARNING_ALERT); - alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE); - alert->Go(); - return false; + alert->SetShortcut(0, B_ESCAPE); + if (alert->Go() == 0) { + if (create_directory(fDestText->Text(), 0755) == B_OK) { + BEntry newEntry(fDestText->Text(), true); + newEntry.GetRef(&fDestRef); + return true; + } else { + BAlert* alert = new BAlert("stopAlert", + B_TRANSLATE("Failed to create the destination folder."), + B_TRANSLATE("Cancel"), NULL, NULL, + B_WIDTH_AS_USUAL, B_EVEN_SPACING, B_WARNING_ALERT); + alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE); + alert->Go(); + return false; + } + } else { + BAlert* alert = new BAlert("stopAlert", + B_TRANSLATE("The extraction operation aborted."), + B_TRANSLATE("Cancel"), NULL, NULL, + B_WIDTH_AS_USUAL, B_EVEN_SPACING, B_WARNING_ALERT); + alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE); + alert->Go(); + return false; + } } else if (!entry.IsDirectory()) { BAlert* alert = new BAlert("destAlert", B_TRANSLATE("The destination is not a folder."), B_TRANSLATE("Cancel"), NULL, NULL, B_WIDTH_AS_USUAL, B_EVEN_SPACING, B_WARNING_ALERT); alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE); - alert->Go(); + alert->Go(); return false; } else if (entry.GetVolume(&volume) != B_OK || volume.IsReadOnly()) { BAlert* alert = new BAlert("destAlert",