Ask confirmation in case the application would try to overwrite an existing file.

This is fixing ticket #3815.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30390 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Philippe Saint-Pierre
2009-04-24 23:48:16 +00:00
parent 5c8e597e90
commit bb6301b264
2 changed files with 35 additions and 14 deletions
+34 -13
View File
@@ -8,6 +8,7 @@
#include "PNGDump.h"
#include <Alert.h>
#include <Application.h>
#include <Bitmap.h>
#include <Box.h>
@@ -192,7 +193,8 @@ ScreenshotWindow::MessageReceived(BMessage* message)
case kFinishScreenshot:
_WriteSettings();
_SaveScreenshot();
if (_SaveScreenshot() != B_OK)
break;
// fall through
case B_QUIT_REQUESTED:
@@ -682,23 +684,41 @@ ScreenshotWindow::_GetActiveWindowFrame(BRect* frame)
}
void
status_t
ScreenshotWindow::_SaveScreenshot()
{
if (!fScreenshot || !fLastSelectedPath)
return;
return B_ERROR;
const char* path;
const char* _path;
BMessage* message = fLastSelectedPath->Message();
if (!message || message->FindString("path", &path) != B_OK)
return;
if (!message || message->FindString("path", &_path) != B_OK)
return B_ERROR;
BDirectory dir(path);
BFile file(&dir, fNameControl->Text(), B_CREATE_FILE |
B_ERASE_FILE | B_WRITE_ONLY);
if (file.InitCheck() != B_OK)
return;
BEntry entry;
BPath path;
path = _path;
path.Append(fNameControl->Text());
entry.SetTo(path.Path());
if (entry.Exists()) {
BAlert *myAlert = new BAlert("overwrite", "This file already exists.\n"
"Are you sure would you like to overwrite it?",
"Cancel", "Overwrite", NULL,
B_WIDTH_AS_USUAL, B_EVEN_SPACING, B_WARNING_ALERT);
myAlert->SetShortcut(0, B_ESCAPE);
int32 button_index = myAlert->Go();
if (button_index == 0) {
return B_CANCELED;
}
}
BFile file(&entry, B_CREATE_FILE | B_ERASE_FILE | B_WRITE_ONLY);
if (file.InitCheck() != B_OK) {
return B_ERROR;
}
BBitmapStream bitmapStream(fScreenshot);
BTranslatorRoster* roster = BTranslatorRoster::Default();
roster->Translate(&bitmapStream, NULL, NULL, &file, fImageFileType,
@@ -707,12 +727,12 @@ ScreenshotWindow::_SaveScreenshot()
BNodeInfo nodeInfo(&file);
if (nodeInfo.InitCheck() != B_OK)
return;
return B_ERROR;
int32 numFormats;
const translation_format* formats = NULL;
if (roster->GetOutputFormats(fTranslator, &formats, &numFormats) != B_OK)
return;
return B_OK;
for (int32 i = 0; i < numFormats; ++i) {
if (formats[i].type == uint32(fImageFileType)) {
@@ -720,6 +740,7 @@ ScreenshotWindow::_SaveScreenshot()
break;
}
}
return B_OK;
}
+1 -1
View File
@@ -53,7 +53,7 @@ private:
void _TakeScreenshot();
status_t _GetActiveWindowFrame(BRect* frame);
void _SaveScreenshot();
status_t _SaveScreenshot();
void _SaveScreenshotSilent() const;
private: