avoid erroneous moving taskbar

This commit is contained in:
Kang Yu 2024-10-25 19:57:26 -07:00
parent ee8603c5b6
commit 76118726a8

View file

@ -3530,9 +3530,6 @@ namespace PersistentWindows.Common
private bool MoveTaskBar(IntPtr hwnd, RECT targetRect) private bool MoveTaskBar(IntPtr hwnd, RECT targetRect)
{ {
if (restoreTimes != 2)
return false;
// simulate mouse drag, assuming taskbar is unlocked // simulate mouse drag, assuming taskbar is unlocked
/* /*
ControlGetPos x, y, w, h, MSTaskListWClass1, ahk_class Shell_TrayWnd ControlGetPos x, y, w, h, MSTaskListWClass1, ahk_class Shell_TrayWnd
@ -3562,13 +3559,16 @@ namespace PersistentWindows.Common
if (intersect.Equals(sourceRect) || intersect.Equals(targetRect)) if (intersect.Equals(sourceRect) || intersect.Equals(targetRect))
return false; //only taskbar size changes return false; //only taskbar size changes
Log.Event($"move taskbar to {targetRect}"); /*
if (sourceRect.Width != targetRect.Width && sourceRect.Height != targetRect.Height)
{
Log.Error("wait taskbar stabilize");
return false;
}
*/
//IntPtr hReBar = User32.FindWindowEx(hwnd, IntPtr.Zero, "ReBarWindow32", null); Log.Event($"move taskbar from {sourceRect} to {targetRect}");
//User32.GetWindowRect(hReBar, ref screenPosition);
//IntPtr hTaskBar = User32.FindWindowEx(hReBar, IntPtr.Zero, "MSTaskSwWClass", null);
//hTaskBar = User32.FindWindowEx(hTaskBar, IntPtr.Zero, "MSTaskListWClass", null);
IntPtr hTaskBar = GetRealTaskBar(hwnd); IntPtr hTaskBar = GetRealTaskBar(hwnd);
User32.GetWindowRect(hTaskBar, ref sourceRect); User32.GetWindowRect(hTaskBar, ref sourceRect);
@ -3641,6 +3641,12 @@ namespace PersistentWindows.Common
if (!intersect.Equals(sourceRect) && !intersect.Equals(targetRect)) if (!intersect.Equals(sourceRect) && !intersect.Equals(targetRect))
return false; return false;
if (sourceRect.Width != targetRect.Width && sourceRect.Height != targetRect.Height)
{
//only one metric (either width or height) should be fixed
return false;
}
List<Display> displays = GetDisplays(); List<Display> displays = GetDisplays();
bool top_edge = false; bool top_edge = false;
bool left_edge = false; bool left_edge = false;
@ -4031,8 +4037,11 @@ namespace PersistentWindows.Common
{ {
User32.SendMessage(hWnd, User32.WM_COMMAND, User32.SC_TOGGLE_TASKBAR_LOCK, null); User32.SendMessage(hWnd, User32.WM_COMMAND, User32.SC_TOGGLE_TASKBAR_LOCK, null);
} }
bool changed_edge = MoveTaskBar(hWnd, rect);
bool changed_width = RecoverTaskBarArea(hWnd, rect); bool changed_width = RecoverTaskBarArea(hWnd, rect);
bool changed_edge = false;
if (!changed_width)
changed_edge = MoveTaskBar(hWnd, rect);
if (changed_edge || changed_width) if (changed_edge || changed_width)
restoredWindows.Add(hWnd); restoredWindows.Add(hWnd);
if (taskbarMovable == 0) if (taskbarMovable == 0)