зеркало из https://github.com/mozilla/gecko-dev.git
Bug 426177 - Alert user when selecting unreadable input file r=emilio
The change is done at the nsFilePicker level, when it's in open mode. Differential Revision: https://phabricator.services.mozilla.com/D166419
This commit is contained in:
Родитель
7f1075b129
Коммит
92df009ab9
|
@ -15,3 +15,4 @@ audioTitle=Audio Files
|
|||
videoTitle=Video Files
|
||||
|
||||
formatLabel=Format:
|
||||
selectedFileNotReadableError=Selected file does not have read permission
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
#include "nsIURI.h"
|
||||
#include "nsIWidget.h"
|
||||
#include "nsIFile.h"
|
||||
#include "nsIStringBundle.h"
|
||||
#include "mozilla/Components.h"
|
||||
#include "mozilla/Preferences.h"
|
||||
|
||||
#include "nsArrayEnumerator.h"
|
||||
|
@ -511,6 +513,50 @@ void nsFilePicker::OnDestroy(GtkWidget* file_chooser, gpointer user_data) {
|
|||
GTK_RESPONSE_CANCEL);
|
||||
}
|
||||
|
||||
bool nsFilePicker::WarnForNonReadableFile(void* file_chooser) {
|
||||
nsCOMPtr<nsIFile> file;
|
||||
GetFile(getter_AddRefs(file));
|
||||
if (!file) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool isReadable = false;
|
||||
file->IsReadable(&isReadable);
|
||||
if (isReadable) {
|
||||
return false;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIStringBundleService> stringService =
|
||||
mozilla::components::StringBundle::Service();
|
||||
if (!stringService) {
|
||||
return false;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIStringBundle> filepickerBundle;
|
||||
nsresult rv = stringService->CreateBundle(
|
||||
"chrome://global/locale/filepicker.properties",
|
||||
getter_AddRefs(filepickerBundle));
|
||||
if (NS_FAILED(rv)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
nsAutoString errorMessage;
|
||||
rv = filepickerBundle->GetStringFromName("selectedFileNotReadableError",
|
||||
errorMessage);
|
||||
if (NS_FAILED(rv)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
GtkDialogFlags flags = GTK_DIALOG_DESTROY_WITH_PARENT;
|
||||
auto* cancel_dialog = gtk_message_dialog_new(
|
||||
GTK_WINDOW(file_chooser), flags, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
|
||||
"%s", NS_ConvertUTF16toUTF8(errorMessage).get());
|
||||
gtk_dialog_run(GTK_DIALOG(cancel_dialog));
|
||||
gtk_widget_destroy(cancel_dialog);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void nsFilePicker::Done(void* file_chooser, gint response) {
|
||||
mRunning = false;
|
||||
|
||||
|
@ -528,6 +574,10 @@ void nsFilePicker::Done(void* file_chooser, gint response) {
|
|||
file->Exists(&exists);
|
||||
if (exists) result = nsIFilePicker::returnReplace;
|
||||
}
|
||||
} else if (mMode == nsIFilePicker::modeOpen) {
|
||||
if (WarnForNonReadableFile(file_chooser)) {
|
||||
result = nsIFilePicker::returnCancel;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -48,6 +48,8 @@ class nsFilePicker : public nsBaseFilePicker {
|
|||
nsresult Show(int16_t* aReturn) override;
|
||||
void ReadValuesFromFileChooser(void* file_chooser);
|
||||
|
||||
bool WarnForNonReadableFile(void* file_chooser);
|
||||
|
||||
static void OnResponse(void* file_chooser, gint response_id,
|
||||
gpointer user_data);
|
||||
static void OnDestroy(GtkWidget* file_chooser, gpointer user_data);
|
||||
|
|
Загрузка…
Ссылка в новой задаче