Commit 069eb68b authored by Zhiyi Zhang's avatar Zhiyi Zhang Committed by Alexandre Julliard

comctl32/pager: Support WM_NOTIFYFORMAT message.

parent 4be93106
...@@ -71,6 +71,7 @@ typedef struct ...@@ -71,6 +71,7 @@ typedef struct
HWND hwndSelf; /* handle of the control wnd */ HWND hwndSelf; /* handle of the control wnd */
HWND hwndChild; /* handle of the contained wnd */ HWND hwndChild; /* handle of the contained wnd */
HWND hwndNotify; /* handle of the parent wnd */ HWND hwndNotify; /* handle of the parent wnd */
BOOL bUnicode; /* send notifications in Unicode */
DWORD dwStyle; /* styles for this control */ DWORD dwStyle; /* styles for this control */
COLORREF clrBk; /* background color */ COLORREF clrBk; /* background color */
INT nBorder; /* border size for the control */ INT nBorder; /* border size for the control */
...@@ -555,6 +556,7 @@ static LRESULT ...@@ -555,6 +556,7 @@ static LRESULT
PAGER_Create (HWND hwnd, const CREATESTRUCTW *lpcs) PAGER_Create (HWND hwnd, const CREATESTRUCTW *lpcs)
{ {
PAGER_INFO *infoPtr; PAGER_INFO *infoPtr;
INT ret;
/* allocate memory for info structure */ /* allocate memory for info structure */
infoPtr = heap_alloc_zero (sizeof(*infoPtr)); infoPtr = heap_alloc_zero (sizeof(*infoPtr));
...@@ -581,6 +583,9 @@ PAGER_Create (HWND hwnd, const CREATESTRUCTW *lpcs) ...@@ -581,6 +583,9 @@ PAGER_Create (HWND hwnd, const CREATESTRUCTW *lpcs)
if (infoPtr->dwStyle & PGS_DRAGNDROP) if (infoPtr->dwStyle & PGS_DRAGNDROP)
FIXME("[%p] Drag and Drop style is not implemented yet.\n", infoPtr->hwndSelf); FIXME("[%p] Drag and Drop style is not implemented yet.\n", infoPtr->hwndSelf);
ret = SendMessageW(infoPtr->hwndNotify, WM_NOTIFYFORMAT, (WPARAM)infoPtr->hwndSelf, NF_QUERY);
infoPtr->bUnicode = (ret == NFR_UNICODE);
return 0; return 0;
} }
...@@ -998,6 +1003,23 @@ PAGER_StyleChanged(PAGER_INFO *infoPtr, WPARAM wStyleType, const STYLESTRUCT *lp ...@@ -998,6 +1003,23 @@ PAGER_StyleChanged(PAGER_INFO *infoPtr, WPARAM wStyleType, const STYLESTRUCT *lp
return 0; return 0;
} }
static LRESULT PAGER_NotifyFormat(PAGER_INFO *infoPtr, INT command)
{
INT ret;
switch (command)
{
case NF_REQUERY:
ret = SendMessageW(infoPtr->hwndNotify, WM_NOTIFYFORMAT, (WPARAM)infoPtr->hwndSelf, NF_QUERY);
infoPtr->bUnicode = (ret == NFR_UNICODE);
return ret;
case NF_QUERY:
/* Pager always wants Unicode notifications from children */
return NFR_UNICODE;
default:
return 0;
}
}
static LRESULT WINAPI static LRESULT WINAPI
PAGER_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) PAGER_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
...@@ -1089,6 +1111,9 @@ PAGER_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) ...@@ -1089,6 +1111,9 @@ PAGER_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_TIMER: case WM_TIMER:
return PAGER_Timer (infoPtr, (INT)wParam); return PAGER_Timer (infoPtr, (INT)wParam);
case WM_NOTIFYFORMAT:
return PAGER_NotifyFormat (infoPtr, lParam);
case WM_NOTIFY: case WM_NOTIFY:
case WM_COMMAND: case WM_COMMAND:
return SendMessageW (infoPtr->hwndNotify, uMsg, wParam, lParam); return SendMessageW (infoPtr->hwndNotify, uMsg, wParam, lParam);
......
...@@ -392,8 +392,8 @@ static void test_wm_notifyformat(void) ...@@ -392,8 +392,8 @@ static void test_wm_notifyformat(void)
/* Test parent */ /* Test parent */
notify_query_received = FALSE; notify_query_received = FALSE;
ret = SendMessageW(pager, WM_NOTIFYFORMAT, (WPARAM)parent, NF_REQUERY); ret = SendMessageW(pager, WM_NOTIFYFORMAT, (WPARAM)parent, NF_REQUERY);
todo_wine_if(notify_format == NFR_ANSI) ok(ret == notify_format, "Expect %d, got %ld\n", notify_format, ret); ok(ret == notify_format, "Expect %d, got %ld\n", notify_format, ret);
todo_wine ok(notify_query_received, "Didn't receive notify\n"); ok(notify_query_received, "Didn't receive notify\n");
/* Send NF_QUERY directly to parent */ /* Send NF_QUERY directly to parent */
notify_query_received = FALSE; notify_query_received = FALSE;
...@@ -404,8 +404,8 @@ static void test_wm_notifyformat(void) ...@@ -404,8 +404,8 @@ static void test_wm_notifyformat(void)
/* Pager send notifications to its parent regardless of wParam */ /* Pager send notifications to its parent regardless of wParam */
notify_query_received = FALSE; notify_query_received = FALSE;
ret = SendMessageW(pager, WM_NOTIFYFORMAT, (WPARAM)parent_wnd, NF_REQUERY); ret = SendMessageW(pager, WM_NOTIFYFORMAT, (WPARAM)parent_wnd, NF_REQUERY);
todo_wine_if(notify_format == NFR_ANSI) ok(ret == notify_format, "Expect %d, got %ld\n", notify_format, ret); ok(ret == notify_format, "Expect %d, got %ld\n", notify_format, ret);
todo_wine ok(notify_query_received, "Didn't receive notify\n"); ok(notify_query_received, "Didn't receive notify\n");
/* Pager always wants Unicode notifications from children */ /* Pager always wants Unicode notifications from children */
ret = SendMessageW(child, WM_NOTIFYFORMAT, (WPARAM)pager, NF_REQUERY); ret = SendMessageW(child, WM_NOTIFYFORMAT, (WPARAM)pager, NF_REQUERY);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment