CVS commit by lunakl: Decode properly also shortcuts expressed as the Macintosh keyboard shortcuts. M +13 -0 kkeyserver_x11.cpp 1.34 M +8 -0 kkeyserver_x11.h 1.16 M +5 -1 kshortcut.cpp 1.26 --- kdelibs/kdecore/kkeyserver_x11.cpp #1.33:1.34 @@ -792,4 +792,17 @@ QString modToStringInternal( uint mod ) QString modToStringUser( uint mod ) { return modToString( mod, true ); } +uint stringUserToMod( const QString& mod ) +{ + if( !g_bInitializedKKeyLabels ) + intializeKKeyLabels(); + + QString s; + for( int i = KKey::MOD_FLAG_COUNT-1; i >= 0; i-- ) { + if( mod.lower() == g_rgModInfo[i].sLabel.lower()) + return g_rgModInfo[i].mod; + } + return 0; +} + /*void keySymModToKeyX( uint sym, uint mod, unsigned char *pKeyCodeX, uint *pKeySymX, uint *pKeyModX ) { --- kdelibs/kdecore/kkeyserver_x11.h #1.15:1.16 @@ -447,4 +447,12 @@ namespace KKeyServer /** + * Converts the modifier given as user-readable string + * to KKey::ModFlag modifier, or 0. + * @internal + * @since 3.5 + */ + KDECORE_EXPORT uint stringUserToMod( const QString& mod ); + + /** * @internal * Unimplemented? --- kdelibs/kdecore/kshortcut.cpp #1.25:1.26 @@ -124,6 +124,10 @@ bool KKey::init( const QString& sSpec ) else if( s == "win" ) m_mod |= KKey::WIN; else if( s == "meta" ) m_mod |= KKey::WIN; + else { + uint m = KKeyServer::stringUserToMod( s ); + if( m != 0 ) m_mod |= m; else break; } + } // If there is one non-blank key left: if( (i == rgs.size() - 1 && !rgs[i].isEmpty()) ) {