[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-core-devel
Subject:    PATCH for keypad shortcuts
From:       Ellis Whitehead <kde () ellisw ! net>
Date:       2001-07-29 13:35:47
[Download RAW message or body]

This patch makes Plus/Minus/Slash/Asterisk shortcuts available on both the 
main keyboard and the keypad.  This is at the request for the keypad plus key 
to work in KMail from kdelibs. 

Ellis

["kaccel.cpp.patch" (text/x-diff)]

Index: kdecore/kaccel.cpp
===================================================================
RCS file: /home/kde/kdelibs/kdecore/kaccel.cpp,v
retrieving revision 1.92
diff -u -3 -d -p -r1.92 kaccel.cpp
--- kdecore/kaccel.cpp	2001/07/18 03:46:55	1.92
+++ kdecore/kaccel.cpp	2001/07/29 13:29:24
@@ -117,6 +117,7 @@ void KAccel::connectItem( const QString&
 			  const QObject* receiver, const char *member,
 			  bool activate )
 {
+    kdDebug(125) << "connectItem( " << action << " )" << endl;
     if (action.isNull()) return;
     if (!aKeyMap.contains(action)) {
         kdWarning(125) << "cannot connect action " << action
@@ -139,6 +140,9 @@ void KAccel::connectItem( const QString&
     }
 
     if ( !activate ) setItemEnabled( action, false );
+
+    if( aKeyMap.contains( action + " (Alternate)" ) )
+        connectItem( action + " (Alternate)", receiver, member, activate );
 }
 
 void KAccel::connectItem( KStdAccel::StdAccel accel,
@@ -212,23 +216,38 @@ bool KAccel::insertItem( const QString& 
 }
 
 bool KAccel::insertItem( const QString& descr, const QString& action,
-			 KKey defaultKeyCode3, KKey defaultKeyCode4,
+			 KKey defaultKeyCode3, KKey /*defaultKeyCode4*/,
 			 int id, QPopupMenu *qmenu, bool configurable)
 {
-    kdDebug(125) << QString( "insertItem("+action+", 0x%1, 0x%2)\n" \
).arg(defaultKeyCode3.key(),0,16).arg(defaultKeyCode4.key(),0,16); +    kdDebug(125) \
<< QString( "insertItem( "+action+", key = 0x%1, id = %2 )\n" \
).arg(defaultKeyCode3.key(),0,16).arg(id);  
     if (aKeyMap.contains(action))
         removeItem( action );
 
     KKeyEntry entry;
 
-    // If this is an application shortcut, make sure that we are really
+    // Make sure that we are really
     //  using the right modifier combination by converting to it's X equivalent
     //  and back. Neccessary for punctuation keys on varying layouts.
-    if( id ) {
-        uint keySymX, keyModX;
+    if( !action.contains( "Alternate" ) ) {
+        uint keySymX, keyModX, keyCombQt;
         keyQtToKeyX( defaultKeyCode3.key(), 0, &keySymX, &keyModX );
-        defaultKeyCode3 = keySymXToKeyQt( keySymX, keyModX );
+        keyCombQt = keySymXToKeyQt( keySymX, keyModX );
+
+	if( keyCombQt != defaultKeyCode3.key() )
+		insertItem( descr, action + " (Alternate)", keyCombQt, keyCombQt, id, qmenu, false \
); +	// If key has Shift modifier, we may want to remove it to allow
+	//  for keypad accelerator too.
+	else if( keyCombQt & Qt::SHIFT ) {
+		switch( keyCombQt & 0xffff ) {
+			case Qt::Key_Plus:
+			case Qt::Key_Minus:
+			case Qt::Key_Slash:
+			case Qt::Key_Asterisk:
+				insertItem( descr, action + " (Alternate)", keyCombQt & ~Qt::SHIFT, keyCombQt & \
~Qt::SHIFT, id, qmenu, false ); +				break;
+		}
+	}
     }
 
     entry.aDefaultKeyCode = defaultKeyCode3.key();
@@ -661,7 +680,7 @@ static const TransKey g_aTransKeySyms[] 
 	{ Qt::Key_Backspace,	XK_BackSpace },
 	{ Qt::Key_Backtab,	XK_ISO_Left_Tab },
 	{ Qt::Key_Enter,	XK_KP_Enter },
-	{ Qt::Key_SysReq,	XK_Sys_Req },
+	//{ Qt::Key_SysReq,	XK_Sys_Req },
 	{ Qt::Key_CapsLock,	XK_Caps_Lock },
 	{ Qt::Key_NumLock,	XK_Num_Lock },
 	{ Qt::Key_ScrollLock,	XK_Scroll_Lock }
@@ -864,8 +883,8 @@ uint KAccel::stringToKey( const QString&
 				// Search for Qt keycode
 				for( i = 0; i < NB_KEYS; i++ ) {
 					if( stricmp( sKeySym.ascii(), KKEYS[i].name ) == 0 ) {
-						keyCombQt |= KKEYS[i].code;
-						keyQtToKeyX( KKEYS[i].code, 0, &keySymX, 0 );
+						keyCombQt |= (KKEYS[i].code != Qt::Key_SysReq) ? KKEYS[i].code : \
Qt::Key_Print; +						keyQtToKeyX( keyCombQt & 0xffff, 0, &keySymX, 0 );
 						if( KKEYS[i].code < 0x1000 && QChar(KKEYS[i].code).isLetter() )
 							c = KKEYS[i].code;
 						break;



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic