author | Makoto Kato <m_kato@ga2.so-net.ne.jp> |
Fri, 11 Mar 2016 17:48:10 +0900 | |
changeset 339456 | 6c0e51d37eba66ea2a3ecb220ec13467645ac0c5 |
parent 339455 | 767e0126510e0f65798a53a29c6b7e1469a03139 |
child 515993 | 098c318e08d5e3b700b7ab357a03c5ed5a8232e2 |
push id | 12733 |
push user | m_kato@ga2.so-net.ne.jp |
push date | Fri, 11 Mar 2016 08:49:59 +0000 |
reviewers | masayuki |
bugs | 1033488 |
milestone | 48.0a1 |
--- a/widget/windows/nsBidiKeyboard.cpp +++ b/widget/windows/nsBidiKeyboard.cpp @@ -2,16 +2,20 @@ * * 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 <stdio.h> #include "nsBidiKeyboard.h" #include "prmem.h" +#include "nsServiceManagerUtils.h" +#include "nsTArray.h" +#include "nsContentUtils.h" +#include "mozilla/dom/ContentParent.h" #include <tchar.h> NS_IMPL_ISUPPORTS(nsBidiKeyboard, nsIBidiKeyboard) nsBidiKeyboard::nsBidiKeyboard() : nsIBidiKeyboard() { Reset(); } @@ -172,8 +176,29 @@ bool nsBidiKeyboard::IsRTLLanguage(HKL a { LOCALESIGNATURE localesig; return (::GetLocaleInfoW(PRIMARYLANGID((DWORD_PTR)aLocale), LOCALE_FONTSIGNATURE, (LPWSTR)&localesig, (sizeof(localesig)/sizeof(WCHAR))) && (localesig.lsUsb[3] & 0x08000000)); } + +//static +void +nsBidiKeyboard::OnLayoutChange() +{ + nsCOMPtr<nsIBidiKeyboard> bidiKeyboard = nsContentUtils::GetBidiKeyboard(); + if (!bidiKeyboard) { + return; + } + + bool rtl; + if (NS_FAILED(bidiKeyboard->IsLangRTL(&rtl))) { + return; + } + + nsTArray<mozilla::dom::ContentParent*> children; + mozilla::dom::ContentParent::GetAll(children); + for (uint32_t i = 0; i < children.Length(); i++) { + children[i]->SendBidiKeyboardNotify(rtl); + } +}
--- a/widget/windows/nsBidiKeyboard.h +++ b/widget/windows/nsBidiKeyboard.h @@ -14,16 +14,18 @@ class nsBidiKeyboard : public nsIBidiKey virtual ~nsBidiKeyboard(); public: NS_DECL_ISUPPORTS NS_DECL_NSIBIDIKEYBOARD nsBidiKeyboard(); + static void OnLayoutChange(); + protected: nsresult SetupBidiKeyboards(); bool IsRTLLanguage(HKL aLocale); bool mInitialized; bool mHaveBidiKeyboards; wchar_t mLTRKeyboard[KL_NAMELENGTH];
--- a/widget/windows/nsWidgetFactory.cpp +++ b/widget/windows/nsWidgetFactory.cpp @@ -185,17 +185,17 @@ static const mozilla::Module::CIDEntry k { &kNS_WIN_TASKBAR_CID, false, nullptr, WinTaskbarConstructor }, { &kNS_WIN_JUMPLISTBUILDER_CID, false, nullptr, JumpListBuilderConstructor }, { &kNS_WIN_JUMPLISTITEM_CID, false, nullptr, JumpListItemConstructor }, { &kNS_WIN_JUMPLISTSEPARATOR_CID, false, nullptr, JumpListSeparatorConstructor }, { &kNS_WIN_JUMPLISTLINK_CID, false, nullptr, JumpListLinkConstructor }, { &kNS_WIN_JUMPLISTSHORTCUT_CID, false, nullptr, JumpListShortcutConstructor }, { &kNS_WINDOWS_UIUTILS_CID, false, nullptr, WindowsUIUtilsConstructor }, { &kNS_DRAGSERVICE_CID, false, nullptr, nsDragServiceConstructor, Module::MAIN_PROCESS_ONLY }, - { &kNS_BIDIKEYBOARD_CID, false, nullptr, nsBidiKeyboardConstructor }, + { &kNS_BIDIKEYBOARD_CID, false, nullptr, nsBidiKeyboardConstructor, Module::MAIN_PROCESS_ONLY }, { &kNS_TASKBARPREVIEWCALLBACK_CID, false, nullptr, TaskbarPreviewCallbackConstructor }, #ifdef NS_PRINTING { &kNS_PRINTSETTINGSSERVICE_CID, false, nullptr, nsPrintOptionsWinConstructor }, { &kNS_PRINTER_ENUMERATOR_CID, false, nullptr, nsPrinterEnumeratorWinConstructor }, { &kNS_PRINTSESSION_CID, false, nullptr, nsPrintSessionConstructor }, { &kNS_DEVICE_CONTEXT_SPEC_CID, false, nullptr, nsDeviceContextSpecWinConstructor }, #endif { nullptr } @@ -219,17 +219,17 @@ static const mozilla::Module::ContractID { "@mozilla.org/windows-taskbar;1", &kNS_WIN_TASKBAR_CID }, { "@mozilla.org/windows-jumplistbuilder;1", &kNS_WIN_JUMPLISTBUILDER_CID }, { "@mozilla.org/windows-jumplistitem;1", &kNS_WIN_JUMPLISTITEM_CID }, { "@mozilla.org/windows-jumplistseparator;1", &kNS_WIN_JUMPLISTSEPARATOR_CID }, { "@mozilla.org/windows-jumplistlink;1", &kNS_WIN_JUMPLISTLINK_CID }, { "@mozilla.org/windows-jumplistshortcut;1", &kNS_WIN_JUMPLISTSHORTCUT_CID }, { "@mozilla.org/windows-ui-utils;1", &kNS_WINDOWS_UIUTILS_CID }, { "@mozilla.org/widget/dragservice;1", &kNS_DRAGSERVICE_CID, Module::MAIN_PROCESS_ONLY }, - { "@mozilla.org/widget/bidikeyboard;1", &kNS_BIDIKEYBOARD_CID }, + { "@mozilla.org/widget/bidikeyboard;1", &kNS_BIDIKEYBOARD_CID, Module::MAIN_PROCESS_ONLY }, { "@mozilla.org/widget/taskbar-preview-callback;1", &kNS_TASKBARPREVIEWCALLBACK_CID }, #ifdef NS_PRINTING { "@mozilla.org/gfx/printsettings-service;1", &kNS_PRINTSETTINGSSERVICE_CID }, { "@mozilla.org/gfx/printerenumerator;1", &kNS_PRINTER_ENUMERATOR_CID }, { "@mozilla.org/gfx/printsession;1", &kNS_PRINTSESSION_CID }, { "@mozilla.org/gfx/devicecontextspec;1", &kNS_DEVICE_CONTEXT_SPEC_CID }, #endif { nullptr }
--- a/widget/windows/nsWindow.cpp +++ b/widget/windows/nsWindow.cpp @@ -128,16 +128,17 @@ #include "nsIWidgetListener.h" #include "mozilla/dom/Touch.h" #include "mozilla/gfx/2D.h" #include "nsToolkitCompsCID.h" #include "nsIAppStartup.h" #include "mozilla/WindowsVersion.h" #include "mozilla/TextEvents.h" // For WidgetKeyboardEvent #include "nsThemeConstants.h" +#include "nsBidiKeyboard.h" #include "nsIGfxInfo.h" #include "nsUXThemeConstants.h" #include "KeyboardLayout.h" #include "nsNativeDragTarget.h" #include <mmsystem.h> // needed for WIN32_LEAN_AND_MEAN #include <zmouse.h> #include <richedit.h> @@ -5510,16 +5511,17 @@ nsWindow::ProcessMessage(UINT msg, WPARA case WM_INPUTLANGCHANGEREQUEST: *aRetValue = TRUE; result = false; break; case WM_INPUTLANGCHANGE: KeyboardLayout::GetInstance()-> OnLayoutChange(reinterpret_cast<HKL>(lParam)); + nsBidiKeyboard::OnLayoutChange(); result = false; // always pass to child window break; case WM_DESTROYCLIPBOARD: { nsIClipboard* clipboard; nsresult rv = CallGetService(kCClipboardCID, &clipboard); if(NS_SUCCEEDED(rv)) {