summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/coreplugin/coreplugin.pro1
-rw-r--r--src/plugins/coreplugin/progressmanager/progressmanager.cpp5
-rw-r--r--src/plugins/coreplugin/progressmanager/progressmanager_mac.mm8
-rw-r--r--src/plugins/coreplugin/progressmanager/progressmanager_p.h1
-rw-r--r--src/plugins/coreplugin/progressmanager/progressmanager_win.cpp86
-rw-r--r--src/plugins/coreplugin/progressmanager/progressmanager_x11.cpp8
6 files changed, 105 insertions, 4 deletions
diff --git a/src/plugins/coreplugin/coreplugin.pro b/src/plugins/coreplugin/coreplugin.pro
index 791aa81671..ba45a0699c 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 7418de8cf1..fce083bf60 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 296db9258e..9d1a9ec10e 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 80819a36d0..e219fb7a7a 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 a427349c0f..2e4cb614bd 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 a427349c0f..69bc2d0dcd 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)