mirror of
https://github.com/Open-Shell/Open-Shell-Menu.git
synced 2026-08-09 17:41:11 +10:00
Compare commits
10
Commits
v4.4.196
...
dfb307b3b7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dfb307b3b7 | ||
|
|
b2070640ff | ||
|
|
7566280973 | ||
|
|
32ad90f17d | ||
|
|
e2758ec376 | ||
|
|
dd57854da1 | ||
|
|
40d8f5b119 | ||
|
|
4ebeadd949 | ||
|
|
dc1994e713 | ||
|
|
8c713cc5fd |
@@ -23,8 +23,11 @@ You can find the latest stable version here:
|
|||||||
|
|
||||||
[](https://github.com/Open-Shell/Open-Shell-Menu/releases/latest)
|
[](https://github.com/Open-Shell/Open-Shell-Menu/releases/latest)
|
||||||
|
|
||||||
### ⚠️ Windows for ARM compatibility ⚠️
|
> [!IMPORTANT]
|
||||||
Open-Shell is not compatible with Windows for ARM. If you install it on a Windows for ARM installation (ex. using Parallels Desktop on an Apple Silicon Mac), you will no longer be able to log into your account the next time you reboot. Please refrain from installing Open-Shell on Windows for ARM.
|
> #### Windows for ARM compatibility
|
||||||
|
> Open-Shell is compatible with Windows for ARM since version [4.4.196](https://github.com/Open-Shell/Open-Shell-Menu/releases/tag/v4.4.196).
|
||||||
|
>
|
||||||
|
> If you install older one on a Windows for ARM installation (ex. using Parallels Desktop on an Apple Silicon Mac), you will no longer be able to log into your account the next time you reboot. Please refrain from installing Open-Shell on Windows for ARM.
|
||||||
|
|
||||||
### Temporary Translation/Language Solution
|
### Temporary Translation/Language Solution
|
||||||
1. Download [language DLL](https://coddec.github.io/Classic-Shell/www.classicshell.net/translations/index.html)
|
1. Download [language DLL](https://coddec.github.io/Classic-Shell/www.classicshell.net/translations/index.html)
|
||||||
|
|||||||
@@ -384,14 +384,14 @@ HICON CreateDisabledIcon( HICON hIcon, int iconSize )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Loads an image file into a bitmap and optionally resizes it
|
// Loads an image file into a bitmap and optionally resizes it
|
||||||
HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector<unsigned int> *pButtonAnim )
|
HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector<unsigned int> *pButtonAnim, UINT dpi )
|
||||||
{
|
{
|
||||||
HBITMAP srcBmp=NULL;
|
HBITMAP srcBmp=NULL;
|
||||||
if (_wcsicmp(PathFindExtension(path),L".bmp")==0)
|
if (_wcsicmp(PathFindExtension(path),L".bmp")==0)
|
||||||
{
|
{
|
||||||
srcBmp=(HBITMAP)LoadImage(NULL,path,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);
|
srcBmp=(HBITMAP)LoadImage(NULL,path,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);
|
||||||
}
|
}
|
||||||
if (srcBmp && !pSize)
|
if (srcBmp && !pSize && !dpi)
|
||||||
return srcBmp;
|
return srcBmp;
|
||||||
CComPtr<IWICImagingFactory> pFactory;
|
CComPtr<IWICImagingFactory> pFactory;
|
||||||
if (FAILED(pFactory.CoCreateInstance(CLSID_WICImagingFactory)))
|
if (FAILED(pFactory.CoCreateInstance(CLSID_WICImagingFactory)))
|
||||||
@@ -482,6 +482,12 @@ HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, b
|
|||||||
else
|
else
|
||||||
frameHeightD=frameWidthD*frameHeightS/frameWidthS;
|
frameHeightD=frameWidthD*frameHeightS/frameWidthS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dpi)
|
||||||
|
{
|
||||||
|
frameWidthD=ScaleForDpi(dpi,frameWidthD);
|
||||||
|
frameHeightD=ScaleForDpi(dpi,frameHeightD);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BITMAPINFO bi={0};
|
BITMAPINFO bi={0};
|
||||||
@@ -946,7 +952,12 @@ UINT GetDpi(HWND hwnd)
|
|||||||
return dpi;
|
return dpi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ScaleForDpi(UINT dpi, int value)
|
||||||
|
{
|
||||||
|
return MulDiv(value, dpi, USER_DEFAULT_SCREEN_DPI);
|
||||||
|
}
|
||||||
|
|
||||||
int ScaleForDpi(HWND hwnd, int value)
|
int ScaleForDpi(HWND hwnd, int value)
|
||||||
{
|
{
|
||||||
return MulDiv(value, GetDpi(hwnd), USER_DEFAULT_SCREEN_DPI);
|
return ScaleForDpi(GetDpi(hwnd), value);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ HICON ShExtractIcon( const char *path, int index, int iconSize );
|
|||||||
HBITMAP BitmapFromIcon( HICON hIcon, int iconSize, unsigned int **pBits, bool bDestroyIcon );
|
HBITMAP BitmapFromIcon( HICON hIcon, int iconSize, unsigned int **pBits, bool bDestroyIcon );
|
||||||
|
|
||||||
// Loads an image file into a bitmap and optionally resizes it
|
// Loads an image file into a bitmap and optionally resizes it
|
||||||
HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector<unsigned int> *pButtonAnim );
|
HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector<unsigned int> *pButtonAnim, UINT dpi=0 );
|
||||||
|
|
||||||
// Loads a bitmap from a IMAGE resource
|
// Loads a bitmap from a IMAGE resource
|
||||||
HBITMAP LoadImageResource( HMODULE hModule, const wchar_t *name, bool bTopDown, bool bPremultiply );
|
HBITMAP LoadImageResource( HMODULE hModule, const wchar_t *name, bool bTopDown, bool bPremultiply );
|
||||||
@@ -88,6 +88,8 @@ HFONT CreateFontSetting( const wchar_t *fontStr, int dpi );
|
|||||||
// Return DPI of given window (or system DPI on older systems)
|
// Return DPI of given window (or system DPI on older systems)
|
||||||
UINT GetDpi(HWND hwnd = nullptr);
|
UINT GetDpi(HWND hwnd = nullptr);
|
||||||
|
|
||||||
|
// Scale given value according to given DPI
|
||||||
|
int ScaleForDpi(UINT dpi, int value);
|
||||||
// Scale given value according to DPI of window
|
// Scale given value according to DPI of window
|
||||||
int ScaleForDpi(HWND hwnd, int value);
|
int ScaleForDpi(HWND hwnd, int value);
|
||||||
|
|
||||||
|
|||||||
@@ -1670,7 +1670,7 @@ LRESULT CSettingsDlg::OnBackup( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL&
|
|||||||
ofn.lpstrTitle=title;
|
ofn.lpstrTitle=title;
|
||||||
ofn.lpstrDefExt=L".xml";
|
ofn.lpstrDefExt=L".xml";
|
||||||
ofn.Flags=OFN_DONTADDTORECENT|OFN_ENABLESIZING|OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY|OFN_NOCHANGEDIR;
|
ofn.Flags=OFN_DONTADDTORECENT|OFN_ENABLESIZING|OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY|OFN_NOCHANGEDIR;
|
||||||
if (GetSaveFileName(&ofn))
|
if (GetSaveFileNameSafe(&ofn))
|
||||||
{
|
{
|
||||||
CString err=g_SettingsManager.SaveSettingsXml(path);
|
CString err=g_SettingsManager.SaveSettingsXml(path);
|
||||||
if (!err.IsEmpty())
|
if (!err.IsEmpty())
|
||||||
@@ -1699,7 +1699,7 @@ LRESULT CSettingsDlg::OnBackup( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL&
|
|||||||
CString title=LoadStringEx(IDS_XML_TITLE_LOAD);
|
CString title=LoadStringEx(IDS_XML_TITLE_LOAD);
|
||||||
ofn.lpstrTitle=title;
|
ofn.lpstrTitle=title;
|
||||||
ofn.Flags=OFN_DONTADDTORECENT|OFN_ENABLESIZING|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_NOCHANGEDIR;
|
ofn.Flags=OFN_DONTADDTORECENT|OFN_ENABLESIZING|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_NOCHANGEDIR;
|
||||||
if (GetOpenFileName(&ofn))
|
if (GetOpenFileNameSafe(&ofn))
|
||||||
{
|
{
|
||||||
SetCurTab(m_Index,true); // reload tab once to force-close any active edit boxes
|
SetCurTab(m_Index,true); // reload tab once to force-close any active edit boxes
|
||||||
CString error=g_SettingsManager.LoadSettingsXml(path);
|
CString error=g_SettingsManager.LoadSettingsXml(path);
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#include <uxtheme.h>
|
#include <uxtheme.h>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <thread>
|
||||||
|
|
||||||
const KNOWNFOLDERID FOLDERID_DesktopRoot={'DESK', 'TO', 'P', {'D', 'E', 'S', 'K', 'T', 'O', 'P', 0x00}};
|
const KNOWNFOLDERID FOLDERID_DesktopRoot={'DESK', 'TO', 'P', {'D', 'E', 'S', 'K', 'T', 'O', 'P', 0x00}};
|
||||||
|
|
||||||
@@ -1193,7 +1194,7 @@ bool BrowseCommandHelper( HWND parent, wchar_t *text )
|
|||||||
ofn.lpstrFile=text;
|
ofn.lpstrFile=text;
|
||||||
ofn.nMaxFile=_MAX_PATH;
|
ofn.nMaxFile=_MAX_PATH;
|
||||||
ofn.Flags=OFN_DONTADDTORECENT|OFN_ENABLESIZING|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_NOCHANGEDIR|OFN_NODEREFERENCELINKS;
|
ofn.Flags=OFN_DONTADDTORECENT|OFN_ENABLESIZING|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_NOCHANGEDIR|OFN_NODEREFERENCELINKS;
|
||||||
if (GetOpenFileName(&ofn))
|
if (GetOpenFileNameSafe(&ofn))
|
||||||
{
|
{
|
||||||
wchar_t buf[_MAX_PATH];
|
wchar_t buf[_MAX_PATH];
|
||||||
UnExpandEnvStrings(text,buf,_countof(buf));
|
UnExpandEnvStrings(text,buf,_countof(buf));
|
||||||
@@ -1216,7 +1217,8 @@ bool BrowseCommandHelper( HWND parent, wchar_t *text )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BrowseLinkHelper( HWND parent, wchar_t *text, bool bFoldersOnly )
|
// Internal implementation that must be run on an STA thread with COM initialized.
|
||||||
|
static bool BrowseLinkHelperImpl( HWND parent, wchar_t *text, bool bFoldersOnly )
|
||||||
{
|
{
|
||||||
DoEnvironmentSubst(text,_MAX_PATH);
|
DoEnvironmentSubst(text,_MAX_PATH);
|
||||||
|
|
||||||
@@ -1276,6 +1278,41 @@ bool BrowseLinkHelper( HWND parent, wchar_t *text, bool bFoldersOnly )
|
|||||||
return pResult!=NULL;
|
return pResult!=NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run IFileOpenDialog on a separate STA thread and pump messages on the caller while waiting.
|
||||||
|
bool BrowseLinkHelper( HWND parent, wchar_t *text, bool bFoldersOnly )
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
std::thread worker([&parent, &text, &bFoldersOnly, &result]() mutable {
|
||||||
|
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
||||||
|
result = BrowseLinkHelperImpl(parent, text, bFoldersOnly);
|
||||||
|
CoUninitialize();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Pump messages while waiting for the worker (dialog) to finish
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
HANDLE hWorker = worker.native_handle();
|
||||||
|
if (MsgWaitForMultipleObjects(1, &hWorker, FALSE, INFINITE, QS_ALLINPUT) == WAIT_OBJECT_0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
MSG msg;
|
||||||
|
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
||||||
|
{
|
||||||
|
if (msg.message == WM_QUIT)
|
||||||
|
{
|
||||||
|
PostQuitMessage((int)msg.wParam);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
TranslateMessage(&msg);
|
||||||
|
DispatchMessage(&msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
worker.join();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
bool BrowseIconHelper( HWND parent, wchar_t *text )
|
bool BrowseIconHelper( HWND parent, wchar_t *text )
|
||||||
{
|
{
|
||||||
int id=0;
|
int id=0;
|
||||||
@@ -2011,7 +2048,7 @@ LRESULT CBrowseForIconDlg::OnBrowse( WORD wNotifyCode, WORD wID, HWND hWndCtl, B
|
|||||||
CString title=LoadStringEx(IDS_ICON_TITLE);
|
CString title=LoadStringEx(IDS_ICON_TITLE);
|
||||||
ofn.lpstrTitle=title;
|
ofn.lpstrTitle=title;
|
||||||
ofn.Flags=OFN_DONTADDTORECENT|OFN_ENABLESIZING|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_NOCHANGEDIR;
|
ofn.Flags=OFN_DONTADDTORECENT|OFN_ENABLESIZING|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_NOCHANGEDIR;
|
||||||
if (GetOpenFileName(&ofn))
|
if (GetOpenFileNameSafe(&ofn))
|
||||||
{
|
{
|
||||||
wchar_t buf[_MAX_PATH];
|
wchar_t buf[_MAX_PATH];
|
||||||
UnExpandEnvStrings(path,buf,_countof(buf));
|
UnExpandEnvStrings(path,buf,_countof(buf));
|
||||||
@@ -2210,7 +2247,7 @@ bool BrowseForBitmap( HWND hWndParent, wchar_t *path, bool bAllowJpeg )
|
|||||||
CString title=LoadStringEx(IDS_BMP_TITLE);
|
CString title=LoadStringEx(IDS_BMP_TITLE);
|
||||||
ofn.lpstrTitle=title;
|
ofn.lpstrTitle=title;
|
||||||
ofn.Flags=OFN_DONTADDTORECENT|OFN_ENABLESIZING|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_NOCHANGEDIR;
|
ofn.Flags=OFN_DONTADDTORECENT|OFN_ENABLESIZING|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_NOCHANGEDIR;
|
||||||
if (GetOpenFileName(&ofn))
|
if (GetOpenFileNameSafe(&ofn))
|
||||||
{
|
{
|
||||||
wchar_t buf[_MAX_PATH];
|
wchar_t buf[_MAX_PATH];
|
||||||
UnExpandEnvStrings(path,buf,_countof(buf));
|
UnExpandEnvStrings(path,buf,_countof(buf));
|
||||||
@@ -2242,7 +2279,7 @@ bool BrowseForSound( HWND hWndParent, wchar_t *path )
|
|||||||
CString title=LoadStringEx(IDS_WAV_TITLE);
|
CString title=LoadStringEx(IDS_WAV_TITLE);
|
||||||
ofn.lpstrTitle=title;
|
ofn.lpstrTitle=title;
|
||||||
ofn.Flags=OFN_DONTADDTORECENT|OFN_ENABLESIZING|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_NOCHANGEDIR;
|
ofn.Flags=OFN_DONTADDTORECENT|OFN_ENABLESIZING|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_NOCHANGEDIR;
|
||||||
if (GetOpenFileName(&ofn))
|
if (GetOpenFileNameSafe(&ofn))
|
||||||
{
|
{
|
||||||
wchar_t buf[_MAX_PATH];
|
wchar_t buf[_MAX_PATH];
|
||||||
UnExpandEnvStrings(path,buf,_countof(buf));
|
UnExpandEnvStrings(path,buf,_countof(buf));
|
||||||
@@ -3630,3 +3667,49 @@ DWORD ParseColor(const wchar_t* str)
|
|||||||
wchar_t* end;
|
wchar_t* end;
|
||||||
return wcstoul(str, &end, 16) & 0xFFFFFF;
|
return wcstoul(str, &end, 16) & 0xFFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run GetOpenFileName/GetSaveFileName on a separate STA thread and pump messages on the caller
|
||||||
|
template <typename auto Fnc>
|
||||||
|
static BOOL GetFileNameSafe(OPENFILENAME* pOfn)
|
||||||
|
{
|
||||||
|
BOOL result = FALSE;
|
||||||
|
|
||||||
|
std::thread worker([&pOfn, &result]() mutable {
|
||||||
|
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
||||||
|
result = Fnc(pOfn);
|
||||||
|
CoUninitialize();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Pump messages while waiting for the worker (dialog) to finish
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
HANDLE hWorker = worker.native_handle();
|
||||||
|
if (MsgWaitForMultipleObjects(1, &hWorker, FALSE, INFINITE, QS_ALLINPUT) == WAIT_OBJECT_0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
MSG msg;
|
||||||
|
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
||||||
|
{
|
||||||
|
if (msg.message == WM_QUIT)
|
||||||
|
{
|
||||||
|
PostQuitMessage((int)msg.wParam);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
TranslateMessage(&msg);
|
||||||
|
DispatchMessage(&msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
worker.join();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL GetOpenFileNameSafe(OPENFILENAME* pOfn)
|
||||||
|
{
|
||||||
|
return GetFileNameSafe<GetOpenFileNameW>(pOfn);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL GetSaveFileNameSafe(OPENFILENAME* pOfn)
|
||||||
|
{
|
||||||
|
return GetFileNameSafe<GetSaveFileNameW>(pOfn);
|
||||||
|
}
|
||||||
|
|||||||
@@ -395,3 +395,7 @@ DWORD BgrToRgb(DWORD val);
|
|||||||
|
|
||||||
// parse color from hexadecimal string
|
// parse color from hexadecimal string
|
||||||
DWORD ParseColor(const wchar_t* str);
|
DWORD ParseColor(const wchar_t* str);
|
||||||
|
|
||||||
|
// safe versions of GetOpenFileName/GetSaveFileName (run API on a separate STA thread and pump messages on the caller)
|
||||||
|
BOOL GetOpenFileNameSafe(OPENFILENAME* pOfn);
|
||||||
|
BOOL GetSaveFileNameSafe(OPENFILENAME* pOfn);
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
<String Id="Advanced_Font_Bigger_Size" Overridable="yes">12</String>
|
<String Id="Advanced_Font_Bigger_Size" Overridable="yes">12</String>
|
||||||
<String Id="Advanced_Font_Title_Size" Overridable="yes">9</String>
|
<String Id="Advanced_Font_Title_Size" Overridable="yes">9</String>
|
||||||
<String Id="Advanced_Font_Emphasized_Size" Overridable="yes">8</String>
|
<String Id="Advanced_Font_Emphasized_Size" Overridable="yes">8</String>
|
||||||
<String Id="Advanced_Font_FaceName" Overridable="yes">"MS UI Gothic", "MS PGothic", "MS Pゴシック", "MS Gothic", "MS ゴシック", Osaka, Tahoma</String>
|
<String Id="Advanced_Font_FaceName" Overridable="yes">"MS UI Gothic", "MS PGothic", "MS Pゴシック", "MS Gothic", "MS ゴシック", Yu Gothic UI, Tahoma</String>
|
||||||
|
|
||||||
<String Id="BrowseDlg_Title" Overridable="yes">[ProductName] セットアップ</String>
|
<String Id="BrowseDlg_Title" Overridable="yes">[ProductName] セットアップ</String>
|
||||||
<String Id="BrowseDlgComboLabel" Overridable="yes">場所(&L):</String>
|
<String Id="BrowseDlgComboLabel" Overridable="yes">場所(&L):</String>
|
||||||
|
|||||||
@@ -383,7 +383,7 @@ private:
|
|||||||
static DWORD CALLBACK StaticRefreshInfoThread( void *param );
|
static DWORD CALLBACK StaticRefreshInfoThread( void *param );
|
||||||
static DWORD CALLBACK SaveCacheFileThread( void *param );
|
static DWORD CALLBACK SaveCacheFileThread( void *param );
|
||||||
|
|
||||||
// all paths are in caps and end with \
|
// all paths are in caps and end with backslash
|
||||||
CString m_RootStartMenu1;
|
CString m_RootStartMenu1;
|
||||||
CString m_RootStartMenu2;
|
CString m_RootStartMenu2;
|
||||||
CString m_RootStartMenu3;
|
CString m_RootStartMenu3;
|
||||||
|
|||||||
@@ -6366,7 +6366,10 @@ LRESULT CMenuContainer::OnRefresh( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (m_Items[m_OriginalCount].id==MENU_SEARCH_CATEGORY)
|
else if (m_Items[m_OriginalCount].id==MENU_SEARCH_CATEGORY)
|
||||||
hotItem=m_OriginalCount+1;
|
{
|
||||||
|
if (!bSearching || !s_SearchResults.programs.empty())
|
||||||
|
hotItem=m_OriginalCount+1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
hotItem=-1;
|
hotItem=-1;
|
||||||
|
|||||||
@@ -526,16 +526,16 @@ void CStartButton::LoadBitmap( void )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
int dpi=GetDpi(GetParent());
|
||||||
bool bResource=false;
|
bool bResource=false;
|
||||||
std::vector<unsigned int> buttonAnim;
|
std::vector<unsigned int> buttonAnim;
|
||||||
if (*path)
|
if (*path)
|
||||||
{
|
{
|
||||||
m_Bitmap=LoadImageFile(path,&size,true,true,&buttonAnim);
|
m_Bitmap=LoadImageFile(path,&size,true,true,&buttonAnim,dpi);
|
||||||
}
|
}
|
||||||
if (!m_Bitmap)
|
if (!m_Bitmap)
|
||||||
{
|
{
|
||||||
int id;
|
int id;
|
||||||
int dpi=GetDpi(GetParent());
|
|
||||||
if (dpi<120)
|
if (dpi<120)
|
||||||
id=IDB_BUTTON96;
|
id=IDB_BUTTON96;
|
||||||
else if (dpi<144)
|
else if (dpi<144)
|
||||||
|
|||||||
@@ -1624,7 +1624,7 @@ static void ComputeTaskbarColors( int *data )
|
|||||||
{
|
{
|
||||||
bool bDefLook;
|
bool bDefLook;
|
||||||
int look=GetSettingInt(L"TaskbarLook",bDefLook);
|
int look=GetSettingInt(L"TaskbarLook",bDefLook);
|
||||||
if (GetWinVersion()<WIN_VER_WIN10 || look==TASKBAR_AEROGLASS || (look==TASKBAR_TRANSPARENT && g_TaskbarTexture))
|
if (GetWinVersion()<WIN_VER_WIN10 || !IsAppThemed() || look==TASKBAR_AEROGLASS || (look==TASKBAR_TRANSPARENT && g_TaskbarTexture))
|
||||||
{
|
{
|
||||||
memset(data,0,16);
|
memset(data,0,16);
|
||||||
}
|
}
|
||||||
@@ -1872,6 +1872,7 @@ static LRESULT CALLBACK SubclassTaskBarProc( HWND hWnd, UINT uMsg, WPARAM wParam
|
|||||||
ComputeTaskbarColors(data);
|
ComputeTaskbarColors(data);
|
||||||
WINCOMPATTRDATA attrData={0x13,&data,sizeof(data)};
|
WINCOMPATTRDATA attrData={0x13,&data,sizeof(data)};
|
||||||
SetWindowCompositionAttribute(hWnd,&attrData);
|
SetWindowCompositionAttribute(hWnd,&attrData);
|
||||||
|
UpdateTaskBars(TASKBAR_UPDATE_TEXTURE);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
if ((uMsg==WM_DWMCOLORIZATIONCOLORCHANGED || uMsg==WM_SETTINGCHANGE) && taskBar && taskBar->bCustomLook && SetWindowCompositionAttribute && GetWinVersion()<WIN_VER_WIN10)
|
if ((uMsg==WM_DWMCOLORIZATIONCOLORCHANGED || uMsg==WM_SETTINGCHANGE) && taskBar && taskBar->bCustomLook && SetWindowCompositionAttribute && GetWinVersion()<WIN_VER_WIN10)
|
||||||
@@ -1932,7 +1933,7 @@ static LRESULT CALLBACK SubclassTaskBarProc( HWND hWnd, UINT uMsg, WPARAM wParam
|
|||||||
WINCOMPATTRDATA attrData={0x13,&data,sizeof(data)};
|
WINCOMPATTRDATA attrData={0x13,&data,sizeof(data)};
|
||||||
SetWindowCompositionAttribute(hWnd,&attrData);
|
SetWindowCompositionAttribute(hWnd,&attrData);
|
||||||
}
|
}
|
||||||
if (g_TaskbarTexture && IsAppThemed())
|
if (g_TaskbarTexture)
|
||||||
{
|
{
|
||||||
// draw taskbar background (behind start button and separators)
|
// draw taskbar background (behind start button and separators)
|
||||||
PAINTSTRUCT ps;
|
PAINTSTRUCT ps;
|
||||||
@@ -2383,12 +2384,19 @@ void UpdateTaskBars( TUpdateTaskbar update )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (GetWinVersion()<WIN_VER_WIN10 && (!bDefColor || !bDefOpacity))
|
else if ((GetWinVersion()<WIN_VER_WIN10 && (!bDefColor || !bDefOpacity)) || !IsAppThemed())
|
||||||
{
|
{
|
||||||
if (bDefColor && GetWinVersion()>WIN_VER_WIN7)
|
if (bDefColor && GetWinVersion()>WIN_VER_WIN7)
|
||||||
{
|
{
|
||||||
color=GetSystemGlassColor8();
|
if (IsAppThemed())
|
||||||
color=((color&0xFF)<<16)|(color&0xFF00)|((color>>16)&0xFF);
|
{
|
||||||
|
color=GetSystemGlassColor8();
|
||||||
|
color=((color&0xFF)<<16)|(color&0xFF00)|((color>>16)&0xFF);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
color=GetSysColor(COLOR_BTNFACE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
BITMAPINFO bi={0};
|
BITMAPINFO bi={0};
|
||||||
bi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
|
bi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
|
||||||
@@ -3012,7 +3020,10 @@ static void InitStartMenuDLL( void )
|
|||||||
if (GetWinVersion()<=WIN_VER_WIN81)
|
if (GetWinVersion()<=WIN_VER_WIN81)
|
||||||
g_DrawThemeBackgroundHook=SetIatHook(module,"uxtheme.dll","DrawThemeBackground",DrawThemeBackground2);
|
g_DrawThemeBackgroundHook=SetIatHook(module,"uxtheme.dll","DrawThemeBackground",DrawThemeBackground2);
|
||||||
g_DrawThemeTextHook=SetIatHook(module,"uxtheme.dll","DrawThemeText",DrawThemeText2);
|
g_DrawThemeTextHook=SetIatHook(module,"uxtheme.dll","DrawThemeText",DrawThemeText2);
|
||||||
g_DrawThemeTextExHook=SetIatHook(module,"uxtheme.dll","DrawThemeTextEx",DrawThemeTextEx2);
|
if (IsAppThemed())
|
||||||
|
{
|
||||||
|
g_DrawThemeTextExHook=SetIatHook(module,"uxtheme.dll","DrawThemeTextEx",DrawThemeTextEx2);
|
||||||
|
}
|
||||||
g_DrawThemeTextCtlHook=SetIatHook(GetModuleHandle(L"comctl32.dll"),"uxtheme.dll","DrawThemeText",DrawThemeText2);
|
g_DrawThemeTextCtlHook=SetIatHook(GetModuleHandle(L"comctl32.dll"),"uxtheme.dll","DrawThemeText",DrawThemeText2);
|
||||||
if (GetWinVersion()>=WIN_VER_WIN10)
|
if (GetWinVersion()>=WIN_VER_WIN10)
|
||||||
g_SetWindowCompositionAttributeHook=SetIatHook(module,"user32.dll","SetWindowCompositionAttribute",SetWindowCompositionAttribute2);
|
g_SetWindowCompositionAttributeHook=SetIatHook(module,"user32.dll","SetWindowCompositionAttribute",SetWindowCompositionAttribute2);
|
||||||
|
|||||||
@@ -55,8 +55,8 @@ END_COM_MAP()
|
|||||||
STDMETHODIMP InvokeCommand( CMINVOKECOMMANDINFO *pInfo );
|
STDMETHODIMP InvokeCommand( CMINVOKECOMMANDINFO *pInfo );
|
||||||
STDMETHODIMP GetCommandString( UINT_PTR idCmd, UINT uFlags, UINT* pwReserved, LPSTR pszName, UINT cchMax );
|
STDMETHODIMP GetCommandString( UINT_PTR idCmd, UINT uFlags, UINT* pwReserved, LPSTR pszName, UINT cchMax );
|
||||||
|
|
||||||
wchar_t m_PinFolder1[_MAX_PATH]; // ending with \
|
wchar_t m_PinFolder1[_MAX_PATH]; // ending with backslash
|
||||||
wchar_t m_PinFolder2[_MAX_PATH]; // ending with \
|
wchar_t m_PinFolder2[_MAX_PATH]; // ending with backslash
|
||||||
wchar_t m_FileName[_MAX_PATH];
|
wchar_t m_FileName[_MAX_PATH];
|
||||||
LPITEMIDLIST m_FilePidl;
|
LPITEMIDLIST m_FilePidl;
|
||||||
bool m_bInPinFolder1, m_bInPinFolder2;
|
bool m_bInPinFolder1, m_bInPinFolder2;
|
||||||
|
|||||||
+1
-1
@@ -21,5 +21,5 @@ deploy:
|
|||||||
on:
|
on:
|
||||||
APPVEYOR_ACCOUNT_NAME: passionate-coder
|
APPVEYOR_ACCOUNT_NAME: passionate-coder
|
||||||
auth_token:
|
auth_token:
|
||||||
secure: SOu6Y71k0oIxXJR35x+7ZTrqDa3HqUM4kLNJc+DbohPz9zhVHh9O8QYwmI7LI0qslug5L11fo9pZVfVgZttw4eBgooHaX9TNBTTA6sJItkXqMX+M6mKAG7tbI/O3Eg0v
|
secure: SOu6Y71k0oIxXJR35x+7ZeU/+WRW8kaGnCWcbR3OVOd8HeCJwB1Tw3hUJa5EveLGKaGoMKGqAh01Pwc8tWX4xmphZsYYUr09IVjA0+rqgN5VT87CXD6OQxUxBJ7g+9IN
|
||||||
prerelease: true
|
prerelease: true
|
||||||
|
|||||||
Reference in New Issue
Block a user