|
35 | 35 |
|
36 | 36 | #include <wine/list.h> |
37 | 37 |
|
| 38 | +#define GetPrimaryTaskbar() FindWindowW(L"Shell_TrayWnd", NULL) |
| 39 | + |
38 | 40 | struct appbar_cmd |
39 | 41 | { |
40 | 42 | DWORD dwMsg; |
@@ -198,22 +200,33 @@ static UINT_PTR handle_appbarmessage(DWORD msg, _AppBarData *abd) |
198 | 200 | } |
199 | 201 | return TRUE; |
200 | 202 | 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; |
203 | 218 | 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); |
212 | 223 | case ABM_ACTIVATE: |
213 | 224 | return TRUE; |
214 | 225 | case ABM_GETAUTOHIDEBAR: |
215 | 226 | 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; |
217 | 230 | case ABM_SETAUTOHIDEBAR: |
218 | 231 | FIXME("SHAppBarMessage(ABM_SETAUTOHIDEBAR, hwnd=%p, edge=%x, lparam=%s): stub\n", |
219 | 232 | hwnd, abd->uEdge, wine_dbgstr_longlong(abd->lParam)); |
|
0 commit comments