From da4d35ac894d1cbd2e397146567e50e074b3dc2a Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 22 Oct 2017 19:49:56 +0200 Subject: [PATCH] improvements of wait cursor make filtering of modal dialogs working with Qt5 save/restore filter flags don't filter events for File > Export when using showPreferences don't show wait cursor --- src/Gui/Application.cpp | 1 + src/Gui/ApplicationPy.cpp | 4 ++++ src/Gui/WaitCursor.cpp | 13 +++++++++++++ src/Gui/WaitCursor.h | 1 + 4 files changed, 19 insertions(+) diff --git a/src/Gui/Application.cpp b/src/Gui/Application.cpp index 039693e368..d268e63138 100644 --- a/src/Gui/Application.cpp +++ b/src/Gui/Application.cpp @@ -588,6 +588,7 @@ void Application::importFrom(const char* FileName, const char* DocName, const ch void Application::exportTo(const char* FileName, const char* DocName, const char* Module) { WaitCursor wc; + wc.setIgnoreEvents(WaitCursor::NoEvents); Base::FileInfo File(FileName); std::string te = File.extension(); string unicodepath = Base::Tools::escapedUnicodeFromUtf8(File.filePath().c_str()); diff --git a/src/Gui/ApplicationPy.cpp b/src/Gui/ApplicationPy.cpp index 8457b99422..0f5bccc01c 100644 --- a/src/Gui/ApplicationPy.cpp +++ b/src/Gui/ApplicationPy.cpp @@ -50,6 +50,7 @@ #include "View3DInventor.h" #include "SplitView3DInventor.h" #include "ViewProvider.h" +#include "WaitCursor.h" #include "WidgetFactory.h" #include "Workbench.h" #include "WorkbenchManager.h" @@ -1143,7 +1144,10 @@ PyObject* Application::sShowPreferences(PyObject * /*self*/, PyObject *args,PyOb Gui::Dialog::DlgPreferencesImp cDlg(getMainWindow()); if (pstr) cDlg.activateGroupPage(QString::fromUtf8(pstr),idx); + WaitCursor wc; + wc.restoreCursor(); cDlg.exec(); + wc.setWaitCursor(); Py_INCREF(Py_None); return Py_None; diff --git a/src/Gui/WaitCursor.cpp b/src/Gui/WaitCursor.cpp index d6673ba3c6..bb47a538b6 100644 --- a/src/Gui/WaitCursor.cpp +++ b/src/Gui/WaitCursor.cpp @@ -32,6 +32,10 @@ # endif #endif +#if QT_VERSION >= 0x050000 +# include +#endif + #include "WaitCursor.h" using namespace Gui; @@ -100,6 +104,13 @@ void WaitCursorP::setIgnoreEvents(WaitCursor::FilterEventsFlags flags) bool WaitCursorP::isModalDialog(QObject* o) const { QWidget* parent = qobject_cast(o); +#if QT_VERSION >= 0x050000 + if (!parent) { + QWindow* window = qobject_cast(o); + if (window) + parent = QWidget::find(window->winId()); + } +#endif while (parent) { QMessageBox* dlg = qobject_cast(parent); if (dlg && dlg->isModal()) @@ -144,6 +155,7 @@ WaitCursor::WaitCursor() { if (instances++ == 0) setWaitCursor(); + filter = WaitCursorP::getInstance()->ignoreEvents(); } /** Restores the last cursor again. */ @@ -151,6 +163,7 @@ WaitCursor::~WaitCursor() { if (--instances == 0) restoreCursor(); + WaitCursorP::getInstance()->setIgnoreEvents(filter); } /** diff --git a/src/Gui/WaitCursor.h b/src/Gui/WaitCursor.h index 5140ed2c06..3c194659f1 100644 --- a/src/Gui/WaitCursor.h +++ b/src/Gui/WaitCursor.h @@ -78,6 +78,7 @@ public: void setIgnoreEvents(FilterEventsFlags flags = AllEvents); private: + FilterEventsFlags filter; static int instances; };