mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 15:36:04 +00:00
[NTUSER][PSDK] Implement Snap DockMoving setting (#8020)
SPI_SETDOCKMOVING allows you to turn off window snapping when moving a window with the mouse. The Win keys can still snap unless you turn everything off with SPI_SETWINARRANGING.
This commit is contained in:
parent
e326b06983
commit
5299f047e4
5 changed files with 39 additions and 15 deletions
|
@ -1494,6 +1494,14 @@ extern "C" {
|
||||||
#define SPI_GETSCREENSAVESECURE 0x0076
|
#define SPI_GETSCREENSAVESECURE 0x0076
|
||||||
#define SPI_SETSCREENSAVESECURE 0x0077
|
#define SPI_SETSCREENSAVESECURE 0x0077
|
||||||
#endif
|
#endif
|
||||||
|
#if(_WIN32_WINNT >= 0x0601) || defined(__REACTOS__)
|
||||||
|
#define SPI_GETWINARRANGING 0x0082
|
||||||
|
#define SPI_SETWINARRANGING 0x0083
|
||||||
|
#define SPI_GETDRAGFROMMAXIMIZE 0x008C
|
||||||
|
#define SPI_SETDRAGFROMMAXIMIZE 0x008D
|
||||||
|
#define SPI_GETDOCKMOVING 0x0090
|
||||||
|
#define SPI_SETDOCKMOVING 0x0091
|
||||||
|
#endif
|
||||||
#if(WINVER >= 0x0500)
|
#if(WINVER >= 0x0500)
|
||||||
#define SPI_GETACTIVEWINDOWTRACKING 0x1000
|
#define SPI_GETACTIVEWINDOWTRACKING 0x1000
|
||||||
#define SPI_SETACTIVEWINDOWTRACKING 0x1001
|
#define SPI_SETACTIVEWINDOWTRACKING 0x1001
|
||||||
|
|
|
@ -139,7 +139,10 @@ NC_GetSysPopupPos(PWND Wnd, RECT *Rect)
|
||||||
static UINT
|
static UINT
|
||||||
GetSnapActivationPoint(PWND Wnd, POINT pt)
|
GetSnapActivationPoint(PWND Wnd, POINT pt)
|
||||||
{
|
{
|
||||||
|
// TODO: SPI_GETMOUSEDOCKTHRESHOLD
|
||||||
RECT wa;
|
RECT wa;
|
||||||
|
if (!GetSnapSetting(bDockMoving))
|
||||||
|
return HTNOWHERE;
|
||||||
UserSystemParametersInfo(SPI_GETWORKAREA, 0, &wa, 0); /* FIXME: MultiMon of PWND */
|
UserSystemParametersInfo(SPI_GETWORKAREA, 0, &wa, 0); /* FIXME: MultiMon of PWND */
|
||||||
|
|
||||||
if (pt.x <= wa.left) return HTLEFT;
|
if (pt.x <= wa.left) return HTLEFT;
|
||||||
|
|
|
@ -79,6 +79,8 @@ static const WCHAR* VAL_CARETWIDTH = L"CaretWidth";
|
||||||
static const WCHAR* VAL_SCRLLCHARS = L"WheelScrollChars";
|
static const WCHAR* VAL_SCRLLCHARS = L"WheelScrollChars";
|
||||||
#endif
|
#endif
|
||||||
static const WCHAR* VAL_USERPREFMASK = L"UserPreferencesMask";
|
static const WCHAR* VAL_USERPREFMASK = L"UserPreferencesMask";
|
||||||
|
static const WCHAR* VAL_SNAP_ENABLED = L"WindowArrangementActive";
|
||||||
|
static const WCHAR* VAL_SNAP_DOCKMOVING = L"DockMoving";
|
||||||
|
|
||||||
static const WCHAR* KEY_MDALIGN = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows";
|
static const WCHAR* KEY_MDALIGN = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows";
|
||||||
static const WCHAR* VAL_MDALIGN = L"MenuDropAlignment";
|
static const WCHAR* VAL_MDALIGN = L"MenuDropAlignment";
|
||||||
|
@ -219,19 +221,6 @@ SpiFixupValues(VOID)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Is Window Snap enabled? */
|
|
||||||
static BOOL IntIsWindowSnapEnabled(VOID)
|
|
||||||
{
|
|
||||||
WCHAR szValue[2];
|
|
||||||
if (RegReadUserSetting(L"Control Panel\\Desktop", L"WindowArrangementActive",
|
|
||||||
REG_SZ, szValue, sizeof(szValue)))
|
|
||||||
{
|
|
||||||
szValue[RTL_NUMBER_OF(szValue) - 1] = UNICODE_NULL; /* Avoid buffer overrun */
|
|
||||||
return (_wtoi(szValue) != 0);
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
static
|
||||||
VOID
|
VOID
|
||||||
SpiUpdatePerUserSystemParameters(VOID)
|
SpiUpdatePerUserSystemParameters(VOID)
|
||||||
|
@ -351,6 +340,9 @@ SpiUpdatePerUserSystemParameters(VOID)
|
||||||
gspv.highcontrast.cbSize = sizeof(HIGHCONTRASTW);
|
gspv.highcontrast.cbSize = sizeof(HIGHCONTRASTW);
|
||||||
gspv.animationinfo.cbSize = sizeof(ANIMATIONINFO);
|
gspv.animationinfo.cbSize = sizeof(ANIMATIONINFO);
|
||||||
|
|
||||||
|
g_bWindowSnapEnabled = SpiLoadInt(KEY_DESKTOP, VAL_SNAP_ENABLED, TRUE);
|
||||||
|
gspv.bDockMoving = SpiLoadInt(KEY_DESKTOP, VAL_SNAP_DOCKMOVING, TRUE);
|
||||||
|
|
||||||
/* Make sure we don't use broken values */
|
/* Make sure we don't use broken values */
|
||||||
SpiFixupValues();
|
SpiFixupValues();
|
||||||
|
|
||||||
|
@ -366,8 +358,6 @@ SpiUpdatePerUserSystemParameters(VOID)
|
||||||
}
|
}
|
||||||
gdwLanguageToggleKey = UserGetLanguageToggle(L"Language Hotkey", 1);
|
gdwLanguageToggleKey = UserGetLanguageToggle(L"Language Hotkey", 1);
|
||||||
gdwLayoutToggleKey = UserGetLanguageToggle(L"Layout Hotkey", 2);
|
gdwLayoutToggleKey = UserGetLanguageToggle(L"Layout Hotkey", 2);
|
||||||
|
|
||||||
g_bWindowSnapEnabled = IntIsWindowSnapEnabled();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
|
@ -1804,6 +1794,16 @@ SpiGetSet(UINT uiAction, UINT uiParam, PVOID pvParam, FLONG fl)
|
||||||
case SPI_SETFONTSMOOTHINGORIENTATION:
|
case SPI_SETFONTSMOOTHINGORIENTATION:
|
||||||
return SpiSetDWord(&gspv.uiFontSmoothingOrientation, PtrToUlong(pvParam), KEY_DESKTOP, VAL_FONTSMOOTHINGORIENTATION, fl);
|
return SpiSetDWord(&gspv.uiFontSmoothingOrientation, PtrToUlong(pvParam), KEY_DESKTOP, VAL_FONTSMOOTHINGORIENTATION, fl);
|
||||||
|
|
||||||
|
case SPI_GETWINARRANGING:
|
||||||
|
return SpiGetInt(pvParam, &g_bWindowSnapEnabled, fl);
|
||||||
|
case SPI_SETWINARRANGING:
|
||||||
|
return SpiSetInt(&g_bWindowSnapEnabled, uiParam, KEY_DESKTOP, VAL_SNAP_ENABLED, fl);
|
||||||
|
|
||||||
|
case SPI_GETDOCKMOVING:
|
||||||
|
return SpiGetInt(pvParam, &gspv.bDockMoving, fl);
|
||||||
|
case SPI_SETDOCKMOVING:
|
||||||
|
return SpiSetInt(&gspv.bDockMoving, uiParam, KEY_DESKTOP, VAL_SNAP_DOCKMOVING, fl);
|
||||||
|
|
||||||
/* The following are undocumented, but valid SPI values */
|
/* The following are undocumented, but valid SPI values */
|
||||||
case 0x1010:
|
case 0x1010:
|
||||||
case 0x1011:
|
case 0x1011:
|
||||||
|
|
|
@ -157,6 +157,12 @@ typedef struct _SPIVALUES
|
||||||
DWORD dwForegroundFlashCount;
|
DWORD dwForegroundFlashCount;
|
||||||
DWORD dwCaretWidth;
|
DWORD dwCaretWidth;
|
||||||
|
|
||||||
|
/* Snap */
|
||||||
|
// BOOL bWinArranging; (g_bWindowSnapEnabled)
|
||||||
|
BOOL bDockMoving;
|
||||||
|
// BOOL bSnapSizing;
|
||||||
|
// BOOL bDragFromMaximize;
|
||||||
|
|
||||||
// SPI_LANGDRIVER
|
// SPI_LANGDRIVER
|
||||||
// SPI_SETDESKPATTERN
|
// SPI_SETDESKPATTERN
|
||||||
// SPI_SETPENWINDOWS
|
// SPI_SETPENWINDOWS
|
||||||
|
|
|
@ -77,6 +77,13 @@ VOID FASTCALL co_IntCalculateSnapPosition(PWND Wnd, UINT Edge, OUT RECT *Pos);
|
||||||
VOID FASTCALL co_IntSnapWindow(PWND Wnd, UINT Edge);
|
VOID FASTCALL co_IntSnapWindow(PWND Wnd, UINT Edge);
|
||||||
VOID FASTCALL IntSetSnapEdge(PWND Wnd, UINT Edge);
|
VOID FASTCALL IntSetSnapEdge(PWND Wnd, UINT Edge);
|
||||||
VOID FASTCALL IntSetSnapInfo(PWND Wnd, UINT Edge, IN const RECT *Pos OPTIONAL);
|
VOID FASTCALL IntSetSnapInfo(PWND Wnd, UINT Edge, IN const RECT *Pos OPTIONAL);
|
||||||
|
#define GetSnapSetting(gspvmember) (IsSnapEnabled() ? (gspv.gspvmember) : 0)
|
||||||
|
|
||||||
|
FORCEINLINE BOOL
|
||||||
|
IsSnapEnabled(VOID)
|
||||||
|
{
|
||||||
|
return g_bWindowSnapEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
FORCEINLINE VOID
|
FORCEINLINE VOID
|
||||||
co_IntUnsnapWindow(PWND Wnd)
|
co_IntUnsnapWindow(PWND Wnd)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue