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

List:       kde-commits
Subject:    KDE/kdeedu/kig/modes
From:       Maurizio Paolini <paolini () dmf ! unicatt ! it>
Date:       2009-11-05 14:25:09
Message-ID: 1257431109.714205.28746.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1045233 by paolini:

bug fix: duplicate triggering of action at top level in object context menu


 M  +16 -9     popup.cc  


--- trunk/KDE/kdeedu/kig/modes/popup.cc #1045232:1045233
@@ -272,6 +272,7 @@
   KIconLoader* l = part.iconLoader();
   for ( uint i = 0; i < NumberOfMenus; ++i )
   {
+    if ( i == ToplevelMenu ) continue;
     mmenus[i] = new QMenu( this );
     if ( !menunames[i].isEmpty() )
       mmenus[i]->setTitle( menunames[i] );
@@ -280,6 +281,13 @@
       mmenus[i]->setIcon( KIcon( menuicons[i], l ) );
     }
   }
+  mmenus[ToplevelMenu] = this;
+  /*
+   * mp: previously ToplevelMenu was treated like a submenu (of itself).
+   * unfortunately this had as side effect a duplicated triggering of its
+   * actions with unpredictable consequences.  In this way the addAction
+   * in addInternalAction directly adds the action at toplevel.
+   */
 
   connect( this, SIGNAL( triggered( QAction* ) ),
            this, SLOT( toplevelMenuSlot( QAction* ) ) );
@@ -290,13 +298,15 @@
     for ( uint j = 0; j < mproviders.size(); ++j )
       mproviders[j]->fillUpMenu( *this, i, nextfree );
   };
+  QAction* firstrealaction = actions()[1];
   for ( int i = 0; i < NumberOfMenus; ++i )
   {
+    if ( i == ToplevelMenu ) continue;
     if ( mmenus[i]->actions().count() == 0 ) continue;
-    if ( i == ToplevelMenu ) continue;
-    addMenu( mmenus[i] );
+    //addMenu( mmenus[i] );
+    insertMenu( firstrealaction, mmenus[i] );
   };
-  addActions( mmenus[ToplevelMenu]->actions() );
+  // addActions( mmenus[ToplevelMenu]->actions() );
 }
 
 void NormalModePopupObjects::toplevelMenuSlot( QAction* act )
@@ -768,24 +778,21 @@
 QAction* NormalModePopupObjects::addInternalAction( int menu, const QIcon& icon, \
const QString& name, int id )  {
 //kDebug() << "ID: " << id;
-  QMenu* m = mmenus[menu];
-  QAction* newaction = m->addAction( icon, name );
+  QAction* newaction = mmenus[menu]->addAction( icon, name );
   newaction->setData( QVariant::fromValue( ( menu << 8 ) | id ) );
   return newaction;
 }
 
 QAction* NormalModePopupObjects::addInternalAction( int menu, const QString& name, \
int id )  {
-  QMenu* m = mmenus[menu];
-  QAction* newaction = m->addAction( name );
+  QAction* newaction = mmenus[menu]->addAction( name );
   newaction->setData( QVariant::fromValue( ( menu << 8 ) | id ) );
   return newaction;
 }
 
 QAction* NormalModePopupObjects::addInternalAction( int menu, QAction* act )
 {
-  QMenu* m = mmenus[menu];
-  m->addAction( act );
+  mmenus[menu]->addAction( act );
   return act;
 }
 


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

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