mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:30:27 +00:00
75dd89485e
- Bug 1176414 - Clean up/rename various column index variables in nsTableRowFrame and nsTableFrame. r=dholbert (d8e33d549) - Bug 1176105 - Remove the (largely gutted) nsTableIterator class, and replace with simple frame-list iteration. r=dholbert (46a15df19) - Bug 1176555 - Replace explicit bit-twiddling of frame state flags by human-readable nsIFrame state-manipulation methods in table layout code. r=dholbert (aef9fb035) - Bug 1176354 - Rename nsTableRowFrame::GetBSize to differentiate better from nsIFrame::BSize. r=dholbert (9b67203a0) - Bug 1177600 - Properly adjust table row and cell positions when their containing block-size changes in vertical-rl writing mode. r=dholbert (413148d55) - Bug 1177925: Use range-based for loops for nsFrameList iteration, in various places in layout. r=tn (6db450285) - Bug 1148582 - Recycle mask layers attached to FrameMetrics. r=mattwoodrow (91360fbd8) - Bug 1148582 - Apply async transforms to (ancestor) mask layers correctly. r=botond (d6fca66fb) - Bug 1143575. Add some #includes to avoid unified-build issues on Windows. r=nical (ff78b76a3) - Bug 1143575. Add some #includes to avoid more unified-build issues on Windows. r=nical (99e0548f4) - Bug 1181832 - Keep gfxPrefs.h out of header files. r=kats (341f0aea0) - Bug 1181832 - Include gfxPrefs.h from nsImageLoadingContet.cpp to fix bustage on a CLOSED TREE. r=bustage (d61a18ab9) - Bug 1137557 - Part 0: TextEventDispatcher shouldn't forward keyboard events coming from TextInputProcessor to the parent process. r=smaug (87f70fcc4) - Bug 1172405 - Fix build error when adding files to dom/workers and gfx/layers. r=nical (8e114b8bb) - Bug 1061393 - Export display list info to layer scope viewer. r=kamidphish (60fd247f0) - Bug 1072313 - Check for more leaks in the layers code. r=mstange (aacbb2e1c) - Bug 1198979 - GC unused IPDL struct member. r=jmuizelaar (79c3113fb) - add missing semicolon (17ba58b45) - Bug 1153348 - Add an analysis to prohibit operator bools which aren't marked as either explicit or MOZ_IMPLICIT; r=jrmuizel (903dca970) - Bug 1170388 - Restrict the static analysis error given about raw pointers to refcounted objects inside a lambda, to the case where the raw pointer is captured. r=ehsan (cbbd3174c) - Bug 1180993 - Part 1: Add an analysis to help catch unused return values of specific types. r=ehsan (2420face4) - Bug 1180993 - Part 2: Add the MOZ_MUST_USE attribute to mfbt, and use it to verify usage of already_AddRefed. r=ehsan (b72785a60) - Bug 1123907 - Part 1: Add an analysis to ensure that a class marked MOZ_NEEDS_NO_VTABLE_TYPE cannot be instantiated by a class with a VTable; r=ehsan (0f5730c04) - Bug 1123907 - Part 2: Add MOZ_NEEDS_NO_VTABLE_TYPE to Attributes.h, and use it to verify the EntryType argument of nsTHashtable; r=ehsan (2e80fc581) - Bug 1159433 - Part 1: Add an analysis to ensure that some template arguments cannot be non-memmovable types; r=ehsan (3602e950f) - uniform MOZ_MUST_USE, it will be renamed in patch 1267550 (3b5ebd4c5) - add missing part of Bug 1187073 - Use MOZ_INHERIT_TYPE_ANNOTATIONS_FROM_TEMPLATE_ARGS to validate the usage of AlignedStorage2. r=ehsan (3b451bfb7) - Bug 1159433 - Part 2: Add the MOZ_NON_MEMMOVABLE and MOZ_NEEDS_MEMMOVABLE_TYPE macros to MFBT; r=froydnj (171c23ec4) - Bug 1159433 - Part 3: Make nsTArray_CopyChooser only accept memmovable argument types by default; r=froydnj (40cb4aa67) - Bug 1159433 - Part 4: Mark nsTAutoString_CharT and nsAutoArrayBase as non-memmovable; r=froydnj (7dc6bd220)
188 lines
6.0 KiB
C++
188 lines
6.0 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_dom_textinputprocessor_h_
|
|
#define mozilla_dom_textinputprocessor_h_
|
|
|
|
#include "mozilla/Attributes.h"
|
|
#include "mozilla/EventForwards.h"
|
|
#include "mozilla/TextEventDispatcher.h"
|
|
#include "mozilla/TextEventDispatcherListener.h"
|
|
#include "nsAutoPtr.h"
|
|
#include "nsITextInputProcessor.h"
|
|
#include "nsITextInputProcessorCallback.h"
|
|
#include "nsTArray.h"
|
|
|
|
namespace mozilla {
|
|
|
|
class TextInputProcessor final : public nsITextInputProcessor
|
|
, public widget::TextEventDispatcherListener
|
|
{
|
|
typedef mozilla::widget::IMENotification IMENotification;
|
|
typedef mozilla::widget::TextEventDispatcher TextEventDispatcher;
|
|
|
|
public:
|
|
TextInputProcessor();
|
|
|
|
NS_DECL_ISUPPORTS
|
|
NS_DECL_NSITEXTINPUTPROCESSOR
|
|
|
|
// TextEventDispatcherListener
|
|
NS_IMETHOD NotifyIME(TextEventDispatcher* aTextEventDispatcher,
|
|
const IMENotification& aNotification) override;
|
|
NS_IMETHOD_(void)
|
|
OnRemovedFrom(TextEventDispatcher* aTextEventDispatcher) override;
|
|
|
|
protected:
|
|
virtual ~TextInputProcessor();
|
|
|
|
private:
|
|
bool IsComposing() const;
|
|
nsresult BeginInputTransactionInternal(
|
|
nsIDOMWindow* aWindow,
|
|
nsITextInputProcessorCallback* aCallback,
|
|
bool aForTests,
|
|
bool& aSucceeded);
|
|
nsresult CommitCompositionInternal(
|
|
const WidgetKeyboardEvent* aKeyboardEvent = nullptr,
|
|
uint32_t aKeyFlags = 0,
|
|
const nsAString* aCommitString = nullptr,
|
|
bool* aSucceeded = nullptr);
|
|
nsresult CancelCompositionInternal(
|
|
const WidgetKeyboardEvent* aKeyboardEvent = nullptr,
|
|
uint32_t aKeyFlags = 0);
|
|
nsresult KeydownInternal(const WidgetKeyboardEvent& aKeyboardEvent,
|
|
uint32_t aKeyFlags,
|
|
bool aAllowToDispatchKeypress,
|
|
bool& aDoDefault);
|
|
nsresult KeyupInternal(const WidgetKeyboardEvent& aKeyboardEvent,
|
|
uint32_t aKeyFlags,
|
|
bool& aDoDefault);
|
|
TextEventDispatcher::DispatchTo GetDispatchTo() const;
|
|
nsresult IsValidStateForComposition();
|
|
void UnlinkFromTextEventDispatcher();
|
|
nsresult PrepareKeyboardEventToDispatch(WidgetKeyboardEvent& aKeyboardEvent,
|
|
uint32_t aKeyFlags);
|
|
bool IsValidEventTypeForComposition(
|
|
const WidgetKeyboardEvent& aKeyboardEvent) const;
|
|
nsresult PrepareKeyboardEventForComposition(
|
|
nsIDOMKeyEvent* aDOMKeyEvent,
|
|
uint32_t& aKeyFlags,
|
|
uint8_t aOptionalArgc,
|
|
WidgetKeyboardEvent*& aKeyboardEvent);
|
|
|
|
struct EventDispatcherResult
|
|
{
|
|
nsresult mResult;
|
|
bool mDoDefault;
|
|
bool mCanContinue;
|
|
|
|
EventDispatcherResult()
|
|
: mResult(NS_OK)
|
|
, mDoDefault(true)
|
|
, mCanContinue(true)
|
|
{
|
|
}
|
|
};
|
|
EventDispatcherResult MaybeDispatchKeydownForComposition(
|
|
const WidgetKeyboardEvent* aKeyboardEvent,
|
|
uint32_t aKeyFlags);
|
|
EventDispatcherResult MaybeDispatchKeyupForComposition(
|
|
const WidgetKeyboardEvent* aKeyboardEvent,
|
|
uint32_t aKeyFlags);
|
|
|
|
/**
|
|
* AutoPendingCompositionResetter guarantees to clear all pending composition
|
|
* data in its destructor.
|
|
*/
|
|
class MOZ_STACK_CLASS AutoPendingCompositionResetter
|
|
{
|
|
public:
|
|
explicit AutoPendingCompositionResetter(TextInputProcessor* aTIP);
|
|
~AutoPendingCompositionResetter();
|
|
|
|
private:
|
|
nsRefPtr<TextInputProcessor> mTIP;
|
|
};
|
|
|
|
/**
|
|
* TextInputProcessor manages modifier state both with .key and .code.
|
|
* For example, left shift key up shouldn't cause inactivating shift state
|
|
* while right shift key is being pressed.
|
|
*/
|
|
struct ModifierKeyData
|
|
{
|
|
// One of modifier key name
|
|
KeyNameIndex mKeyNameIndex;
|
|
// Any code name is allowed.
|
|
CodeNameIndex mCodeNameIndex;
|
|
// A modifier key flag which is activated by the key.
|
|
Modifiers mModifier;
|
|
|
|
explicit ModifierKeyData(const WidgetKeyboardEvent& aKeyboardEvent);
|
|
|
|
bool operator==(const ModifierKeyData& aOther) const
|
|
{
|
|
return mKeyNameIndex == aOther.mKeyNameIndex &&
|
|
mCodeNameIndex == aOther.mCodeNameIndex;
|
|
}
|
|
};
|
|
|
|
class ModifierKeyDataArray : public nsTArray<ModifierKeyData>
|
|
{
|
|
NS_INLINE_DECL_REFCOUNTING(ModifierKeyDataArray)
|
|
|
|
public:
|
|
Modifiers GetActiveModifiers() const;
|
|
void ActivateModifierKey(const ModifierKeyData& aModifierKeyData);
|
|
void InactivateModifierKey(const ModifierKeyData& aModifierKeyData);
|
|
void ToggleModifierKey(const ModifierKeyData& aModifierKeyData);
|
|
|
|
private:
|
|
virtual ~ModifierKeyDataArray() { }
|
|
};
|
|
|
|
Modifiers GetActiveModifiers() const
|
|
{
|
|
return mModifierKeyDataArray ?
|
|
mModifierKeyDataArray->GetActiveModifiers() : 0;
|
|
}
|
|
void EnsureModifierKeyDataArray()
|
|
{
|
|
if (mModifierKeyDataArray) {
|
|
return;
|
|
}
|
|
mModifierKeyDataArray = new ModifierKeyDataArray();
|
|
}
|
|
void ActivateModifierKey(const ModifierKeyData& aModifierKeyData)
|
|
{
|
|
EnsureModifierKeyDataArray();
|
|
mModifierKeyDataArray->ActivateModifierKey(aModifierKeyData);
|
|
}
|
|
void InactivateModifierKey(const ModifierKeyData& aModifierKeyData)
|
|
{
|
|
if (!mModifierKeyDataArray) {
|
|
return;
|
|
}
|
|
mModifierKeyDataArray->InactivateModifierKey(aModifierKeyData);
|
|
}
|
|
void ToggleModifierKey(const ModifierKeyData& aModifierKeyData)
|
|
{
|
|
EnsureModifierKeyDataArray();
|
|
mModifierKeyDataArray->ToggleModifierKey(aModifierKeyData);
|
|
}
|
|
|
|
TextEventDispatcher* mDispatcher; // [Weak]
|
|
nsCOMPtr<nsITextInputProcessorCallback> mCallback;
|
|
nsRefPtr<ModifierKeyDataArray> mModifierKeyDataArray;
|
|
|
|
bool mForTests;
|
|
};
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif // #ifndef mozilla_dom_textinputprocessor_h_
|