mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-24 13:21:05 +00:00
Bug 1257759 part.3 ModifierKeyState should be available in plugin module r=jimm
Before posting native key message from PluginInstanceChild, we need to check if the key combination could be a shortcut key, i.e., we need to check if Ctrl or Alt key is pressed. ModifierKeyState is a good class for checking it but it should be defined in an independent header file. This patch separates the definition of ModifierKeyState to mozilla/widget/WinModifierKeyState.h and implement MaybeMatchShortcutKey() for PluginInstanceChild. MozReview-Commit-ID: ZjLnJx02Ou --HG-- rename : widget/windows/KeyboardLayout.h => widget/windows/WinModifierKeyState.h extra : rebase_source : 66e9351a36dfa88f080ea78972ac0cb347bb174d
This commit is contained in:
parent
f19611cb89
commit
8a8e89ac9b
@ -344,6 +344,26 @@ ModifierKeyState::IsWin() const
|
||||
return (mModifiers & MODIFIER_OS) != 0;
|
||||
}
|
||||
|
||||
bool
|
||||
ModifierKeyState::MaybeMatchShortcutKey() const
|
||||
{
|
||||
// If Windows key is pressed, even if both Ctrl key and Alt key are pressed,
|
||||
// it's possible to match a shortcut key.
|
||||
if (IsWin()) {
|
||||
return true;
|
||||
}
|
||||
// Otherwise, when both Ctrl key and Alt key are pressed, it shouldn't be
|
||||
// a shortcut key for Windows since it means pressing AltGr key on
|
||||
// some keyboard layouts.
|
||||
if (IsControl() ^ IsAlt()) {
|
||||
return true;
|
||||
}
|
||||
// If no modifier key is active except a lockable modifier nor Shift key,
|
||||
// the key shouldn't match any shortcut keys (there are Space and
|
||||
// Shift+Space, though, let's ignore these special case...).
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
ModifierKeyState::IsCapsLocked() const
|
||||
{
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "mozilla/Attributes.h"
|
||||
#include "mozilla/EventForwards.h"
|
||||
#include "mozilla/TextEventDispatcher.h"
|
||||
#include "mozilla/widget/WinModifierKeyState.h"
|
||||
#include <windows.h>
|
||||
|
||||
#define NS_NUM_OF_KEYS 70
|
||||
@ -55,43 +56,6 @@ static const uint32_t sModifierKeyMap[][3] = {
|
||||
|
||||
class KeyboardLayout;
|
||||
|
||||
class ModifierKeyState
|
||||
{
|
||||
public:
|
||||
ModifierKeyState();
|
||||
ModifierKeyState(bool aIsShiftDown, bool aIsControlDown, bool aIsAltDown);
|
||||
ModifierKeyState(Modifiers aModifiers);
|
||||
|
||||
void Update();
|
||||
|
||||
void Unset(Modifiers aRemovingModifiers);
|
||||
void Set(Modifiers aAddingModifiers);
|
||||
|
||||
void InitInputEvent(WidgetInputEvent& aInputEvent) const;
|
||||
|
||||
bool IsShift() const;
|
||||
bool IsControl() const;
|
||||
bool IsAlt() const;
|
||||
bool IsAltGr() const;
|
||||
bool IsWin() const;
|
||||
|
||||
bool IsCapsLocked() const;
|
||||
bool IsNumLocked() const;
|
||||
bool IsScrollLocked() const;
|
||||
|
||||
MOZ_ALWAYS_INLINE Modifiers GetModifiers() const
|
||||
{
|
||||
return mModifiers;
|
||||
}
|
||||
|
||||
private:
|
||||
Modifiers mModifiers;
|
||||
|
||||
MOZ_ALWAYS_INLINE void EnsureAltGr();
|
||||
|
||||
void InitMouseEvent(WidgetInputEvent& aMouseEvent) const;
|
||||
};
|
||||
|
||||
struct UniCharsAndModifiers
|
||||
{
|
||||
// Dead-key + up to 4 characters
|
||||
|
58
widget/windows/WinModifierKeyState.h
Normal file
58
widget/windows/WinModifierKeyState.h
Normal file
@ -0,0 +1,58 @@
|
||||
/* -*- 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_widget_WinModifierKeyState_h_
|
||||
#define mozilla_widget_WinModifierKeyState_h_
|
||||
|
||||
#include "mozilla/RefPtr.h"
|
||||
#include "mozilla/EventForwards.h"
|
||||
#include <windows.h>
|
||||
|
||||
namespace mozilla {
|
||||
namespace widget {
|
||||
|
||||
class MOZ_STACK_CLASS ModifierKeyState final
|
||||
{
|
||||
public:
|
||||
ModifierKeyState();
|
||||
ModifierKeyState(bool aIsShiftDown, bool aIsControlDown, bool aIsAltDown);
|
||||
ModifierKeyState(Modifiers aModifiers);
|
||||
|
||||
void Update();
|
||||
|
||||
void Unset(Modifiers aRemovingModifiers);
|
||||
void Set(Modifiers aAddingModifiers);
|
||||
|
||||
void InitInputEvent(WidgetInputEvent& aInputEvent) const;
|
||||
|
||||
bool IsShift() const;
|
||||
bool IsControl() const;
|
||||
bool IsAlt() const;
|
||||
bool IsAltGr() const;
|
||||
bool IsWin() const;
|
||||
|
||||
bool MaybeMatchShortcutKey() const;
|
||||
|
||||
bool IsCapsLocked() const;
|
||||
bool IsNumLocked() const;
|
||||
bool IsScrollLocked() const;
|
||||
|
||||
MOZ_ALWAYS_INLINE Modifiers GetModifiers() const
|
||||
{
|
||||
return mModifiers;
|
||||
}
|
||||
|
||||
private:
|
||||
Modifiers mModifiers;
|
||||
|
||||
MOZ_ALWAYS_INLINE void EnsureAltGr();
|
||||
|
||||
void InitMouseEvent(WidgetInputEvent& aMouseEvent) const;
|
||||
};
|
||||
|
||||
} // namespace widget
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // #ifndef mozilla_widget_WinModifierKeyState_h_
|
@ -15,6 +15,7 @@ EXPORTS += [
|
||||
EXPORTS.mozilla.widget += [
|
||||
'AudioSession.h',
|
||||
'WinMessages.h',
|
||||
'WinModifierKeyState.h',
|
||||
]
|
||||
|
||||
UNIFIED_SOURCES += [
|
||||
|
Loading…
Reference in New Issue
Block a user