DXR will be turned off on Tuesday, December 29th. It will redirect to Searchfox.
See the announcement on Discourse.

DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (c68fe15a81fc)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
/* -*- 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
/* 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
#define mozilla_TextInputListener_h

#include "mozilla/WeakPtr.h"
#include "nsCycleCollectionParticipant.h"
#include "nsIDOMEventListener.h"
#include "nsStringFwd.h"
#include "nsStringFwd.h"
#include "nsWeakReference.h"

class nsIFrame;
class nsTextControlFrame;
class nsTextControlFrame;

namespace mozilla {
class TextControlElement;
class TextControlState;


namespace dom {
class Selection;
}  // namespace dom

class TextInputListener final : public nsIDOMEventListener,
class TextInputListener final : public nsIDOMEventListener,
                                public nsSupportsWeakReference {
 public:
  explicit TextInputListener(TextControlElement* aTextControlElement);

  void SetFrame(nsIFrame* aTextControlFrame) { mFrame = aTextControlFrame; }
  void SetFrame(nsIFrame* aTextControlFrame) { mFrame = aTextControlFrame; }
  void SettingValue(bool aValue) { mSettingValue = aValue; }
  void SetValueChanged(bool aSetValueChanged) {
  void SetValueChanged(bool aSetValueChanged) {
    mSetValueChanged = aSetValueChanged;
  }

  /**
   * aFrame is an optional pointer to our frame, if not passed the method will
   * 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.
   */
  MOZ_CAN_RUN_SCRIPT MOZ_MUST_USE nsresult
  OnEditActionHandled(TextEditor& aTextEditor);


  /**
   * OnSelectionChange() is called when selection is changed in the editor.
   */
  MOZ_CAN_RUN_SCRIPT
  void OnSelectionChange(dom::Selection& aSelection, int16_t aReason);
  void OnSelectionChange(dom::Selection& aSelection, int16_t aReason);

  /**
   * Start to listen or end listening to selection change in the editor.
   */
  void StartToListenToSelectionChange() { mListeningToSelectionChange = true; }
  void StartToListenToSelectionChange() { mListeningToSelectionChange = true; }
  void EndListeningToSelectionChange() { mListeningToSelectionChange = false; }

  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
  NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(TextInputListener,
                                           nsIDOMEventListener)
                                           nsIDOMEventListener)
  NS_DECL_NSIDOMEVENTLISTENER

 protected:
  virtual ~TextInputListener() = default;

  nsresult UpdateTextInputCommands(const nsAString& aCommandsToUpdate,
                                   dom::Selection* aSelection = nullptr,
                                   dom::Selection* aSelection = nullptr,
                                   int16_t aReason = 0);


 protected:
  nsIFrame* mFrame;
  TextControlElement* const mTxtCtrlElement;
  WeakPtr<TextControlState> const mTextControlState;


  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)
   * 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;
  bool mHadRedoItems;
  /**
   * Whether we're in the process of a SetValue call, and should therefore
   * refrain from calling OnValueChanged.
   */
  bool mSettingValue;
  bool mSettingValue;
  /**
   * Whether we are in the process of a SetValue call that doesn't want
   * |SetValueChanged| to be called.
   */
  bool mSetValueChanged;
  bool mSetValueChanged;
  /**
   * Whether we're listening to selection change in the editor.
   */
  bool mListeningToSelectionChange;
};
};

}  // namespace mozilla

#endif  // #ifndef mozilla_TextInputListener_h