forked from mirrors/gecko-dev
This patch makes EditorBase derived from nsISelectionListener. Then, we can make IMEContentObserver, TextInputListener, ComposerCommandsUpdater, TypeInState not derived from nsISelectionListener since EditorBase or HTMLEditor can notify them of selection change directly. Additionally, ResizerSelectionListener is not necessary anymore since it just implements nsISelectionListener and calls only a method of HTMLEditor. So, HTMLEditor can call it directly. Note that the order of selection listeners may be different. However, according to what each selection listener does, changing the order isn't problem. MozReview-Commit-ID: 1JXZxQcS0tP --HG-- extra : rebase_source : c2ebe622a74001ad4e421da492dcdab8e6fe1649
115 lines
3.2 KiB
C++
115 lines
3.2 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* 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/. */
|
|
|
|
#ifndef mozilla_TextInputListener_h
|
|
#define mozilla_TextInputListener_h
|
|
|
|
#include "nsCycleCollectionParticipant.h"
|
|
#include "nsIDOMEventListener.h"
|
|
#include "nsStringFwd.h"
|
|
#include "nsWeakReference.h"
|
|
|
|
class nsIFrame;
|
|
class nsISelection;
|
|
class nsITextControlElement;
|
|
class nsTextControlFrame;
|
|
|
|
namespace mozilla {
|
|
|
|
class TextInputListener final : public nsIDOMEventListener
|
|
, public nsSupportsWeakReference
|
|
{
|
|
public:
|
|
explicit TextInputListener(nsITextControlElement* aTextControlElement);
|
|
|
|
void SetFrame(nsIFrame* aTextControlFrame)
|
|
{
|
|
mFrame = aTextControlFrame;
|
|
}
|
|
void SettingValue(bool aValue)
|
|
{
|
|
mSettingValue = aValue;
|
|
}
|
|
void SetValueChanged(bool aSetValueChanged)
|
|
{
|
|
mSetValueChanged = aSetValueChanged;
|
|
}
|
|
|
|
/**
|
|
* aFrame is an optional pointer to our frame, if not passed the method will
|
|
* use mFrame to compute it lazily.
|
|
*/
|
|
void HandleValueChanged(nsTextControlFrame* aFrame = nullptr);
|
|
|
|
/**
|
|
* OnEditActionHandled() is called when the editor handles each edit action.
|
|
*/
|
|
void OnEditActionHandled();
|
|
|
|
/**
|
|
* OnSelectionChange() is called when selection is changed in the editor.
|
|
*/
|
|
void OnSelectionChange(Selection& aSelection, int16_t aReason);
|
|
|
|
/**
|
|
* Start to listen or end listening to selection change in the editor.
|
|
*/
|
|
void StartToListenToSelectionChange()
|
|
{
|
|
mListeningToSelectionChange = true;
|
|
}
|
|
void EndListeningToSelectionChange()
|
|
{
|
|
mListeningToSelectionChange = false;
|
|
}
|
|
|
|
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
|
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(TextInputListener,
|
|
nsIDOMEventListener)
|
|
NS_DECL_NSIDOMEVENTLISTENER
|
|
|
|
protected:
|
|
virtual ~TextInputListener() = default;
|
|
|
|
nsresult UpdateTextInputCommands(const nsAString& aCommandsToUpdate,
|
|
nsISelection* aSelection = nullptr,
|
|
int16_t aReason = 0);
|
|
|
|
protected:
|
|
nsIFrame* mFrame;
|
|
nsITextControlElement* const mTxtCtrlElement;
|
|
|
|
bool mSelectionWasCollapsed;
|
|
|
|
/**
|
|
* Whether we had undo items or not the last time we got EditAction()
|
|
* notification (when this state changes we update undo and redo menus)
|
|
*/
|
|
bool mHadUndoItems;
|
|
/**
|
|
* Whether we had redo items or not the last time we got EditAction()
|
|
* notification (when this state changes we update undo and redo menus)
|
|
*/
|
|
bool mHadRedoItems;
|
|
/**
|
|
* Whether we're in the process of a SetValue call, and should therefore
|
|
* refrain from calling OnValueChanged.
|
|
*/
|
|
bool mSettingValue;
|
|
/**
|
|
* Whether we are in the process of a SetValue call that doesn't want
|
|
* |SetValueChanged| to be called.
|
|
*/
|
|
bool mSetValueChanged;
|
|
/**
|
|
* Whether we're listening to selection change in the editor.
|
|
*/
|
|
bool mListeningToSelectionChange;
|
|
};
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif // #ifndef mozilla_TextInputListener_h
|