summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Molkentin <daniel.molkentin@nokia.com>2009-11-30 19:38:02 +0100
committerDaniel Molkentin <daniel.molkentin@nokia.com>2009-11-30 19:38:26 +0100
commit275146afdfc2e75dcdc74f5737e65c315ea5851a (patch)
tree431c7e6c6ca71e7bc19918142a32b1eba61af33e
parent3565fe4e82562557125a24493276aa58c0798fd2 (diff)
downloadqt-creator-275146afdfc2e75dcdc74f5737e65c315ea5851a.tar.gz
Implement ProgressManager's progress-bar-on-icon on Windows 7.
Allow compiling with older Windows SDKs, link ole32 explictly. If you want this feature to work, you need to compile and test it on Windows 7. Task-Number: QTCREATORBUG-252
-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)