From 17b7003ea71fac6642250df09e49f32a440bac46 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 20 May 2014 15:25:03 +0200 Subject: [PATCH] + fixes #0001549: crash with Draft move tool while sketch is in edit mode --- src/Gui/Control.cpp | 32 +++++++++++++++++++ src/Gui/Control.h | 5 +++ .../Gui/ViewProviderFemConstraintBearing.cpp | 2 +- .../Gui/ViewProviderFemConstraintFixed.cpp | 2 +- .../Gui/ViewProviderFemConstraintForce.cpp | 2 +- .../Fem/Gui/ViewProviderFemConstraintGear.cpp | 2 +- .../Gui/ViewProviderFemConstraintPulley.cpp | 2 +- .../PartDesign/Gui/ViewProviderChamfer.cpp | 2 +- src/Mod/PartDesign/Gui/ViewProviderDraft.cpp | 2 +- src/Mod/PartDesign/Gui/ViewProviderFillet.cpp | 2 +- src/Mod/PartDesign/Gui/ViewProviderGroove.cpp | 2 +- src/Mod/PartDesign/Gui/ViewProviderPad.cpp | 2 +- src/Mod/PartDesign/Gui/ViewProviderPocket.cpp | 2 +- .../PartDesign/Gui/ViewProviderRevolution.cpp | 2 +- .../Gui/ViewProviderTransformed.cpp | 2 +- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 2 +- 16 files changed, 51 insertions(+), 14 deletions(-) diff --git a/src/Gui/Control.cpp b/src/Gui/Control.cpp index 351d9b75c..9488fffa3 100644 --- a/src/Gui/Control.cpp +++ b/src/Gui/Control.cpp @@ -24,6 +24,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include # include # include # include @@ -162,6 +163,37 @@ Gui::TaskView::TaskDialog* ControlSingleton::activeDialog() const return ActiveDialog; } +Gui::TaskView::TaskView* ControlSingleton::getTaskPanel() +{ + // should return the pointer to combo view + Gui::DockWnd::CombiView* pcCombiView = qobject_cast + (Gui::DockWindowManager::instance()->getDockWindow("Combo View")); + if (pcCombiView) + return pcCombiView->getTaskPanel(); + else + return _taskPanel; +} + +void ControlSingleton::accept() +{ + Gui::TaskView::TaskView* taskPanel = getTaskPanel(); + if (taskPanel) { + taskPanel->accept(); + qApp->processEvents(QEventLoop::ExcludeUserInputEvents | + QEventLoop::ExcludeSocketNotifiers); + } +} + +void ControlSingleton::reject() +{ + Gui::TaskView::TaskView* taskPanel = getTaskPanel(); + if (taskPanel) { + taskPanel->reject(); + qApp->processEvents(QEventLoop::ExcludeUserInputEvents | + QEventLoop::ExcludeSocketNotifiers); + } +} + void ControlSingleton::closeDialog() { Gui::DockWnd::CombiView* pcCombiView = qobject_cast diff --git a/src/Gui/Control.h b/src/Gui/Control.h index a6ec10099..d9c589096 100644 --- a/src/Gui/Control.h +++ b/src/Gui/Control.h @@ -82,6 +82,8 @@ public: bool isAllowedAlterSelection(void) const; public Q_SLOTS: + void accept(); + void reject(); void closeDialog(); /// raises the task view panel void showTaskView(); @@ -90,6 +92,9 @@ private Q_SLOTS: /// This get called by the TaskView when the Dialog is finished void closedDialog(); +private: + Gui::TaskView::TaskView *getTaskPanel(); + private: struct status { std::bitset<32> StatusBits; diff --git a/src/Mod/Fem/Gui/ViewProviderFemConstraintBearing.cpp b/src/Mod/Fem/Gui/ViewProviderFemConstraintBearing.cpp index 7e8073da8..f30c64ce2 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemConstraintBearing.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemConstraintBearing.cpp @@ -77,7 +77,7 @@ bool ViewProviderFemConstraintBearing::setEdit(int ModNum) msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) - Gui::Control().closeDialog(); + Gui::Control().reject(); else return false; } else if (constraintDialog != NULL) { diff --git a/src/Mod/Fem/Gui/ViewProviderFemConstraintFixed.cpp b/src/Mod/Fem/Gui/ViewProviderFemConstraintFixed.cpp index 10093317a..c4358dfa3 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemConstraintFixed.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemConstraintFixed.cpp @@ -77,7 +77,7 @@ bool ViewProviderFemConstraintFixed::setEdit(int ModNum) msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) - Gui::Control().closeDialog(); + Gui::Control().reject(); else return false; } else if (constraintDialog != NULL) { diff --git a/src/Mod/Fem/Gui/ViewProviderFemConstraintForce.cpp b/src/Mod/Fem/Gui/ViewProviderFemConstraintForce.cpp index 55b951015..4d1ac8c2a 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemConstraintForce.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemConstraintForce.cpp @@ -77,7 +77,7 @@ bool ViewProviderFemConstraintForce::setEdit(int ModNum) msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) - Gui::Control().closeDialog(); + Gui::Control().reject(); else return false; } else if (constraintDialog != NULL) { diff --git a/src/Mod/Fem/Gui/ViewProviderFemConstraintGear.cpp b/src/Mod/Fem/Gui/ViewProviderFemConstraintGear.cpp index aa4d47188..63a8c8481 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemConstraintGear.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemConstraintGear.cpp @@ -76,7 +76,7 @@ bool ViewProviderFemConstraintGear::setEdit(int ModNum) msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) - Gui::Control().closeDialog(); + Gui::Control().reject(); else return false; } else if (constraintDialog != NULL) { diff --git a/src/Mod/Fem/Gui/ViewProviderFemConstraintPulley.cpp b/src/Mod/Fem/Gui/ViewProviderFemConstraintPulley.cpp index 584bc0bb9..3b93683ec 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemConstraintPulley.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemConstraintPulley.cpp @@ -75,7 +75,7 @@ bool ViewProviderFemConstraintPulley::setEdit(int ModNum) msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) - Gui::Control().closeDialog(); + Gui::Control().reject(); else return false; } else if (constraintDialog != NULL) { diff --git a/src/Mod/PartDesign/Gui/ViewProviderChamfer.cpp b/src/Mod/PartDesign/Gui/ViewProviderChamfer.cpp index 080d78af0..0f9d924aa 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderChamfer.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderChamfer.cpp @@ -75,7 +75,7 @@ bool ViewProviderChamfer::setEdit(int ModNum) msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) - Gui::Control().closeDialog(); + Gui::Control().reject(); else return false; } diff --git a/src/Mod/PartDesign/Gui/ViewProviderDraft.cpp b/src/Mod/PartDesign/Gui/ViewProviderDraft.cpp index b548c7897..06f8c3081 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderDraft.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderDraft.cpp @@ -75,7 +75,7 @@ bool ViewProviderDraft::setEdit(int ModNum) msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) - Gui::Control().closeDialog(); + Gui::Control().reject(); else return false; } diff --git a/src/Mod/PartDesign/Gui/ViewProviderFillet.cpp b/src/Mod/PartDesign/Gui/ViewProviderFillet.cpp index a73a443df..90952f698 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderFillet.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderFillet.cpp @@ -75,7 +75,7 @@ bool ViewProviderFillet::setEdit(int ModNum) msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) - Gui::Control().closeDialog(); + Gui::Control().reject(); else return false; } diff --git a/src/Mod/PartDesign/Gui/ViewProviderGroove.cpp b/src/Mod/PartDesign/Gui/ViewProviderGroove.cpp index d329d9d81..9771feb55 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderGroove.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderGroove.cpp @@ -82,7 +82,7 @@ bool ViewProviderGroove::setEdit(int ModNum) msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) - Gui::Control().closeDialog(); + Gui::Control().reject(); else return false; } diff --git a/src/Mod/PartDesign/Gui/ViewProviderPad.cpp b/src/Mod/PartDesign/Gui/ViewProviderPad.cpp index 9da548d3a..991cbfd30 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderPad.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderPad.cpp @@ -87,7 +87,7 @@ bool ViewProviderPad::setEdit(int ModNum) msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) - Gui::Control().closeDialog(); + Gui::Control().reject(); else return false; } diff --git a/src/Mod/PartDesign/Gui/ViewProviderPocket.cpp b/src/Mod/PartDesign/Gui/ViewProviderPocket.cpp index e7d0fa3c0..4b70b838c 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderPocket.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderPocket.cpp @@ -82,7 +82,7 @@ bool ViewProviderPocket::setEdit(int ModNum) msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) - Gui::Control().closeDialog(); + Gui::Control().reject(); else return false; } diff --git a/src/Mod/PartDesign/Gui/ViewProviderRevolution.cpp b/src/Mod/PartDesign/Gui/ViewProviderRevolution.cpp index c25be8340..5715b0231 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderRevolution.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderRevolution.cpp @@ -82,7 +82,7 @@ bool ViewProviderRevolution::setEdit(int ModNum) msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) - Gui::Control().closeDialog(); + Gui::Control().reject(); else return false; } diff --git a/src/Mod/PartDesign/Gui/ViewProviderTransformed.cpp b/src/Mod/PartDesign/Gui/ViewProviderTransformed.cpp index a28609bc8..1e2ac6c12 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderTransformed.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderTransformed.cpp @@ -178,7 +178,7 @@ const bool ViewProviderTransformed::checkDlgOpen(TaskDlgTransformedParameters* t msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) - Gui::Control().closeDialog(); + Gui::Control().reject(); else return false; } diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index b51ef41be..4c07947fd 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -2991,7 +2991,7 @@ bool ViewProviderSketch::setEdit(int ModNum) msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) - Gui::Control().closeDialog(); + Gui::Control().reject(); else return false; }