Return KKeyEntry to its original self (for BC reasons).
Index: kdecore/kaccel.cpp
RCS file: /home/kde/kdelibs/kdecore/kaccel.cpp,v
retrieving revision 1.82
diff -u -3 -d -p -r1.82 kaccel.cpp
- kdecore/kaccel.cpp 2001/06/15 13:33:50 1.82
+++ kdecore/kaccel.cpp 2001/06/19 18:50:51
@@ -67,7 +67,7 @@ QString KKey::toString() { return KAcce
void KKeyEntry::operator=(const KKeyEntry& e) {
aCurrentKeyCode = e.aCurrentKeyCode; aDefaultKeyCode = e.aDefaultKeyCode;
- aDefaultKeyCode4 = e.aDefaultKeyCode4;
+ //aDefaultKeyCode4 = e.aDefaultKeyCode4;
aConfigKeyCode = e.aConfigKeyCode; bConfigurable = e.bConfigurable; bEnabled = e.bEnabled;
@@ -77,14 +77,12 @@ void KKeyEntry::operator=(const KKeyEntr
descr = e.descr; menuId = e.menuId; menu = e.menu;
- keyCodeNative = e.keyCodeNative;
- keyModNative = e.keyModNative; }
KKeyEntry::KKeyEntry() { aCurrentKeyCode = 0; aDefaultKeyCode = 0; - aDefaultKeyCode4 = 0;
+ //aDefaultKeyCode4 = 0;
aConfigKeyCode = 0; bConfigurable = false; bEnabled = false;
@@ -93,8 +91,6 @@ KKeyEntry::KKeyEntry() {
member = 0; menuId = 0; menu = 0;
- keyCodeNative = 0;
- keyModNative = 0; }
KKeyEntry::KKeyEntry(const KKeyEntry& e) {
@@ -227,8 +223,8 @@ bool KAccel::insertItem( const QString&
KKeyEntry entry; entry.aDefaultKeyCode = defaultKeyCode3.key();
- entry.aDefaultKeyCode4 = defaultKeyCode4.key();
- entry.aCurrentKeyCode = entry.aConfigKeyCode = useFourModifierKeys() ? defaultKeyCode4.key() : defaultKeyCode3.key();
+ //entry.aDefaultKeyCode4 = defaultKeyCode4.key();
+ entry.aCurrentKeyCode = /*entry.aConfigKeyCode = useFourModifierKeys() ? defaultKeyCode4.key() : */ defaultKeyCode3.key();
kdDebug(125) << "useFourModifierKeys() = " << useFourModifierKeys() << " entry.aCurrentKeyCode = " << entry.aCurrentKeyCode << endl; entry.bConfigurable = configurable; entry.descr = descr;
@@ -381,7 +377,7 @@ void KAccel::readKeyMap( KKeyEntryMap &m
s = pConfig->readEntry(it.key()); if ( s.isNull() || s.startsWith( "default" ))
- (*it).aConfigKeyCode = useFourModifierKeys() ? (*it).aDefaultKeyCode4 : (*it).aDefaultKeyCode;
+ (*it).aConfigKeyCode = /*useFourModifierKeys() ? (*it).aDefaultKeyCode4 :*/ (*it).aDefaultKeyCode;
else if( s == "none" ) (*it).aConfigKeyCode = 0; else
Index: kdecore/kaccel.h
RCS file: /home/kde/kdelibs/kdecore/kaccel.h,v
retrieving revision 1.54
diff -u -3 -d -p -r1.54 kaccel.h
- kdecore/kaccel.h 2001/06/15 13:33:50 1.54
+++ kdecore/kaccel.h 2001/06/19 18:50:53
@@ -67,7 +67,7 @@ struct KKeyEntry {
public: int aCurrentKeyCode; int aDefaultKeyCode; // For keyboards with no meta key
- int aDefaultKeyCode4; // For keyboards with meta key (4 modifiers)
+ int aDefaultKeyCode4; For keyboards with meta key (4 modifiers)
int aConfigKeyCode; bool bConfigurable; bool bEnabled;
@@ -77,7 +77,6 @@ struct KKeyEntry {
QString descr; int menuId; QPopupMenu *menu;
- uint keyCodeNative, keyModNative; // For storing the X11 codes (for global shortcuts)
void operator=(const KKeyEntry& e); KKeyEntry();
Index: kdecore/kglobalaccel.cpp
RCS file: /home/kde/kdelibs/kdecore/kglobalaccel.cpp,v
retrieving revision 1.60
diff -u -3 -d -p -r1.60 kglobalaccel.cpp
- kdecore/kglobalaccel.cpp 2001/06/19 14:54:45 1.60
+++ kdecore/kglobalaccel.cpp 2001/06/19 18:50:54
@@ -48,6 +48,13 @@ const int XKeyPress = KeyPress;
NOTE ABOUT CONFIGURATION CHANGES
Test if keys enabled because these keys have made X server grabs
+struct KKeyNative {
+ uint keyCode, keyMod; // For storing the X11 codes (for global shortcuts)
+
+ KKeyNative() : keyCode(0), keyMod(0) { }
+};
+typedef QMap<QString, KKeyNative> KKeyNativeMap;
+
class KGlobalAccelPrivate : public QWidget
{
public:
@@ -73,6 +80,7 @@ private:
public:
QStringList* rawModeList; static bool g_bKeyEventsEnabled;
+ KKeyNativeMap keyNativeMap;
};
bool KGlobalAccelPrivate::g_bKeyEventsEnabled = true;
@@ -167,7 +175,7 @@ QString KGlobalAccel::findKey( int key )
}
bool KGlobalAccel::insertItem( const QString& descr, const QString& action,
- KKey defaultKeyCode3, KKey defaultKeyCode4,
+ KKey defaultKeyCode3, KKey /*defaultKeyCode4*/,
bool configurable )
{
if (aKeyMap.contains(action))
@@ -175,8 +183,8 @@ bool KGlobalAccel::insertItem( const QS
KKeyEntry entry; entry.aDefaultKeyCode = defaultKeyCode3.key();
- entry.aDefaultKeyCode4 = defaultKeyCode4.key();
- entry.aCurrentKeyCode = entry.aConfigKeyCode = KAccel::useFourModifierKeys() ? defaultKeyCode4.key() : defaultKeyCode3.key();
+ //entry.aDefaultKeyCode4 = defaultKeyCode4.key();
+ entry.aCurrentKeyCode = /*try.aConfigKeyCode = KAccel::useFourModifierKeys() ? defaultKeyCode4.key() : */ defaultKeyCode3.key();
entry.bConfigurable = configurable; entry.bEnabled = false; entry.aAccelId = 0;
@@ -218,7 +226,7 @@ KKeyEntryMap KGlobalAccel::keyDict() con
void KGlobalAccel::readSettings(KConfig* config)
{
kdDebug(125) << "KGlobalAccel::readSettings()\n";
- QArray<KKeyEntry*> aKeysToGrab( aKeyMap.count() );
+ QMap<int, QString> aKeysToGrab;
int cKeysToGrab = 0; KConfigBase *pConfig = config ? config : KGlobal::config();
@@ -232,20 +240,26 @@ void KGlobalAccel::readSettings(KConfig*
uint keyQt; uchar keyCodeX; uint keyModX;
+ KKeyNative keyNative;
if ( keyStr.isEmpty() || keyStr.startsWith( "default" ))
- keyQt = KAccel::useFourModifierKeys() ? (*it).aDefaultKeyCode4 : (*it).aDefaultKeyCode;
+ keyQt = /*KAccel::useFourModifierKeys() ? (*it).aDefaultKeyCode4 :*/ (*it).aDefaultKeyCode;
else keyQt = KAccel::stringToKey( keyStr );
+ if( d->keyNativeMap.contains( it.key() ) )
+ keyNative = d->keyNativeMap[ it.key() ];
+
+ // Get X keycodes for current X keymap.
KAccel::keyQtToKeyX( keyQt, &keyCodeX, 0, &keyModX ); kdDebug(125) << QString( it.key()+" = "+keyStr+" key: 0x%1 curKey: 0x%2 enabled: %3\n" ) .arg( keyQt, 0, 16 ). arg( (*it).aCurrentKeyCode, 0, 16 ).arg( (*it).bEnabled ); // If the X codes have changed,
- if( (*it).bEnabled && (keyCodeX != (*it).keyCodeNative || keyModX != (*it).keyModNative) && keyCodeX != 0 ) {
- grabKey( &(*it), false );
- aKeysToGrab[cKeysToGrab++] = &(*it);
+ if( (*it).bEnabled && (keyCodeX != keyNative.keyCode || keyModX != keyNative.keyMod) ) {
+ if( keyNative.keyCode )
+ grabKey( it.key(), false );
+ aKeysToGrab[cKeysToGrab++] = it.key();
} (*it).aConfigKeyCode = (*it).aCurrentKeyCode = keyQt; }
@@ -303,17 +317,11 @@ void KGlobalAccel::setItemEnabled( const
} KKeyEntry& entry = aKeyMap[action];
- if( entry.bEnabled == activate )
- return;
- aKeyMap[action].bEnabled = activate; -
- if ( entry.aCurrentKeyCode == 0 ) return; -
- if ( entry.bEnabled )
- grabKey( &entry, true );
- else
- grabKey( &entry, false ); -
+ if ( entry.bEnabled != activate ) {
+ aKeyMap[action].bEnabled = activate;
+ if ( entry.aCurrentKeyCode )
+ grabKey( action, activate );
+ }
}
bool KGlobalAccel::setKeyDict( const KKeyEntryMap& nKeyMap )
@@ -323,11 +331,12 @@ bool KGlobalAccel::setKeyDict( const KKe
// ungrab all connected and enabled keys QString s; if ( (*it).bEnabled )
- grabKey( (KKeyEntry*)&(*it), false );
+ grabKey( it.key(), false );
} // Clear the dictionary aKeyMap.clear();
+ d->keyNativeMap.clear();
// Insert the new items into the dictionary and reconnect if neccessary // Note also swap config and current key codes !!!!!!
@@ -341,7 +350,7 @@ bool KGlobalAccel::setKeyDict( const KKe
aKeyMap[it.key()] = entry; if ( entry.bEnabled )
- grabKey( &entry, true );
+ grabKey( it.key(), true );
} return true;
}
@@ -397,29 +406,39 @@ static void calculateGrabMasks()
g_keyModMaskXAlwaysOff |= KAccel::keyModXModeSwitch();
}
-bool KGlobalAccel::grabKey( KKeyEntry *pKeyEntry, bool bGrab )
+bool KGlobalAccel::grabKey( const QString &action, bool bGrab )
{
- if (do_not_grab)
- return true;
- if( !pKeyEntry )
+ if( action.isEmpty() )
return false;
+ if( bGrab ) {
+ if( do_not_grab )
+ return true;
+ if( !aKeyMap.contains( action ) )
+ return false;
+ } else if( !d->keyNativeMap.contains( action ) ) {
+ kdDebug(125) << "Tried to ungrab an action (" << action <<") which is not is d->keyNativeMap." << endl;
+ return false;
+ }
// Make sure that grab masks have been initialized. if( g_keyModMaskXOnOrOff == 0 ) calculateGrabMasks(); // Get the X equivalents.
- KKey key = pKeyEntry->aCurrentKeyCode;
+ KKey key;
+ KKeyNative keyNative;
uchar keyCodeX; uint keyModX; if( bGrab ) {
+ key = aKeyMap[action].aCurrentKeyCode;
KAccel::keyQtToKeyX( key.key(), &keyCodeX, 0, &keyModX );
- pKeyEntry->keyCodeNative = keyCodeX;
- pKeyEntry->keyModNative = keyModX;
+ keyNative.keyCode = keyCodeX;
+ keyNative.keyMod = keyModX;
+ d->keyNativeMap[action] = keyNative;
} else {
- keyCodeX = pKeyEntry->keyCodeNative;
- keyModX = pKeyEntry->keyModNative;
+ keyCodeX = d->keyNativeMap[action].keyCode;
+ keyModX = d->keyNativeMap[action].keyMod;
} keyModX &= g_keyModMaskXAccel; // Get rid of any non-relevant bits in mod
@@ -427,7 +446,7 @@ bool KGlobalAccel::grabKey( KKeyEntry *p
#ifndef osf
// this crashes under Tru64 so .....
kdDebug(125) << QString( "grabKey( key: 0x%1, bGrab: %2 ): %3 keyCodeX: %4 keyModX: %5\n" )
- .arg( key.key(), 0, 16 ).arg( bGrab ).arg( bGrab ? key.toString() : "" )
+ .arg( key.key(), 0, 16 ).arg( bGrab ).arg( action )
.arg( keyCodeX, 0, 16 ).arg( keyModX, 0, 16 );
#endif
@@ -456,16 +475,17 @@ bool KGlobalAccel::grabKey( KKeyEntry *p
// If grab failed, then ungrab any previously successful grabs. if( grabFailed ) { kdDebug(125) << "grab failed!\n";
- pKeyEntry->keyCodeNative = 0;
- pKeyEntry->keyModNative = 0;
+ d->keyNativeMap.remove( action );
for( uint m = 0; m < irrelevantBitsMask; m++ ) { if( m & keyModMaskX == 0 ) XUngrabKey( qt_xdisplay(), keyCodeX, keyModX | m, qt_xrootwin() ); } break; }
- } else
+ } else {
+ d->keyNativeMap.remove( action );
XUngrabKey( qt_xdisplay(), keyCodeX, keyModX | irrelevantBitsMask, qt_xrootwin() );
+ }
} }
Index: kdecore/kglobalaccel.h
RCS file: /home/kde/kdelibs/kdecore/kglobalaccel.h,v
retrieving revision 1.22
diff -u -3 -d -p -r1.22 kglobalaccel.h
- kdecore/kglobalaccel.h 2001/06/19 14:54:45 1.22
+++ kdecore/kglobalaccel.h 2001/06/19 18:50:55
@@ -290,7 +290,7 @@ protected:
// Return true if successful. // Modifications with NumLock, CapsLock, ScrollLock, and ModeSwitch are // also grabbed.
- bool grabKey( KKeyEntry *pKeyEntry, bool bGrab );
+ bool grabKey( const QString& action, bool bGrab );
/** * Filters X11 events ev for key bindings in the accelerator dictionary.
Index: kdeui/kkeydialog.cpp
RCS file: /home/kde/kdelibs/kdeui/kkeydialog.cpp,v
retrieving revision 1.84
diff -u -3 -d -p -r1.84 kkeydialog.cpp
- kdeui/kkeydialog.cpp 2001/06/12 20:00:28 1.84
+++ kdeui/kkeydialog.cpp 2001/06/19 18:50:59
@@ -527,7 +527,7 @@ void KKeyChooser::init( KKeyEntryMap *aK
delete pProgramItem; pProgramItem = pParentItem = pItem; } else if( it.key().contains("Group:") ) {
- pItem = new QListViewItem( pProgramItem, pItem, (*it).descr );
+ pItem = new QListViewItem( pProgramItem, pParentItem, (*it).descr );
pItem->setSelectable( false ); pItem->setExpandable( true ); pItem->setOpen( true );
@@ -736,7 +736,7 @@ void KKeyChooser::toChange( QListViewIte
} else { /* get the entry */ KKeyEntryMap::Iterator it = d->actionMap[item];
- int keyDefault = d->bPreferFourModifierKeys ? (*it).aDefaultKeyCode4 : (*it).aDefaultKeyCode;
+ int keyDefault = /*d->bPreferFourModifierKeys ? (*it).aDefaultKeyCode4 :*/ (*it).aDefaultKeyCode;
// Set key strings QString keyStrCfg = KAccel::keyToString( (*it).aConfigKeyCode, true );
@@ -814,8 +814,8 @@ void KKeyChooser::defaultKey()
/* update the list and the change area */ if( d->actionMap.contains( item ) ) { (*d->actionMap[item]).aConfigKeyCode =
- (d->bPreferFourModifierKeys) ?
- (*d->actionMap[item]).aDefaultKeyCode4 :
+ /*(d->bPreferFourModifierKeys) ?
+ (*d->actionMap[item]).aDefaultKeyCode4 :*/
(*d->actionMap[item]).aDefaultKeyCode; item->setText( 1,
@@ -844,7 +844,7 @@ void KKeyChooser::allDefault( bool useFo
//kdDebug(125) << QString( "allDefault: %1 3:%2 4:%3\n" ).arg(it.key()).arg((*it).aDefaultKeyCode).arg((*it).aDefaultKeyCode4); if ( (*it).bConfigurable ) { (*it).aCurrentKeyCode = (*it).aConfigKeyCode =
- (useFourModifierKeys) ? (*it).aDefaultKeyCode4 : (*it).aDefaultKeyCode;
+ /*(useFourModifierKeys) ? (*it).aDefaultKeyCode4 :*/ (*it).aDefaultKeyCode;
} at->setText(1, KAccel::keyToString((*it).aConfigKeyCode, true)); }