X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_OperationMgr.cpp;h=3e6c412235cbbcaef8a5b84a0576d08f1632c321;hb=220bd2b37119be1c65abf88a88792445cb9d99f8;hp=f8879aa62eddfcff893e0f493d11218a527c1751;hpb=ea169bdaac0782d3153c5e1e5b2ae34a576cc6da;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_OperationMgr.cpp b/src/XGUI/XGUI_OperationMgr.cpp index f8879aa62..3e6c41223 100644 --- a/src/XGUI/XGUI_OperationMgr.cpp +++ b/src/XGUI/XGUI_OperationMgr.cpp @@ -48,11 +48,14 @@ public: } ~XGUI_ShortCutListener() {} + /// Switch on short cut listener + void setActive(const bool theIsActive) { myIsActive = theIsActive; } + /// Redefinition of virtual function to process Delete key release virtual bool eventFilter(QObject *theObject, QEvent *theEvent) { bool isAccepted = false; - if (theEvent->type() == QEvent::KeyRelease) { + if (myIsActive && theEvent->type() == QEvent::KeyRelease) { QKeyEvent* aKeyEvent = dynamic_cast(theEvent); if(aKeyEvent) { switch (aKeyEvent->key()) { @@ -69,6 +72,7 @@ public: private: XGUI_OperationMgr* myOperationMgr; /// processor for key event + bool myIsActive; /// boolean state whether the event filter perform own signal processing }; XGUI_OperationMgr::XGUI_OperationMgr(QObject* theParent, @@ -78,13 +82,23 @@ XGUI_OperationMgr::XGUI_OperationMgr(QObject* theParent, /// we need to install filter to the application in order to react to 'Delete' key button /// this key can not be a short cut for a corresponded action because we need to set /// the actions priority - XGUI_ShortCutListener* aShortCutListener = new XGUI_ShortCutListener(theParent, this); + myShortCutListener = new XGUI_ShortCutListener(theParent, this); } XGUI_OperationMgr::~XGUI_OperationMgr() { } +void XGUI_OperationMgr::activate() +{ + myShortCutListener->setActive(true); +} + +void XGUI_OperationMgr::deactivate() +{ + myShortCutListener->setActive(false); +} + ModuleBase_Operation* XGUI_OperationMgr::currentOperation() const { return myOperations.count() > 0 ? myOperations.last() : 0; @@ -631,12 +645,19 @@ bool XGUI_OperationMgr::onProcessDelete(QObject* theObject) ModuleBase_ModelWidget* anActiveWgt = 0; // firstly the widget should process Delete action ModuleBase_IPropertyPanel* aPanel; + bool isPPChildObject = false; if (aOperation) { aPanel = aOperation->propertyPanel(); - if (aPanel) - anActiveWgt = aPanel->activeWidget(); - if (anActiveWgt) { - isAccepted = anActiveWgt->processDelete(); + if (aPanel) { + isPPChildObject = isChildObject(theObject, aPanel); + // process delete in active widget only if delete sender is child of property panel + // it is necessary for the case when OB is shown, user perform selection and click Delete + if (isPPChildObject) { + anActiveWgt = aPanel->activeWidget(); + if (anActiveWgt) { + isAccepted = anActiveWgt->processDelete(); + } + } } } if (!isAccepted) { @@ -645,8 +666,10 @@ bool XGUI_OperationMgr::onProcessDelete(QObject* theObject) /// processing delete by workshop XGUI_ObjectsBrowser* aBrowser = workshop()->objectBrowser(); QWidget* aViewPort = myWorkshop->viewer()->activeViewPort(); - if (isChildObject(theObject, aBrowser) || - isChildObject(theObject, aViewPort)) + // property panel child object is processed to process delete performed on Apply button of PP + if (theObject == aBrowser->treeView() || + isChildObject(theObject, aViewPort) || + isPPChildObject) workshop()->deleteObjects(); isAccepted = true; }