Krita Source Code Documentation
Loading...
Searching...
No Matches
KisExtendedModifiersMapperX11 Class Reference

#include <KisExtendedModifiersMapperX11.h>

+ Inheritance diagram for KisExtendedModifiersMapperX11:

Public Member Functions

 KisExtendedModifiersMapperX11 (QObject *parent, const QVariantList &)
 
ExtendedModifiers queryExtendedModifiers () override
 
 ~KisExtendedModifiersMapperX11 () override
 
- Public Member Functions inherited from KisExtendedModifiersMapperPluginInterface
virtual ~KisExtendedModifiersMapperPluginInterface ()
 

Additional Inherited Members

- Public Types inherited from KisExtendedModifiersMapperPluginInterface
typedef QVector< Qt::Key > ExtendedModifiers
 

Detailed Description

Definition at line 11 of file KisExtendedModifiersMapperX11.h.

Constructor & Destructor Documentation

◆ KisExtendedModifiersMapperX11()

KisExtendedModifiersMapperX11::KisExtendedModifiersMapperX11 ( QObject * parent,
const QVariantList &  )

◆ ~KisExtendedModifiersMapperX11()

KisExtendedModifiersMapperX11::~KisExtendedModifiersMapperX11 ( )
overridedefault

Member Function Documentation

◆ queryExtendedModifiers()

KisExtendedModifiersMapperPluginInterface::ExtendedModifiers KisExtendedModifiersMapperX11::queryExtendedModifiers ( )
overridevirtual

Implements KisExtendedModifiersMapperPluginInterface.

Definition at line 122 of file KisExtendedModifiersMapperX11.cpp.

123{
125
126 char keysState[32];
127 int minKeyCode = 0;
128 int maxKeyCode = 0;
129
130#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
131 XDisplayKeycodes(QX11Info::display(), &minKeyCode, &maxKeyCode);
132 XQueryKeymap(QX11Info::display(), keysState);
133#else
134 XDisplayKeycodes(qGuiApp->nativeInterface<QNativeInterface::QX11Application>()->display(),
135 &minKeyCode,
136 &maxKeyCode);
137 XQueryKeymap(qGuiApp->nativeInterface<QNativeInterface::QX11Application>()->display(), keysState);
138#endif
139
140
141 auto checkKeyCodePressedX11 = [&keysState] (KeyCode key) -> bool {
142 int byte = key / 8;
143 char mask = 1 << (key % 8);
144 return keysState[byte] & mask;
145 };
146
147 for (int keyCode = minKeyCode; keyCode <= maxKeyCode; keyCode++) {
148 if (checkKeyCodePressedX11(keyCode)) {
149#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
150 KeySym sym = XkbKeycodeToKeysym(QX11Info::display(),
151 keyCode,
152#else
153 KeySym sym = XkbKeycodeToKeysym(qGuiApp->nativeInterface<QNativeInterface::QX11Application>()->display(),
154 keyCode,
155#endif
156 0,
157 0);
158 for (size_t i = 0; i < sizeof(s_mapping) / sizeof(s_mapping[0]); i++) {
159 const KeyMapping &map = s_mapping[i];
160 if (map.x11KeySym == sym) {
161 modifiers << map.qtKey;
162 break;
163 }
164 }
165 }
166 }
167
168 // in X11 some keys may have multiple keysyms,
169 // (Alt Key == XK_Meta_{L,R}, XK_Meta_{L,R})
171 return modifiers;
172}
static const KeyMapping s_mapping[]
void makeContainerUnique(C &container)

References KritaUtils::makeContainerUnique(), KeyMapping::qtKey, s_mapping, and KeyMapping::x11KeySym.


The documentation for this class was generated from the following files: