[COMCTL32] -Differentiate between v5 and v6 toolbar and make their CCM_SETVERSION behave correct according to their version.

svn path=/trunk/; revision=74922
This commit is contained in:
Giannis Adamopoulos 2017-06-05 14:23:42 +00:00
parent 2130f6ee4b
commit f71f869a95
3 changed files with 87 additions and 10 deletions

View file

@ -177,6 +177,10 @@ extern void UPDOWN_Register(void) DECLSPEC_HIDDEN;
extern void UPDOWN_Unregister(void) DECLSPEC_HIDDEN; extern void UPDOWN_Unregister(void) DECLSPEC_HIDDEN;
extern void BUTTON_Register(); extern void BUTTON_Register();
extern void BUTTON_Unregister(); extern void BUTTON_Unregister();
#ifdef __REACTOS__
extern void TOOLBARv6_Register(void) DECLSPEC_HIDDEN;
extern void TOOLBARv6_Unregister(void) DECLSPEC_HIDDEN;
#endif
int MONTHCAL_MonthLength(int month, int year) DECLSPEC_HIDDEN; int MONTHCAL_MonthLength(int month, int year) DECLSPEC_HIDDEN;
int MONTHCAL_CalculateDayOfWeek(SYSTEMTIME *date, BOOL inplace) DECLSPEC_HIDDEN; int MONTHCAL_CalculateDayOfWeek(SYSTEMTIME *date, BOOL inplace) DECLSPEC_HIDDEN;

View file

@ -207,7 +207,7 @@ static HANDLE CreateComctl32ActCtx(BOOL bV6)
return ret; return ret;
} }
static void RegisterControls() static void RegisterControls(BOOL bV6)
{ {
ANIMATE_Register (); ANIMATE_Register ();
COMBOEX_Register (); COMBOEX_Register ();
@ -225,14 +225,23 @@ static void RegisterControls()
STATUS_Register (); STATUS_Register ();
SYSLINK_Register (); SYSLINK_Register ();
TAB_Register (); TAB_Register ();
TOOLBAR_Register ();
TOOLTIPS_Register (); TOOLTIPS_Register ();
TRACKBAR_Register (); TRACKBAR_Register ();
TREEVIEW_Register (); TREEVIEW_Register ();
UPDOWN_Register (); UPDOWN_Register ();
if (!bV6)
{
TOOLBAR_Register ();
}
else
{
BUTTON_Register();
TOOLBARv6_Register();
}
} }
static void UnregisterControls() static void UnregisterControls(BOOL bV6)
{ {
ANIMATE_Unregister (); ANIMATE_Unregister ();
COMBOEX_Unregister (); COMBOEX_Unregister ();
@ -250,11 +259,21 @@ static void UnregisterControls()
STATUS_Unregister (); STATUS_Unregister ();
SYSLINK_Unregister (); SYSLINK_Unregister ();
TAB_Unregister (); TAB_Unregister ();
TOOLBAR_Unregister ();
TOOLTIPS_Unregister (); TOOLTIPS_Unregister ();
TRACKBAR_Unregister (); TRACKBAR_Unregister ();
TREEVIEW_Unregister (); TREEVIEW_Unregister ();
UPDOWN_Unregister (); UPDOWN_Unregister ();
if (!bV6)
{
TOOLBAR_Unregister ();
}
else
{
BUTTON_Unregister();
TOOLBARv6_Unregister ();
}
} }
static void InitializeClasses() static void InitializeClasses()
@ -267,15 +286,14 @@ static void InitializeClasses()
/* Register the classes once no matter what */ /* Register the classes once no matter what */
hActCtx5 = CreateComctl32ActCtx(FALSE); hActCtx5 = CreateComctl32ActCtx(FALSE);
activated = (hActCtx5 != INVALID_HANDLE_VALUE ? ActivateActCtx(hActCtx5, &ulCookie) : FALSE); activated = (hActCtx5 != INVALID_HANDLE_VALUE ? ActivateActCtx(hActCtx5, &ulCookie) : FALSE);
RegisterControls(); /* Register the classes pretending to be v5 */ RegisterControls(FALSE); /* Register the classes pretending to be v5 */
if (activated) DeactivateActCtx(0, ulCookie); if (activated) DeactivateActCtx(0, ulCookie);
hActCtx6 = CreateComctl32ActCtx(TRUE); hActCtx6 = CreateComctl32ActCtx(TRUE);
if (hActCtx6 != INVALID_HANDLE_VALUE) if (hActCtx6 != INVALID_HANDLE_VALUE)
{ {
activated = ActivateActCtx(hActCtx6, &ulCookie); activated = ActivateActCtx(hActCtx6, &ulCookie);
RegisterControls(); /* Register the classes pretending to be v6 */ RegisterControls(TRUE); /* Register the classes pretending to be v6 */
BUTTON_Register();
if (activated) DeactivateActCtx(0, ulCookie); if (activated) DeactivateActCtx(0, ulCookie);
/* Initialize the themed controls only when the v6 manifest is present */ /* Initialize the themed controls only when the v6 manifest is present */
@ -291,7 +309,7 @@ static void UninitializeClasses()
hActCtx5 = CreateComctl32ActCtx(FALSE); hActCtx5 = CreateComctl32ActCtx(FALSE);
activated = (hActCtx5 != INVALID_HANDLE_VALUE ? ActivateActCtx(hActCtx5, &ulCookie) : FALSE); activated = (hActCtx5 != INVALID_HANDLE_VALUE ? ActivateActCtx(hActCtx5, &ulCookie) : FALSE);
UnregisterControls(); UnregisterControls(FALSE);
if (activated) DeactivateActCtx(0, ulCookie); if (activated) DeactivateActCtx(0, ulCookie);
hActCtx6 = CreateComctl32ActCtx(TRUE); hActCtx6 = CreateComctl32ActCtx(TRUE);
@ -299,8 +317,7 @@ static void UninitializeClasses()
{ {
activated = ActivateActCtx(hActCtx6, &ulCookie); activated = ActivateActCtx(hActCtx6, &ulCookie);
THEMING_Uninitialize(); THEMING_Uninitialize();
UnregisterControls(); UnregisterControls(TRUE);
BUTTON_Unregister();
if (activated) DeactivateActCtx(0, ulCookie); if (activated) DeactivateActCtx(0, ulCookie);
} }
} }

View file

@ -5268,6 +5268,16 @@ TOOLBAR_SetVersion (TOOLBAR_INFO *infoPtr, INT iVersion)
{ {
INT iOldVersion = infoPtr->iVersion; INT iOldVersion = infoPtr->iVersion;
#ifdef __REACTOS__
/* The v6 control doesn't support changing its version */
if (iOldVersion == 6)
return iOldVersion;
/* And a control that is not v6 can't be set to be a v6 one */
if (iVersion >= 6)
return -1;
#endif
infoPtr->iVersion = iVersion; infoPtr->iVersion = iVersion;
if (infoPtr->iVersion >= 5) if (infoPtr->iVersion >= 5)
@ -6178,7 +6188,11 @@ TOOLBAR_NCCalcSize (HWND hwnd, WPARAM wParam, LPARAM lParam)
static LRESULT static LRESULT
#ifdef __REACTOS__
TOOLBAR_NCCreate (HWND hwnd, WPARAM wParam, const CREATESTRUCTW *lpcs, int iVersion)
#else
TOOLBAR_NCCreate (HWND hwnd, WPARAM wParam, const CREATESTRUCTW *lpcs) TOOLBAR_NCCreate (HWND hwnd, WPARAM wParam, const CREATESTRUCTW *lpcs)
#endif
{ {
TOOLBAR_INFO *infoPtr; TOOLBAR_INFO *infoPtr;
DWORD styleadd = 0; DWORD styleadd = 0;
@ -6212,7 +6226,11 @@ TOOLBAR_NCCreate (HWND hwnd, WPARAM wParam, const CREATESTRUCTW *lpcs)
infoPtr->dwDTFlags = (lpcs->style & TBSTYLE_LIST) ? DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS: DT_CENTER | DT_END_ELLIPSIS; infoPtr->dwDTFlags = (lpcs->style & TBSTYLE_LIST) ? DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS: DT_CENTER | DT_END_ELLIPSIS;
infoPtr->bAnchor = FALSE; /* no anchor highlighting */ infoPtr->bAnchor = FALSE; /* no anchor highlighting */
infoPtr->bDragOutSent = FALSE; infoPtr->bDragOutSent = FALSE;
#ifdef __REACTOS__
infoPtr->iVersion = iVersion;
#else
infoPtr->iVersion = 0; infoPtr->iVersion = 0;
#endif
infoPtr->hwndSelf = hwnd; infoPtr->hwndSelf = hwnd;
infoPtr->bDoRedraw = TRUE; infoPtr->bDoRedraw = TRUE;
infoPtr->clrBtnHighlight = CLR_DEFAULT; infoPtr->clrBtnHighlight = CLR_DEFAULT;
@ -7003,7 +7021,11 @@ ToolbarWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
return TOOLBAR_NCCalcSize (hwnd, wParam, lParam); return TOOLBAR_NCCalcSize (hwnd, wParam, lParam);
case WM_NCCREATE: case WM_NCCREATE:
#ifdef __REACTOS__
return TOOLBAR_NCCreate (hwnd, wParam, (CREATESTRUCTW*)lParam, 0);
#else
return TOOLBAR_NCCreate (hwnd, wParam, (CREATESTRUCTW*)lParam); return TOOLBAR_NCCreate (hwnd, wParam, (CREATESTRUCTW*)lParam);
#endif
case WM_NCPAINT: case WM_NCPAINT:
return TOOLBAR_NCPaint (hwnd, wParam, lParam); return TOOLBAR_NCPaint (hwnd, wParam, lParam);
@ -7089,6 +7111,40 @@ TOOLBAR_Unregister (void)
UnregisterClassW (TOOLBARCLASSNAMEW, NULL); UnregisterClassW (TOOLBARCLASSNAMEW, NULL);
} }
#ifdef __REACTOS__
static LRESULT WINAPI
ToolbarV6WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_NCCREATE)
return TOOLBAR_NCCreate (hwnd, wParam, (CREATESTRUCTW*)lParam, 6);
else
return ToolbarWindowProc(hwnd, uMsg, wParam, lParam);
}
VOID
TOOLBARv6_Register (void)
{
WNDCLASSW wndClass;
ZeroMemory (&wndClass, sizeof(WNDCLASSW));
wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS;
wndClass.lpfnWndProc = ToolbarV6WindowProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = sizeof(TOOLBAR_INFO *);
wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wndClass.lpszClassName = TOOLBARCLASSNAMEW;
RegisterClassW (&wndClass);
}
VOID
TOOLBARv6_Unregister (void)
{
UnregisterClassW (TOOLBARCLASSNAMEW, NULL);
}
#endif
static HIMAGELIST TOOLBAR_InsertImageList(PIMLENTRY **pies, INT *cies, HIMAGELIST himl, INT id) static HIMAGELIST TOOLBAR_InsertImageList(PIMLENTRY **pies, INT *cies, HIMAGELIST himl, INT id)
{ {
HIMAGELIST himlold; HIMAGELIST himlold;