mirror of
https://github.com/roytam1/basilisk55.git
synced 2026-05-29 16:10:41 +00:00
ported from UXP: [widget] Require user interaction when picking files or folders v2 (d867f26c)
This commit is contained in:
@@ -166,7 +166,8 @@ nsBaseFilePicker::~nsBaseFilePicker()
|
||||
|
||||
NS_IMETHODIMP nsBaseFilePicker::Init(mozIDOMWindowProxy* aParent,
|
||||
const nsAString& aTitle,
|
||||
int16_t aMode)
|
||||
int16_t aMode,
|
||||
bool aRequireInteraction)
|
||||
{
|
||||
NS_PRECONDITION(aParent, "Null parent passed to filepicker, no file "
|
||||
"picker for you!");
|
||||
|
||||
@@ -25,7 +25,8 @@ public:
|
||||
|
||||
NS_IMETHOD Init(mozIDOMWindowProxy* aParent,
|
||||
const nsAString& aTitle,
|
||||
int16_t aMode);
|
||||
int16_t aMode,
|
||||
bool aRequireInteraction = false);
|
||||
|
||||
NS_IMETHOD Open(nsIFilePickerShownCallback *aCallback);
|
||||
NS_IMETHOD AppendFilters(int32_t filterMask);
|
||||
|
||||
@@ -27,7 +27,7 @@ nsFilePickerProxy::~nsFilePickerProxy()
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFilePickerProxy::Init(mozIDOMWindowProxy* aParent, const nsAString& aTitle,
|
||||
int16_t aMode)
|
||||
int16_t aMode, bool aRequireInteraction)
|
||||
{
|
||||
TabChild* tabChild = TabChild::GetFrom(aParent);
|
||||
if (!tabChild) {
|
||||
|
||||
@@ -34,7 +34,7 @@ public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
// nsIFilePicker (less what's in nsBaseFilePicker)
|
||||
NS_IMETHOD Init(mozIDOMWindowProxy* aParent, const nsAString& aTitle, int16_t aMode) override;
|
||||
NS_IMETHOD Init(mozIDOMWindowProxy* aParent, const nsAString& aTitle, int16_t aMode, bool aRequireInteraction = false) override;
|
||||
NS_IMETHOD AppendFilter(const nsAString& aTitle, const nsAString& aFilter) override;
|
||||
NS_IMETHOD GetDefaultString(nsAString& aDefaultString) override;
|
||||
NS_IMETHOD SetDefaultString(const nsAString& aDefaultString) override;
|
||||
|
||||
@@ -66,9 +66,12 @@ interface nsIFilePicker : nsISupports
|
||||
* on this parent. parent must be non-null.
|
||||
* @param title The title for the file widget
|
||||
* @param mode load, save, or get folder
|
||||
* @param requireinteraction (optional)
|
||||
* require interaction before confirmation is possible
|
||||
*
|
||||
*/
|
||||
void init(in mozIDOMWindowProxy parent, in AString title, in short mode);
|
||||
void init(in mozIDOMWindowProxy parent, in AString title, in short mode,
|
||||
[optional] in boolean requireinteraction);
|
||||
|
||||
/**
|
||||
* Append to the filter list with things from the predefined list
|
||||
|
||||
@@ -30,11 +30,16 @@
|
||||
|
||||
using mozilla::IsVistaOrLater;
|
||||
using mozilla::IsWin8OrLater;
|
||||
using mozilla::IsWin10OrLater;
|
||||
using mozilla::MakeUnique;
|
||||
using mozilla::mscom::EnsureMTA;
|
||||
using mozilla::UniquePtr;
|
||||
using namespace mozilla::widget;
|
||||
|
||||
#ifndef FOS_OKBUTTONNEEDSINTERACTION
|
||||
#define FOS_OKBUTTONNEEDSINTERACTION 0x00200000
|
||||
#endif
|
||||
|
||||
char16_t *nsFilePicker::mLastUsedUnicodeDirectory;
|
||||
char nsFilePicker::mLastUsedDirectory[MAX_PATH+1] = { 0 };
|
||||
|
||||
@@ -194,11 +199,13 @@ nsFilePicker::~nsFilePicker()
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsFilePicker, nsIFilePicker)
|
||||
|
||||
NS_IMETHODIMP nsFilePicker::Init(mozIDOMWindowProxy *aParent, const nsAString& aTitle, int16_t aMode)
|
||||
NS_IMETHODIMP nsFilePicker::Init(mozIDOMWindowProxy *aParent, const nsAString& aTitle, int16_t aMode,
|
||||
bool aRequireInteraction)
|
||||
{
|
||||
nsCOMPtr<nsPIDOMWindowOuter> window = do_QueryInterface(aParent);
|
||||
nsIDocShell* docShell = window ? window->GetDocShell() : nullptr;
|
||||
mLoadContext = do_QueryInterface(docShell);
|
||||
mRequireInteraction = aRequireInteraction;
|
||||
|
||||
return nsBaseFilePicker::Init(aParent, aTitle, aMode);
|
||||
}
|
||||
@@ -603,6 +610,13 @@ nsFilePicker::ShowFolderPicker(const nsString& aInitialDir, bool &aWasInitError)
|
||||
|
||||
// options
|
||||
FILEOPENDIALOGOPTIONS fos = FOS_PICKFOLDERS;
|
||||
// Require interaction if the folder picker is triggered by an element that
|
||||
// is potentially unsafe to use the default value in.
|
||||
// Win 10+ only, because this dialog flag is broken in earlier versions.
|
||||
if (IsWin10OrLater() && mRequireInteraction) {
|
||||
fos |= FOS_OKBUTTONNEEDSINTERACTION;
|
||||
}
|
||||
|
||||
dialog->SetOptions(fos);
|
||||
|
||||
// initial strings
|
||||
@@ -923,6 +937,13 @@ nsFilePicker::ShowFilePicker(const nsString& aInitialDir, bool &aWasInitError)
|
||||
FILEOPENDIALOGOPTIONS fos = 0;
|
||||
fos |= FOS_SHAREAWARE | FOS_OVERWRITEPROMPT |
|
||||
FOS_FORCEFILESYSTEM;
|
||||
|
||||
// Require interaction if the file picker is triggered by an element that
|
||||
// is potentially unsafe to use the default value in.
|
||||
// Win 10+ only, because this dialog flag is broken in earlier versions.
|
||||
if (IsWin10OrLater() && mRequireInteraction) {
|
||||
fos |= FOS_OKBUTTONNEEDSINTERACTION;
|
||||
}
|
||||
|
||||
// Handle add to recent docs settings
|
||||
if (IsPrivacyModeEnabled() || !mAddToRecentDocs) {
|
||||
|
||||
@@ -60,7 +60,8 @@ class nsFilePicker :
|
||||
public:
|
||||
nsFilePicker();
|
||||
|
||||
NS_IMETHOD Init(mozIDOMWindowProxy *aParent, const nsAString& aTitle, int16_t aMode);
|
||||
NS_IMETHOD Init(mozIDOMWindowProxy *aParent, const nsAString& aTitle, int16_t aMode,
|
||||
bool aRequireInteraction = false);
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
@@ -125,6 +126,7 @@ protected:
|
||||
nsString mUnicodeFile;
|
||||
static char16_t *mLastUsedUnicodeDirectory;
|
||||
HWND mDlgWnd;
|
||||
bool mRequireInteraction;
|
||||
|
||||
class ComDlgFilterSpec
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user