mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-27 20:25:44 +00:00
Bug 329854 r=joe.hughes Add a excludeReadOnlyFolders to query options for
use when filing.
This commit is contained in:
parent
59a75b9f67
commit
42c99db36e
@ -831,6 +831,16 @@ interface nsINavHistoryQueryOptions : nsISupports
|
||||
*/
|
||||
attribute boolean excludeQueries;
|
||||
|
||||
/**
|
||||
* Set to true to exclude read-only folders from the query results. This is
|
||||
* designed for cases where you want to give the user the option of filing
|
||||
* something into a list of folders. It only affects cases where the actual
|
||||
* folder result node would appear in its parent folder and filters it out.
|
||||
* It doesn't affect the query at all, and doesn't affect more complex
|
||||
* queries (such as "folders with annotation X").
|
||||
*/
|
||||
attribute boolean excludeReadOnlyFolders;
|
||||
|
||||
/**
|
||||
* When set, allows items with "place:" URIs to appear as containers,
|
||||
* with the container's contents filled in from the stored query.
|
||||
|
@ -1644,6 +1644,15 @@ nsNavBookmarks::QueryFolderChildren(PRInt64 aFolderId,
|
||||
nsCOMPtr<nsNavHistoryResultNode> node;
|
||||
if (isFolder) {
|
||||
PRInt64 folder = mDBGetChildren->AsInt64(kGetChildrenIndex_FolderChild);
|
||||
|
||||
if (options->ExcludeReadOnlyFolders()) {
|
||||
// see if it's read only and skip it
|
||||
PRBool readOnly = PR_FALSE;
|
||||
GetFolderReadonly(folder, &readOnly);
|
||||
if (readOnly)
|
||||
continue; // skip
|
||||
}
|
||||
|
||||
rv = ResultNodeForFolder(folder, aOptions, getter_AddRefs(node));
|
||||
if (NS_FAILED(rv))
|
||||
continue;
|
||||
|
@ -152,6 +152,7 @@ static void SetOptionsKeyUint32(const nsCString& aValue,
|
||||
#define QUERYKEY_RESULT_TYPE "type"
|
||||
#define QUERYKEY_EXCLUDE_ITEMS "excludeItems"
|
||||
#define QUERYKEY_EXCLUDE_QUERIES "excludeQueries"
|
||||
#define QUERYKEY_EXCLUDE_READ_ONLY_FOLDERS "excludeReadOnlyFolders"
|
||||
#define QUERYKEY_EXPAND_QUERIES "expandQueries"
|
||||
#define QUERYKEY_FORCE_ORIGINAL_TITLE "originalTitle"
|
||||
#define QUERYKEY_INCLUDE_HIDDEN "includeHidden"
|
||||
@ -416,6 +417,12 @@ nsNavHistory::QueriesToQueryString(nsINavHistoryQuery **aQueries,
|
||||
aQueryString += NS_LITERAL_CSTRING(QUERYKEY_EXCLUDE_QUERIES "=1");
|
||||
}
|
||||
|
||||
// exclude read only folders
|
||||
if (options->ExcludeReadOnlyFolders()) {
|
||||
AppendAmpersandIfNonempty(aQueryString);
|
||||
aQueryString += NS_LITERAL_CSTRING(QUERYKEY_EXCLUDE_READ_ONLY_FOLDERS "=1");
|
||||
}
|
||||
|
||||
// expand queries
|
||||
if (options->ExpandQueries()) {
|
||||
AppendAmpersandIfNonempty(aQueryString);
|
||||
@ -627,6 +634,11 @@ nsNavHistory::TokensToQueries(const nsTArray<QueryKeyValuePair>& aTokens,
|
||||
SetOptionsKeyBool(kvp.value, aOptions,
|
||||
&nsINavHistoryQueryOptions::SetExcludeQueries);
|
||||
|
||||
// exclude read only folders
|
||||
} else if (kvp.key.EqualsLiteral(QUERYKEY_EXCLUDE_READ_ONLY_FOLDERS)) {
|
||||
SetOptionsKeyBool(kvp.value, aOptions,
|
||||
&nsINavHistoryQueryOptions::SetExcludeReadOnlyFolders);
|
||||
|
||||
// expand queries
|
||||
} else if (kvp.key.EqualsLiteral(QUERYKEY_EXPAND_QUERIES)) {
|
||||
SetOptionsKeyBool(kvp.value, aOptions,
|
||||
@ -1058,6 +1070,20 @@ nsNavHistoryQueryOptions::SetExcludeQueries(PRBool aExclude)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// excludeReadOnlyFolders
|
||||
NS_IMETHODIMP
|
||||
nsNavHistoryQueryOptions::GetExcludeReadOnlyFolders(PRBool* aExclude)
|
||||
{
|
||||
*aExclude = mExcludeReadOnlyFolders;
|
||||
return NS_OK;
|
||||
}
|
||||
NS_IMETHODIMP
|
||||
nsNavHistoryQueryOptions::SetExcludeReadOnlyFolders(PRBool aExclude)
|
||||
{
|
||||
mExcludeReadOnlyFolders = aExclude;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// expandQueries
|
||||
NS_IMETHODIMP
|
||||
nsNavHistoryQueryOptions::GetExpandQueries(PRBool* aExpand)
|
||||
|
@ -117,6 +117,7 @@ public:
|
||||
mGroupCount(0), mGroupings(nsnull),
|
||||
mExcludeItems(PR_FALSE),
|
||||
mExcludeQueries(PR_FALSE),
|
||||
mExcludeReadOnlyFolders(PR_FALSE),
|
||||
mExpandQueries(PR_FALSE),
|
||||
mForceOriginalTitle(PR_FALSE),
|
||||
mIncludeHidden(PR_FALSE),
|
||||
@ -139,6 +140,7 @@ public:
|
||||
}
|
||||
PRBool ExcludeItems() const { return mExcludeItems; }
|
||||
PRBool ExcludeQueries() const { return mExcludeQueries; }
|
||||
PRBool ExcludeReadOnlyFolders() const { return mExcludeReadOnlyFolders; }
|
||||
PRBool ExpandQueries() const { return mExpandQueries; }
|
||||
PRBool ForceOriginalTitle() const { return mForceOriginalTitle; }
|
||||
PRBool IncludeHidden() const { return mIncludeHidden; }
|
||||
@ -163,6 +165,7 @@ private:
|
||||
PRUint32 *mGroupings;
|
||||
PRBool mExcludeItems;
|
||||
PRBool mExcludeQueries;
|
||||
PRBool mExcludeReadOnlyFolders;
|
||||
PRBool mExpandQueries;
|
||||
PRBool mForceOriginalTitle;
|
||||
PRBool mIncludeHidden;
|
||||
|
@ -2637,7 +2637,8 @@ nsNavHistoryFolderResultNode::StartIncrementalUpdate()
|
||||
{
|
||||
// if any items are excluded, we can not do incremental updates since the
|
||||
// indices from the bookmark service will not be valid
|
||||
if (! mOptions->ExcludeItems() && ! mOptions->ExcludeQueries()) {
|
||||
if (! mOptions->ExcludeItems() && ! mOptions->ExcludeQueries() &&
|
||||
! mOptions->ExcludeReadOnlyFolders()) {
|
||||
|
||||
// easy case: we are visible, always do incremental update
|
||||
if (mExpanded || AreChildrenVisible())
|
||||
|
Loading…
Reference in New Issue
Block a user