Author: dquintana Date: Sun Feb 23 00:15:27 2014 New Revision: 62296
URL: http://svn.reactos.org/svn/reactos?rev=62296&view=rev Log: [RSHELL] * CMenuDeskBar: Actually use the Popup flags to decide on the relative position of the submenus. CORE-7886
Modified: branches/shell-experiments/base/shell/rshell/CMenuBand.cpp branches/shell-experiments/base/shell/rshell/CMenuDeskBar.cpp
Modified: branches/shell-experiments/base/shell/rshell/CMenuBand.cpp URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/rsh... ============================================================================== --- branches/shell-experiments/base/shell/rshell/CMenuBand.cpp [iso-8859-1] (original) +++ branches/shell-experiments/base/shell/rshell/CMenuBand.cpp [iso-8859-1] Sun Feb 23 00:15:27 2014 @@ -727,7 +727,7 @@ ClientToScreen(m_hwnd, &a); ClientToScreen(m_hwnd, &b);
- POINTL pt = { b.x, b.y }; + POINTL pt = { b.x, a.y }; RECTL rcl = { a.x, a.y, b.x, b.y }; // maybe-TODO: fetch client area of deskbar?
@@ -1580,6 +1580,8 @@ pdbi->dwMask = DBIM_MINSIZE | DBIM_MAXSIZE | DBIM_INTEGRAL | DBIM_ACTUAL | DBIM_TITLE | DBIM_MODEFLAGS | DBIM_BKCOLOR; }
+#define MIN_WIDTH 220 + if (pdbi->dwMask & DBIM_MINSIZE) { SIZE sizeStatic = { 0 }; @@ -1588,7 +1590,7 @@ if (hwndStatic) SendMessageW(hwndStatic, TB_GETIDEALSIZE, TRUE, reinterpret_cast<LPARAM>(&sizeStatic)); if (hwndShlFld) SendMessageW(hwndShlFld, TB_GETIDEALSIZE, TRUE, reinterpret_cast<LPARAM>(&sizeShlFld));
- pdbi->ptMinSize.x = 0; + pdbi->ptMinSize.x = MIN_WIDTH; pdbi->ptMinSize.y = sizeStatic.cy + sizeShlFld.cy; } if (pdbi->dwMask & DBIM_MAXSIZE) @@ -1599,10 +1601,7 @@ if (hwndStatic) SendMessageW(hwndStatic, TB_GETMAXSIZE, 0, reinterpret_cast<LPARAM>(&sizeStatic)); if (hwndShlFld) SendMessageW(hwndShlFld, TB_GETMAXSIZE, 0, reinterpret_cast<LPARAM>(&sizeShlFld));
- sizeStatic.cx += 64; - sizeShlFld.cx += 64; - - pdbi->ptMaxSize.x = max(sizeStatic.cx, sizeShlFld.cx); // ignored + pdbi->ptMaxSize.x = max(MIN_WIDTH, max(sizeStatic.cx, sizeShlFld.cx)); // ignored pdbi->ptMaxSize.y = sizeStatic.cy + sizeShlFld.cy; } if (pdbi->dwMask & DBIM_INTEGRAL) @@ -2242,7 +2241,7 @@ if (popup) { IUnknown_SetSite(popup, m_subMenuParent); - popup->Popup(pAt, pExclude, MPPF_TOP | MPPF_RIGHT); - } - return S_OK; -} + popup->Popup(pAt, pExclude, MPPF_RIGHT); + } + return S_OK; +}
Modified: branches/shell-experiments/base/shell/rshell/CMenuDeskBar.cpp URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/rsh... ============================================================================== --- branches/shell-experiments/base/shell/rshell/CMenuDeskBar.cpp [iso-8859-1] (original) +++ branches/shell-experiments/base/shell/rshell/CMenuDeskBar.cpp [iso-8859-1] Sun Feb 23 00:15:27 2014 @@ -399,8 +399,6 @@ return hr;
::AdjustWindowRect(&rc, ::GetWindowLong(m_hWnd, GWL_STYLE), FALSE); - rc.right -= rc.left; - rc.bottom -= rc.top;
if (m_Banner != NULL) { @@ -409,15 +407,35 @@ rc.right += bm.bmWidth; }
- int x = ppt->x; - int y = ppt->y - rc.bottom; - int cx = rc.right; - int cy = rc.bottom; + int x, y, cx, cy;
RECT rcWorkArea; SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWorkArea, 0); - int waHeight = rcWorkArea.bottom - rcWorkArea.top; + + switch (dwFlags & MPPF_POS_MASK) + { + case MPPF_LEFT: + case MPPF_TOP: + x = ppt->x - rc.right; + cx = rc.right - rc.left; + break; + default: + x = ppt->x; + cx = rc.right - rc.left; + break; + } + + if (dwFlags & MPPF_BOTTOM) + { + y = ppt->y - rc.bottom; + cy = rc.bottom - rc.top; + } + else + { + y = ppt->y + rc.top; + cy = rc.bottom - rc.top; + }
if (y < rcWorkArea.top) {