Index: iconsidepane.cpp
===================================================================
--- iconsidepane.cpp	(revision 465424)
+++ iconsidepane.cpp	(working copy)
@@ -1,3 +1,5 @@
+#include <iostream>
+using namespace std;
 /*
   This file is part of KDE Kontact.
 
@@ -96,7 +98,8 @@
   : QListBoxItem( parent ),
     mPlugin( plugin ),
     mHasHover( false ),
-    mPaintActive( false )
+    mPaintActive( false ),
+    mShowShortcut( false )
 {
   reloadPixmap();
   setCustomHighlighting( true );
@@ -214,7 +217,7 @@
       }
 
       if ( !navigator()->showIcons() || mPixmap.height() < fm.height() )
-        y = height( box )/2 - fm.height()/2 + fm.ascent();
+        y = height( box )/2 - fm.height()/2 + fm.ascent(); 
       else
         y += mPixmap.height()/2 - fm.height()/2 + fm.ascent();
     }
@@ -231,6 +234,20 @@
     p->drawText( x, y, text() );
   }
 
+  if ( mShowShortcut && !isSelected() ) {
+    QFontMetrics fm = p->fontMetrics();
+    int rad = fm.width("99") + 4;
+    QString index = QString::number( box->index( this ) + 1 );
+    int textW = fm.width( index );
+    p->setBrush( box->colorGroup().highlight().dark(115) );
+    p->drawEllipse( 2, 2, rad, rad );
+    p->setPen( box->colorGroup().highlightedText() );
+
+    p->drawText( 2 + rad / 2 - textW / 2,
+                 2 + rad / 2 - fm.height()/2 + fm.ascent(),
+                 index );
+  }
+
   // ensure that we don't have a stale flag around
   if (  isCurrent() || isSelected() ) mHasHover = false;
 }
@@ -245,6 +262,16 @@
   mPaintActive = paintActive;
 }
 
+void EntryItem::setShowShortcut( bool showShortcut )
+{
+    if (mShowShortcut == showShortcut)
+    {
+        return;
+    }
+
+    mShowShortcut = showShortcut;
+}
+
 Navigator::Navigator( SidePaneBase *parent, const char *name )
   : KListBox( parent, name ), mSidePane( parent ),
     mShowIcons( true ), mShowText( true )
@@ -276,9 +303,39 @@
   QToolTip::remove( this );
   if ( !mShowText )
     new EntryItemToolTip( this );
+}
 
+bool IconSidePane::eventFilter( QObject * watched, QEvent * e )
+{
+  if ( e->type() == QEvent::KeyPress ) {
+    QKeyEvent* keyEvent = static_cast<QKeyEvent*>(e);
+    if ( keyEvent->stateAfter() == Qt::ControlButton ) {
+      for ( uint i = 0; i < mNavigator->count(); ++i ) {
+        EntryItem *entry = static_cast<EntryItem*>( mNavigator->item( i ) );
+        entry->setShowShortcut( true );
+      }
+      mNavigator->triggerUpdate( false );
+    }
+  }
+  else if ( e->type() == QEvent::KeyRelease ) {
+    QKeyEvent* keyEvent = static_cast<QKeyEvent*>(e);
+    if ( keyEvent->state() == Qt::ControlButton ) {
+      for ( uint i = 0; i < mNavigator->count(); ++i ) {
+        EntryItem *entry = static_cast<EntryItem*>( mNavigator->item( i ) );
+        entry->setShowShortcut( false );
+      }
+      mNavigator->triggerUpdate( false );
+    }
+  }
+
+  return false;
 }
 
+void IconSidePane::updatePlugins()
+{
+  mNavigator->updatePlugins( core()->pluginList() );
+}
+
 QSize Navigator::sizeHint() const
 {
   return QSize( 100, 100 );
@@ -546,17 +603,13 @@
            SIGNAL( pluginSelected( Kontact::Plugin* ) ) );
 
   setAcceptDrops( true );
+  parent->installEventFilter(this);
 }
 
 IconSidePane::~IconSidePane()
 {
 }
 
-void IconSidePane::updatePlugins()
-{
-  mNavigator->updatePlugins( core()->pluginList() );
-}
-
 void IconSidePane::selectPlugin( Kontact::Plugin *plugin )
 {
   bool blocked = signalsBlocked();
Index: iconsidepane.h
===================================================================
--- iconsidepane.h	(revision 465424)
+++ iconsidepane.h	(working copy)
@@ -61,6 +61,8 @@
 
     void setHover( bool );
     void setPaintActive( bool );
+    void setShowShortcut( bool );
+
     bool paintActive() const { return mPaintActive; }
     /**
       returns the width of this item.
@@ -81,6 +83,7 @@
     QPixmap mPixmap;
     bool mHasHover;
     bool mPaintActive;
+    bool mShowShortcut;
 };
 
 /**
@@ -133,6 +136,7 @@
     const QPtrList<KAction> & actions() { return mActions; }
     bool showIcons() const { return mShowIcons; }
     bool showText() const { return mShowText; }
+
   signals:
     void pluginActivated( Kontact::Plugin * );
 
@@ -178,6 +182,8 @@
 
     virtual void indicateForegrunding( Kontact::Plugin* );
 
+    bool eventFilter( QObject * watched, QEvent * e );
+
   public slots:
     virtual void updatePlugins();
     virtual void selectPlugin( Kontact::Plugin* );
