diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /toolkit/components/typeaheadfind/nsTypeAheadFind.h | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | toolkit/components/typeaheadfind/nsTypeAheadFind.h | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/toolkit/components/typeaheadfind/nsTypeAheadFind.h b/toolkit/components/typeaheadfind/nsTypeAheadFind.h new file mode 100644 index 0000000000..ed0a4c1c2c --- /dev/null +++ b/toolkit/components/typeaheadfind/nsTypeAheadFind.h @@ -0,0 +1,142 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/WeakPtr.h" +#include "nsComponentManagerUtils.h" +#include "nsCycleCollectionParticipant.h" +#include "nsISelectionController.h" +#include "nsIDocShell.h" +#include "nsIObserver.h" +#include "nsIFind.h" +#include "nsIWebBrowserFind.h" +#include "nsWeakReference.h" +#include "nsITypeAheadFind.h" + +class nsPIDOMWindowInner; +class nsPresContext; +class nsRange; + +namespace mozilla { +class PresShell; +namespace dom { +class Document; +class Element; +class Selection; +} // namespace dom +} // namespace mozilla + +#define TYPEAHEADFIND_NOTFOUND_WAV_URL "chrome://global/content/notfound.wav" + +class nsTypeAheadFind : public nsITypeAheadFind, + public nsIObserver, + public nsSupportsWeakReference { + public: + nsTypeAheadFind(); + + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_NSITYPEAHEADFIND + NS_DECL_NSIOBSERVER + + NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsTypeAheadFind, nsITypeAheadFind) + + protected: + virtual ~nsTypeAheadFind(); + + nsresult PrefsReset(); + + void SaveFind(); + void PlayNotFoundSound(); + nsresult GetWebBrowserFind(nsIDocShell* aDocShell, + nsIWebBrowserFind** aWebBrowserFind); + + MOZ_CAN_RUN_SCRIPT nsresult FindInternal(uint32_t aMode, + const nsAString& aSearchString, + bool aLinksOnly, + bool aDontIterateFrames, + uint16_t* aResult); + + void RangeStartsInsideLink(nsRange* aRange, bool* aIsInsideLink, + bool* aIsStartingLink); + + void GetSelection(mozilla::PresShell* aPresShell, + nsISelectionController** aSelCon, + mozilla::dom::Selection** aDomSel); + bool IsRangeVisible(nsRange* aRange, bool aMustBeVisible, + bool aGetTopVisibleLeaf, bool* aUsesIndependentSelection); + bool IsRangeRendered(nsRange* aRange); + MOZ_CAN_RUN_SCRIPT_BOUNDARY + nsresult FindItNow(uint32_t aMode, bool aIsLinksOnly, + bool aIsFirstVisiblePreferred, bool aDontIterateFrames, + uint16_t* aResult); + nsresult GetSearchContainers(nsISupports* aContainer, + nsISelectionController* aSelectionController, + bool aIsFirstVisiblePreferred, bool aFindPrev, + mozilla::PresShell** aPresShell, + nsPresContext** aPresContext); + + // Get the document we should search on. + already_AddRefed<mozilla::dom::Document> GetDocument(); + + void ReleaseStrongMemberVariables(); + + // Current find state + nsString mTypeAheadBuffer; + nsCString mNotFoundSoundURL; + + // PRBools are used instead of PRPackedBools because the address of the + // boolean variable is getting passed into a method. + bool mStartLinksOnlyPref; + bool mCaretBrowsingOn; + bool mDidAddObservers; + nsCOMPtr<mozilla::dom::Element> + mFoundLink; // Most recent elem found, if a link + nsCOMPtr<mozilla::dom::Element> + mFoundEditable; // Most recent elem found, if editable + RefPtr<nsRange> mFoundRange; // Most recent range found + nsCOMPtr<nsPIDOMWindowInner> mCurrentWindow; + // mLastFindLength is the character length of the last find string. It is + // used for disabling the "not found" sound when using backspace or delete + uint32_t mLastFindLength; + + // where selection was when user started the find + RefPtr<nsRange> mStartFindRange; + RefPtr<nsRange> mSearchRange; + RefPtr<nsRange> mStartPointRange; + RefPtr<nsRange> mEndPointRange; + + // Cached useful interfaces + nsCOMPtr<nsIFind> mFind; + + bool mCaseSensitive; + bool mEntireWord; + bool mMatchDiacritics; + + bool EnsureFind() { + if (mFind) { + return true; + } + + mFind = do_CreateInstance("@mozilla.org/embedcomp/rangefind;1"); + if (!mFind) { + return false; + } + + mFind->SetCaseSensitive(mCaseSensitive); + mFind->SetEntireWord(mEntireWord); + mFind->SetMatchDiacritics(mMatchDiacritics); + + return true; + } + + nsCOMPtr<nsIWebBrowserFind> mWebBrowserFind; + + // The focused content window that we're listening to and its cached objects. + // This is always the root of the subtree we're finding. + nsWeakPtr mDocShell; + // The document where we're currently searching. + mozilla::WeakPtr<mozilla::dom::Document> mDocument; + nsWeakPtr mSelectionController; + // Most recent match's controller +}; |