Merge pull request 'Revert gtk file dialog change and set default to cancel' (#3137) from 3136 into master
Reviewed-on: https://repo.palemoon.org/MoonchildProductions/UXP/pulls/3137
This commit is contained in:
commit
b2594a4ace
1 file changed
+24
-29
+24
-29
@@ -35,14 +35,6 @@ using namespace mozilla;
|
||||
|
||||
nsIFile *nsFilePicker::mPrevDisplayDirectory = nullptr;
|
||||
|
||||
// Use an application-defined response ID (non-negative) for the accept button
|
||||
// instead of GTK_RESPONSE_ACCEPT (-3). GTK's built-in negative response IDs
|
||||
// cause the button to be treated as the dialog's default widget, meaning it
|
||||
// activates on Enter. A non-negative ID prevents this, so a page that tricks
|
||||
// the user into holding Enter before the dialog appears cannot auto-confirm
|
||||
// an unintended file upload. See bug 2033848 and the equivalent Chrome fix.
|
||||
static const gint kFilePickerAccept = 0;
|
||||
|
||||
void
|
||||
nsFilePicker::Shutdown()
|
||||
{
|
||||
@@ -473,6 +465,10 @@ nsFilePicker::Open(nsIFilePickerShownCallback *aCallback)
|
||||
}
|
||||
}
|
||||
|
||||
if (GTK_IS_DIALOG(file_chooser)) {
|
||||
gtk_dialog_set_default_response(GTK_DIALOG(file_chooser), GTK_RESPONSE_ACCEPT);
|
||||
}
|
||||
|
||||
int32_t count = mFilters.Length();
|
||||
for (int32_t i = 0; i < count; ++i) {
|
||||
// This is fun... the GTK file picker does not accept a list of filters
|
||||
@@ -543,32 +539,31 @@ nsFilePicker::Done(void* file_chooser, gint response)
|
||||
int16_t result;
|
||||
switch (response) {
|
||||
case GTK_RESPONSE_OK:
|
||||
case GTK_RESPONSE_ACCEPT: // emitted by GTK internally on double-click
|
||||
case kFilePickerAccept:
|
||||
ReadValuesFromFileChooser(file_chooser);
|
||||
result = nsIFilePicker::returnOK;
|
||||
if (mMode == nsIFilePicker::modeSave) {
|
||||
nsCOMPtr<nsIFile> file;
|
||||
GetFile(getter_AddRefs(file));
|
||||
if (file) {
|
||||
bool exists = false;
|
||||
file->Exists(&exists);
|
||||
if (exists)
|
||||
result = nsIFilePicker::returnReplace;
|
||||
}
|
||||
case GTK_RESPONSE_ACCEPT:
|
||||
ReadValuesFromFileChooser(file_chooser);
|
||||
result = nsIFilePicker::returnOK;
|
||||
if (mMode == nsIFilePicker::modeSave) {
|
||||
nsCOMPtr<nsIFile> file;
|
||||
GetFile(getter_AddRefs(file));
|
||||
if (file) {
|
||||
bool exists = false;
|
||||
file->Exists(&exists);
|
||||
if (exists)
|
||||
result = nsIFilePicker::returnReplace;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case GTK_RESPONSE_CANCEL:
|
||||
case GTK_RESPONSE_CLOSE:
|
||||
case GTK_RESPONSE_DELETE_EVENT:
|
||||
result = nsIFilePicker::returnCancel;
|
||||
break;
|
||||
result = nsIFilePicker::returnCancel;
|
||||
break;
|
||||
|
||||
default:
|
||||
NS_WARNING("Unexpected response");
|
||||
result = nsIFilePicker::returnCancel;
|
||||
break;
|
||||
NS_WARNING("Unexpected response");
|
||||
result = nsIFilePicker::returnCancel;
|
||||
break;
|
||||
}
|
||||
|
||||
// A "response" signal won't be sent again but "destroy" will be.
|
||||
@@ -629,9 +624,9 @@ nsFilePicker::GtkFileChooserNew(
|
||||
}
|
||||
GtkWidget *file_chooser = gtk_file_chooser_dialog_new(title, parent, action,
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
accept_label, kFilePickerAccept, nullptr);
|
||||
accept_label, GTK_RESPONSE_ACCEPT, nullptr);
|
||||
gtk_dialog_set_alternative_button_order(GTK_DIALOG(file_chooser),
|
||||
kFilePickerAccept, GTK_RESPONSE_CANCEL, -1);
|
||||
GTK_RESPONSE_ACCEPT, GTK_RESPONSE_CANCEL, -1);
|
||||
return file_chooser;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user