mirror of
https://github.com/narzoul/DDrawCompat
synced 2024-12-30 08:55:36 +01:00
Disable immersive context menus (updated for Win10 v1809)
This commit is contained in:
parent
cb7a46cd5e
commit
e8491e65c2
@ -13,7 +13,23 @@
|
|||||||
#include "Gdi/TitleBar.h"
|
#include "Gdi/TitleBar.h"
|
||||||
#include "Gdi/VirtualScreen.h"
|
#include "Gdi/VirtualScreen.h"
|
||||||
#include "Gdi/Window.h"
|
#include "Gdi/Window.h"
|
||||||
#include "Win32/Registry.h"
|
|
||||||
|
std::ostream& operator<<(std::ostream& os, const MENUITEMINFOW& val)
|
||||||
|
{
|
||||||
|
return Compat::LogStruct(os)
|
||||||
|
<< val.cbSize
|
||||||
|
<< Compat::hex(val.fMask)
|
||||||
|
<< Compat::hex(val.fType)
|
||||||
|
<< Compat::hex(val.fState)
|
||||||
|
<< val.wID
|
||||||
|
<< val.hSubMenu
|
||||||
|
<< val.hbmpChecked
|
||||||
|
<< val.hbmpUnchecked
|
||||||
|
<< Compat::hex(val.dwItemData)
|
||||||
|
<< val.dwTypeData
|
||||||
|
<< val.cch
|
||||||
|
<< (val.cbSize > offsetof(MENUITEMINFOW, hbmpItem) ? val.hbmpItem : nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
@ -160,23 +176,6 @@ namespace
|
|||||||
return defPaintProc(hwnd, msg, wParam, lParam, CALL_ORIG_FUNC(DefWindowProcW), "defWindowProcW");
|
return defPaintProc(hwnd, msg, wParam, lParam, CALL_ORIG_FUNC(DefWindowProcW), "defWindowProcW");
|
||||||
}
|
}
|
||||||
|
|
||||||
void disableImmersiveContextMenus()
|
|
||||||
{
|
|
||||||
// Immersive context menus don't display properly (empty items) when theming is disabled
|
|
||||||
Win32::Registry::setValue(
|
|
||||||
HKEY_LOCAL_MACHINE,
|
|
||||||
"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FlightedFeatures",
|
|
||||||
"ImmersiveContextMenu",
|
|
||||||
0);
|
|
||||||
|
|
||||||
// An update in Windows 10 seems to have moved the key from the above location
|
|
||||||
Win32::Registry::setValue(
|
|
||||||
HKEY_LOCAL_MACHINE,
|
|
||||||
"Software\\Microsoft\\Windows\\CurrentVersion\\FlightedFeatures",
|
|
||||||
"ImmersiveContextMenu",
|
|
||||||
0);
|
|
||||||
}
|
|
||||||
|
|
||||||
LRESULT editWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC origWndProc)
|
LRESULT editWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC origWndProc)
|
||||||
{
|
{
|
||||||
LRESULT result = defPaintProc(hwnd, msg, wParam, lParam, origWndProc);
|
LRESULT result = defPaintProc(hwnd, msg, wParam, lParam, origWndProc);
|
||||||
@ -414,6 +413,17 @@ namespace
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI setMenuItemInfoW(HMENU hmenu, UINT item, BOOL fByPositon, LPCMENUITEMINFOW lpmii)
|
||||||
|
{
|
||||||
|
LOG_FUNC("SetMenuItemInfoW", hmenu, item, fByPositon, lpmii);
|
||||||
|
if (lpmii && (lpmii->fMask & (MIIM_TYPE | MIIM_FTYPE)) && MFT_OWNERDRAW == lpmii->fType)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_SUPPORTED);
|
||||||
|
return LOG_RESULT(FALSE);
|
||||||
|
}
|
||||||
|
return LOG_RESULT(CALL_ORIG_FUNC(SetMenuItemInfoW)(hmenu, item, fByPositon, lpmii));
|
||||||
|
}
|
||||||
|
|
||||||
LRESULT staticWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC origWndProc)
|
LRESULT staticWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC origWndProc)
|
||||||
{
|
{
|
||||||
return defPaintProc(hwnd, msg, wParam, lParam, origWndProc);
|
return defPaintProc(hwnd, msg, wParam, lParam, origWndProc);
|
||||||
@ -447,8 +457,6 @@ namespace Gdi
|
|||||||
{
|
{
|
||||||
void installHooks()
|
void installHooks()
|
||||||
{
|
{
|
||||||
disableImmersiveContextMenus();
|
|
||||||
|
|
||||||
#define HOOK_USER32_WNDPROC(className, wndProcHook) hookUser32WndProc<wndProcHook>(className, #wndProcHook)
|
#define HOOK_USER32_WNDPROC(className, wndProcHook) hookUser32WndProc<wndProcHook>(className, #wndProcHook)
|
||||||
#define HOOK_USER32_WNDPROCW(className, wndProcHook) hookUser32WndProcW<wndProcHook>(className, #wndProcHook)
|
#define HOOK_USER32_WNDPROCW(className, wndProcHook) hookUser32WndProcW<wndProcHook>(className, #wndProcHook)
|
||||||
|
|
||||||
@ -481,6 +489,7 @@ namespace Gdi
|
|||||||
HOOK_FUNCTION(user32, DefWindowProcW, defWindowProcW);
|
HOOK_FUNCTION(user32, DefWindowProcW, defWindowProcW);
|
||||||
HOOK_FUNCTION(user32, DefDlgProcA, defDlgProcA);
|
HOOK_FUNCTION(user32, DefDlgProcA, defDlgProcA);
|
||||||
HOOK_FUNCTION(user32, DefDlgProcW, defDlgProcW);
|
HOOK_FUNCTION(user32, DefDlgProcW, defDlgProcW);
|
||||||
|
HOOK_FUNCTION(user32, SetMenuItemInfoW, setMenuItemInfoW);
|
||||||
}
|
}
|
||||||
|
|
||||||
void onCreateWindow(HWND hwnd)
|
void onCreateWindow(HWND hwnd)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user