diff --git a/src/plugins/coreplugin/coreplugin.pro b/src/plugins/coreplugin/coreplugin.pro index 791aa816714b7a8e868c9bcc2807982f334cbdf6..ba45a0699c09fc659e5afaeeaaef39cfd6029f12 100644 --- a/src/plugins/coreplugin/coreplugin.pro +++ b/src/plugins/coreplugin/coreplugin.pro @@ -168,6 +168,7 @@ RESOURCES += core.qrc \ win32 { SOURCES += progressmanager/progressmanager_win.cpp + LIBS += -lole32 } else:macx { OBJECTIVE_SOURCES += progressmanager/progressmanager_mac.mm diff --git a/src/plugins/coreplugin/progressmanager/progressmanager.cpp b/src/plugins/coreplugin/progressmanager/progressmanager.cpp index 7418de8cf1bb5f4f8f25072672af5eae34f70c6a..fce083bf60ed3c53c48d13632b6b97376040f8b9 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager.cpp +++ b/src/plugins/coreplugin/progressmanager/progressmanager.cpp @@ -50,10 +50,7 @@ ProgressManagerPrivate::ProgressManagerPrivate(QObject *parent) ProgressManagerPrivate::~ProgressManagerPrivate() { -} - -void ProgressManagerPrivate::init() -{ + cleanup(); } void ProgressManagerPrivate::cancelTasks(const QString &type) diff --git a/src/plugins/coreplugin/progressmanager/progressmanager_mac.mm b/src/plugins/coreplugin/progressmanager/progressmanager_mac.mm index 296db9258ed79a0a3e9117c4a3a7a00a4e163f95..9d1a9ec10e6e96f0465d684ae8a7b1ad7278c926 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager_mac.mm +++ b/src/plugins/coreplugin/progressmanager/progressmanager_mac.mm @@ -29,6 +29,14 @@ #include "progressmanager_p.h" +void Core::Internal::ProgressManagerPrivate::init() +{ +} + +void Core::Internal::ProgressManagerPrivate::cleanup() +{ +} + #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 #import <AppKit/NSDockTile.h> #import <AppKit/NSApplication.h> diff --git a/src/plugins/coreplugin/progressmanager/progressmanager_p.h b/src/plugins/coreplugin/progressmanager/progressmanager_p.h index 80819a36d04a35b26333a6f5258e7265874a8993..e219fb7a7a684472aab08be71ca31c902c7d57d6 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager_p.h +++ b/src/plugins/coreplugin/progressmanager/progressmanager_p.h @@ -48,6 +48,7 @@ public: ProgressManagerPrivate(QObject *parent = 0); ~ProgressManagerPrivate(); void init(); + void cleanup(); FutureProgress *addTask(const QFuture<void> &future, const QString &title, const QString &type, ProgressFlags flags); diff --git a/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp b/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp index a427349c0fd8a1c867d0f1dda0ca2836feb56caf..2e4cb614bd23d27f5fc5123aa39555d0041799ba 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp +++ b/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp @@ -27,8 +27,91 @@ ** **************************************************************************/ +#include <QtCore/QVariant> +#include <QtGui/QMainWindow> + +#include <coreplugin/icore.h> + #include "progressmanager_p.h" +// for windows progress bar +#include <shobjidl.h> + +// Windows 7 SDK required +#ifdef __ITaskbarList3_INTERFACE_DEFINED__ + +namespace { + int total = 0; + ITaskbarList3* pITask = 0; +} + +void Core::Internal::ProgressManagerPrivate::init() +{ + CoInitialize(NULL); + HRESULT hRes = CoCreateInstance(CLSID_TaskbarList, + NULL,CLSCTX_INPROC_SERVER, + IID_ITaskbarList3,(LPVOID*) &pITask); + if (FAILED(hRes)) + { + pITask = 0; + CoUninitialize(); + return; + } + + pITask->HrInit(); + return; +} + +void Core::Internal::ProgressManagerPrivate::cleanup() +{ + if (pITask) { + pITask->Release(); + pITask = NULL; + CoUninitialize(); + } +} + + +void Core::Internal::ProgressManagerPrivate::setApplicationLabel(const QString &text) +{ + Q_UNUSED(text) +} + +void Core::Internal::ProgressManagerPrivate::setApplicationProgressRange(int min, int max) +{ + total = max-min; +} + +void Core::Internal::ProgressManagerPrivate::setApplicationProgressValue(int value) +{ + if (pITask) { + WId winId = Core::ICore::instance()->mainWindow()->winId(); + pITask->SetProgressValue(winId, value, total); + } +} + +void Core::Internal::ProgressManagerPrivate::setApplicationProgressVisible(bool visible) +{ + if (!pITask) + return; + + WId winId = Core::ICore::instance()->mainWindow()->winId(); + if (visible) + pITask->SetProgressState(winId, TBPF_NORMAL); + else + pITask->SetProgressState(winId, TBPF_NOPROGRESS); +} + +#else + +void Core::Internal::ProgressManagerPrivate::init() +{ +} + +void Core::Internal::ProgressManagerPrivate::cleanup() +{ +} + void Core::Internal::ProgressManagerPrivate::setApplicationLabel(const QString &text) { Q_UNUSED(text) @@ -49,3 +132,6 @@ void Core::Internal::ProgressManagerPrivate::setApplicationProgressVisible(bool { Q_UNUSED(visible) } + + +#endif // __ITaskbarList2_INTERFACE_DEFINED__ diff --git a/src/plugins/coreplugin/progressmanager/progressmanager_x11.cpp b/src/plugins/coreplugin/progressmanager/progressmanager_x11.cpp index a427349c0fd8a1c867d0f1dda0ca2836feb56caf..69bc2d0dcd1690a7c1a8ca59b67464f4d3a61fbc 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager_x11.cpp +++ b/src/plugins/coreplugin/progressmanager/progressmanager_x11.cpp @@ -29,6 +29,14 @@ #include "progressmanager_p.h" +void Core::Internal::ProgressManagerPrivate::init() +{ +} + +void Core::Internal::ProgressManagerPrivate::cleanup() +{ +} + void Core::Internal::ProgressManagerPrivate::setApplicationLabel(const QString &text) { Q_UNUSED(text)