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

List:       kde-commits
Subject:    kdenonbeta/krecipes/src/widgets
From:       Jason Kivlighn <confederacy2 () excite ! com>
Date:       2004-05-10 2:11:21
Message-ID: 20040510021121.2248722AE () office ! kde ! org
[Download RAW message or body]

CVS commit by jkivlighn: 

-Implemented keyboard navigation to the Krecipes menu.  The KreMenu class now \
receives mouse and tab focus, and you can move from one menu item to the next using \
the arrow keys.


  M +642 -588  kremenu.cpp   1.25
  M +1 -0      kremenu.h   1.12


--- kdenonbeta/krecipes/src/widgets/kremenu.cpp  #1.24:1.25
@@ -23,4 +23,5 @@
 #include <iostream>
 
+#include <kapplication.h>
 #include <kcursor.h>
 #include <kglobalsettings.h>
@@ -43,4 +44,5 @@ m_currentMenu=&(*currentMenuId);
 dragging=false;
 setMouseTracking(true);
+setFocusPolicy( QWidget::StrongFocus );
 }
 
@@ -104,4 +106,5 @@ QWidget::childEvent(e);
 void KreMenu::collectClicks(KreMenuButton *w)
 {
+setFocus();
 
 highlightButton(w);
@@ -158,4 +161,53 @@ buttonMenu->activeButton=button;
 }
 
+void KreMenu::keyPressEvent( QKeyEvent *e )
+{
+        switch ( e->key() )
+        {
+        case Qt::Key_Up:
+        {
+                int current_index = \
m_currentMenu->positionList[m_currentMenu->activeButton]; +                if ( \
current_index > 0 ) +                {
+                        highlightButton(m_currentMenu->widgetList[current_index - \
1]); +
+                        //simulate a mouse click
+                        QMouseEvent me( QEvent::MouseButtonPress, QPoint(), 0, 0 );
+                        KApplication::sendEvent( m_currentMenu->activeButton, &me );
+        
+                        e->accept();
+                }
+                break;
+        }
+        case Qt::Key_Down:
+        {
+                int current_index = \
m_currentMenu->positionList[m_currentMenu->activeButton]; +                if ( \
current_index < int(m_currentMenu->positionList.count()) - 1 ) +                {
+                        highlightButton(m_currentMenu->widgetList[current_index + \
1]); +
+                        //simulate a mouse click
+                        QMouseEvent me( QEvent::MouseButtonPress, QPoint(), 0, 0 );
+                        KApplication::sendEvent( m_currentMenu->activeButton, &me );
+        
+                        e->accept();
+                }
+                break;
+        }
+        case Qt::Key_Enter:
+        case Qt::Key_Return:
+        case Qt::Key_Space:
+        {
+                //simulate a mouse click
+                QMouseEvent me( QEvent::MouseButtonPress, QPoint(), 0, 0 );
+                KApplication::sendEvent( m_currentMenu->activeButton, &me );
+
+                e->accept();
+                break;
+        }
+        default: e->ignore();
+        }
+}
+
 void KreMenu::mousePressEvent (QMouseEvent *e)
 {
@@ -167,4 +219,6 @@ if (x > (width()-15))
         }
 dragging=true;
+
+QWidget::mousePressEvent(e);
 }
 

--- kdenonbeta/krecipes/src/widgets/kremenu.h  #1.11:1.12
@@ -76,4 +76,5 @@ protected:
         virtual void paintEvent (QPaintEvent *e);
         virtual void childEvent (QChildEvent *e);
+        virtual void keyPressEvent( QKeyEvent *e );
         virtual void mouseMoveEvent (QMouseEvent *e);
         virtual void mousePressEvent (QMouseEvent *e);


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

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