Skip to content

Commit

Permalink
Merge branch 'master' of github.com:FreeCAD/FreeCAD
Browse files Browse the repository at this point in the history
  • Loading branch information
yorikvanhavre committed Sep 4, 2015
2 parents 39035fc + 134acba commit bfad821
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions src/Gui/TaskView/TaskView.cpp
Expand Up @@ -28,6 +28,7 @@
# include <QActionEvent>
# include <QApplication>
# include <QCursor>
# include <QPointer>
# include <QPushButton>
#endif

Expand Down Expand Up @@ -586,6 +587,23 @@ void TaskView::removeDialog(void)

void TaskView::updateWatcher(void)
{
// In case a child of the TaskView has the focus and get hidden we have
// to make sure that set the focus on a widget that won't be hidden or
// deleted because otherwise Qt may forward the focus via focusNextPrevChild()
// to the mdi area which may switch to another mdi view which is not an
// acceptable behaviour.
QWidget *fw = QApplication::focusWidget();
if (!fw)
this->setFocus();
QPointer<QWidget> fwp = fw;
while (fw && !fw->isWindow()) {
if (fw == this) {
this->setFocus();
break;
}
fw = fw->parentWidget();
}

// add all widgets for all watcher to the task view
for (std::vector<TaskWatcher*>::iterator it=ActiveWatcher.begin();it!=ActiveWatcher.end();++it) {
bool match = (*it)->shouldShow();
Expand All @@ -597,6 +615,11 @@ void TaskView::updateWatcher(void)
(*it2)->hide();
}
}

// In case the previous widget that had the focus is still visible
// give it the focus back.
if (fwp && fwp->isVisible())
fwp->setFocus();
}

void TaskView::addTaskWatcher(const std::vector<TaskWatcher*> &Watcher)
Expand Down Expand Up @@ -639,6 +662,22 @@ void TaskView::addTaskWatcher(void)

void TaskView::removeTaskWatcher(void)
{
// In case a child of the TaskView has the focus and get hidden we have
// to make sure that set the focus on a widget that won't be hidden or
// deleted because otherwise Qt may forward the focus via focusNextPrevChild()
// to the mdi area which may switch to another mdi view which is not an
// acceptable behaviour.
QWidget *fw = QApplication::focusWidget();
if (!fw)
this->setFocus();
while (fw && !fw->isWindow()) {
if (fw == this) {
this->setFocus();
break;
}
fw = fw->parentWidget();
}

// remove all widgets
for (std::vector<TaskWatcher*>::iterator it=ActiveWatcher.begin();it!=ActiveWatcher.end();++it) {
std::vector<QWidget*> &cont = (*it)->getWatcherContent();
Expand Down

0 comments on commit bfad821

Please sign in to comment.