aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/winextras/qwinfunctions.cpp63
-rw-r--r--src/winextras/qwinfunctions_p.cpp28
-rw-r--r--src/winextras/qwinfunctions_p.h94
-rw-r--r--src/winextras/qwinjumplist.cpp20
-rw-r--r--src/winextras/qwinthumbnailtoolbar.cpp9
-rw-r--r--src/winextras/winextras.pro2
6 files changed, 66 insertions, 150 deletions
diff --git a/src/winextras/qwinfunctions.cpp b/src/winextras/qwinfunctions.cpp
index ad6430a..692bcb0 100644
--- a/src/winextras/qwinfunctions.cpp
+++ b/src/winextras/qwinfunctions.cpp
@@ -1430,9 +1430,7 @@ QColor QtWin::colorizationColor(bool *opaqueBlend)
DWORD colorization = 0;
BOOL dummy = false;
- qtDwmApiDll.init();
- if (qtDwmApiDll.dwmGetColorizationColor)
- qtDwmApiDll.dwmGetColorizationColor(&colorization, &dummy);
+ DwmGetColorizationColor(&colorization, &dummy);
if (opaqueBlend)
*opaqueBlend = dummy;
return QColor::fromRgba(colorization);
@@ -1552,8 +1550,8 @@ void QtWin::setWindowFlip3DPolicy(QWindow *window, QtWin::WindowFlip3DPolicy pol
HWND handle = reinterpret_cast<HWND>(window->winId());
// Policy should be defaulted first, bug or smth.
- DWORD value = qt_DWMFLIP3D_DEFAULT;
- QtDwmApiDll::setWindowAttribute(handle, qt_DWMWA_FLIP3D_POLICY, value);
+ DWORD value = DWMFLIP3D_DEFAULT;
+ QtDwmApiDll::setWindowAttribute(handle, DWMWA_FLIP3D_POLICY, value);
switch (policy) {
default :
@@ -1561,15 +1559,15 @@ void QtWin::setWindowFlip3DPolicy(QWindow *window, QtWin::WindowFlip3DPolicy pol
value = -1;
break;
case FlipExcludeBelow :
- value = qt_DWMFLIP3D_EXCLUDEBELOW;
+ value = DWMFLIP3D_EXCLUDEBELOW;
break;
case FlipExcludeAbove :
- value = qt_DWMFLIP3D_EXCLUDEABOVE;
+ value = DWMFLIP3D_EXCLUDEABOVE;
break;
}
- if (qt_DWMFLIP3D_DEFAULT != value)
- QtDwmApiDll::setWindowAttribute(handle, qt_DWMWA_FLIP3D_POLICY, value);
+ if (DWMFLIP3D_DEFAULT != value)
+ QtDwmApiDll::setWindowAttribute(handle, DWMWA_FLIP3D_POLICY, value);
}
/*!
@@ -1589,13 +1587,13 @@ QtWin::WindowFlip3DPolicy QtWin::windowFlip3DPolicy(QWindow *window)
const DWORD value =
QtDwmApiDll::windowAttribute<DWORD>(reinterpret_cast<HWND>(window->winId()),
- qt_DWMWA_FLIP3D_POLICY, DWORD(qt_DWMFLIP3D_DEFAULT));
+ DWMWA_FLIP3D_POLICY, DWORD(DWMFLIP3D_DEFAULT));
QtWin::WindowFlip3DPolicy policy = QtWin::FlipDefault;
switch (value) {
- case qt_DWMFLIP3D_EXCLUDEABOVE :
+ case DWMFLIP3D_EXCLUDEABOVE :
policy = QtWin::FlipExcludeAbove;
break;
- case qt_DWMFLIP3D_EXCLUDEBELOW :
+ case DWMFLIP3D_EXCLUDEBELOW :
policy = QtWin::FlipExcludeBelow;
break;
default :
@@ -1607,12 +1605,8 @@ QtWin::WindowFlip3DPolicy QtWin::windowFlip3DPolicy(QWindow *window)
void qt_ExtendFrameIntoClientArea(QWindow *window, int left, int top, int right, int bottom)
{
QWinEventFilter::setup();
-
- qtDwmApiDll.init();
- if (qtDwmApiDll.dwmExtendFrameIntoClientArea) {
- MARGINS margins = {left, right, top, bottom};
- qtDwmApiDll.dwmExtendFrameIntoClientArea(reinterpret_cast<HWND>(window->winId()), &margins);
- }
+ MARGINS margins = {left, right, top, bottom};
+ DwmExtendFrameIntoClientArea(reinterpret_cast<HWND>(window->winId()), &margins);
}
/*! \fn void QtWin::extendFrameIntoClientArea(QWidget *window, int left, int top, int right, int bottom)
@@ -1706,22 +1700,18 @@ void QtWin::enableBlurBehindWindow(QWindow *window, const QRegion &region)
{
Q_ASSERT_X(window, Q_FUNC_INFO, "window is null");
- qtDwmApiDll.init();
- if (!qtDwmApiDll.dwmEnableBlurBehindWindow)
- return;
-
- qt_DWM_BLURBEHIND dwmbb = {0, 0, 0, 0};
- dwmbb.dwFlags = qt_DWM_BB_ENABLE;
+ DWM_BLURBEHIND dwmbb = {0, 0, 0, 0};
+ dwmbb.dwFlags = DWM_BB_ENABLE;
dwmbb.fEnable = TRUE;
HRGN rgn = 0;
if (!region.isNull()) {
rgn = toHRGN(region);
if (rgn) {
dwmbb.hRgnBlur = rgn;
- dwmbb.dwFlags |= qt_DWM_BB_BLURREGION;
+ dwmbb.dwFlags |= DWM_BB_BLURREGION;
}
}
- qtDwmApiDll.dwmEnableBlurBehindWindow(reinterpret_cast<HWND>(window->winId()), &dwmbb);
+ DwmEnableBlurBehindWindow(reinterpret_cast<HWND>(window->winId()), &dwmbb);
if (rgn)
DeleteObject(rgn);
}
@@ -1760,12 +1750,9 @@ void QtWin::enableBlurBehindWindow(QWindow *window)
void QtWin::disableBlurBehindWindow(QWindow *window)
{
Q_ASSERT_X(window, Q_FUNC_INFO, "window is null");
- qt_DWM_BLURBEHIND dwmbb = {0, 0, 0, 0};
- dwmbb.dwFlags = qt_DWM_BB_ENABLE;
- dwmbb.fEnable = FALSE;
- qtDwmApiDll.init();
- if (qtDwmApiDll.dwmEnableBlurBehindWindow)
- qtDwmApiDll.dwmEnableBlurBehindWindow(reinterpret_cast<HWND>(window->winId()), &dwmbb);
+ DWM_BLURBEHIND dwmbb = {0, 0, 0, 0};
+ dwmbb.dwFlags = DWM_BB_ENABLE;
+ DwmEnableBlurBehindWindow(reinterpret_cast<HWND>(window->winId()), &dwmbb);
}
/*!
@@ -1778,9 +1765,7 @@ bool QtWin::isCompositionEnabled()
QWinEventFilter::setup();
BOOL enabled = FALSE;
- qtDwmApiDll.init();
- if (qtDwmApiDll.dwmIsCompositionEnabled)
- qtDwmApiDll.dwmIsCompositionEnabled(&enabled);
+ DwmIsCompositionEnabled(&enabled);
return enabled;
}
@@ -1792,15 +1777,17 @@ bool QtWin::isCompositionEnabled()
\note The underlying function was declared deprecated as of Windows 8 and
takes no effect.
*/
+
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_MSVC(4995)
void QtWin::setCompositionEnabled(bool enabled)
{
QWinEventFilter::setup();
UINT compositionEnabled = enabled;
- qtDwmApiDll.init();
- if (qtDwmApiDll.dwmEnableComposition)
- qtDwmApiDll.dwmEnableComposition(compositionEnabled);
+ DwmEnableComposition(compositionEnabled);
}
+QT_WARNING_POP
/*!
\since 5.2
diff --git a/src/winextras/qwinfunctions_p.cpp b/src/winextras/qwinfunctions_p.cpp
index e9e5dd9..ea9dcf9 100644
--- a/src/winextras/qwinfunctions_p.cpp
+++ b/src/winextras/qwinfunctions_p.cpp
@@ -49,22 +49,8 @@ QtShell32Dll qtShell32Dll;
void QtDwmApiDll::resolve()
{
- if (const HMODULE dwmapi = LoadLibraryW(L"dwmapi.dll")) {
- dwmExtendFrameIntoClientArea =
- (DwmExtendFrameIntoClientArea) GetProcAddress(dwmapi, "DwmExtendFrameIntoClientArea");
- dwmEnableBlurBehindWindow =
- (DwmEnableBlurBehindWindow) GetProcAddress(dwmapi, "DwmEnableBlurBehindWindow");
- dwmGetColorizationColor =
- (DwmGetColorizationColor) GetProcAddress(dwmapi, "DwmGetColorizationColor");
- dwmSetWindowAttribute =
- (DwmSetWindowAttribute) GetProcAddress(dwmapi, "DwmSetWindowAttribute");
- dwmGetWindowAttribute =
- (DwmGetWindowAttribute) GetProcAddress(dwmapi, "DwmGetWindowAttribute");
- dwmIsCompositionEnabled =
- (DwmIsCompositionEnabled) GetProcAddress(dwmapi, "DwmIsCompositionEnabled");
- dwmEnableComposition =
- (DwmEnableComposition) GetProcAddress(dwmapi, "DwmEnableComposition");
- if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7) {
+ if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7) {
+ if (const HMODULE dwmapi = LoadLibraryW(L"dwmapi.dll")) {
dwmSetIconicThumbnail =
(DwmSetIconicThumbnail) GetProcAddress(dwmapi, "DwmSetIconicThumbnail");
dwmSetIconicLivePreviewBitmap =
@@ -77,11 +63,11 @@ void QtDwmApiDll::resolve()
void QtShell32Dll::resolve()
{
- if (const HMODULE shell32 = LoadLibraryW(L"shell32.dll")) {
- sHCreateItemFromParsingName =
- (SHCreateItemFromParsingName) GetProcAddress(shell32, "SHCreateItemFromParsingName");
- setCurrentProcessExplicitAppUserModelID =
- (SetCurrentProcessExplicitAppUserModelID) GetProcAddress(shell32, "SetCurrentProcessExplicitAppUserModelID");
+ if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7) {
+ if (const HMODULE shell32 = LoadLibraryW(L"shell32.dll")) {
+ setCurrentProcessExplicitAppUserModelID =
+ (SetCurrentProcessExplicitAppUserModelID) GetProcAddress(shell32, "SetCurrentProcessExplicitAppUserModelID");
+ }
}
}
diff --git a/src/winextras/qwinfunctions_p.h b/src/winextras/qwinfunctions_p.h
index 9f00e4c..6ea1598 100644
--- a/src/winextras/qwinfunctions_p.h
+++ b/src/winextras/qwinfunctions_p.h
@@ -54,74 +54,25 @@
#include <QString>
#include <qt_windows.h>
#include <uxtheme.h>
+#include <dwmapi.h>
QT_BEGIN_NAMESPACE
-enum qt_DWMWINDOWATTRIBUTE
+enum qt_DWMWINDOWATTRIBUTE // Not present in MinGW 4.9
{
- qt_DWMWA_NCRENDERING_ENABLED = 1,
- qt_DWMWA_NCRENDERING_POLICY,
- qt_DWMWA_TRANSITIONS_FORCEDISABLED,
- qt_DWMWA_ALLOW_NCPAINT,
- qt_DWMWA_CAPTION_BUTTON_BOUNDS,
- qt_DWMWA_NONCLIENT_RTL_LAYOUT,
- qt_DWMWA_FORCE_ICONIC_REPRESENTATION,
- qt_DWMWA_FLIP3D_POLICY,
- qt_DWMWA_EXTENDED_FRAME_BOUNDS,
- qt_DWMWA_HAS_ICONIC_BITMAP,
- qt_DWMWA_DISALLOW_PEEK,
- qt_DWMWA_EXCLUDED_FROM_PEEK,
- qt_DWMWA_CLOAK,
- qt_DWMWA_CLOAKED,
- qt_DWMWA_FREEZE_REPRESENTATION,
- qt_DWMWA_LAST
+ qt_DWMWA_DISALLOW_PEEK = 11,
+ qt_DWMWA_EXCLUDED_FROM_PEEK = 12,
};
-enum qt_DWMFLIP3DWINDOWPOLICY {
- qt_DWMFLIP3D_DEFAULT,
- qt_DWMFLIP3D_EXCLUDEBELOW,
- qt_DWMFLIP3D_EXCLUDEABOVE,
- qt_DWMFLIP3D_LAST
-};
-
-#include <pshpack1.h>
-
-struct qt_DWM_BLURBEHIND {
- DWORD dwFlags;
- BOOL fEnable;
- HRGN hRgnBlur;
- BOOL fTransitionOnMaximized;
-};
-
-#include <poppack.h>
-
-const int qt_DWM_BB_ENABLE = 0x00000001;
-const int qt_DWM_BB_BLURREGION = 0x00000002;
-const int qt_DWM_BB_TRANSITIONONMAXIMIZED = 0x00000004;
-
struct QtDwmApiDll
{
- typedef HRESULT (STDAPICALLTYPE *DwmGetColorizationColor)(DWORD *, BOOL *);
- typedef HRESULT (STDAPICALLTYPE *DwmSetWindowAttribute)(HWND, DWORD, LPCVOID, DWORD);
- typedef HRESULT (STDAPICALLTYPE *DwmGetWindowAttribute)(HWND, DWORD, PVOID, DWORD);
- typedef HRESULT (STDAPICALLTYPE *DwmExtendFrameIntoClientArea)(HWND, const MARGINS *);
- typedef HRESULT (STDAPICALLTYPE *DwmEnableBlurBehindWindow)(HWND, const qt_DWM_BLURBEHIND *);
- typedef HRESULT (STDAPICALLTYPE *DwmIsCompositionEnabled)(BOOL *);
- typedef HRESULT (STDAPICALLTYPE *DwmEnableComposition)(UINT);
- typedef HRESULT (STDAPICALLTYPE *DwmSetIconicThumbnail)(HWND, HBITMAP, DWORD);
+ typedef HRESULT (STDAPICALLTYPE *DwmSetIconicThumbnail)(HWND, HBITMAP, DWORD); // Windows 7
typedef HRESULT (STDAPICALLTYPE *DwmSetIconicLivePreviewBitmap)(HWND, HBITMAP, POINT *, DWORD);
typedef HRESULT (STDAPICALLTYPE *DwmInvalidateIconicBitmaps)(HWND);
- QtDwmApiDll()
- : dwmGetColorizationColor(0), dwmSetWindowAttribute(0), dwmGetWindowAttribute(0)
- , dwmExtendFrameIntoClientArea(0), dwmEnableBlurBehindWindow(0)
- , dwmIsCompositionEnabled(0), dwmEnableComposition(0)
- , dwmSetIconicThumbnail(0), dwmSetIconicLivePreviewBitmap(0), dwmInvalidateIconicBitmaps(0)
- {}
-
void init()
{
- if (!dwmSetWindowAttribute && QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA)
+ if (!dwmSetIconicThumbnail)
resolve();
}
@@ -136,36 +87,24 @@ struct QtDwmApiDll
static void setBooleanWindowAttribute(HWND hwnd, DWORD attribute, bool value)
{ setWindowAttribute<BOOL>(hwnd, attribute, BOOL(value ? TRUE : FALSE)); }
- DwmGetColorizationColor dwmGetColorizationColor;
- DwmSetWindowAttribute dwmSetWindowAttribute;
- DwmGetWindowAttribute dwmGetWindowAttribute;
- DwmExtendFrameIntoClientArea dwmExtendFrameIntoClientArea;
- DwmEnableBlurBehindWindow dwmEnableBlurBehindWindow;
- DwmIsCompositionEnabled dwmIsCompositionEnabled;
- DwmEnableComposition dwmEnableComposition;
- DwmSetIconicThumbnail dwmSetIconicThumbnail;
- DwmSetIconicLivePreviewBitmap dwmSetIconicLivePreviewBitmap;
- DwmInvalidateIconicBitmaps dwmInvalidateIconicBitmaps;
+ DwmSetIconicThumbnail dwmSetIconicThumbnail = nullptr;
+ DwmSetIconicLivePreviewBitmap dwmSetIconicLivePreviewBitmap = nullptr;
+ DwmInvalidateIconicBitmaps dwmInvalidateIconicBitmaps = nullptr;
};
struct QtShell32Dll
-
{
- typedef HRESULT (STDAPICALLTYPE *SHCreateItemFromParsingName)(PCWSTR, IBindCtx *, REFIID, void **);
typedef HRESULT (STDAPICALLTYPE *SetCurrentProcessExplicitAppUserModelID)(PCWSTR);
- QtShell32Dll() : sHCreateItemFromParsingName(0), setCurrentProcessExplicitAppUserModelID(0) {}
-
void init()
{
- if (!sHCreateItemFromParsingName && QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA)
+ if (!setCurrentProcessExplicitAppUserModelID)
resolve();
}
void resolve();
- SHCreateItemFromParsingName sHCreateItemFromParsingName; // Vista
- SetCurrentProcessExplicitAppUserModelID setCurrentProcessExplicitAppUserModelID; // Windows 7
+ SetCurrentProcessExplicitAppUserModelID setCurrentProcessExplicitAppUserModelID = nullptr; // Windows 7
};
extern QtDwmApiDll qtDwmApiDll;
@@ -186,19 +125,16 @@ inline wchar_t *qt_qstringToNullTerminated(const QString &src)
template <class T>
T QtDwmApiDll::windowAttribute(HWND hwnd, DWORD attribute, T defaultValue)
{
- qtDwmApiDll.init();
- T value = defaultValue;
- if (qtDwmApiDll.dwmGetWindowAttribute)
- qtDwmApiDll.dwmGetWindowAttribute(hwnd, attribute, &value, sizeof(value));
+ T value;
+ if (FAILED(DwmGetWindowAttribute(hwnd, attribute, &value, sizeof(value))))
+ value = defaultValue;
return value;
}
template <class T>
void QtDwmApiDll::setWindowAttribute(HWND hwnd, DWORD attribute, T value)
{
- qtDwmApiDll.init();
- if (qtDwmApiDll.dwmSetWindowAttribute)
- qtDwmApiDll.dwmSetWindowAttribute(hwnd, attribute, &value, sizeof(value));
+ DwmSetWindowAttribute(hwnd, attribute, &value, sizeof(value));
}
QT_END_NAMESPACE
diff --git a/src/winextras/qwinjumplist.cpp b/src/winextras/qwinjumplist.cpp
index e3f7860..2e1b8ce 100644
--- a/src/winextras/qwinjumplist.cpp
+++ b/src/winextras/qwinjumplist.cpp
@@ -38,6 +38,17 @@
**
****************************************************************************/
+#include <QtCore/QtGlobal>
+
+#ifdef Q_CC_MINGW // MinGW: Enable SHCreateItemFromParsingName()
+# if defined(_WIN32_IE) && _WIN32_IE << 0x0700 // _WIN32_IE_IE70
+# undef _WIN32_IE
+# endif
+# ifndef _WIN32_IE
+# define _WIN32_IE 0x0700
+# endif
+#endif // Q_CC_MINGW
+
#include "qwinjumplist.h"
#include "qwinjumplist_p.h"
#include "qwinjumplistitem.h"
@@ -56,6 +67,8 @@
#include "qwinfunctions_p.h"
#include "winpropkey_p.h"
+#include <shobjidl.h>
+
QT_BEGIN_NAMESPACE
/*!
@@ -387,11 +400,8 @@ IShellLinkW *QWinJumpListPrivate::toIShellLink(const QWinJumpListItem *item)
IShellItem2 *QWinJumpListPrivate::toIShellItem(const QWinJumpListItem *item)
{
IShellItem2 *shellitem = 0;
- qtShell32Dll.init();
- if (qtShell32Dll.sHCreateItemFromParsingName) {
- QScopedArrayPointer<wchar_t> buffer(qt_qstringToNullTerminated(item->filePath()));
- qtShell32Dll.sHCreateItemFromParsingName(buffer.data(), 0, qIID_IShellItem2, reinterpret_cast<void **>(&shellitem));
- }
+ QScopedArrayPointer<wchar_t> buffer(qt_qstringToNullTerminated(item->filePath()));
+ SHCreateItemFromParsingName(buffer.data(), 0, qIID_IShellItem2, reinterpret_cast<void **>(&shellitem));
return shellitem;
}
diff --git a/src/winextras/qwinthumbnailtoolbar.cpp b/src/winextras/qwinthumbnailtoolbar.cpp
index 0d83ef6..58978f9 100644
--- a/src/winextras/qwinthumbnailtoolbar.cpp
+++ b/src/winextras/qwinthumbnailtoolbar.cpp
@@ -321,11 +321,9 @@ bool QWinThumbnailToolBar::iconicPixmapNotificationsEnabled() const
{
Q_D(const QWinThumbnailToolBar);
const HWND hwnd = d->handle();
- if (!hwnd || !qtDwmApiDll.dwmGetWindowAttribute)
+ if (!hwnd)
return false;
- qtDwmApiDll.init();
- return qtDwmApiDll.dwmGetWindowAttribute && hwnd
- && QtDwmApiDll::booleanWindowAttribute(hwnd, dWMWA_FORCE_ICONIC_REPRESENTATION);
+ return QtDwmApiDll::booleanWindowAttribute(hwnd, dWMWA_FORCE_ICONIC_REPRESENTATION);
}
void QWinThumbnailToolBar::setIconicPixmapNotificationsEnabled(bool enabled)
@@ -336,8 +334,7 @@ void QWinThumbnailToolBar::setIconicPixmapNotificationsEnabled(bool enabled)
qWarning() << Q_FUNC_INFO << "invoked with hwnd=0";
return;
}
- qtDwmApiDll.init();
- if (!qtDwmApiDll.dwmSetWindowAttribute || iconicPixmapNotificationsEnabled() == enabled)
+ if (iconicPixmapNotificationsEnabled() == enabled)
return;
QtDwmApiDll::setBooleanWindowAttribute(hwnd, dWMWA_FORCE_ICONIC_REPRESENTATION, enabled);
QtDwmApiDll::setBooleanWindowAttribute(hwnd, dWMWA_HAS_ICONIC_BITMAP, enabled);
diff --git a/src/winextras/winextras.pro b/src/winextras/winextras.pro
index 94bdb92..de4f9c8 100644
--- a/src/winextras/winextras.pro
+++ b/src/winextras/winextras.pro
@@ -43,7 +43,7 @@ HEADERS += \
QMAKE_DOCS = $$PWD/doc/qtwinextras.qdocconf
-LIBS_PRIVATE += -lole32 -lshlwapi -lshell32
+LIBS_PRIVATE += -lole32 -lshlwapi -lshell32 -ldwmapi
win32:!qtHaveModule(opengl)|contains(QT_CONFIG, dynamicgl):LIBS_PRIVATE += -lgdi32
OTHER_FILES += \