aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2017-09-28 14:31:53 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2017-09-28 19:30:18 +0000
commit07f6d25a00af112d46e939992fb9cf42879fc7c1 (patch)
treed2f426385c637b918f569877ea6d3e1b9b20c042 /src
parent98d263a673921b70d13f5aec336b371a0eec574e (diff)
Directly link to functions available from Windows 7 onwards
Change-Id: I8033100c34c703e6119e4b1f322b795b0cc1ff4a Reviewed-by: Andre de la Rocha <andre.rocha@qt.io> Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/winextras/qwinfunctions.cpp14
-rw-r--r--src/winextras/qwinfunctions_p.cpp74
-rw-r--r--src/winextras/qwinfunctions_p.h36
-rw-r--r--src/winextras/qwinthumbnailtoolbar.cpp22
-rw-r--r--src/winextras/winextras.pro1
5 files changed, 22 insertions, 125 deletions
diff --git a/src/winextras/qwinfunctions.cpp b/src/winextras/qwinfunctions.cpp
index 692bcb0..3a0b6b6 100644
--- a/src/winextras/qwinfunctions.cpp
+++ b/src/winextras/qwinfunctions.cpp
@@ -38,6 +38,13 @@
**
****************************************************************************/
+#if defined(NTDDI_VERSION) && NTDDI_VERSION < 0x06010000 // NTDDI_WIN7
+# undef NTDDI_VERSION
+#endif
+#if !defined(NTDDI_VERSION)
+# define NTDDI_VERSION 0x06010000 // Enable functions for MinGW
+#endif
+
#include "qwinfunctions.h"
#include "qwinfunctions_p.h"
#include "qwineventfilter_p.h"
@@ -1812,11 +1819,8 @@ bool QtWin::isCompositionOpaque()
*/
void QtWin::setCurrentProcessExplicitAppUserModelID(const QString &id)
{
- qtShell32Dll.init();
- if (qtShell32Dll.setCurrentProcessExplicitAppUserModelID) {
- QScopedArrayPointer<wchar_t> wid(qt_qstringToNullTerminated(id));
- qtShell32Dll.setCurrentProcessExplicitAppUserModelID(wid.data());
- }
+ QScopedArrayPointer<wchar_t> wid(qt_qstringToNullTerminated(id));
+ SetCurrentProcessExplicitAppUserModelID(wid.data());
}
/*!
diff --git a/src/winextras/qwinfunctions_p.cpp b/src/winextras/qwinfunctions_p.cpp
deleted file mode 100644
index ea9dcf9..0000000
--- a/src/winextras/qwinfunctions_p.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/****************************************************************************
- **
- ** Copyright (C) 2016 Ivan Vizir <define-true-false@yandex.com>
- ** Contact: https://www.qt.io/licensing/
- **
- ** This file is part of the QtWinExtras module of the Qt Toolkit.
- **
- ** $QT_BEGIN_LICENSE:LGPL$
- ** Commercial License Usage
- ** Licensees holding valid commercial Qt licenses may use this file in
- ** accordance with the commercial license agreement provided with the
- ** Software or, alternatively, in accordance with the terms contained in
- ** a written agreement between you and The Qt Company. For licensing terms
- ** and conditions see https://www.qt.io/terms-conditions. For further
- ** information use the contact form at https://www.qt.io/contact-us.
- **
- ** GNU Lesser General Public License Usage
- ** Alternatively, this file may be used under the terms of the GNU Lesser
- ** General Public License version 3 as published by the Free Software
- ** Foundation and appearing in the file LICENSE.LGPL3 included in the
- ** packaging of this file. Please review the following information to
- ** ensure the GNU Lesser General Public License version 3 requirements
- ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
- **
- ** GNU General Public License Usage
- ** Alternatively, this file may be used under the terms of the GNU
- ** General Public License version 2.0 or (at your option) the GNU General
- ** Public license version 3 or any later version approved by the KDE Free
- ** Qt Foundation. The licenses are as published by the Free Software
- ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
- ** included in the packaging of this file. Please review the following
- ** information to ensure the GNU General Public License requirements will
- ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
- ** https://www.gnu.org/licenses/gpl-3.0.html.
- **
- ** $QT_END_LICENSE$
- **
- ****************************************************************************/
-
-#include "qwinfunctions_p.h"
-
-#include <qt_windows.h>
-
-QT_BEGIN_NAMESPACE
-
-// in order to allow binary to load on WinXP...
-QtDwmApiDll qtDwmApiDll;
-QtShell32Dll qtShell32Dll;
-
-void QtDwmApiDll::resolve()
-{
- if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7) {
- if (const HMODULE dwmapi = LoadLibraryW(L"dwmapi.dll")) {
- dwmSetIconicThumbnail =
- (DwmSetIconicThumbnail) GetProcAddress(dwmapi, "DwmSetIconicThumbnail");
- dwmSetIconicLivePreviewBitmap =
- (DwmSetIconicLivePreviewBitmap) GetProcAddress(dwmapi, "DwmSetIconicLivePreviewBitmap");
- dwmInvalidateIconicBitmaps =
- (DwmInvalidateIconicBitmaps) GetProcAddress(dwmapi, "DwmInvalidateIconicBitmaps");
- }
- }
-}
-
-void QtShell32Dll::resolve()
-{
- if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7) {
- if (const HMODULE shell32 = LoadLibraryW(L"shell32.dll")) {
- setCurrentProcessExplicitAppUserModelID =
- (SetCurrentProcessExplicitAppUserModelID) GetProcAddress(shell32, "SetCurrentProcessExplicitAppUserModelID");
- }
- }
-}
-
-QT_END_NAMESPACE
diff --git a/src/winextras/qwinfunctions_p.h b/src/winextras/qwinfunctions_p.h
index 6ea1598..a69e52c 100644
--- a/src/winextras/qwinfunctions_p.h
+++ b/src/winextras/qwinfunctions_p.h
@@ -64,20 +64,8 @@ enum qt_DWMWINDOWATTRIBUTE // Not present in MinGW 4.9
qt_DWMWA_EXCLUDED_FROM_PEEK = 12,
};
-struct QtDwmApiDll
+namespace QtDwmApiDll
{
- typedef HRESULT (STDAPICALLTYPE *DwmSetIconicThumbnail)(HWND, HBITMAP, DWORD); // Windows 7
- typedef HRESULT (STDAPICALLTYPE *DwmSetIconicLivePreviewBitmap)(HWND, HBITMAP, POINT *, DWORD);
- typedef HRESULT (STDAPICALLTYPE *DwmInvalidateIconicBitmaps)(HWND);
-
- void init()
- {
- if (!dwmSetIconicThumbnail)
- resolve();
- }
-
- void resolve();
-
template <class T> static T windowAttribute(HWND hwnd, DWORD attribute, T defaultValue);
template <class T> static void setWindowAttribute(HWND hwnd, DWORD attribute, T value);
@@ -86,30 +74,8 @@ struct QtDwmApiDll
static void setBooleanWindowAttribute(HWND hwnd, DWORD attribute, bool value)
{ setWindowAttribute<BOOL>(hwnd, attribute, BOOL(value ? TRUE : FALSE)); }
-
- DwmSetIconicThumbnail dwmSetIconicThumbnail = nullptr;
- DwmSetIconicLivePreviewBitmap dwmSetIconicLivePreviewBitmap = nullptr;
- DwmInvalidateIconicBitmaps dwmInvalidateIconicBitmaps = nullptr;
};
-struct QtShell32Dll
-{
- typedef HRESULT (STDAPICALLTYPE *SetCurrentProcessExplicitAppUserModelID)(PCWSTR);
-
- void init()
- {
- if (!setCurrentProcessExplicitAppUserModelID)
- resolve();
- }
-
- void resolve();
-
- SetCurrentProcessExplicitAppUserModelID setCurrentProcessExplicitAppUserModelID = nullptr; // Windows 7
-};
-
-extern QtDwmApiDll qtDwmApiDll;
-extern QtShell32Dll qtShell32Dll;
-
inline void qt_qstringToNullTerminated(const QString &src, wchar_t *dst)
{
dst[src.toWCharArray(dst)] = 0;
diff --git a/src/winextras/qwinthumbnailtoolbar.cpp b/src/winextras/qwinthumbnailtoolbar.cpp
index d7e4ced..f09eb15 100644
--- a/src/winextras/qwinthumbnailtoolbar.cpp
+++ b/src/winextras/qwinthumbnailtoolbar.cpp
@@ -38,6 +38,13 @@
**
****************************************************************************/
+#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0601
+# undef _WIN32_WINNT
+#endif
+#if !defined(_WIN32_WINNT)
+# define _WIN32_WINNT 0x0601 // Enable functions for MinGW
+#endif
+
#include "qwinthumbnailtoolbar.h"
#include "qwinthumbnailtoolbar_p.h"
#include "qwinthumbnailtoolbutton.h"
@@ -228,18 +235,15 @@ int QWinThumbnailToolBar::count() const
void QWinThumbnailToolBarPrivate::updateIconicPixmapsEnabled(bool invalidate)
{
Q_Q(QWinThumbnailToolBar);
- qtDwmApiDll.init();
const HWND hwnd = handle();
if (!hwnd) {
qWarning() << Q_FUNC_INFO << "invoked with hwnd=0";
return;
}
- if (!qtDwmApiDll.dwmInvalidateIconicBitmaps)
- return;
const bool enabled = iconicThumbnail || iconicLivePreview;
q->setIconicPixmapNotificationsEnabled(enabled);
if (enabled && invalidate) {
- const HRESULT hr = qtDwmApiDll.dwmInvalidateIconicBitmaps(hwnd);
+ const HRESULT hr = DwmInvalidateIconicBitmaps(hwnd);
if (FAILED(hr))
qWarning() << QWinThumbnailToolBarPrivate::msgComFailed("DwmInvalidateIconicBitmaps", hr);
}
@@ -385,12 +389,11 @@ QPixmap QWinThumbnailToolBar::iconicLivePreviewPixmap() const
inline void QWinThumbnailToolBarPrivate::updateIconicThumbnail(const MSG *message)
{
- qtDwmApiDll.init();
- if (!qtDwmApiDll.dwmSetIconicThumbnail || !iconicThumbnail)
+ if (!iconicThumbnail)
return;
const QSize maxSize(HIWORD(message->lParam), LOWORD(message->lParam));
if (const HBITMAP bitmap = iconicThumbnail.bitmap(maxSize)) {
- const HRESULT hr = qtDwmApiDll.dwmSetIconicThumbnail(message->hwnd, bitmap, dWM_SIT_DISPLAYFRAME);
+ const HRESULT hr = DwmSetIconicThumbnail(message->hwnd, bitmap, dWM_SIT_DISPLAYFRAME);
if (FAILED(hr))
qWarning() << QWinThumbnailToolBarPrivate::msgComFailed("DwmSetIconicThumbnail", hr);
}
@@ -398,15 +401,14 @@ inline void QWinThumbnailToolBarPrivate::updateIconicThumbnail(const MSG *messag
inline void QWinThumbnailToolBarPrivate::updateIconicLivePreview(const MSG *message)
{
- qtDwmApiDll.init();
- if (!qtDwmApiDll.dwmSetIconicLivePreviewBitmap || !iconicLivePreview)
+ if (!iconicLivePreview)
return;
RECT rect;
GetClientRect(message->hwnd, &rect);
const QSize maxSize(rect.right, rect.bottom);
POINT offset = {0, 0};
if (const HBITMAP bitmap = iconicLivePreview.bitmap(maxSize)) {
- const HRESULT hr = qtDwmApiDll.dwmSetIconicLivePreviewBitmap(message->hwnd, bitmap, &offset, dWM_SIT_DISPLAYFRAME);
+ const HRESULT hr = DwmSetIconicLivePreviewBitmap(message->hwnd, bitmap, &offset, dWM_SIT_DISPLAYFRAME);
if (FAILED(hr))
qWarning() << QWinThumbnailToolBarPrivate::msgComFailed("DwmSetIconicLivePreviewBitmap", hr);
}
diff --git a/src/winextras/winextras.pro b/src/winextras/winextras.pro
index 5d93c6b..705c48c 100644
--- a/src/winextras/winextras.pro
+++ b/src/winextras/winextras.pro
@@ -6,7 +6,6 @@ DEFINES += QT_NO_FOREACH
SOURCES += \
qwinfunctions.cpp \
- qwinfunctions_p.cpp \
qwintaskbarbutton.cpp \
qwintaskbarprogress.cpp \
windowsguidsdefs.cpp \