Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qwindowskeymapper.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QWINDOWSKEYMAPPER_H
5#define QWINDOWSKEYMAPPER_H
6
7#include <QtCore/qt_windows.h>
8
9#include <QtCore/qlocale.h>
10
11#include <qpa/qplatformkeymapper.h>
12
13QT_BEGIN_NAMESPACE
14
15class QKeyEvent;
16class QWindow;
17
18/*
19 \internal
20 A Windows KeyboardLayoutItem has 8 possible states:
21 1. Unmodified
22 2. Shift
23 3. Control
24 4. Control + Shift
25 5. Alt
26 6. Alt + Shift
27 7. Alt + Control
28 8. Alt + Control + Shift
29*/
32 uint exists : 1; // whether this item has been initialized (by updatePossibleKeyCodes)
34 static const size_t NumQtKeys = 9;
35 quint32 qtKey[NumQtKeys]; // Can by any Qt::Key_<foo>, or unicode character
36};
37
39{
41public:
42 explicit QWindowsKeyMapper();
44
45 void changeKeyboard();
46
47 void setUseRTLExtensions(bool e) { m_useRTLExtensions = e; }
48 bool useRTLExtensions() const { return m_useRTLExtensions; }
49
50 void setDetectAltGrModifier(bool a) { m_detectAltGrModifier = a; }
51 bool detectAltGrModifier() const { return m_detectAltGrModifier; }
52
53 bool translateKeyEvent(QWindow *widget, HWND hwnd, const MSG &msg, LRESULT *result);
54
55 QWindow *keyGrabber() const { return m_keyGrabber; }
56 void setKeyGrabber(QWindow *w) { m_keyGrabber = w; }
57
59 QList<QKeyCombination> possibleKeyCombinations(const QKeyEvent *e) const override;
60
61private:
62 bool translateKeyEventInternal(QWindow *receiver, MSG msg, bool grab, LRESULT *lResult);
63 bool translateMultimediaKeyEventInternal(QWindow *receiver, const MSG &msg);
64 void updateKeyMap(const MSG &msg);
65
66 bool m_useRTLExtensions;
67
68 QLocale keyboardInputLocale;
69 Qt::LayoutDirection keyboardInputDirection;
70
71 void updatePossibleKeyCodes(unsigned char *kbdBuffer, quint32 scancode, quint32 vk_key);
72 void deleteLayouts();
73
74 QWindow *m_keyGrabber;
75 QChar m_lastHighSurrogate;
76 static const size_t NumKeyboardLayoutItems = 256;
77 KeyboardLayoutItem keyLayout[NumKeyboardLayoutItems];
78 bool m_detectAltGrModifier = false;
79 bool m_seenAltGr = false;
80
81};
82
84 ShiftLeft = 0x00000001,
85 ControlLeft = 0x00000002,
86 AltLeft = 0x00000004,
87 MetaLeft = 0x00000008,
88 ShiftRight = 0x00000010,
89 ControlRight = 0x00000020,
90 AltRight = 0x00000040,
91 MetaRight = 0x00000080,
92 CapsLock = 0x00000100,
93 NumLock = 0x00000200,
94 ScrollLock = 0x00000400,
95 ExtendedKey = 0x01000000,
96
97 // Convenience mappings
98 ShiftAny = 0x00000011,
99 ControlAny = 0x00000022,
100 AltAny = 0x00000044,
101 MetaAny = 0x00000088,
102 LockAny = 0x00000700
103};
104
105QT_END_NAMESPACE
106
107#endif // QWINDOWSKEYMAPPER_H
\inmodule QtCore\reentrant
Definition qpoint.h:29
Singleton container for all relevant information.
QSharedPointer< QWindowCreationContext > windowCreationContext() const
QWindowsScreenManager & screenManager()
QWindowsWindow * findClosestPlatformWindow(HWND) const
QWindow * findWindow(HWND) const
bool asyncExpose() const
void addWindow(HWND, QWindowsWindow *w)
static bool systemParametersInfoForScreen(unsigned action, unsigned param, void *out, const QPlatformScreen *screen=nullptr)
static bool setProcessDpiAwareness(QtWindows::DpiAwareness dpiAwareness)
HDC displayContext() const
QWindowsTabletSupport * tabletSupport() const
static bool systemParametersInfoForWindow(unsigned action, unsigned param, void *out, const QPlatformWindow *win=nullptr)
static void setTabletAbsoluteRange(int a)
QWindowsWindow * findPlatformWindowAt(HWND parent, const QPoint &screenPoint, unsigned cwex_flags) const
bool initTouch(unsigned integrationOptions)
HWND createDummyWindow(const QString &classNameIn, const wchar_t *windowName, WNDPROC wndProc=nullptr, DWORD style=WS_OVERLAPPED)
Convenience to create a non-visible, message-only dummy window for example used as clipboard watcher ...
void setAsyncExpose(bool value)
QSharedPointer< QWindowCreationContext > setWindowCreationContext(const QSharedPointer< QWindowCreationContext > &ctx)
bool windowsProc(HWND hwnd, UINT message, QtWindows::WindowsEventType et, WPARAM wParam, LPARAM lParam, LRESULT *result, QWindowsWindow **platformWindowPtr)
Main windows procedure registered for windows.
unsigned systemInfo() const
static QtWindows::DpiAwareness processDpiAwareness()
QWindowsWindow * findPlatformWindow(HWND) const
QWindow * keyGrabber() const
QWindowsWindow * findPlatformWindow(const QWindowsMenuBar *mb) const
QWindow * windowUnderMouse() const
QPlatformKeyMapper * keyMapper() const
bool useRTLExtensions() const
static bool systemParametersInfo(unsigned action, unsigned param, void *out, unsigned dpi=0)
QWindowsMimeRegistry & mimeConverter() const
static bool isSessionLocked()
int screenDepth() const
bool initPowerNotificationHandler()
HandleBaseWindowHash & windows()
static QWindowsContext * instance()
QString registerWindowClass(QString cname, WNDPROC proc, unsigned style=0, HBRUSH brush=nullptr, bool icon=false)
void setDetectAltGrModifier(bool a)
Platform cursor implementation.
static bool hasOverrideCursor()
static void enforceOverrideCursor()
Windows Input context implementation.
static void setWindowsImeEnabled(QWindowsWindow *platformWindow, bool enabled)
static QWindowsIntegration * instance()
Translates Windows keys to QWindowSystemInterface events.
bool translateKeyEvent(QWindow *widget, HWND hwnd, const MSG &msg, LRESULT *result)
To be called from the window procedure.
bool detectAltGrModifier() const
void setUseRTLExtensions(bool e)
QWindow * keyGrabber() const
Qt::KeyboardModifiers queryKeyboardModifiers() const override
bool useRTLExtensions() const
void setKeyGrabber(QWindow *w)
void setDetectAltGrModifier(bool a)
QList< QKeyCombination > possibleKeyCombinations(const QKeyEvent *e) const override
Windows native menu bar.
Manages the list of QWindowsMimeConverter instances.
Manages a list of QWindowsScreen.
Tablet support for Windows.
static QWindowsTheme * instance()
Raster or OpenGL Window.
void alertWindow(int durationMs=0)
void checkForScreenChanged(ScreenChangeMode mode=FromGeometryChange)
bool testFlag(unsigned f) const
void setFlag(unsigned f) const
void clearFlag(unsigned f) const
static void settingsChanged()
static const char * embeddedNativeParentHandleProperty
QWindowsMenuBar * menuBar() const
bool frameStrutEventsEnabled() const override
Reimplement this method to return whether frame strut events are enabled.
@ WithinSetParent
Automatic mouse capture on button press.
void handleCompositionSettingsChanged()
WindowsEventType
Enumerations for WM_XX events.
@ PointerActivateWindowEvent
@ InputMethodEndCompositionEvent
@ ShowEventOnParentRestoring
@ InputMethodCompositionEvent
@ InputMethodOpenCandidateWindowEvent
@ MouseActivateWindowEvent
@ DpiChangedAfterParentEvent
@ InputMethodStartCompositionEvent
@ CompositionSettingsChanged
@ InputMethodCloseCandidateWindowEvent
@ AccessibleObjectFromWindowRequest
Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher")
#define WM_TOUCH
#define DPI_AWARENESS_CONTEXT_UNAWARE
#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE
#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2
#define DPI_AWARENESS_CONTEXT_SYSTEM_AWARE
#define DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED
static bool isTopLevel(HWND hwnd)
#define LANG_SYRIAC
static RECT rectFromNcCalcSize(UINT message, WPARAM wParam, LPARAM lParam, int n)
static bool enableNonClientDpiScaling(HWND hwnd)
static bool isInputMessage(UINT m)
static DPI_AWARENESS_CONTEXT qtDpiAwarenessToDpiAwarenessContext(QtWindows::DpiAwareness dpiAwareness)
static bool isMinimized(HWND hwnd)
static QMargins marginsFromRects(const RECT &frame, const RECT &client)
static bool useRTL_Extensions()
static bool sessionManagerInteractionBlocked()
static QWindowsInputContext * windowsInputContext()
static QtWindows::DpiAwareness dpiAwarenessContextToQtDpiAwareness(DPI_AWARENESS_CONTEXT context)
static QByteArray nativeEventType()
static bool isEmptyRect(const RECT &rect)
static bool findPlatformWindowHelper(const POINT &screenPoint, unsigned cwexFlags, const QWindowsContext *context, HWND *hwnd, QWindowsWindow **result)
Find a child window at a screen point.
WindowsNativeModifiers
@ ScrollLock
@ ExtendedKey
@ ShiftRight
@ LockAny
@ AltLeft
@ ShiftLeft
@ MetaRight
@ MetaLeft
@ MetaAny
@ AltRight
@ ControlLeft
@ ControlRight
@ CapsLock
@ NumLock
@ ShiftAny
@ ControlAny
quint32 qtKey[NumQtKeys]
static const size_t NumQtKeys
const HRESULT m_oleInitializeResult
QWindowsKeyMapper m_keyMapper
QWindowsPointerHandler m_pointerHandler
QSet< QString > m_registeredWindowClassNames
QWindowsScreenManager m_screenManager
QWindowsMimeRegistry m_mimeConverter
QWindowsContext::HandleBaseWindowHash m_windows
QSharedPointer< QWindowCreationContext > m_creationContext