mirror of
https://github.com/Open-Shell/Open-Shell-Menu.git
synced 2026-08-09 09:31:13 +10:00
Compare commits
12
Commits
v4.4.196
...
7baba47baf
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7baba47baf | ||
|
|
f5fa8f0ea3 | ||
|
|
dfb307b3b7 | ||
|
|
b2070640ff | ||
|
|
7566280973 | ||
|
|
32ad90f17d | ||
|
|
e2758ec376 | ||
|
|
dd57854da1 | ||
|
|
40d8f5b119 | ||
|
|
4ebeadd949 | ||
|
|
dc1994e713 | ||
|
|
8c713cc5fd |
@@ -0,0 +1,94 @@
|
||||
name: Build
|
||||
|
||||
permissions:
|
||||
contents: read # Default to secure
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- 'Src/**'
|
||||
- 'Localization/**'
|
||||
- '.github/workflows/build.yml'
|
||||
|
||||
workflow_dispatch: # allows manual trigger for main/master
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: windows-2022
|
||||
outputs:
|
||||
new_version: ${{ steps.versioning.outputs.NEW_VERSION }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0 # Essential to see all tags
|
||||
|
||||
- name: Prepare version
|
||||
id: versioning
|
||||
shell: pwsh
|
||||
run: |
|
||||
# Fetch latest tag
|
||||
$latestTag = git describe --tags --abbrev=0 2>$null
|
||||
|
||||
if ($latestTag -notmatch '^v\d+\.\d+\.\d+$') {
|
||||
Write-Error "Error: Could not find a valid vX.Y.Z tag in history. Found: '$latestTag'"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Parse and Increment
|
||||
$version = [version]$latestTag.Substring(1)
|
||||
$baseVersion = "$($version.Major).$($version.Minor).$($version.Build + 1)"
|
||||
|
||||
# Handle PR Suffix
|
||||
if ("${{ github.event_name }}" -eq "pull_request") {
|
||||
$shortSha = "${{ github.event.pull_request.head.sha }}".Substring(0, 7)
|
||||
$finalVersion = "$baseVersion-pr-$shortSha"
|
||||
} else {
|
||||
$finalVersion = $baseVersion
|
||||
}
|
||||
|
||||
# Export
|
||||
"NEW_VERSION=$finalVersion" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
|
||||
Write-Host "Building version: $finalVersion"
|
||||
|
||||
- name: Build
|
||||
shell: cmd
|
||||
env:
|
||||
APPVEYOR_BUILD_VERSION: ${{ steps.versioning.outputs.NEW_VERSION }}
|
||||
run: Src\Setup\__MakeFinal.bat
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: OpenShell
|
||||
path: |
|
||||
Src/Setup/Final/
|
||||
!Src/Setup/Final/OpenShellLoc.zip
|
||||
|
||||
release:
|
||||
if: github.event_name == 'workflow_dispatch' # Only manual master builds
|
||||
needs: build
|
||||
runs-on: ubuntu-latest # Cheaper/faster than windows for just uploading
|
||||
permissions:
|
||||
contents: write # Elevate permissions ONLY for this job
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: OpenShell
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v3
|
||||
with:
|
||||
tag_name: v${{ needs.build.outputs.new_version }}
|
||||
name: ${{ needs.build.outputs.new_version }}
|
||||
generate_release_notes: true
|
||||
prerelease: true
|
||||
files: |
|
||||
OpenShellSetup*.exe
|
||||
OpenShellSymbols_*.7z
|
||||
Utility.exe
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -7,7 +7,7 @@ A collection of utilities bringing back classic features to Windows.
|
||||
|
||||
*Originally* **[Classic Shell](http://www.classicshell.net)** *by [Ivo Beltchev](https://sourceforge.net/u/ibeltchev/profile/)*
|
||||
|
||||
[](https://github.com/Open-Shell/Open-Shell-Menu/releases/latest) [](https://github.com/Open-Shell/Open-Shell-Menu/releases) [](https://ci.appveyor.com/project/passionate-coder/open-shell-menu/branch/master) [](https://gitq.com/passionate-coder/Classic-Start) [](https://gitter.im/open-shell/Lobby) [](https://discord.gg/7H6arr5)
|
||||
[](https://github.com/Open-Shell/Open-Shell-Menu/releases/latest) [](https://github.com/Open-Shell/Open-Shell-Menu/releases) [](https://github.com/Open-Shell/Open-Shell-Menu/actions/workflows/build.yml) [](https://ci.appveyor.com/project/passionate-coder/open-shell-menu/branch/master) [](https://gitq.com/passionate-coder/Classic-Start) [](https://gitter.im/open-shell/Lobby) [](https://discord.gg/7H6arr5)
|
||||
|
||||
[Open-Shell Homepage](https://open-shell.github.io/Open-Shell-Menu)
|
||||
|
||||
@@ -23,8 +23,11 @@ You can find the latest stable version here:
|
||||
|
||||
[](https://github.com/Open-Shell/Open-Shell-Menu/releases/latest)
|
||||
|
||||
### ⚠️ Windows for ARM compatibility ⚠️
|
||||
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.
|
||||
> [!IMPORTANT]
|
||||
> #### 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
|
||||
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
|
||||
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;
|
||||
if (_wcsicmp(PathFindExtension(path),L".bmp")==0)
|
||||
{
|
||||
srcBmp=(HBITMAP)LoadImage(NULL,path,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);
|
||||
}
|
||||
if (srcBmp && !pSize)
|
||||
if (srcBmp && !pSize && !dpi)
|
||||
return srcBmp;
|
||||
CComPtr<IWICImagingFactory> pFactory;
|
||||
if (FAILED(pFactory.CoCreateInstance(CLSID_WICImagingFactory)))
|
||||
@@ -482,6 +482,12 @@ HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, b
|
||||
else
|
||||
frameHeightD=frameWidthD*frameHeightS/frameWidthS;
|
||||
}
|
||||
|
||||
if (dpi)
|
||||
{
|
||||
frameWidthD=ScaleForDpi(dpi,frameWidthD);
|
||||
frameHeightD=ScaleForDpi(dpi,frameHeightD);
|
||||
}
|
||||
}
|
||||
|
||||
BITMAPINFO bi={0};
|
||||
@@ -946,7 +952,12 @@ UINT GetDpi(HWND hwnd)
|
||||
return dpi;
|
||||
}
|
||||
|
||||
int ScaleForDpi(UINT dpi, int value)
|
||||
{
|
||||
return MulDiv(value, dpi, USER_DEFAULT_SCREEN_DPI);
|
||||
}
|
||||
|
||||
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 );
|
||||
|
||||
// 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
|
||||
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)
|
||||
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
|
||||
int ScaleForDpi(HWND hwnd, int value);
|
||||
|
||||
|
||||
@@ -1670,7 +1670,7 @@ LRESULT CSettingsDlg::OnBackup( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL&
|
||||
ofn.lpstrTitle=title;
|
||||
ofn.lpstrDefExt=L".xml";
|
||||
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);
|
||||
if (!err.IsEmpty())
|
||||
@@ -1699,7 +1699,7 @@ LRESULT CSettingsDlg::OnBackup( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL&
|
||||
CString title=LoadStringEx(IDS_XML_TITLE_LOAD);
|
||||
ofn.lpstrTitle=title;
|
||||
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
|
||||
CString error=g_SettingsManager.LoadSettingsXml(path);
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <uxtheme.h>
|
||||
#include <map>
|
||||
#include <algorithm>
|
||||
#include <thread>
|
||||
|
||||
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.nMaxFile=_MAX_PATH;
|
||||
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];
|
||||
UnExpandEnvStrings(text,buf,_countof(buf));
|
||||
@@ -1216,7 +1217,8 @@ bool BrowseCommandHelper( HWND parent, wchar_t *text )
|
||||
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);
|
||||
|
||||
@@ -1276,6 +1278,41 @@ bool BrowseLinkHelper( HWND parent, wchar_t *text, bool bFoldersOnly )
|
||||
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 )
|
||||
{
|
||||
int id=0;
|
||||
@@ -2011,7 +2048,7 @@ LRESULT CBrowseForIconDlg::OnBrowse( WORD wNotifyCode, WORD wID, HWND hWndCtl, B
|
||||
CString title=LoadStringEx(IDS_ICON_TITLE);
|
||||
ofn.lpstrTitle=title;
|
||||
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];
|
||||
UnExpandEnvStrings(path,buf,_countof(buf));
|
||||
@@ -2210,7 +2247,7 @@ bool BrowseForBitmap( HWND hWndParent, wchar_t *path, bool bAllowJpeg )
|
||||
CString title=LoadStringEx(IDS_BMP_TITLE);
|
||||
ofn.lpstrTitle=title;
|
||||
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];
|
||||
UnExpandEnvStrings(path,buf,_countof(buf));
|
||||
@@ -2242,7 +2279,7 @@ bool BrowseForSound( HWND hWndParent, wchar_t *path )
|
||||
CString title=LoadStringEx(IDS_WAV_TITLE);
|
||||
ofn.lpstrTitle=title;
|
||||
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];
|
||||
UnExpandEnvStrings(path,buf,_countof(buf));
|
||||
@@ -3630,3 +3667,49 @@ DWORD ParseColor(const wchar_t* str)
|
||||
wchar_t* end;
|
||||
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
|
||||
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_Title_Size" Overridable="yes">9</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="BrowseDlgComboLabel" Overridable="yes">場所(&L):</String>
|
||||
|
||||
@@ -20,6 +20,8 @@ cd ..
|
||||
|
||||
cd Setup
|
||||
|
||||
copy /B ..\..\build\bin\Release\Utility.exe .\Final > nul
|
||||
|
||||
if defined APPVEYOR (
|
||||
appveyor PushArtifact ..\..\build\bin\Release\Utility.exe
|
||||
)
|
||||
|
||||
@@ -383,7 +383,7 @@ private:
|
||||
static DWORD CALLBACK StaticRefreshInfoThread( 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_RootStartMenu2;
|
||||
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)
|
||||
hotItem=m_OriginalCount+1;
|
||||
{
|
||||
if (!bSearching || !s_SearchResults.programs.empty())
|
||||
hotItem=m_OriginalCount+1;
|
||||
}
|
||||
}
|
||||
else
|
||||
hotItem=-1;
|
||||
|
||||
@@ -526,16 +526,16 @@ void CStartButton::LoadBitmap( void )
|
||||
}
|
||||
else
|
||||
{
|
||||
int dpi=GetDpi(GetParent());
|
||||
bool bResource=false;
|
||||
std::vector<unsigned int> buttonAnim;
|
||||
if (*path)
|
||||
{
|
||||
m_Bitmap=LoadImageFile(path,&size,true,true,&buttonAnim);
|
||||
m_Bitmap=LoadImageFile(path,&size,true,true,&buttonAnim,dpi);
|
||||
}
|
||||
if (!m_Bitmap)
|
||||
{
|
||||
int id;
|
||||
int dpi=GetDpi(GetParent());
|
||||
if (dpi<120)
|
||||
id=IDB_BUTTON96;
|
||||
else if (dpi<144)
|
||||
|
||||
@@ -1624,7 +1624,7 @@ static void ComputeTaskbarColors( int *data )
|
||||
{
|
||||
bool 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);
|
||||
}
|
||||
@@ -1872,6 +1872,7 @@ static LRESULT CALLBACK SubclassTaskBarProc( HWND hWnd, UINT uMsg, WPARAM wParam
|
||||
ComputeTaskbarColors(data);
|
||||
WINCOMPATTRDATA attrData={0x13,&data,sizeof(data)};
|
||||
SetWindowCompositionAttribute(hWnd,&attrData);
|
||||
UpdateTaskBars(TASKBAR_UPDATE_TEXTURE);
|
||||
return res;
|
||||
}
|
||||
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)};
|
||||
SetWindowCompositionAttribute(hWnd,&attrData);
|
||||
}
|
||||
if (g_TaskbarTexture && IsAppThemed())
|
||||
if (g_TaskbarTexture)
|
||||
{
|
||||
// draw taskbar background (behind start button and separators)
|
||||
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)
|
||||
{
|
||||
color=GetSystemGlassColor8();
|
||||
color=((color&0xFF)<<16)|(color&0xFF00)|((color>>16)&0xFF);
|
||||
if (IsAppThemed())
|
||||
{
|
||||
color=GetSystemGlassColor8();
|
||||
color=((color&0xFF)<<16)|(color&0xFF00)|((color>>16)&0xFF);
|
||||
}
|
||||
else
|
||||
{
|
||||
color=GetSysColor(COLOR_BTNFACE);
|
||||
}
|
||||
}
|
||||
BITMAPINFO bi={0};
|
||||
bi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
|
||||
@@ -3012,7 +3020,10 @@ static void InitStartMenuDLL( void )
|
||||
if (GetWinVersion()<=WIN_VER_WIN81)
|
||||
g_DrawThemeBackgroundHook=SetIatHook(module,"uxtheme.dll","DrawThemeBackground",DrawThemeBackground2);
|
||||
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);
|
||||
if (GetWinVersion()>=WIN_VER_WIN10)
|
||||
g_SetWindowCompositionAttributeHook=SetIatHook(module,"user32.dll","SetWindowCompositionAttribute",SetWindowCompositionAttribute2);
|
||||
|
||||
@@ -55,8 +55,8 @@ END_COM_MAP()
|
||||
STDMETHODIMP InvokeCommand( CMINVOKECOMMANDINFO *pInfo );
|
||||
STDMETHODIMP GetCommandString( UINT_PTR idCmd, UINT uFlags, UINT* pwReserved, LPSTR pszName, UINT cchMax );
|
||||
|
||||
wchar_t m_PinFolder1[_MAX_PATH]; // ending with \
|
||||
wchar_t m_PinFolder2[_MAX_PATH]; // ending with \
|
||||
wchar_t m_PinFolder1[_MAX_PATH]; // ending with backslash
|
||||
wchar_t m_PinFolder2[_MAX_PATH]; // ending with backslash
|
||||
wchar_t m_FileName[_MAX_PATH];
|
||||
LPITEMIDLIST m_FilePidl;
|
||||
bool m_bInPinFolder1, m_bInPinFolder2;
|
||||
|
||||
+1
-1
@@ -21,5 +21,5 @@ deploy:
|
||||
on:
|
||||
APPVEYOR_ACCOUNT_NAME: passionate-coder
|
||||
auth_token:
|
||||
secure: SOu6Y71k0oIxXJR35x+7ZTrqDa3HqUM4kLNJc+DbohPz9zhVHh9O8QYwmI7LI0qslug5L11fo9pZVfVgZttw4eBgooHaX9TNBTTA6sJItkXqMX+M6mKAG7tbI/O3Eg0v
|
||||
secure: SOu6Y71k0oIxXJR35x+7ZeU/+WRW8kaGnCWcbR3OVOd8HeCJwB1Tw3hUJa5EveLGKaGoMKGqAh01Pwc8tWX4xmphZsYYUr09IVjA0+rqgN5VT87CXD6OQxUxBJ7g+9IN
|
||||
prerelease: true
|
||||
|
||||
Reference in New Issue
Block a user