139 lines
4 KiB
C++
139 lines
4 KiB
C++
|
//---------------------------------------------------------------------------//
|
||
|
// globals.cpp - variables shared by uxtheme modules
|
||
|
//---------------------------------------------------------------------------//
|
||
|
// NOTE: global variables in this module are NOT protected by a critical
|
||
|
// section are subject to being set by 2 different threads at the same
|
||
|
// time. Therefore, these variables should only be set during uxtheme init.
|
||
|
//---------------------------------------------------------------------------//
|
||
|
#include "stdafx.h"
|
||
|
#include "globals.h"
|
||
|
#include "AppInfo.h"
|
||
|
#include "services.h"
|
||
|
#include "ThemeFile.h"
|
||
|
#include "RenderList.h"
|
||
|
#include "CacheList.h"
|
||
|
#include "bmpcache.h"
|
||
|
//---------------------------------------------------------------------------//
|
||
|
HINSTANCE g_hInst = NULL;
|
||
|
WCHAR g_szProcessName[MAX_PATH] = {0};
|
||
|
DWORD g_dwProcessId = 0;
|
||
|
BOOL g_fUxthemeInitialized = FALSE;
|
||
|
BOOL g_fEarlyHookRequest = FALSE;
|
||
|
HWND g_hwndFirstHooked = 0;
|
||
|
|
||
|
THEMEHOOKSTATE g_eThemeHookState = HS_UNINITIALIZED;
|
||
|
CAppInfo *g_pAppInfo = NULL;
|
||
|
CRenderList *g_pRenderList = NULL;
|
||
|
|
||
|
CBitmapCache *g_pBitmapCacheScaled = NULL;
|
||
|
CBitmapCache *g_pBitmapCacheUnscaled = NULL;
|
||
|
|
||
|
#ifdef LAME_BUTTON
|
||
|
void InitLameText();
|
||
|
#else
|
||
|
#define InitLameText()
|
||
|
#endif
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
BOOL GlobalsStartup()
|
||
|
{
|
||
|
BOOL fInit = FALSE;
|
||
|
|
||
|
Log(LOG_TMSTARTUP, L"GlobalsStartup");
|
||
|
|
||
|
g_dwProcessId = GetCurrentProcessId();
|
||
|
|
||
|
//---- create global objects ----
|
||
|
CThemeServices::StaticInitialize();
|
||
|
|
||
|
g_pRenderList = new CRenderList();
|
||
|
if (! g_pRenderList)
|
||
|
goto exit;
|
||
|
|
||
|
g_pAppInfo = new CAppInfo();
|
||
|
if (! g_pAppInfo)
|
||
|
goto exit;
|
||
|
|
||
|
WCHAR szPath[MAX_PATH];
|
||
|
if (! GetModuleFileNameW( NULL, szPath, ARRAYSIZE(szPath) ))
|
||
|
goto exit;
|
||
|
|
||
|
WCHAR szDrive[_MAX_DRIVE], szDir[_MAX_DIR], szExt[_MAX_EXT];
|
||
|
_wsplitpath(szPath, szDrive, szDir, g_szProcessName, szExt);
|
||
|
|
||
|
g_pBitmapCacheScaled = new CBitmapCache();
|
||
|
if (! g_pBitmapCacheScaled)
|
||
|
goto exit;
|
||
|
|
||
|
g_pBitmapCacheUnscaled = new CBitmapCache();
|
||
|
if (! g_pBitmapCacheUnscaled)
|
||
|
goto exit;
|
||
|
|
||
|
InitLameText();
|
||
|
|
||
|
if (g_fEarlyHookRequest)
|
||
|
{
|
||
|
//---- May want to PostMessage() a request to theme ldr ----
|
||
|
//---- to trigger our hooks & send us WM_THEMECHANGED msg ---
|
||
|
//---- if it looks like some apps need this. For now, ----
|
||
|
//---- let's see if just relying on queued us msgs to do work ----
|
||
|
//---- is sufficient. ----
|
||
|
}
|
||
|
|
||
|
g_fUxthemeInitialized = TRUE;
|
||
|
fInit = TRUE;
|
||
|
|
||
|
exit:
|
||
|
return fInit;
|
||
|
}
|
||
|
//---------------------------------------------------------------------------//
|
||
|
BOOL GlobalsShutdown()
|
||
|
{
|
||
|
Log(LOG_TMSTARTUP, L"GlobalsShutDown");
|
||
|
|
||
|
SAFE_DELETE(g_pBitmapCacheScaled);
|
||
|
SAFE_DELETE(g_pBitmapCacheUnscaled);
|
||
|
SAFE_DELETE(g_pAppInfo);
|
||
|
SAFE_DELETE(g_pRenderList);
|
||
|
CThemeServices::StaticTerminate();
|
||
|
|
||
|
g_fUxthemeInitialized = FALSE;
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
//---------------------------------------------------------------------------//
|
||
|
HWINSTA _GetWindowStation( LPTSTR pszName, int cchName )
|
||
|
{
|
||
|
HWINSTA hWinsta = GetProcessWindowStation();
|
||
|
*pszName = 0;
|
||
|
if( hWinsta != NULL )
|
||
|
{
|
||
|
DWORD cbNeeded = 0;
|
||
|
GetUserObjectInformation( hWinsta, UOI_NAME, pszName, cchName, &cbNeeded );
|
||
|
}
|
||
|
return hWinsta;
|
||
|
}
|
||
|
|
||
|
//---------------------------------------------------------------------------//
|
||
|
HRESULT BumpThemeFileRefCount(CUxThemeFile *pThemeFile)
|
||
|
{
|
||
|
HRESULT hr;
|
||
|
|
||
|
if (g_pAppInfo)
|
||
|
hr = g_pAppInfo->BumpRefCount(pThemeFile);
|
||
|
else
|
||
|
hr = MakeError32(E_FAIL);
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
//---------------------------------------------------------------------------//
|
||
|
void CloseThemeFile(CUxThemeFile *pThemeFile)
|
||
|
{
|
||
|
if (g_pAppInfo)
|
||
|
g_pAppInfo->CloseThemeFile(pThemeFile);
|
||
|
}
|
||
|
//---------------------------------------------------------------------------
|
||
|
|
||
|
|