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/rs…
==============================================================================
--- 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/rs…
==============================================================================
--- 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)
{