Fixing Bug 46200 [Easy Hack]
mstahl at redhat.com
Thu Apr 3 13:26:40 PDT 2014
On 01/04/14 06:50, Tharindu Amila Perera wrote:
> Hi all,
> Using the reply I found out that the events coming from the keyboard
> has this behavior.
> Using the argument KeyEvent coming to function in file tabvwsh4.cxx
> bool ScTabViewShell::TabKeyInput(const KeyEvent& rKEvt)
> I can get codes of all keys except of Caps-Lock, NumLock and
> Scroll(Which is the needed input).
> I noticed that when any of the above keys are pressed this function is
> called twice. But in both events the keycodes are not accessible.
hmm... indeed the keycode is 0 there... it looks like the "lock" keys
are not mapped to a keycode in VCL... perhaps intentionally.
> When CapsLock is on pressing key 'A' in keyboard will give the same
> keycode as when it is not on. So there must be a place where it is
> handled to differentiate a and A inputs. It would be appreciated if I
> can get a code pointer for this.
if i read the bug correctly you don't actually need the key events, you
just need to know if the lock key is active when some other input happens.
sal_uInt16 SalDisplay::GetIndicatorState() const
unsigned int _state = 0;
sal_uInt16 nState = 0;
XkbGetIndicatorState(pDisp_, XkbUseCoreKbd, &_state);
if ((_state & 0x00000001))
nState |= INDICATOR_CAPSLOCK;
if ((_state & 0x00000002))
nState |= INDICATOR_NUMLOCK;
if ((_state & 0x00000004))
nState |= INDICATOR_SCROLLLOCK;
there is an example for requesting the caps-lock key state in
bool bLockKeyOn = pFrameWin && (pFrameWin->GetIndicatorState() &
so you need a VCL Window to get the state; a SfxViewShell like the
ScTabVierwShell has a pointer to its Window.
(since i read the bug too late i've already got a patch to assign a
keycode for the scroll-lock key (see attachment), but i now think that
is actually useless)
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 1979 bytes
Desc: not available
More information about the LibreOffice