It is decided to not reimplement this feature in KDE4 konsole:
* It is non-trivial work to implement it correctly
* It annoyed some users when it was available in KDE3 konsole
* Not many users want this feature back
This is a follow up of commit cee0ce539b
CCBUG:172271
REVIEW:104156
wilder-portage
parent
52406f651d
commit
78dbf8f1c1
14 changed files with 0 additions and 220 deletions
@ -1,152 +0,0 @@ |
||||
/*
|
||||
Originally comes from NumLockX http://dforce.sh.charactervut.characterz/~seli/en/numlockx
|
||||
|
||||
NumLockX |
||||
|
||||
Copyright 2000-2001 Lubos Lunak <l.lunak@kde.org> |
||||
Copyright 2001 Oswald Buddenhagen <ossi@kde.org> |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a |
||||
copy of this software and associated documentation files (the "Software"), |
||||
to deal in the Software without restriction, including without limitation |
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||
and/or sell copies of the Software, and to permit persons to whom the |
||||
Software is furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in |
||||
all copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||
DEALINGS IN THE SOFTWARE. |
||||
|
||||
****************************************************************************/ |
||||
|
||||
#include <config-konsole.h> |
||||
|
||||
#if defined(HAVE_XKB) && !defined(AVOID_XKB) |
||||
#include <QtGui/QX11Info> |
||||
|
||||
|
||||
#include <X11/Xlib.h> |
||||
|
||||
#define explicit myexplicit |
||||
#include <X11/XKBlib.h> |
||||
#undef explicit |
||||
|
||||
#include <X11/keysym.h> |
||||
|
||||
/* the XKB stuff is based on code created by Oswald Buddenhagen <ossi@kde.org> */ |
||||
int xkb_init() |
||||
{ |
||||
int xkb_opcode, xkb_event, xkb_error; |
||||
int xkb_lmaj = XkbMajorVersion; |
||||
int xkb_lmin = XkbMinorVersion; |
||||
return XkbLibraryVersion(&xkb_lmaj, &xkb_lmin) |
||||
&& XkbQueryExtension(QX11Info::display(), &xkb_opcode, &xkb_event, &xkb_error, |
||||
&xkb_lmaj, &xkb_lmin); |
||||
} |
||||
|
||||
#if 0 |
||||
// This method doesn't work in all cases. The atom "ScrollLock" doesn't seem
|
||||
// to exist on all XFree versions (at least it's not here with my 3.3.6) - DF
|
||||
static unsigned int xkb_mask_modifier(XkbDescPtr xkb, const char* name) |
||||
{ |
||||
int i; |
||||
if (!xkb || !xkb->names) |
||||
return 0; |
||||
|
||||
Atom atom = XInternAtom(xkb->dpy, name, true); |
||||
if (atom == None) |
||||
return 0; |
||||
|
||||
for (i = 0; |
||||
i < XkbNumVirtualMods; |
||||
i++) { |
||||
if (atom == xkb->names->vmods[i]) { |
||||
unsigned int mask; |
||||
XkbVirtualModsToReal(xkb, 1 << i, &mask); |
||||
return mask; |
||||
} |
||||
} |
||||
return 0; |
||||
} |
||||
|
||||
static unsigned int xkb_scrolllock_mask() |
||||
{ |
||||
XkbDescPtr xkb; |
||||
if ((xkb = XkbGetKeyboard(QX11Info::display(), XkbAllComponentsMask, XkbUseCoreKbd)) != NULL) { |
||||
unsigned int mask = xkb_mask_modifier(xkb, "ScrollLock"); |
||||
XkbFreeKeyboard(xkb, 0, True); |
||||
return mask; |
||||
} |
||||
return 0; |
||||
} |
||||
|
||||
#else |
||||
unsigned int xkb_scrolllock_mask() |
||||
{ |
||||
int scrolllock_mask = 0; |
||||
XModifierKeymap* map = XGetModifierMapping(QX11Info::display()); |
||||
KeyCode scrolllock_keycode = XKeysymToKeycode(QX11Info::display(), XK_Scroll_Lock); |
||||
if (scrolllock_keycode == NoSymbol) { |
||||
XFreeModifiermap(map); |
||||
return 0; |
||||
} |
||||
for (int i = 0; |
||||
i < 8; |
||||
++i) { |
||||
if (map->modifiermap[ map->max_keypermod * i ] == scrolllock_keycode) |
||||
scrolllock_mask += 1 << i; |
||||
} |
||||
|
||||
XFreeModifiermap(map); |
||||
return scrolllock_mask; |
||||
} |
||||
#endif |
||||
|
||||
|
||||
unsigned int scrolllock_mask = 0; |
||||
|
||||
int xkb_set_on() |
||||
{ |
||||
if (!scrolllock_mask) { |
||||
if (!xkb_init()) |
||||
return 0; |
||||
scrolllock_mask = xkb_scrolllock_mask(); |
||||
if (scrolllock_mask == 0) |
||||
return 0; |
||||
} |
||||
XkbLockModifiers(QX11Info::display(), XkbUseCoreKbd, scrolllock_mask, scrolllock_mask); |
||||
return 1; |
||||
} |
||||
|
||||
int xkb_set_off() |
||||
{ |
||||
if (!scrolllock_mask) { |
||||
if (!xkb_init()) |
||||
return 0; |
||||
scrolllock_mask = xkb_scrolllock_mask(); |
||||
if (scrolllock_mask == 0) |
||||
return 0; |
||||
} |
||||
XkbLockModifiers(QX11Info::display(), XkbUseCoreKbd, scrolllock_mask, 0); |
||||
return 1; |
||||
} |
||||
|
||||
void scrolllock_set_on() |
||||
{ |
||||
xkb_set_on(); |
||||
} |
||||
|
||||
void scrolllock_set_off() |
||||
{ |
||||
xkb_set_off(); |
||||
} |
||||
|
||||
#endif // defined(HAVE_XKB)
|
||||
|
||||
Loading…
Reference in new issue