summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/m_core.h1
-rw-r--r--libs/win32/mir_core.libbin501182 -> 501354 bytes
-rw-r--r--libs/win64/mir_core.libbin506528 -> 506684 bytes
-rw-r--r--src/mir_app/src/menu_utils.cpp18
-rw-r--r--src/mir_core/src/Windows/miranda.cpp2
-rw-r--r--src/mir_core/src/Windows/threads.cpp2
-rw-r--r--src/mir_core/src/Windows/winver.cpp17
-rw-r--r--src/mir_core/src/mir_core.def1
-rw-r--r--src/mir_core/src/mir_core64.def1
-rw-r--r--src/mir_core/src/miranda.h2
10 files changed, 25 insertions, 19 deletions
diff --git a/include/m_core.h b/include/m_core.h
index a9f7f4d252..2366a2fa85 100644
--- a/include/m_core.h
+++ b/include/m_core.h
@@ -544,6 +544,7 @@ MIR_CORE_DLL(BOOL) IsWinVer7Plus();
MIR_CORE_DLL(BOOL) IsWinVer8Plus();
MIR_CORE_DLL(BOOL) IsWinVer81Plus();
MIR_CORE_DLL(BOOL) IsWinVer10Plus();
+MIR_CORE_DLL(BOOL) IsWine();
MIR_CORE_DLL(BOOL) IsFullScreen();
MIR_CORE_DLL(BOOL) IsWorkstationLocked();
diff --git a/libs/win32/mir_core.lib b/libs/win32/mir_core.lib
index 9cdcd20f15..3d1a08a7d6 100644
--- a/libs/win32/mir_core.lib
+++ b/libs/win32/mir_core.lib
Binary files differ
diff --git a/libs/win64/mir_core.lib b/libs/win64/mir_core.lib
index 87b0a95ebe..dc52baf2b0 100644
--- a/libs/win64/mir_core.lib
+++ b/libs/win64/mir_core.lib
Binary files differ
diff --git a/src/mir_app/src/menu_utils.cpp b/src/mir_app/src/menu_utils.cpp
index 33baa03ddb..2dad01211a 100644
--- a/src/mir_app/src/menu_utils.cpp
+++ b/src/mir_app/src/menu_utils.cpp
@@ -97,7 +97,7 @@ HBITMAP ConvertIconToBitmap(HIMAGELIST hIml, int iconId)
endBufferedPaint = (pfnEndBufferedPaint)GetProcAddress(hThemeAPI, "EndBufferedPaint");
}
- BITMAPINFO bmi = { 0 };
+ BITMAPINFO bmi = {};
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biCompression = BI_RGB;
@@ -110,7 +110,7 @@ HBITMAP ConvertIconToBitmap(HIMAGELIST hIml, int iconId)
HBITMAP hbmpOld = (HBITMAP)SelectObject(hdc, hbmp);
BLENDFUNCTION bfAlpha = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA };
- BP_PAINTPARAMS paintParams = { 0 };
+ BP_PAINTPARAMS paintParams = {};
paintParams.cbSize = sizeof(paintParams);
paintParams.dwFlags = BPPF_ERASE;
paintParams.pBlendFunction = &bfAlpha;
@@ -901,7 +901,7 @@ MIR_APP_DLL(HGENMENU) Menu_AddItem(int hMenuObject, TMO_MenuItem *pmi, void *pUs
static int WhereToPlace(HMENU hMenu, TMO_MenuItem *mi)
{
- MENUITEMINFO mii = { 0 };
+ MENUITEMINFO mii = {};
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_SUBMENU | MIIM_DATA;
for (int i = GetMenuItemCount(hMenu) - 1; i >= 0; i--) {
@@ -921,7 +921,7 @@ static int WhereToPlace(HMENU hMenu, TMO_MenuItem *mi)
static uint32_t GetMenuItemType(HMENU hMenu, int uItem)
{
- MENUITEMINFO mii = { 0 };
+ MENUITEMINFO mii = {};
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE;
GetMenuItemInfo(hMenu, uItem, TRUE, &mii);
@@ -930,7 +930,7 @@ static uint32_t GetMenuItemType(HMENU hMenu, int uItem)
static UINT GetMenuItemTypeData(HMENU hMenu, int uItem, TMO_IntMenuItem *&p)
{
- MENUITEMINFO mii = { 0 };
+ MENUITEMINFO mii = {};
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_DATA | MIIM_TYPE;
GetMenuItemInfo(hMenu, uItem, TRUE, &mii);
@@ -940,7 +940,7 @@ static UINT GetMenuItemTypeData(HMENU hMenu, int uItem, TMO_IntMenuItem *&p)
static void InsertSeparator(HMENU hMenu, int uItem)
{
- MENUITEMINFO mii = { 0 };
+ MENUITEMINFO mii = {};
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE;
mii.fType = MFT_SEPARATOR;
@@ -1129,7 +1129,7 @@ static HMENU BuildRecursiveMenu(HMENU hMenu, const TMO_LinkedList &pList, WPARAM
mii.fMask = MIIM_DATA | MIIM_ID | MIIM_STRING | MIIM_STATE;
if (pmi->iconId != -1 && g_bMenuIconsEnabled) {
mii.fMask |= MIIM_BITMAP;
- if (IsWinVerVistaPlus() && IsThemeActive()) {
+ if (IsWinVerVistaPlus() && IsThemeActive() && !IsWine()) {
if (pmi->hBmp == nullptr)
pmi->hBmp = ConvertIconToBitmap(pmi->parent->m_hMenuIcons, pmi->iconId);
mii.hbmpItem = pmi->hBmp;
@@ -1232,8 +1232,8 @@ static int MO_ReloadIcon(TMO_IntMenuItem *pmi, const void *)
int OnIconLibChanges(WPARAM, LPARAM)
{
- {
- mir_cslock lck(csMenuHook);
+ { mir_cslock lck(csMenuHook);
+
for (auto &p : g_menus)
if (hStatusMenuObject != p->id) //skip status menu
MO_RecursiveWalkMenu(p->m_items, MO_ReloadIcon);
diff --git a/src/mir_core/src/Windows/miranda.cpp b/src/mir_core/src/Windows/miranda.cpp
index dc867b89fe..0e4bd9d344 100644
--- a/src/mir_core/src/Windows/miranda.cpp
+++ b/src/mir_core/src/Windows/miranda.cpp
@@ -39,7 +39,7 @@ void InitHyperlink();
void InitTimeZones();
void InitWinver();
-HINSTANCE g_hInst = nullptr;
+HINSTANCE g_hInst = nullptr, g_hNtdll = GetModuleHandleA("ntdll.dll");
HCURSOR g_hCursorNS, g_hCursorWE;
HANDLE hThreadQueueEmpty;
diff --git a/src/mir_core/src/Windows/threads.cpp b/src/mir_core/src/Windows/threads.cpp
index 1685d8c31a..898c6c0455 100644
--- a/src/mir_core/src/Windows/threads.cpp
+++ b/src/mir_core/src/Windows/threads.cpp
@@ -305,7 +305,7 @@ typedef LONG (WINAPI *pNtQIT)(HANDLE, LONG, PVOID, ULONG, PULONG);
static void* GetCurrentThreadEntryPoint()
{
- pNtQIT NtQueryInformationThread = (pNtQIT)GetProcAddress(GetModuleHandle(L"ntdll.dll"), "NtQueryInformationThread");
+ pNtQIT NtQueryInformationThread = (pNtQIT)GetProcAddress(g_hNtdll, "NtQueryInformationThread");
if (NtQueryInformationThread == nullptr)
return nullptr;
diff --git a/src/mir_core/src/Windows/winver.cpp b/src/mir_core/src/Windows/winver.cpp
index 704464d5f3..b3fadf2043 100644
--- a/src/mir_core/src/Windows/winver.cpp
+++ b/src/mir_core/src/Windows/winver.cpp
@@ -30,11 +30,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#endif
static int dwWinVer;
+static bool bIsWine = false;
void InitWinver()
{
uint32_t dwVer = LOWORD(GetVersion());
dwWinVer = MAKEWORD(HIBYTE(dwVer), LOBYTE(dwVer));
+ bIsWine = GetProcAddress(g_hNtdll, "wine_get_version") != 0;
}
MIR_CORE_DLL(BOOL) IsWinVerVistaPlus()
@@ -62,17 +64,21 @@ MIR_CORE_DLL(BOOL) IsWinVer10Plus()
return dwWinVer >= _WIN32_WINNT_WIN10;
}
-MIR_CORE_DLL(BOOL) IsFullScreen()
+MIR_CORE_DLL(BOOL) IsWine()
{
- RECT rcScreen = { 0 };
+ return bIsWine;
+}
+MIR_CORE_DLL(BOOL) IsFullScreen()
+{
+ RECT rcScreen = {};
rcScreen.right = GetSystemMetrics(SM_CXSCREEN);
rcScreen.bottom = GetSystemMetrics(SM_CYSCREEN);
HMONITOR hMon = MonitorFromWindow(GetForegroundWindow(), MONITOR_DEFAULTTONEAREST);
MONITORINFO mi;
mi.cbSize = sizeof(mi);
- if (GetMonitorInfo(hMon, &mi))
+ if (GetMonitorInfoW(hMon, &mi))
rcScreen = mi.rcMonitor;
HWND hWndDesktop = GetDesktopWindow();
@@ -362,11 +368,8 @@ MIR_CORE_DLL(BOOL) OS_GetDisplayString(char *buf, size_t bufSize)
ret.AppendFormat(" (build %d)", osvi.dwBuildNumber);
- HMODULE hNtDll = GetModuleHandleA("ntdll.dll");
- if (WGV wine_get_version = (WGV)GetProcAddress(hNtDll, "wine_get_version"))
- {
+ if (WGV wine_get_version = (WGV)GetProcAddress(g_hNtdll, "wine_get_version"))
ret.AppendFormat(" (Wine %s)", wine_get_version());
- }
mir_strncpy(buf, ret, bufSize);
return true;
diff --git a/src/mir_core/src/mir_core.def b/src/mir_core/src/mir_core.def
index 2c91438bee..f0ce0a70db 100644
--- a/src/mir_core/src/mir_core.def
+++ b/src/mir_core/src/mir_core.def
@@ -1589,3 +1589,4 @@ _db_event_delivered@8 @1806 NONAME
??6MBinBuffer@@QAEAAV0@_K@Z @1814 NONAME
_Utils_IsoToUnixTime@4 @1815 NONAME
?db_event_setJson@@YGHIPBD@Z @1816 NONAME
+_IsWine@0 @1817 NONAME
diff --git a/src/mir_core/src/mir_core64.def b/src/mir_core/src/mir_core64.def
index 2f83d9c0b0..935c5d83cb 100644
--- a/src/mir_core/src/mir_core64.def
+++ b/src/mir_core/src/mir_core64.def
@@ -1589,3 +1589,4 @@ db_event_delivered @1806 NONAME
??6MBinBuffer@@QEAAAEAV0@_K@Z @1814 NONAME
Utils_IsoToUnixTime @1815 NONAME
?db_event_setJson@@YAHIPEBD@Z @1816 NONAME
+IsWine @1817 NONAME
diff --git a/src/mir_core/src/miranda.h b/src/mir_core/src/miranda.h
index c76d55c2c6..cedf24e528 100644
--- a/src/mir_core/src/miranda.h
+++ b/src/mir_core/src/miranda.h
@@ -31,7 +31,7 @@ void DestroyModularEngine(void);
int InitPathUtils(void);
-extern HINSTANCE g_hInst;
+extern HINSTANCE g_hInst, g_hNtdll;
extern HWND hAPCWindow;
extern HANDLE hThreadQueueEmpty;
extern HCURSOR g_hCursorNS, g_hCursorWE;