1
mirror of https://invent.kde.org/network/falkon.git synced 2024-11-11 01:22:10 +01:00

Fixed Win7 TaskBar progress value on finished download + edited

blurbehind to load dwmapi library at startup
This commit is contained in:
nowrep 2011-05-06 12:58:07 +02:00
parent a01dce6eef
commit 5fd9433d9c
4 changed files with 34 additions and 89 deletions

116
src/3rdparty/qtwin.cpp vendored
View File

@ -33,40 +33,6 @@
#ifdef Q_WS_WIN #ifdef Q_WS_WIN
#include <qt_windows.h> #include <qt_windows.h>
// Blur behind data structures
#define DWM_BB_ENABLE 0x00000001 // fEnable has been specified
#define DWM_BB_BLURREGION 0x00000002 // hRgnBlur has been specified
#define DWM_BB_TRANSITIONONMAXIMIZED 0x00000004 // fTransitionOnMaximized has been specified
#define WM_DWMCOMPOSITIONCHANGED 0x031E // Composition changed window message
typedef struct _DWM_BLURBEHIND
{
DWORD dwFlags;
BOOL fEnable;
HRGN hRgnBlur;
BOOL fTransitionOnMaximized;
} DWM_BLURBEHIND, *PDWM_BLURBEHIND;
typedef struct _MARGINS
{
int cxLeftWidth;
int cxRightWidth;
int cyTopHeight;
int cyBottomHeight;
} MARGINS, *PMARGINS;
typedef HRESULT (WINAPI *PtrDwmIsCompositionEnabled)(BOOL* pfEnabled);
typedef HRESULT (WINAPI *PtrDwmExtendFrameIntoClientArea)(HWND hWnd, const MARGINS* pMarInset);
typedef HRESULT (WINAPI *PtrDwmEnableBlurBehindWindow)(HWND hWnd, const DWM_BLURBEHIND* pBlurBehind);
typedef HRESULT (WINAPI *PtrDwmGetColorizationColor)(DWORD *pcrColorization, BOOL *pfOpaqueBlend);
static PtrDwmIsCompositionEnabled pDwmIsCompositionEnabled= 0;
static PtrDwmEnableBlurBehindWindow pDwmEnableBlurBehindWindow = 0;
static PtrDwmExtendFrameIntoClientArea pDwmExtendFrameIntoClientArea = 0;
static PtrDwmGetColorizationColor pDwmGetColorizationColor = 0;
/* /*
* Internal helper class that notifies windows if the * Internal helper class that notifies windows if the
* DWM compositing state changes and updates the widget * DWM compositing state changes and updates the widget
@ -84,22 +50,10 @@ private:
QWidgetList widgets; QWidgetList widgets;
}; };
static bool resolveLibs()
{
if (!pDwmIsCompositionEnabled) {
QLibrary dwmLib(QString::fromAscii("dwmapi"));
pDwmIsCompositionEnabled =(PtrDwmIsCompositionEnabled)dwmLib.resolve("DwmIsCompositionEnabled");
pDwmExtendFrameIntoClientArea = (PtrDwmExtendFrameIntoClientArea)dwmLib.resolve("DwmExtendFrameIntoClientArea");
pDwmEnableBlurBehindWindow = (PtrDwmEnableBlurBehindWindow)dwmLib.resolve("DwmEnableBlurBehindWindow");
pDwmGetColorizationColor = (PtrDwmGetColorizationColor)dwmLib.resolve("DwmGetColorizationColor");
}
return pDwmIsCompositionEnabled != 0;
}
#endif #endif
/*! /*!
* Chekcs and returns true if Windows version * Checks and returns true if Windows version
* currently running is Windows 7 * currently running is Windows 7
* *
* This function is useful when you are using * This function is useful when you are using
@ -127,13 +81,11 @@ bool QtWin::isRunningWindows7()
bool QtWin::isCompositionEnabled() bool QtWin::isCompositionEnabled()
{ {
#ifdef Q_WS_WIN #ifdef Q_WS_WIN
if (resolveLibs()) { HRESULT hr = S_OK;
HRESULT hr = S_OK; BOOL isEnabled = false;
BOOL isEnabled = false; hr = DwmIsCompositionEnabled(&isEnabled);
hr = pDwmIsCompositionEnabled(&isEnabled); if (SUCCEEDED(hr))
if (SUCCEEDED(hr)) return isEnabled;
return isEnabled;
}
#endif #endif
return false; return false;
} }
@ -150,19 +102,17 @@ bool QtWin::enableBlurBehindWindow(QWidget *widget, bool enable)
Q_ASSERT(widget); Q_ASSERT(widget);
bool result = false; bool result = false;
#ifdef Q_WS_WIN #ifdef Q_WS_WIN
if (resolveLibs()) { DWM_BLURBEHIND bb = {0};
DWM_BLURBEHIND bb = {0}; HRESULT hr = S_OK;
HRESULT hr = S_OK; bb.fEnable = enable;
bb.fEnable = enable; bb.dwFlags = DWM_BB_ENABLE;
bb.dwFlags = DWM_BB_ENABLE; bb.hRgnBlur = NULL;
bb.hRgnBlur = NULL; widget->setAttribute(Qt::WA_TranslucentBackground, enable);
widget->setAttribute(Qt::WA_TranslucentBackground, enable); widget->setAttribute(Qt::WA_NoSystemBackground, enable);
widget->setAttribute(Qt::WA_NoSystemBackground, enable); hr = DwmEnableBlurBehindWindow(widget->winId(), &bb);
hr = pDwmEnableBlurBehindWindow(widget->winId(), &bb); if (SUCCEEDED(hr)) {
if (SUCCEEDED(hr)) { result = true;
result = true; windowNotifier()->addWidget(widget);
windowNotifier()->addWidget(widget);
}
} }
#endif #endif
return result; return result;
@ -192,17 +142,14 @@ bool QtWin::extendFrameIntoClientArea(QWidget *widget, int left, int top, int ri
bool result = false; bool result = false;
#ifdef Q_WS_WIN #ifdef Q_WS_WIN
if (resolveLibs()) { HRESULT hr = S_OK;
QLibrary dwmLib(QString::fromAscii("dwmapi")); MARGINS m = {left, top, right, bottom};
HRESULT hr = S_OK; hr = DwmExtendFrameIntoClientArea(widget->winId(), &m);
MARGINS m = {left, top, right, bottom}; if (SUCCEEDED(hr)) {
hr = pDwmExtendFrameIntoClientArea(widget->winId(), &m); result = true;
if (SUCCEEDED(hr)) { windowNotifier()->addWidget(widget);
result = true;
windowNotifier()->addWidget(widget);
}
widget->setAttribute(Qt::WA_TranslucentBackground, result);
} }
widget->setAttribute(Qt::WA_TranslucentBackground, result);
#endif #endif
return result; return result;
} }
@ -217,15 +164,12 @@ QColor QtWin::colorizatinColor()
QColor resultColor = QApplication::palette().window().color(); QColor resultColor = QApplication::palette().window().color();
#ifdef Q_WS_WIN #ifdef Q_WS_WIN
if (resolveLibs()) { DWORD color = 0;
DWORD color = 0; BOOL opaque = FALSE;
BOOL opaque = FALSE; HRESULT hr = S_OK;
QLibrary dwmLib(QString::fromAscii("dwmapi")); hr = DwmGetColorizationColor(&color, &opaque);
HRESULT hr = S_OK; if (SUCCEEDED(hr))
hr = pDwmGetColorizationColor(&color, &opaque); resultColor = QColor(color);
if (SUCCEEDED(hr))
resultColor = QColor(color);
}
#endif #endif
return resultColor; return resultColor;
} }

View File

@ -39,6 +39,7 @@
#include <ShlObj.h> #include <ShlObj.h>
#include <shlwapi.h> #include <shlwapi.h>
#include <Propvarutil.h> #include <Propvarutil.h>
#include <dwmapi.h>
DEFINE_PROPERTYKEY(PKEY_Title, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 2); DEFINE_PROPERTYKEY(PKEY_Title, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 2);
DEFINE_PROPERTYKEY(PKEY_AppUserModel_IsDestListSeparator, 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 6); DEFINE_PROPERTYKEY(PKEY_AppUserModel_IsDestListSeparator, 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 6);

View File

@ -235,4 +235,4 @@ include(3rdparty/qtsingleapplication.pri)
unix:QT += dbus unix:QT += dbus
win32:DEFINES += W7API win32:DEFINES += W7API
win32:RC_FILE = appicon.rc win32:RC_FILE = appicon.rc
win32:LIBS += User32.lib Ole32.lib Shell32.lib ShlWapi.lib Gdi32.lib ComCtl32.lib win32:LIBS += User32.lib Ole32.lib Shell32.lib ShlWapi.lib Gdi32.lib ComCtl32.lib DwmApi.lib

View File

@ -223,8 +223,8 @@ void DownloadManager::downloadFinished(bool success)
setWindowTitle(tr("Download Manager")); setWindowTitle(tr("Download Manager"));
#ifdef W7API #ifdef W7API
if (QtWin::isRunningWindows7()) { if (QtWin::isRunningWindows7()) {
win7.setProgressValue(0, 0); win7.setProgressValue(0, 100);
win7.setProgressState(win7.Normal); win7.setProgressState(win7.NoProgress);
} }
#endif #endif
} }