diff -r 000000000000 -r 6474c204b198 dom/events/IMEStateManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dom/events/IMEStateManager.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,160 @@ +/* -*- 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/. */ + +#ifndef mozilla_IMEStateManager_h_ +#define mozilla_IMEStateManager_h_ + +#include "mozilla/EventForwards.h" +#include "nsIWidget.h" + +class nsIContent; +class nsIDOMMouseEvent; +class nsINode; +class nsPIDOMWindow; +class nsPresContext; +class nsISelection; + +namespace mozilla { + +class EventDispatchingCallback; +class IMEContentObserver; +class TextCompositionArray; +class TextComposition; + +/** + * IMEStateManager manages InputContext (e.g., active editor type, IME enabled + * state and IME open state) of nsIWidget instances, manages IMEContentObserver + * and provides useful API for IME. + */ + +class IMEStateManager +{ + typedef widget::IMEMessage IMEMessage; + typedef widget::IMEState IMEState; + typedef widget::InputContext InputContext; + typedef widget::InputContextAction InputContextAction; + +public: + static void Shutdown(); + + static nsresult OnDestroyPresContext(nsPresContext* aPresContext); + static nsresult OnRemoveContent(nsPresContext* aPresContext, + nsIContent* aContent); + /** + * OnChangeFocus() should be called when focused content is changed or + * IME enabled state is changed. If nobody has focus, set both aPresContext + * and aContent nullptr. E.g., all windows are deactivated. + */ + static nsresult OnChangeFocus(nsPresContext* aPresContext, + nsIContent* aContent, + InputContextAction::Cause aCause); + static void OnInstalledMenuKeyboardListener(bool aInstalling); + + // These two methods manage focus and selection/text observers. + // They are separate from OnChangeFocus above because this offers finer + // control compared to having the two methods incorporated into OnChangeFocus + + // Get the focused editor's selection and root + static nsresult GetFocusSelectionAndRoot(nsISelection** aSel, + nsIContent** aRoot); + // This method updates the current IME state. However, if the enabled state + // isn't changed by the new state, this method does nothing. + // Note that this method changes the IME state of the active element in the + // widget. So, the caller must have focus. + static void UpdateIMEState(const IMEState &aNewIMEState, + nsIContent* aContent); + + // This method is called when user clicked in an editor. + // aContent must be: + // If the editor is for or