]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Correction: remove destroyed actions from the actions list.
authormzn <mzn@opencascade.com>
Wed, 15 Sep 2010 11:36:06 +0000 (11:36 +0000)
committermzn <mzn@opencascade.com>
Wed, 15 Sep 2010 11:36:06 +0000 (11:36 +0000)
src/SUIT/SUIT_ShortcutMgr.cxx
src/SUIT/SUIT_ShortcutMgr.h

index ab5afccbc3005b6928295c045628dab1c2bbb0e3..44eb8a950c9958953f03c47e6c818d8a970b1591 100644 (file)
@@ -119,9 +119,11 @@ void SUIT_ShortcutMgr::processAction( QtxAction* action )
  
   if ( !shortcutActionName.isEmpty() ) {
     // Add action to the actions map
-    QList<QtxAction*> actions = myShortcutActions.values( shortcutActionName );
-    if ( !actions.contains(action) )
-      myShortcutActions.insertMulti( shortcutActionName, action );
+    if ( !myShortcutActions.contains( shortcutActionName, action ) ) {
+      myShortcutActions.insert( shortcutActionName, action );
+      connect( action, SIGNAL( destroyed( QObject* ) ), 
+              this, SLOT ( onActionDestroyed( QObject* ) ) );
+    }
 
     QKeySequence keySeq = getShortcutByActionName( shortcutActionName );
     action->setShortcut( keySeq );
@@ -168,3 +170,18 @@ void SUIT_ShortcutMgr::updateShortcuts()
     action->setShortcut( keySeq );
   }
 }
+
+/*!
+  \brief Called when the corresponding action is destroyed.
+  
+  Removes destroyed action from the actions list.
+
+  \param obj action being destroyed
+*/
+void SUIT_ShortcutMgr::onActionDestroyed( QObject* obj )
+{
+  QtxAction* anAction = (QtxAction*)obj;
+  
+  if ( anAction )
+    myShortcutActions.remove( anAction->shortcutActionName(), anAction );
+}
index e620db8e6370106fd3f41cb3288fe19c048752ed..eafd854e235ba5f12a36ebb37cf9850afde06ce5 100644 (file)
@@ -26,7 +26,7 @@
 #include "SUIT.h"
 
 #include <QObject>
-#include <QMap>
+#include <QMultiMap>
 
 class QtxAction;
 
@@ -42,6 +42,7 @@ class QKeySequence;
 */
 class SUIT_EXPORT SUIT_ShortcutMgr: public QObject 
 {
+  Q_OBJECT
 public:
   static void Init();
   static SUIT_ShortcutMgr* getShortcutMgr();
@@ -53,6 +54,9 @@ protected:
   SUIT_ShortcutMgr();
   virtual ~SUIT_ShortcutMgr();
 
+private slots:
+  void onActionDestroyed( QObject* );
+
 private:
   virtual bool eventFilter( QObject* o, QEvent* e );
 
@@ -61,7 +65,7 @@ private:
 
 private:
   static SUIT_ShortcutMgr* myShortcutMgr;
-  QMap<QString, QtxAction*> myShortcutActions;
+  QMultiMap<QString, QtxAction*> myShortcutActions;
 };
 
 #if defined WIN32