///////////////////////////////////////////////////////////////////////////////
-// LameXP - Audio Encoder Front-End
-// Copyright (C) 2004-2014 LoRd_MuldeR <MuldeR2@GMX.de>
+// MuldeR's Utilities for Qt
+// Copyright (C) 2004-2018 LoRd_MuldeR <MuldeR2@GMX.de>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// http://www.gnu.org/licenses/gpl-2.0.txt
///////////////////////////////////////////////////////////////////////////////
-//Internal
+//MUtils
#include <MUtils/Taskbar7.h>
+#include <MUtils/OSSupport.h>
#include <MUtils/Exception.h>
+//Internal
+#include "Utils_Win32.h"
+
//Qt
#include <QWidget>
#include <QIcon>
+#if QT_VERSION > QT_VERSION_CHECK(5,0,0)
+#include <QtWinExtras>
+#endif
//Windows includes
#define NOMINMAX
#define INITIALIZE_TASKBAR() do \
{ \
- if(!initialize()) \
+ if(!p->supported) \
+ { \
+ return false; \
+ } \
+ if(!(MUTILS_BOOLIFY(p->initialized) || initialize())) \
{ \
qWarning("Taskbar initialization failed!"); \
return false; \
friend class Taskbar7;
protected:
+ Taskbar7_Private(void)
+ {
+ taskbarList = NULL;
+ }
+
ITaskbarList3 *taskbarList;
- volatile bool initialized;
+ QAtomicInt supported;
+ QAtomicInt initialized;
};
}
p(new Taskbar7_Private()),
m_window(window)
{
- p->taskbarList = NULL;
- p->initialized = false;
-
if(!m_window)
{
MUTILS_THROW("Taskbar7: Window pointer must not be NULL!");
}
+ if (!p->supported)
+ {
+ if (OS::os_version() >= OS::Version::WINDOWS_WIN70)
+ {
+ p->supported.ref();
+ }
+ else
+ {
+ qWarning("Taskbar7: Taskbar progress not supported on this platform.");
+ }
+ }
}
MUtils::Taskbar7::~Taskbar7(void)
bool MUtils::Taskbar7::setOverlayIcon(const QIcon *const icon, const QString &info)
{
INITIALIZE_TASKBAR();
- const HRESULT result = p->taskbarList->SetOverlayIcon(m_window->winId(), (icon ? icon->pixmap(16,16).toWinHICON() : NULL), MUTILS_WCHR(info));
+ HRESULT result = HRESULT(-1);
+ if(icon)
+ {
+ if(const HICON hIcon = (HICON)MUtils::Win32Utils::qicon_to_hicon(icon, 16, 16))
+ {
+ result = p->taskbarList->SetOverlayIcon(reinterpret_cast<HWND>(m_window->winId()), hIcon, MUTILS_WCHR(info));
+ DestroyIcon(hIcon);
+ }
+ }
+ else
+ {
+ result = p->taskbarList->SetOverlayIcon(reinterpret_cast<HWND>(m_window->winId()), NULL, MUTILS_WCHR(info));
+ }
return SUCCEEDED(result);
}
p->taskbarList = ptbl;
}
- while(!p->initialized)
+ if(!p->initialized)
{
bool okay = false;
for(int i = 0; i < 8; i++)
qWarning("ITaskbarList3::HrInit() has failed!");
return false;
}
- p->initialized = true;
+ p->initialized.ref(); /*success*/
}
return true;