Skip to content

Commit c569aee

Browse files
authored
[EXPLORER] Implement ABM_GET/SETSTATE and ABM_GETTASKBARPOS (reactos#7525)
1 parent af4e393 commit c569aee

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

base/shell/explorer/appbar.cpp

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535

3636
#include <wine/list.h>
3737

38+
#define GetPrimaryTaskbar() FindWindowW(L"Shell_TrayWnd", NULL)
39+
3840
struct appbar_cmd
3941
{
4042
DWORD dwMsg;
@@ -198,22 +200,33 @@ static UINT_PTR handle_appbarmessage(DWORD msg, _AppBarData *abd)
198200
}
199201
return TRUE;
200202
case ABM_GETSTATE:
201-
FIXME("SHAppBarMessage(ABM_GETSTATE): stub\n");
202-
return ABS_ALWAYSONTOP | ABS_AUTOHIDE;
203+
TRACE("SHAppBarMessage(ABM_GETSTATE)\n");
204+
return (g_TaskbarSettings.sr.AutoHide ? ABS_AUTOHIDE : 0) |
205+
(g_TaskbarSettings.sr.AlwaysOnTop ? ABS_ALWAYSONTOP : 0);
206+
case ABM_SETSTATE:
207+
TRACE("SHAppBarMessage(ABM_SETSTATE lparam=%s)\n", wine_dbgstr_longlong(abd->lParam));
208+
hwnd = GetPrimaryTaskbar();
209+
if (hwnd)
210+
{
211+
TaskbarSettings settings = g_TaskbarSettings;
212+
settings.sr.AutoHide = (abd->lParam & ABS_AUTOHIDE) != 0;
213+
settings.sr.AlwaysOnTop = (abd->lParam & ABS_ALWAYSONTOP) != 0;
214+
SendMessageW(hwnd, TWM_SETTINGSCHANGED, 0, (LPARAM)&settings);
215+
return TRUE;
216+
}
217+
return FALSE;
203218
case ABM_GETTASKBARPOS:
204-
FIXME("SHAppBarMessage(ABM_GETTASKBARPOS, hwnd=%p): stub\n", hwnd);
205-
/* Report the taskbar is at the bottom of the screen. */
206-
abd->rc.left = 0;
207-
abd->rc.right = GetSystemMetrics(SM_CXSCREEN);
208-
abd->rc.bottom = GetSystemMetrics(SM_CYSCREEN);
209-
abd->rc.top = abd->rc.bottom-1;
210-
abd->uEdge = ABE_BOTTOM;
211-
return TRUE;
219+
TRACE("SHAppBarMessage(ABM_GETTASKBARPOS, hwnd=%p)\n", hwnd);
220+
abd->uEdge = g_TaskbarSettings.sr.Position;
221+
abd->hWnd = GetPrimaryTaskbar();
222+
return abd->hWnd && GetWindowRect(abd->hWnd, &abd->rc);
212223
case ABM_ACTIVATE:
213224
return TRUE;
214225
case ABM_GETAUTOHIDEBAR:
215226
FIXME("SHAppBarMessage(ABM_GETAUTOHIDEBAR, hwnd=%p, edge=%x): stub\n", hwnd, abd->uEdge);
216-
return 0;
227+
if (abd->uEdge == g_TaskbarSettings.sr.Position && g_TaskbarSettings.sr.AutoHide)
228+
return (SIZE_T)GetPrimaryTaskbar();
229+
return NULL;
217230
case ABM_SETAUTOHIDEBAR:
218231
FIXME("SHAppBarMessage(ABM_SETAUTOHIDEBAR, hwnd=%p, edge=%x, lparam=%s): stub\n",
219232
hwnd, abd->uEdge, wine_dbgstr_longlong(abd->lParam));

sdk/include/psdk/shellapi.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ extern "C" {
6969
#define ABM_GETAUTOHIDEBAR 7
7070
#define ABM_SETAUTOHIDEBAR 8
7171
#define ABM_WINDOWPOSCHANGED 9
72+
#define ABM_SETSTATE 10
7273
#define ABN_STATECHANGE 0
7374
#define ABN_POSCHANGED 1
7475
#define ABN_FULLSCREENAPP 2

0 commit comments

Comments
 (0)